@mcpbr/core
Version:
Core functions for mcpbr
74 lines (73 loc) • 2.11 kB
JavaScript
// 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