{"version":3,"sources":["../src/mcp/client.ts","../src/mcp/server.ts","../src/mcp/transports.ts"],"names":["ToolError","ErrorCodes"],"mappings":"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","file":"mcp.cjs","sourcesContent":["import { ErrorCodes, ToolError } from '@agentskit/core'\nimport type { ToolDefinition } from '@agentskit/core'\nimport type {\n  JsonRpcMessage,\n  JsonRpcSuccess,\n  JsonRpcError,\n  McpCallToolResult,\n  McpToolsListResult,\n  McpTransport,\n} from './types'\n\nexport interface McpClient {\n  initialize: () => Promise<{ serverInfo: { name: string; version?: string } }>\n  listTools: () => Promise<McpToolsListResult>\n  callTool: (name: string, args: Record<string, unknown>) => Promise<McpCallToolResult>\n  close: () => Promise<void>\n}\n\nfunction isResponse(msg: JsonRpcMessage): msg is JsonRpcSuccess | JsonRpcError {\n  return 'id' in msg && (('result' in msg) || ('error' in msg))\n}\n\nfunction isError(msg: JsonRpcSuccess | JsonRpcError): msg is JsonRpcError {\n  return 'error' in msg\n}\n\nconst DEFAULT_REQUEST_TIMEOUT_MS = 30_000\nconst DEFAULT_MAX_PENDING = 256\n\n/**\n * Build an MCP client over any `McpTransport`. Supports\n * `initialize`, `tools/list`, and `tools/call` — the minimum needed\n * to drive external MCP servers as AgentsKit tools.\n *\n * Requests are bounded:\n *  - each call rejects after `requestTimeoutMs` (default 30s) so a\n *    silent server cannot leak entries into `pending` forever\n *  - `maxPending` caps concurrent in-flight requests so the map cannot\n *    grow without bound on a runaway producer\n */\nexport function createMcpClient(options: {\n  transport: McpTransport\n  clientInfo?: { name: string; version: string }\n  /** Per-request timeout in ms. Default 30000. */\n  requestTimeoutMs?: number\n  /** Max concurrent in-flight requests. Default 256. */\n  maxPending?: number\n}): McpClient {\n  const requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS\n  const maxPending = options.maxPending ?? DEFAULT_MAX_PENDING\n  interface PendingEntry {\n    resolve: (value: unknown) => void\n    reject: (error: Error) => void\n    timer: ReturnType<typeof setTimeout>\n  }\n  const pending = new Map<number, PendingEntry>()\n  let nextId = 1\n\n  const settle = (id: number, ok: boolean, value: unknown): void => {\n    const entry = pending.get(id)\n    if (!entry) return\n    pending.delete(id)\n    clearTimeout(entry.timer)\n    if (ok) entry.resolve(value)\n    else entry.reject(value as Error)\n  }\n\n  const detach = options.transport.onMessage(message => {\n    if (!isResponse(message)) return\n    const id = Number(message.id)\n    if (isError(message)) {\n      settle(id, false, new Error(`MCP error ${message.error.code}: ${message.error.message}`))\n    } else {\n      settle(id, true, message.result)\n    }\n  })\n\n  const call = <T>(method: string, params?: Record<string, unknown>): Promise<T> => {\n    if (pending.size >= maxPending) {\n      return Promise.reject(new Error(`MCP client: maxPending (${maxPending}) exceeded`))\n    }\n    const id = nextId++\n    return new Promise<T>((resolve, reject) => {\n      const timer = setTimeout(() => {\n        settle(id, false, new Error(`MCP request timeout after ${requestTimeoutMs}ms: ${method}`))\n      }, requestTimeoutMs)\n      pending.set(id, {\n        resolve: v => resolve(v as T),\n        reject,\n        timer,\n      })\n      Promise.resolve(\n        options.transport.send({ jsonrpc: '2.0', id, method, params }),\n      ).catch(err => {\n        settle(id, false, err instanceof Error ? err : new Error(String(err)))\n      })\n    })\n  }\n\n  return {\n    async initialize() {\n      return call<{ serverInfo: { name: string; version?: string } }>('initialize', {\n        protocolVersion: '2024-11-05',\n        capabilities: { tools: {} },\n        clientInfo: options.clientInfo ?? { name: 'agentskit-mcp-client', version: '0.1.0' },\n      })\n    },\n    async listTools() {\n      return call<McpToolsListResult>('tools/list')\n    },\n    async callTool(name, args) {\n      return call<McpCallToolResult>('tools/call', { name, arguments: args })\n    },\n    async close() {\n      detach()\n      for (const [id, entry] of pending) {\n        clearTimeout(entry.timer)\n        entry.reject(new Error('MCP client closed'))\n        pending.delete(id)\n      }\n      await options.transport.close?.()\n    },\n  }\n}\n\nexport interface ToolsFromMcpOptions {\n  /**\n   * Maximum byte length permitted for each tool's `description`.\n   * Anything longer is truncated. The description ends up inside the\n   * LLM prompt, so a malicious or buggy MCP server could otherwise\n   * inject arbitrarily large or prompt-poisoning text. Default 4096.\n   */\n  maxDescriptionBytes?: number\n  /**\n   * Maximum byte length permitted for each tool's `inputSchema` once\n   * serialized to JSON. Tools whose schema exceeds the cap are dropped\n   * (since a partially-truncated schema is worse than no schema).\n   * Default 65536.\n   */\n  maxSchemaBytes?: number\n  /**\n   * Treat the remote server as untrusted: prefix tool names with\n   * `mcp:` to make their origin obvious in the agent's tool registry\n   * and quarantine logs, and prepend a provenance hint to descriptions.\n   * Default true — opt out only for first-party MCP servers you operate.\n   */\n  quarantine?: boolean\n}\n\nconst DEFAULT_MAX_DESCRIPTION_BYTES = 4096\nconst DEFAULT_MAX_SCHEMA_BYTES = 65_536\n\nfunction truncateBytes(input: string, max: number): string {\n  if (input.length <= max) return input\n  return `${input.slice(0, max - 14)}…[truncated]`\n}\n\n/**\n * Hydrate the tools advertised by an MCP server into AgentsKit\n * `ToolDefinition`s. Each call delegates to `client.callTool` and\n * flattens the text content into a single string result.\n *\n * Server-provided metadata is treated as untrusted input:\n *  - `description` is capped at `maxDescriptionBytes` (default 4 KB) so\n *    a malicious server cannot smuggle a giant prompt-injection\n *    payload into the agent's system context\n *  - `inputSchema` whose JSON exceeds `maxSchemaBytes` (default 64 KB)\n *    is dropped — partial schemas would silently break tool calls\n *  - when `quarantine` (default `true`) the tool name is prefixed with\n *    `mcp:` and the description carries a provenance hint, so the\n *    agent and audit logs can tell origin tools from native ones\n */\nexport async function toolsFromMcpClient(\n  client: McpClient,\n  options: ToolsFromMcpOptions = {},\n): Promise<ToolDefinition[]> {\n  const maxDescription = options.maxDescriptionBytes ?? DEFAULT_MAX_DESCRIPTION_BYTES\n  const maxSchema = options.maxSchemaBytes ?? DEFAULT_MAX_SCHEMA_BYTES\n  const quarantine = options.quarantine ?? true\n  const { tools } = await client.listTools()\n  const out: ToolDefinition[] = []\n  for (const t of tools) {\n    const schemaJson = JSON.stringify(t.inputSchema ?? {})\n    if (schemaJson.length > maxSchema) {\n      // Drop oversized schema; safer than passing a truncated copy.\n      continue\n    }\n    const rawDescription = t.description ?? ''\n    const description = quarantine\n      ? `[mcp] ${truncateBytes(rawDescription, maxDescription)}`\n      : truncateBytes(rawDescription, maxDescription)\n    const name = quarantine ? `mcp:${t.name}` : t.name\n    out.push({\n      name,\n      description,\n      schema: t.inputSchema,\n      async execute(args) {\n        const result = await client.callTool(t.name, args)\n        const text = result.content\n          .map(c => (c.type === 'text' ? c.text : ''))\n          .filter(Boolean)\n          .join('\\n')\n        if (result.isError) {\n          throw new ToolError({\n            code: ErrorCodes.AK_TOOL_EXEC_FAILED,\n            message: text || `MCP tool ${t.name} errored`,\n          })\n        }\n        return text\n      },\n    })\n  }\n  return out\n}\n","import type { ToolDefinition } from '@agentskit/core'\nimport type {\n  JsonRpcMessage,\n  JsonRpcRequest,\n  McpTransport,\n} from './types'\n\nexport interface McpServerOptions {\n  transport: McpTransport\n  tools: ToolDefinition[]\n  serverInfo?: { name: string; version: string }\n  /** Observability hook. */\n  onEvent?: (event: { type: 'call' | 'error' | 'list'; tool?: string; error?: string }) => void\n}\n\nexport interface McpServer {\n  close: () => Promise<void>\n}\n\n/**\n * Expose a set of AgentsKit tools as an MCP server over any\n * `McpTransport`. Implements the three methods most MCP hosts need:\n * `initialize`, `tools/list`, `tools/call`.\n */\nexport function createMcpServer(options: McpServerOptions): McpServer {\n  const { transport, tools } = options\n  const serverInfo = options.serverInfo ?? { name: 'agentskit-mcp-server', version: '0.1.0' }\n\n  const respond = async (message: JsonRpcMessage): Promise<void> => {\n    try {\n      await transport.send(message)\n    } catch {\n      // transport already errored — nothing to do\n    }\n  }\n\n  const detach = transport.onMessage(async raw => {\n    if (!('method' in raw)) return\n    const request = raw as JsonRpcRequest\n    const hasId = 'id' in request\n\n    try {\n      if (request.method === 'initialize') {\n        if (!hasId) return\n        await respond({\n          jsonrpc: '2.0',\n          id: request.id,\n          result: {\n            protocolVersion: '2024-11-05',\n            capabilities: { tools: { listChanged: false } },\n            serverInfo,\n          },\n        })\n        return\n      }\n\n      if (request.method === 'tools/list') {\n        options.onEvent?.({ type: 'list' })\n        if (!hasId) return\n        await respond({\n          jsonrpc: '2.0',\n          id: request.id,\n          result: {\n            tools: tools.map(t => ({\n              name: t.name,\n              description: t.description,\n              inputSchema: t.schema ?? { type: 'object', properties: {} },\n            })),\n          },\n        })\n        return\n      }\n\n      if (request.method === 'tools/call') {\n        if (!hasId) return\n        const params = request.params as { name?: string; arguments?: Record<string, unknown> } | undefined\n        const tool = tools.find(t => t.name === params?.name)\n        if (!tool || !tool.execute) {\n          options.onEvent?.({ type: 'error', tool: params?.name, error: 'unknown tool' })\n          await respond({\n            jsonrpc: '2.0',\n            id: request.id,\n            error: { code: -32602, message: `unknown tool: ${params?.name}` },\n          })\n          return\n        }\n        options.onEvent?.({ type: 'call', tool: tool.name })\n        try {\n          const result = await tool.execute(params?.arguments ?? {}, {\n            messages: [],\n            call: { id: String(request.id), name: tool.name, args: params?.arguments ?? {}, status: 'running' },\n          })\n          const text = typeof result === 'string' ? result : JSON.stringify(result)\n          await respond({\n            jsonrpc: '2.0',\n            id: request.id,\n            result: { content: [{ type: 'text', text }] },\n          })\n        } catch (err) {\n          const message = err instanceof Error ? err.message : String(err)\n          options.onEvent?.({ type: 'error', tool: tool.name, error: message })\n          await respond({\n            jsonrpc: '2.0',\n            id: request.id,\n            result: { content: [{ type: 'text', text: message }], isError: true },\n          })\n        }\n        return\n      }\n\n      if (hasId) {\n        await respond({\n          jsonrpc: '2.0',\n          id: request.id,\n          error: { code: -32601, message: `method not found: ${request.method}` },\n        })\n      }\n    } catch (err) {\n      if (hasId) {\n        await respond({\n          jsonrpc: '2.0',\n          id: request.id,\n          error: {\n            code: -32603,\n            message: err instanceof Error ? err.message : String(err),\n          },\n        })\n      }\n    }\n  })\n\n  return {\n    async close() {\n      detach()\n      await transport.close?.()\n    },\n  }\n}\n","import type { JsonRpcMessage, McpTransport } from './types'\n\n/**\n * Paired in-memory transports for tests and in-process bridges.\n * Returns two transports that see each other's `send` output on\n * their `onMessage` handlers.\n */\nexport function createInMemoryTransportPair(): [McpTransport, McpTransport] {\n  const listeners: [Set<(m: JsonRpcMessage) => void>, Set<(m: JsonRpcMessage) => void>] = [\n    new Set(),\n    new Set(),\n  ]\n  const closeListeners: [Set<() => void>, Set<() => void>] = [new Set(), new Set()]\n  let closed = false\n\n  const make = (self: 0 | 1): McpTransport => {\n    const other = (self === 0 ? 1 : 0) as 0 | 1\n    return {\n      send(message) {\n        if (closed) return\n        for (const l of listeners[other]) l(message)\n      },\n      onMessage(handler) {\n        listeners[self].add(handler)\n        return () => {\n          listeners[self].delete(handler)\n        }\n      },\n      onClose(handler) {\n        closeListeners[self].add(handler)\n        return () => {\n          closeListeners[self].delete(handler)\n        }\n      },\n      close() {\n        closed = true\n        for (const l of closeListeners[0]) l()\n        for (const l of closeListeners[1]) l()\n      },\n    }\n  }\n\n  return [make(0), make(1)]\n}\n\n/**\n * Create a stdio transport over a child process handle. The spawned\n * process is expected to speak MCP's newline-delimited JSON framing\n * on stdin/stdout.\n *\n * Pass any object exposing the three streams; this intentionally\n * avoids importing `node:child_process` so the module stays\n * environment-agnostic. Most callers will wrap `child_process.spawn`\n * themselves and hand the handle in.\n */\nexport interface StdioLikeProcess {\n  stdin: { write: (chunk: string) => boolean | void }\n  stdout: {\n    on: (event: 'data', cb: (chunk: Buffer | string) => void) => void\n    off?: (event: 'data', cb: (chunk: Buffer | string) => void) => void\n  }\n  on?: (event: 'exit' | 'close', cb: () => void) => void\n  kill?: () => void\n}\n\nexport interface StdioTransportOptions {\n  /**\n   * Maximum bytes the line buffer may hold without seeing a newline.\n   * A server that emits no framing terminator would otherwise grow this\n   * buffer until the process runs out of memory. Default 1 MB.\n   */\n  maxFrameBytes?: number\n}\n\nconst DEFAULT_MAX_FRAME_BYTES = 1_048_576\n\nexport function createStdioTransport(\n  child: StdioLikeProcess,\n  options: StdioTransportOptions = {},\n): McpTransport {\n  const maxFrameBytes = options.maxFrameBytes ?? DEFAULT_MAX_FRAME_BYTES\n  const messageListeners = new Set<(m: JsonRpcMessage) => void>()\n  const closeListeners = new Set<() => void>()\n  let buffer = ''\n  let closed = false\n\n  const fireClose = (): void => {\n    if (closed) return\n    closed = true\n    for (const l of closeListeners) l()\n  }\n\n  const onData = (chunk: Buffer | string): void => {\n    if (closed) return\n    buffer += typeof chunk === 'string' ? chunk : chunk.toString('utf8')\n    let newlineIdx = buffer.indexOf('\\n')\n    while (newlineIdx >= 0) {\n      const line = buffer.slice(0, newlineIdx).trim()\n      buffer = buffer.slice(newlineIdx + 1)\n      if (line) {\n        try {\n          const message = JSON.parse(line) as JsonRpcMessage\n          for (const l of messageListeners) l(message)\n        } catch {\n          // ignore malformed frames\n        }\n      }\n      newlineIdx = buffer.indexOf('\\n')\n    }\n    if (buffer.length > maxFrameBytes) {\n      // Oversized frame with no newline — drop buffer, signal close,\n      // and kill the child so the leak cannot continue.\n      buffer = ''\n      try {\n        child.kill?.()\n      } catch {\n        // ignore\n      }\n      fireClose()\n    }\n  }\n\n  child.stdout.on('data', onData)\n  child.on?.('exit', fireClose)\n  child.on?.('close', fireClose)\n\n  return {\n    send(message) {\n      child.stdin.write(`${JSON.stringify(message)}\\n`)\n    },\n    onMessage(handler) {\n      messageListeners.add(handler)\n      return () => {\n        messageListeners.delete(handler)\n      }\n    },\n    onClose(handler) {\n      closeListeners.add(handler)\n      return () => {\n        closeListeners.delete(handler)\n      }\n    },\n    close() {\n      child.stdout.off?.('data', onData)\n      child.kill?.()\n    },\n  }\n}\n"]}