UNPKG

@mcpbr/core

Version:
1 lines 5.49 kB
{"version":3,"sources":["../src/index.ts","../src/mcp-server.ts","../src/zod-schema.ts"],"sourcesContent":["export * from './mcp-server'\nexport * from './zod-schema'\n","import { Server } from '@modelcontextprotocol/sdk/server/index.js'\nimport { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'\nimport { CallToolRequestSchema, Tool as McpTool } from '@modelcontextprotocol/sdk/types.js'\nimport c from 'tinyrainbow'\nimport { z } from 'zod'\n\nexport type Tool = McpTool\n\nexport type CoreTool = {\n definition: Tool\n handler: (\n params: Record<string, unknown>,\n args: Record<string, unknown>,\n ) => Promise<{\n content: { type: string; text: string }[]\n isError?: boolean\n }>\n}\n\nexport function mcpServerFactory(meta: { name: string; version: string }, params: Record<string, unknown>) {\n let server: Server\n\n function make(tools: CoreTool[]) {\n server = new Server(\n {\n name: meta.name,\n version: meta.version,\n },\n {\n capabilities: {\n tools: {},\n },\n },\n )\n\n server.setRequestHandler(CallToolRequestSchema, async (request) => {\n try {\n const tool = tools.find((tool) => tool.definition.name === request.params.name)\n\n if (!tool) {\n throw new Error(`Unknown tool: ${request.params.name}`)\n }\n\n return tool.handler(params, request.params.arguments ?? {})\n } catch (error) {\n console.log(error)\n if (error instanceof z.ZodError) {\n throw new Error(`Invalid input: ${JSON.stringify(error.errors)}`)\n }\n\n return {\n content: [\n {\n type: 'text',\n text: `Error: ${error instanceof Error ? error.message : String(error)}`,\n },\n ],\n isError: true,\n }\n }\n })\n }\n\n function start() {\n if (!server) {\n throw new Error('Server not initialized call make first')\n }\n\n async function runServer() {\n const transport = new StdioServerTransport()\n await server.connect(transport)\n\n console.error(c.green(`✅ ${meta.name} running on stdio`))\n }\n\n runServer().catch((error) => {\n console.error(c.red(`\\n🚨 Error initializing ${meta.name} MCP server:\\n`))\n console.error(c.yellow(` ${error.message}\\n`))\n })\n }\n\n return { make, start }\n}\n","import { z } from 'zod'\nimport zodToJsonSchema from 'zod-to-json-schema'\n\n// biome-ignore lint/complexity/noBannedTypes: <explanation>\ntype EmptyObject = {}\n\ntype McpInputSchema = z.ZodObject<\n {\n type: z.ZodLiteral<'object'>\n properties: z.ZodOptional<\n z.ZodObject<\n EmptyObject,\n 'passthrough',\n z.ZodTypeAny,\n z.objectOutputType<EmptyObject, z.ZodTypeAny, 'passthrough'>,\n z.objectInputType<EmptyObject, z.ZodTypeAny, 'passthrough'>\n >\n >\n },\n 'passthrough',\n z.ZodTypeAny,\n z.objectOutputType<\n {\n type: z.ZodLiteral<'object'>\n properties: z.ZodOptional<\n z.ZodObject<\n EmptyObject,\n 'passthrough',\n z.ZodTypeAny,\n z.objectOutputType<EmptyObject, z.ZodTypeAny, 'passthrough'>,\n z.objectInputType<EmptyObject, z.ZodTypeAny, 'passthrough'>\n >\n >\n },\n z.ZodTypeAny,\n 'passthrough'\n >,\n z.objectInputType<\n {\n type: z.ZodLiteral<'object'>\n properties: z.ZodOptional<\n z.ZodObject<\n EmptyObject,\n 'passthrough',\n z.ZodTypeAny,\n z.objectOutputType<EmptyObject, z.ZodTypeAny, 'passthrough'>,\n z.objectInputType<EmptyObject, z.ZodTypeAny, 'passthrough'>\n >\n >\n },\n z.ZodTypeAny,\n 'passthrough'\n >\n>\n\nexport function toJsonSchema<T>(schema: z.Schema): z.infer<McpInputSchema> {\n return zodToJsonSchema(schema, { target: 'jsonSchema7' }) as z.infer<McpInputSchema>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,oBAAuB;AACvB,mBAAqC;AACrC,mBAAuD;AACvD,yBAAc;AACd,iBAAkB;AAeX,SAAS,iBAAiB,MAAyC,QAAiC;AACzG,MAAI;AAEJ,WAAS,KAAK,OAAmB;AAC/B,aAAS,IAAI;AAAA,MACX;AAAA,QACE,MAAM,KAAK;AAAA,QACX,SAAS,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,QACE,cAAc;AAAA,UACZ,OAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAEA,WAAO,kBAAkB,oCAAuB,OAAO,YAAY;AACjE,UAAI;AACF,cAAM,OAAO,MAAM,KAAK,CAACA,UAASA,MAAK,WAAW,SAAS,QAAQ,OAAO,IAAI;AAE9E,YAAI,CAAC,MAAM;AACT,gBAAM,IAAI,MAAM,iBAAiB,QAAQ,OAAO,IAAI,EAAE;AAAA,QACxD;AAEA,eAAO,KAAK,QAAQ,QAAQ,QAAQ,OAAO,aAAa,CAAC,CAAC;AAAA,MAC5D,SAAS,OAAO;AACd,gBAAQ,IAAI,KAAK;AACjB,YAAI,iBAAiB,aAAE,UAAU;AAC/B,gBAAM,IAAI,MAAM,kBAAkB,KAAK,UAAU,MAAM,MAAM,CAAC,EAAE;AAAA,QAClE;AAEA,eAAO;AAAA,UACL,SAAS;AAAA,YACP;AAAA,cACE,MAAM;AAAA,cACN,MAAM,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,YACxE;AAAA,UACF;AAAA,UACA,SAAS;AAAA,QACX;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,WAAS,QAAQ;AACf,QAAI,CAAC,QAAQ;AACX,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAEA,mBAAe,YAAY;AACzB,YAAM,YAAY,IAAI,kCAAqB;AAC3C,YAAM,OAAO,QAAQ,SAAS;AAE9B,cAAQ,MAAM,mBAAAC,QAAE,MAAM,UAAK,KAAK,IAAI,mBAAmB,CAAC;AAAA,IAC1D;AAEA,cAAU,EAAE,MAAM,CAAC,UAAU;AAC3B,cAAQ,MAAM,mBAAAA,QAAE,IAAI;AAAA,gCAA4B,KAAK,IAAI;AAAA,CAAgB,CAAC;AAC1E,cAAQ,MAAM,mBAAAA,QAAE,OAAO,MAAM,MAAM,OAAO;AAAA,CAAI,CAAC;AAAA,IACjD,CAAC;AAAA,EACH;AAEA,SAAO,EAAE,MAAM,MAAM;AACvB;;;ACjFA,gCAA4B;AAsDrB,SAAS,aAAgB,QAA2C;AACzE,aAAO,0BAAAC,SAAgB,QAAQ,EAAE,QAAQ,cAAc,CAAC;AAC1D;","names":["tool","c","zodToJsonSchema"]}