{"version":3,"sources":["../../src/mcp/index.ts","../../src/mcp/client.ts","../../src/tools/tool.ts","../../src/mcp/adapter.ts"],"sourcesContent":["export { MCPClient } from \"./client.js\";\nexport type { MCPServerConfig, MCPToolDefinition } from \"./client.js\";\nexport { loadMCPTools } from \"./adapter.js\";\n","import type { ChildProcess } from \"node:child_process\";\n\nexport interface MCPToolDefinition {\n  name: string;\n  description: string;\n  inputSchema: Record<string, unknown>;\n}\n\nexport interface MCPServerConfig {\n  type: \"stdio\" | \"sse\";\n  command?: string;\n  args?: string[];\n  url?: string;\n  env?: Record<string, string>;\n  headers?: Record<string, string>;\n}\n\nexport class MCPClient {\n  private config: MCPServerConfig;\n  private tools: MCPToolDefinition[] = [];\n  private proc: ChildProcess | null = null;\n  private initialized = false;\n  private nextId = 1;\n  private messageBuffer = \"\";\n  private pendingHandlers: Map<number, (msg: unknown) => void> = new Map();\n  private sseEventSource: EventSource | null = null;\n  private sseMessageEndpoint: string | null = null;\n\n  constructor(config: MCPServerConfig) {\n    this.config = config;\n  }\n\n  private send(proc: ChildProcess, method: string, params: Record<string, unknown>, id?: number): number {\n    const msgId = id ?? this.nextId++;\n    const msg = JSON.stringify({ jsonrpc: \"2.0\", id: msgId, method, params });\n    proc.stdin!.write(msg + \"\\n\");\n    return msgId;\n  }\n\n  private setupMessageHandler(proc: ChildProcess): void {\n    proc.stdout!.on(\"data\", (data: Buffer) => {\n      this.messageBuffer += data.toString();\n      const lines = this.messageBuffer.split(\"\\n\");\n      this.messageBuffer = lines.pop() ?? \"\";\n      for (const line of lines) {\n        if (!line.trim()) continue;\n        try {\n          const msg = JSON.parse(line);\n          if (msg.id !== undefined && this.pendingHandlers.has(msg.id)) {\n            const handler = this.pendingHandlers.get(msg.id)!;\n            this.pendingHandlers.delete(msg.id);\n            handler(msg);\n          } else if (msg.method === \"initialize\" && msg.id) {\n            proc.stdin!.write(JSON.stringify({\n              jsonrpc: \"2.0\",\n              id: msg.id,\n              result: { protocolVersion: \"2024-11-05\", capabilities: {}, serverInfo: { name: \"synthcode-mcp-proxy\", version: \"0.6.0\" } },\n            }) + \"\\n\");\n          }\n        } catch {}\n      }\n    });\n    proc.stderr!.on(\"data\", () => {});\n  }\n\n  async connect(): Promise<void> {\n    if (this.config.type === \"stdio\") {\n      const { spawn } = await import(\"node:child_process\");\n      const proc = spawn(this.config.command!, this.config.args ?? [], {\n        env: { ...process.env, ...this.config.env },\n        stdio: [\"pipe\", \"pipe\", \"pipe\"],\n      });\n      proc.on(\"error\", (err) => { throw err; });\n      proc.on(\"close\", () => { this.initialized = false; });\n      this.proc = proc;\n      this.setupMessageHandler(proc);\n      await new Promise<void>((resolve) => {\n        const handler = (_data: Buffer) => {\n          proc.stdout!.off(\"data\", handler);\n          resolve();\n        };\n        proc.stdout!.on(\"data\", handler);\n        setTimeout(() => {\n          proc.stdout!.off(\"data\", handler);\n          resolve();\n        }, 2000);\n      });\n      this.initialized = true;\n    }\n    if (this.config.type === \"sse\") {\n      if (!this.config.url) throw new Error(\"SSE MCP server requires a url\");\n\n      const baseUrl = this.config.url.replace(/\\/$/, \"\");\n      const sseUrl = baseUrl.includes(\"/sse\") ? baseUrl : `${baseUrl}/sse`;\n      const headers: Record<string, string> = {\n        \"Accept\": \"text/event-stream\",\n        ...this.config.headers,\n      };\n\n      this.sseEventSource = new EventSource(sseUrl, { headers } as ConstructorParameters<typeof EventSource>[1]);\n\n      await new Promise<void>((resolve, reject) => {\n        const timeout = setTimeout(() => {\n          reject(new Error(\"SSE connection timeout\"));\n        }, 10000);\n\n        this.sseEventSource!.addEventListener(\"endpoint\", (event) => {\n          const endpointPath = (event as MessageEvent).data as string;\n          this.sseMessageEndpoint = endpointPath.startsWith(\"http\")\n            ? endpointPath\n            : `${new URL(baseUrl).origin}${endpointPath}`;\n          clearTimeout(timeout);\n          resolve();\n        });\n\n        this.sseEventSource!.addEventListener(\"message\", (event) => {\n          try {\n            const msg = JSON.parse((event as MessageEvent).data as string);\n            if (msg.id !== undefined && this.pendingHandlers.has(msg.id)) {\n              const handler = this.pendingHandlers.get(msg.id)!;\n              this.pendingHandlers.delete(msg.id);\n              handler(msg);\n            }\n          } catch {}\n        });\n\n        this.sseEventSource!.onerror = () => {\n          clearTimeout(timeout);\n          if (!this.sseMessageEndpoint) {\n            reject(new Error(`Failed to connect to SSE endpoint: ${sseUrl}`));\n          }\n        };\n      });\n\n      this.initialized = true;\n    }\n  }\n\n  private async sseSend(method: string, params: Record<string, unknown>, id?: number): Promise<number> {\n    const msgId = id ?? this.nextId++;\n    if (!this.sseMessageEndpoint) throw new Error(\"SSE message endpoint not initialized\");\n\n    const headers: Record<string, string> = {\n      \"Content-Type\": \"application/json\",\n      ...this.config.headers,\n    };\n\n    const response = await fetch(this.sseMessageEndpoint, {\n      method: \"POST\",\n      headers,\n      body: JSON.stringify({ jsonrpc: \"2.0\", id: msgId, method, params }),\n    });\n\n    if (!response.ok) {\n      throw new Error(`SSE send failed: ${response.status} ${response.statusText}`);\n    }\n\n    return msgId;\n  }\n\n  async listTools(): Promise<MCPToolDefinition[]> {\n    if (this.config.type === \"stdio\" && this.proc) {\n      const id = this.nextId++;\n      const tools = await new Promise<MCPToolDefinition[]>((resolve, reject) => {\n        const timeout = setTimeout(() => {\n          this.pendingHandlers.delete(id);\n          reject(new Error(\"MCP listTools timeout\"));\n        }, 10000);\n        this.pendingHandlers.set(id, (msg: unknown) => {\n          clearTimeout(timeout);\n          const m = msg as Record<string, unknown>;\n          if ((m.result as Record<string, unknown>)?.tools) {\n            resolve(\n              ((m.result as Record<string, unknown>).tools as Record<string, unknown>[]).map((t) => ({\n                name: t.name as string,\n                description: (t.description as string) ?? \"\",\n                inputSchema: (t.inputSchema as Record<string, unknown>) ?? { type: \"object\", properties: {} },\n              })),\n            );\n          } else {\n            resolve([]);\n          }\n        });\n      });\n      this.send(this.proc!, \"tools/list\", {}, id);\n      this.tools = tools;\n      return tools;\n    }\n    if (this.config.type === \"sse\" && this.sseEventSource && this.sseMessageEndpoint) {\n      const id = await this.sseSend(\"tools/list\", {});\n      const tools = await new Promise<MCPToolDefinition[]>((resolve, reject) => {\n        const timeout = setTimeout(() => {\n          this.pendingHandlers.delete(id);\n          reject(new Error(\"SSE MCP listTools timeout\"));\n        }, 10000);\n        this.pendingHandlers.set(id, (msg: unknown) => {\n          clearTimeout(timeout);\n          const m = msg as Record<string, unknown>;\n          if ((m.result as Record<string, unknown>)?.tools) {\n            resolve(\n              ((m.result as Record<string, unknown>).tools as Record<string, unknown>[]).map((t) => ({\n                name: t.name as string,\n                description: (t.description as string) ?? \"\",\n                inputSchema: (t.inputSchema as Record<string, unknown>) ?? { type: \"object\", properties: {} },\n              })),\n            );\n          } else {\n            resolve([]);\n          }\n        });\n      });\n      this.tools = tools;\n      return tools;\n    }\n    return [];\n  }\n\n  async callTool(\n    name: string,\n    input: Record<string, unknown>,\n  ): Promise<string> {\n    if (this.config.type === \"stdio\" && this.proc) {\n      const id = this.nextId++;\n      return new Promise((resolve, reject) => {\n        const timeout = setTimeout(() => {\n          this.pendingHandlers.delete(id);\n          reject(new Error(\"MCP callTool timeout\"));\n        }, 30000);\n        this.pendingHandlers.set(id, (msg: unknown) => {\n          clearTimeout(timeout);\n          const m = msg as Record<string, unknown>;\n          if (m.result) {\n            resolve(typeof m.result === \"string\" ? m.result : JSON.stringify(m.result));\n          } else if (m.error) {\n            reject(\n              new Error(\n                ((m.error as Record<string, unknown>).message as string) ?? \"MCP tool error\",\n              ),\n            );\n          }\n        });\n        this.send(this.proc!, \"tools/call\", { name, arguments: input }, id);\n      });\n    }\n    if (this.config.type === \"sse\" && this.sseEventSource && this.sseMessageEndpoint) {\n      const id = await this.sseSend(\"tools/call\", { name, arguments: input });\n      return new Promise((resolve, reject) => {\n        const timeout = setTimeout(() => {\n          this.pendingHandlers.delete(id);\n          reject(new Error(\"SSE MCP callTool timeout\"));\n        }, 30000);\n        this.pendingHandlers.set(id, (msg: unknown) => {\n          clearTimeout(timeout);\n          const m = msg as Record<string, unknown>;\n          if (m.result) {\n            const content = (m.result as Record<string, unknown>).content;\n            if (Array.isArray(content)) {\n              const textParts = content\n                .filter((c: Record<string, unknown>) => c.type === \"text\")\n                .map((c: Record<string, unknown>) => c.text as string);\n              resolve(textParts.join(\"\\n\") || JSON.stringify(m.result));\n            } else {\n              resolve(typeof m.result === \"string\" ? m.result : JSON.stringify(m.result));\n            }\n          } else if (m.error) {\n            reject(\n              new Error(\n                ((m.error as Record<string, unknown>).message as string) ?? \"SSE MCP tool error\",\n              ),\n            );\n          }\n        });\n      });\n    }\n    throw new Error(\"MCP client not connected\");\n  }\n\n  async disconnect(): Promise<void> {\n    if (this.proc) {\n      this.proc.kill();\n      this.proc = null;\n    }\n    if (this.sseEventSource) {\n      this.sseEventSource.close();\n      this.sseEventSource = null;\n      this.sseMessageEndpoint = null;\n    }\n  }\n\n  getTools(): MCPToolDefinition[] {\n    return this.tools;\n  }\n}\n","import type { ZodSchema } from 'zod';\nimport type { ToolContext } from '../types.js';\n\n/** JSON Schema representation of a tool for LLM function calling APIs. */\nexport interface APIToolDefinition {\n  name: string;\n  description: string;\n  input_schema: Record<string, unknown>;\n}\n\n/** Core tool abstraction that every tool must implement. */\nexport interface Tool<P = unknown> {\n  readonly name: string;\n  readonly description: string;\n  readonly inputSchema: ZodSchema<P>;\n  readonly isReadOnly: boolean;\n  readonly isConcurrencySafe: boolean;\n\n  execute(input: P, context: ToolContext): Promise<string>;\n  toAPI(): APIToolDefinition;\n  toString(input: P): string;\n}\n\n/** Configuration object for defining a tool. */\nexport interface ToolExecuteOptions<P = unknown> {\n  name: string;\n  description: string;\n  inputSchema: ZodSchema<P>;\n  isReadOnly?: boolean;\n  isConcurrencySafe?: boolean;\n  execute: (input: P, context: ToolContext) => Promise<string>;\n}\n\nfunction zodToJsonSchema(schema: unknown): Record<string, unknown> {\n  const s = schema as { _def: Record<string, unknown> };\n  const def = s._def;\n  const typeName = def.typeName as string;\n  const description = def.description as string | undefined;\n\n  const base: Record<string, unknown> = {};\n  if (description) base.description = description;\n\n  switch (typeName) {\n    case 'ZodString':\n      return { ...base, type: 'string' };\n    case 'ZodNumber':\n      return { ...base, type: 'number' };\n    case 'ZodBoolean':\n      return { ...base, type: 'boolean' };\n    case 'ZodNull':\n      return { ...base, type: 'null' };\n    case 'ZodArray': {\n      const items = zodToJsonSchema(def.element);\n      return { ...base, type: 'array', items };\n    }\n    case 'ZodObject': {\n      const shapeFn = def.shape as () => Record<string, unknown>;\n      const shape = shapeFn();\n      const properties: Record<string, unknown> = {};\n      const required: string[] = [];\n      for (const [key, value] of Object.entries(shape)) {\n        properties[key] = zodToJsonSchema(value);\n        const propDef = (value as { _def: Record<string, unknown> })._def;\n        if (\n          propDef.typeName !== 'ZodOptional' &&\n          propDef.typeName !== 'ZodNullish' &&\n          propDef.typeName !== 'ZodDefault'\n        ) {\n          required.push(key);\n        }\n      }\n      const result: Record<string, unknown> = { ...base, type: 'object', properties };\n      if (required.length > 0) result.required = required;\n      return result;\n    }\n    case 'ZodEnum':\n      return { ...base, enum: def.values };\n    case 'ZodLiteral':\n      return { ...base, const: def.value };\n    case 'ZodUnion': {\n      const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, anyOf: options };\n    }\n    case 'ZodDiscriminatedUnion': {\n      const options = (def.options as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, anyOf: options };\n    }\n    case 'ZodOptional':\n      return zodToJsonSchema(def.innerType);\n    case 'ZodNullable': {\n      const inner = zodToJsonSchema(def.innerType);\n      inner.nullable = true;\n      return inner;\n    }\n    case 'ZodNullish': {\n      const inner = zodToJsonSchema(def.innerType);\n      inner.nullable = true;\n      return inner;\n    }\n    case 'ZodDefault':\n      return zodToJsonSchema(def.innerType);\n    case 'ZodRecord': {\n      const valueSchema = zodToJsonSchema(def.valueType);\n      return { ...base, type: 'object', additionalProperties: valueSchema };\n    }\n    case 'ZodTuple': {\n      const items = (def.items as unknown[]).map((o) => zodToJsonSchema(o));\n      return { ...base, type: 'array', items, minItems: items.length, maxItems: items.length };\n    }\n    case 'ZodEffects': {\n      return zodToJsonSchema(def.innerType);\n    }\n    case 'ZodAny':\n      return {};\n    case 'ZodUnknown':\n      return {};\n    case 'ZodVoid':\n      return { ...base, type: 'null' };\n    case 'ZodNever':\n      return { ...base, not: {} };\n    default:\n      return { ...base, type: 'string' };\n  }\n}\n\n/** Define a tool from a configuration object. */\nexport function defineTool<P = unknown>(config: ToolExecuteOptions<P>): Tool<P> {\n  const tool: Tool<P> = {\n    name: config.name,\n    description: config.description,\n    inputSchema: config.inputSchema,\n    isReadOnly: config.isReadOnly ?? false,\n    isConcurrencySafe: config.isConcurrencySafe ?? false,\n    execute: config.execute,\n    toAPI(): APIToolDefinition {\n      return {\n        name: config.name,\n        description: config.description,\n        input_schema: zodToJsonSchema(config.inputSchema),\n      };\n    },\n    toString(input: P): string {\n      const entries = Object.entries(input as Record<string, unknown>)\n        .map(([k, v]) => {\n          if (typeof v === 'string') return `${k}: \"${v}\"`;\n          if (v === undefined) return `${k}: undefined`;\n          if (v === null) return `${k}: null`;\n          return `${k}: ${String(v)}`;\n        })\n        .join(', ');\n      return `${config.name}({ ${entries} })`;\n    },\n  };\n  return tool;\n}\n\n/** Wrap a class-based tool into the standard Tool interface. */\nexport function defineToolFromClass(ctor: new () => Tool): Tool {\n  const instance = new ctor();\n  return {\n    name: instance.name,\n    description: instance.description,\n    inputSchema: instance.inputSchema,\n    isReadOnly: instance.isReadOnly,\n    isConcurrencySafe: instance.isConcurrencySafe,\n    execute: (input, context) => instance.execute(input, context),\n    toAPI: () => instance.toAPI(),\n    toString: (input) => instance.toString(input),\n  };\n}\n","import { defineTool } from \"../tools/tool.js\";\nimport type { Tool } from \"../tools/tool.js\";\nimport type { ToolContext } from \"../types.js\";\nimport { MCPClient } from \"./client.js\";\nimport type { MCPToolDefinition, MCPServerConfig } from \"./client.js\";\n\nexport async function loadMCPTools(\n  config: MCPServerConfig,\n): Promise<{ tools: Tool[]; client: MCPClient }> {\n  const { z } = await import(\"zod\");\n\n  const client = new MCPClient(config);\n  await client.connect();\n  const definitions = await client.listTools();\n\n  const tools = definitions.map((def: MCPToolDefinition) =>\n    defineTool({\n      name: def.name,\n      description: def.description,\n      inputSchema: z.object({}).passthrough(),\n      isReadOnly: true,\n      isConcurrencySafe: true,\n      execute: async (input: Record<string, unknown>, _context: ToolContext) => {\n        const result = await client.callTool(def.name, input);\n        return result;\n      },\n    }),\n  );\n\n  return { tools, client };\n}\n"],"mappings":"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","names":[]}