{"version":3,"sources":["../../../../src/adapters/mcp/serve/server.ts"],"names":["MCPServerConfig","transport","hostname","port","name","version","settings","partial","Object","assign","MCPServer","Server","server","config","McpServer","serve","member","members","factory","getFactory","entry","type","tool","description","paramsSchema","callback","prompt","argsSchema","resource","uri","template","ValueError","connect","StdioServerTransport","runServer","Error","factories","has","Tool","get","toolFactory","schema","inputSchema","ZodType","shape","args","result","run","content","text","getTextContent","registerFactory"],"mappings":"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","file":"server.cjs","sourcesContent":["/**\n * Copyright 2025 © BeeAI a Series of LF Projects, LLC\n * SPDX-License-Identifier: Apache-2.0\n */\n\nimport { ValueError } from \"@/errors.js\";\nimport { Server } from \"@/serve/server.js\";\nimport { ServerOptions } from \"@modelcontextprotocol/sdk/server/index.js\";\nimport {\n  McpServer,\n  PromptCallback,\n  ReadResourceCallback,\n  ReadResourceTemplateCallback,\n  ResourceTemplate,\n  ToolCallback,\n} from \"@modelcontextprotocol/sdk/server/mcp.js\";\nimport { StdioServerTransport } from \"@modelcontextprotocol/sdk/server/stdio.js\";\nimport { AnyTool, Tool } from \"@/tools/base.js\";\nimport { runServer } from \"./http_server.js\";\nimport { ZodRawShape, ZodType } from \"zod\";\nimport { ToolAnnotations } from \"@modelcontextprotocol/sdk/types.js\";\n\ntype MCPServerPrompt =\n  | {\n      type: \"prompt\";\n      name: string;\n      description: string;\n      callback: PromptCallback;\n    }\n  | {\n      type: \"prompt\";\n      name: string;\n      description: string;\n      argsSchema: ZodRawShape;\n      callback: PromptCallback<ZodRawShape>;\n    };\n\ntype MCPServerResource =\n  | {\n      type: \"resource\";\n      name: string;\n      uri: string;\n      callback: ReadResourceCallback;\n    }\n  | {\n      type: \"resource\";\n      name: string;\n      template: ResourceTemplate;\n      callback: ReadResourceTemplateCallback;\n    };\n\ninterface MCPServerTool {\n  type: \"tool\";\n  name: string;\n  description: string;\n  paramsSchema: ZodRawShape | ToolAnnotations;\n  callback: ToolCallback<ZodRawShape>;\n}\n\ntype MCPServerEntry = MCPServerPrompt | MCPServerResource | MCPServerTool;\n\n//  Configuration for the MCPServer.\nexport class MCPServerConfig {\n  transport: \"stdio\" | \"sse\" | \"streamable-http\" = \"stdio\";\n  hostname = \"127.0.0.1\";\n  port = 8000;\n  name = \"MCP Server\";\n  version = \"1.0.0\";\n  settings?: ServerOptions;\n\n  constructor(partial?: Partial<MCPServerConfig>) {\n    if (partial) {\n      Object.assign(this, partial);\n    }\n  }\n}\n\nexport class MCPServer extends Server<any, MCPServerEntry, MCPServerConfig, never> {\n  protected server: McpServer;\n\n  constructor(config?: MCPServerConfig) {\n    super(config || new MCPServerConfig());\n    this.server = new McpServer({\n      name: this.config.name,\n      version: this.config.version,\n      ...this.config.settings,\n    });\n  }\n\n  async serve() {\n    for (const member of this.members) {\n      const factory = this.getFactory(member);\n      const entry = await factory(member);\n\n      switch (entry.type) {\n        case \"tool\":\n          this.server.tool(entry.name, entry.description, entry.paramsSchema, entry.callback);\n          break;\n        case \"prompt\":\n          if (\"argsSchema\" in entry) {\n            this.server.prompt(entry.name, entry.description, entry.argsSchema, entry.callback);\n          } else {\n            this.server.prompt(entry.name, entry.description, entry.callback);\n          }\n          break;\n        case \"resource\":\n          if (\"uri\" in entry) {\n            this.server.resource(entry.name, entry.uri, entry.callback);\n          } else {\n            this.server.resource(entry.name, entry.template, entry.callback);\n          }\n          break;\n        default:\n          throw new ValueError(\"Input type is not supported by this server.\");\n      }\n    }\n\n    switch (this.config.transport) {\n      case \"stdio\":\n        await this.server.connect(new StdioServerTransport());\n        break;\n      case \"sse\":\n      case \"streamable-http\":\n        runServer(this.server, this.config.hostname, this.config.port);\n        break;\n      default: {\n        // The following line ensures exhaustiveness checking at compile time.\n        const _exhaustiveCheck: never = this.config.transport;\n        throw new Error(\"Unsupported transport type.\");\n      }\n    }\n  }\n\n  getFactory(member: any) {\n    const factories = (this.constructor as typeof Server).factories;\n    return !factories.has(member.constructor) && member instanceof Tool && factories.has(Tool)\n      ? factories.get(Tool)!\n      : super.getFactory(member);\n  }\n}\n\nasync function toolFactory(tool: AnyTool): Promise<MCPServerEntry> {\n  const schema = await tool.inputSchema();\n  if (!(schema instanceof ZodType)) {\n    throw new ValueError(\"JsonSchema is not supported for MCP tools.\");\n  }\n  const paramsSchema = schema.shape;\n  return {\n    type: \"tool\",\n    name: tool.name,\n    description: tool.description,\n    paramsSchema: paramsSchema,\n    callback: async (...args: Parameters<typeof tool.run>) => {\n      const result = await tool.run(...args);\n      return {\n        content: [\n          {\n            type: \"text\",\n            text: result.getTextContent(),\n          },\n        ],\n      };\n    },\n  };\n}\n\nMCPServer.registerFactory(Tool, toolFactory);\n"]}