diff --git a/packages/mcp/src/index.ts b/packages/mcp/src/index.ts index e2767d1abf2..ac98c584530 100644 --- a/packages/mcp/src/index.ts +++ b/packages/mcp/src/index.ts @@ -9,6 +9,8 @@ import { dirname, resolve } from "node:path"; import { readFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; +import { registerTools } from "./tools/index.js"; + const currentFilePath = fileURLToPath(import.meta.url); const currentDirectoryPath = dirname(currentFilePath); const packageJsonPath = resolve(currentDirectoryPath, "../package.json"); @@ -37,6 +39,8 @@ const buildServer = (): McpServer => { version: getServerVersion(), }); + registerTools(server); + return server; }; diff --git a/packages/mcp/src/tools/index.ts b/packages/mcp/src/tools/index.ts new file mode 100644 index 00000000000..f44acdd6a36 --- /dev/null +++ b/packages/mcp/src/tools/index.ts @@ -0,0 +1,10 @@ +import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; +import type { McpTool } from "./types.js"; + +const TOOLS: McpTool[] = []; + +export function registerTools(server: McpServer) { + for (const tool of TOOLS) { + server.registerTool(tool.name, tool.config, tool.executeCallback); + } +} diff --git a/packages/mcp/src/tools/types.ts b/packages/mcp/src/tools/types.ts new file mode 100644 index 00000000000..b80d64e9bf9 --- /dev/null +++ b/packages/mcp/src/tools/types.ts @@ -0,0 +1,27 @@ +import type { ToolCallback } from "@modelcontextprotocol/sdk/server/mcp.js"; +import type { + AnySchema, + ZodRawShapeCompat, +} from "@modelcontextprotocol/sdk/server/zod-compat.js"; +import type { ToolAnnotations } from "@modelcontextprotocol/sdk/types.js"; + +export interface McpTool< + InputArgs extends ZodRawShapeCompat | AnySchema | undefined = + | ZodRawShapeCompat + | AnySchema + | undefined, + OutputArgs extends ZodRawShapeCompat | AnySchema = + | ZodRawShapeCompat + | AnySchema, +> { + name: string; + config: { + title?: string; + description?: string; + inputSchema?: InputArgs; + outputSchema?: OutputArgs; + annotations?: ToolAnnotations; + _meta?: Record; + }; + executeCallback: ToolCallback; +}