UNPKG

@mcpbr/core

Version:
74 lines (73 loc) 2.11 kB
// src/mcp-server.ts import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js"; import c from "tinyrainbow"; import { z } from "zod"; function mcpServerFactory(meta, params) { let server; function make(tools) { server = new Server( { name: meta.name, version: meta.version }, { capabilities: { tools: {} } } ); server.setRequestHandler(CallToolRequestSchema, async (request) => { try { const tool = tools.find((tool2) => tool2.definition.name === request.params.name); if (!tool) { throw new Error(`Unknown tool: ${request.params.name}`); } return tool.handler(params, request.params.arguments ?? {}); } catch (error) { console.log(error); if (error instanceof z.ZodError) { throw new Error(`Invalid input: ${JSON.stringify(error.errors)}`); } return { content: [ { type: "text", text: `Error: ${error instanceof Error ? error.message : String(error)}` } ], isError: true }; } }); } function start() { if (!server) { throw new Error("Server not initialized call make first"); } async function runServer() { const transport = new StdioServerTransport(); await server.connect(transport); console.error(c.green(`\u2705 ${meta.name} running on stdio`)); } runServer().catch((error) => { console.error(c.red(` \u{1F6A8} Error initializing ${meta.name} MCP server: `)); console.error(c.yellow(` ${error.message} `)); }); } return { make, start }; } // src/zod-schema.ts import zodToJsonSchema from "zod-to-json-schema"; function toJsonSchema(schema) { return zodToJsonSchema(schema, { target: "jsonSchema7" }); } export { mcpServerFactory, toJsonSchema }; //# sourceMappingURL=index.js.map