@agentskit/mcp 0.3.8 → 0.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/validation.ts","../src/agent-tool.ts","../src/registry-fetch.ts","../src/index.ts"],"names":["ConfigError","ErrorCodes","ToolError","runtime","createRuntime","isRecord","systemPrompt","createStdioTransport","createMcpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ConfigError, ErrorCodes } from '@agentskit/core'\n\nconst encoder = new TextEncoder()\nconst TOOL_NAME = /^[A-Za-z0-9_.-]+$/\n\nconst invalid = (message: string): ConfigError =>\n new ConfigError({ code: ErrorCodes.AK_CONFIG_INVALID, message })\n\nexport const assertNonEmptyString = (\n input: unknown,\n field: string,\n maxBytes: number,\n): string => {\n if (typeof input !== 'string' || input.trim().length === 0) {\n throw invalid(`${field} must be a non-empty string`)\n }\n if (encoder.encode(input).byteLength > maxBytes) {\n throw invalid(`${field} must not exceed ${maxBytes} bytes`)\n }\n return input.trim()\n}\n\nexport const assertToolName = (input: unknown, field = 'tool name'): string => {\n const value = assertNonEmptyString(input, field, 128)\n if (!TOOL_NAME.test(value)) {\n throw invalid(`${field} may contain only ASCII letters, digits, underscore, hyphen, and dot`)\n }\n return value\n}\n\nexport const assertPositiveInteger = (\n input: unknown,\n field: string,\n maximum: number,\n): number => {\n if (!Number.isSafeInteger(input) || (input as number) < 1 || (input as number) > maximum) {\n throw invalid(`${field} must be a safe integer between 1 and ${maximum}`)\n }\n return input as number\n}\n\nexport const isRecord = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) return false\n try {\n const prototype = Object.getPrototypeOf(input) as object | null\n return prototype === Object.prototype || prototype === null\n } catch {\n return false\n }\n}\n","import {\n ConfigError,\n ErrorCodes,\n ToolError,\n type AdapterFactory,\n type SkillDefinition,\n type ToolDefinition,\n} from '@agentskit/core'\nimport { createRuntime } from '@agentskit/runtime'\nimport { assertNonEmptyString, assertPositiveInteger, assertToolName, isRecord } from './validation'\n\nexport interface AgentToolConfig {\n /** Tool name exposed to the MCP host (the agent id). */\n id: string\n description: string\n /** The agent's system prompt (its skill). */\n systemPrompt: string\n /** Model adapter the agent runs on (server-side). */\n adapter: AdapterFactory\n maxSteps?: number\n /** Maximum UTF-8 bytes accepted in one task. Default 65536. */\n maxTaskBytes?: number\n}\n\n/**\n * Wrap a whole agent as a single MCP tool. The MCP host calls it with a `task`\n * string; the agent runs server-side (its own skill + reasoning loop on the\n * provided adapter) and returns the result. This is \"agents as MCP tools\" — the\n * host delegates a specialized job rather than orchestrating primitives.\n */\nexport function createAgentTool(config: AgentToolConfig): ToolDefinition {\n const id = assertToolName(config?.id, 'agent tool id')\n const description = assertNonEmptyString(config?.description, 'agent tool description', 4096)\n const systemPrompt = assertNonEmptyString(config?.systemPrompt, 'agent tool systemPrompt', 65_536)\n if (!isRecord(config?.adapter) || typeof config.adapter.createSource !== 'function') {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'agent tool adapter must implement createSource',\n })\n }\n const maxSteps = assertPositiveInteger(config.maxSteps ?? 8, 'agent tool maxSteps', 100)\n const maxTaskBytes = assertPositiveInteger(config.maxTaskBytes ?? 65_536, 'agent tool maxTaskBytes', 1_048_576)\n const skill: SkillDefinition = {\n name: id,\n description,\n systemPrompt,\n }\n const tool: ToolDefinition = {\n name: id,\n description,\n schema: {\n type: 'object',\n properties: { task: { type: 'string', description: 'The task or input for the agent.' } },\n required: ['task'],\n additionalProperties: false,\n },\n execute: async (args: Record<string, unknown>) => {\n if (typeof args.task !== 'string' || args.task.trim().length === 0) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: 'agent tool task must be a non-empty string',\n })\n }\n if (new TextEncoder().encode(args.task).byteLength > maxTaskBytes) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: `agent tool task must not exceed ${maxTaskBytes} bytes`,\n })\n }\n const runtime = createRuntime({ adapter: config.adapter, maxSteps })\n const result = await runtime.run(args.task, { skill })\n return { content: result.content, steps: result.steps }\n },\n }\n return Object.freeze(tool)\n}\n","const HOSTED = 'https://registry.agentskit.io/r'\nconst RAW = 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/main'\nconst REGISTRY_ID = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/\n\nexport interface FetchedAgentSkill {\n id: string\n description: string\n systemPrompt: string\n}\n\nexport interface FetchAgentSkillOptions {\n /** Per-request timeout. Default 10000 ms. */\n timeoutMs?: number\n /** Maximum UTF-8 response bytes. Default 131072. */\n maxResponseBytes?: number\n signal?: AbortSignal\n}\n\nconst isRecord = (input: unknown): input is Record<string, unknown> =>\n input !== null && typeof input === 'object' && !Array.isArray(input)\n\nconst boundedString = (input: unknown, maximum: number): string | null => {\n if (typeof input !== 'string' || input.trim().length === 0) return null\n return new TextEncoder().encode(input).byteLength <= maximum ? input.trim() : null\n}\n\nconst readBounded = async (response: Response, maximum: number): Promise<string | null> => {\n const declared = Number(response.headers.get('content-length'))\n if (Number.isFinite(declared) && declared > maximum) return null\n if (!response.body) return ''\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let bytes = 0\n let text = ''\n while (true) {\n const chunk = await reader.read()\n if (chunk.done) break\n bytes += chunk.value.byteLength\n if (bytes > maximum) {\n await reader.cancel().catch(() => undefined)\n return null\n }\n text += decoder.decode(chunk.value, { stream: true })\n }\n return text + decoder.decode()\n}\n\nconst requestText = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<string | null> => {\n if (options.signal?.aborted) return null\n const controller = new AbortController()\n let resolveAbort: ((value: null) => void) | undefined\n const aborted = new Promise<null>((resolve) => {\n resolveAbort = resolve\n })\n const abort = (): void => {\n controller.abort()\n resolveAbort?.(null)\n }\n options.signal?.addEventListener('abort', abort, { once: true })\n let timer: ReturnType<typeof setTimeout> | undefined\n try {\n const request = (async (): Promise<string | null> => {\n const response = await fetchImpl(url, { signal: controller.signal })\n if (!response.ok) return null\n return readBounded(response, options.maxResponseBytes)\n })().catch(() => null)\n const timeout = new Promise<null>((resolve) => {\n timer = setTimeout(() => {\n controller.abort()\n resolve(null)\n }, options.timeoutMs)\n })\n return await Promise.race([request, timeout, aborted])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n options.signal?.removeEventListener('abort', abort)\n }\n}\n\nconst requestJson = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<unknown | null> => {\n const text = await requestText(url, fetchImpl, options)\n if (text === null) return null\n try {\n return JSON.parse(text) as unknown\n } catch {\n return null\n }\n}\n\nexport async function fetchAgentSkill(\n id: string,\n fetchImpl: typeof fetch = globalThis.fetch,\n options: FetchAgentSkillOptions = {},\n): Promise<FetchedAgentSkill | null> {\n if (!REGISTRY_ID.test(id) || typeof fetchImpl !== 'function') return null\n const timeoutMs = options.timeoutMs ?? 10_000\n const maxResponseBytes = options.maxResponseBytes ?? 131_072\n if (\n !Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 120_000 ||\n !Number.isSafeInteger(maxResponseBytes) || maxResponseBytes < 1 || maxResponseBytes > 1_048_576\n ) return null\n const bounds = { maxResponseBytes, signal: options.signal, timeoutMs }\n\n const hosted = await requestJson(`${HOSTED}/${id}.json`, fetchImpl, bounds)\n if (isRecord(hosted)) {\n if (hosted.skill === null) return null\n if (isRecord(hosted.skill)) {\n const systemPrompt = boundedString(hosted.skill.systemPrompt, 65_536)\n if (systemPrompt) {\n const description = boundedString(hosted.description, 4096) ?? id\n return Object.freeze({ description, id, systemPrompt })\n }\n }\n }\n\n const meta = await requestJson(`${RAW}/registry/${id}/meta.json`, fetchImpl, bounds)\n if (!isRecord(meta)) return null\n const source = await requestText(`${RAW}/registry/${id}/agent.ts`, fetchImpl, bounds)\n if (!source) return null\n const match = source.match(/systemPrompt:\\s*`((?:\\\\.|[^`\\\\])*)`/)\n if (!match) return null\n const systemPrompt = boundedString(\n match[1].replace(/\\\\`/g, '`').replace(/\\\\\\$\\{/g, '${'),\n 65_536,\n )\n if (!systemPrompt) return null\n return Object.freeze({\n id,\n description: boundedString(meta.description, 4096) ?? id,\n systemPrompt,\n })\n}\n","import { ConfigError, ErrorCodes, type ToolDefinition } from '@agentskit/core'\nimport {\n createMcpServer,\n createStdioTransport,\n type McpServer,\n type McpTransport,\n type StdioLikeProcess,\n} from '@agentskit/tools/mcp'\nimport { assertNonEmptyString, assertToolName, isRecord } from './validation'\n\nexport interface AgentsKitMcpServerOptions {\n /** AgentsKit tools to expose to the MCP host. */\n tools: ToolDefinition[]\n serverInfo?: { name: string; version: string }\n /** Observability hook (call / error / list). Logs must NOT go to stdout — it is the MCP channel. */\n onEvent?: (event: { type: 'call' | 'error' | 'list'; tool?: string; error?: string }) => void\n /**\n * Transport override. Defaults to stdio over the current process (the form\n * Codex / Claude Code / Cursor launch). Inject a custom transport for tests.\n */\n transport?: McpTransport\n}\n\n/**\n * Adapt the current Node process to the `StdioLikeProcess` the transport expects:\n * the server RECEIVES JSON-RPC on stdin and SENDS on stdout.\n */\nexport function processStdio(): StdioLikeProcess {\n return {\n stdin: { write: (chunk: string) => void process.stdout.write(chunk) },\n stdout: {\n on: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.on('data', cb),\n off: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.off('data', cb),\n },\n on: (event: 'exit' | 'close', cb: () => void) =>\n void process.on(event === 'close' ? 'beforeExit' : 'exit', cb),\n }\n}\n\n/**\n * Expose a set of AgentsKit tools as an MCP server (over stdio by default), so\n * any MCP host — Codex, Claude Code, Cursor — can call them.\n */\nexport function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer {\n if (!isRecord(options) || !Array.isArray(options.tools)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'MCP server options must include a tools array',\n })\n }\n\n const names = new Set<string>()\n const tools = options.tools.map((tool, index) => {\n if (!isRecord(tool)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tools[${index}] must be a tool definition`,\n })\n }\n const name = assertToolName(tool.name, `tools[${index}].name`)\n if (names.has(name)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tool names must be unique; duplicate \"${name}\"`,\n })\n }\n names.add(name)\n return Object.freeze({ ...tool, name }) as ToolDefinition\n })\n\n const serverInfo = options.serverInfo === undefined\n ? { name: 'agentskit-mcp', version: '1.0.0' }\n : {\n name: assertNonEmptyString(options.serverInfo?.name, 'serverInfo.name', 128),\n version: assertNonEmptyString(options.serverInfo?.version, 'serverInfo.version', 64),\n }\n\n if (\n options.transport !== undefined &&\n (!isRecord(options.transport) ||\n typeof options.transport.send !== 'function' ||\n typeof options.transport.onMessage !== 'function')\n ) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'transport must implement send and onMessage',\n })\n }\n\n const onEvent = options.onEvent === undefined\n ? undefined\n : (event: Parameters<NonNullable<AgentsKitMcpServerOptions['onEvent']>>[0]): void => {\n try {\n const delivered = (options.onEvent as (value: typeof event) => unknown)(Object.freeze({ ...event }))\n if (delivered !== null && (typeof delivered === 'object' || typeof delivered === 'function')) {\n const then = (delivered as { then?: unknown }).then\n if (typeof then === 'function') void Promise.resolve(delivered).catch(() => undefined)\n }\n } catch {\n // Observation must not alter protocol behavior.\n }\n }\n\n const transport = options.transport ?? createStdioTransport(processStdio())\n return createMcpServer({\n transport,\n tools,\n serverInfo,\n onEvent,\n })\n}\n\nexport { createAgentTool, type AgentToolConfig } from './agent-tool'\nexport {\n fetchAgentSkill,\n type FetchedAgentSkill,\n type FetchAgentSkillOptions,\n} from './registry-fetch'\nexport type { McpServer, McpTransport } from '@agentskit/tools/mcp'\n"]}
1
+ {"version":3,"sources":["../src/validation.ts","../src/agent-tool.ts","../src/registry-fetch.ts","../src/index.ts"],"names":["ConfigError","ErrorCodes","ToolError","runtime","createRuntime","createAjvValidator","invokeStructured","TOOL_NAME","isRecord","typed","systemPrompt","createStdioTransport","createMcpServer"],"mappings":"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","file":"index.cjs","sourcesContent":["import { ConfigError, ErrorCodes } from '@agentskit/core'\n\nconst encoder = new TextEncoder()\nconst TOOL_NAME = /^[A-Za-z0-9_.-]+$/\n\nconst invalid = (message: string): ConfigError =>\n new ConfigError({ code: ErrorCodes.AK_CONFIG_INVALID, message })\n\nexport const assertNonEmptyString = (\n input: unknown,\n field: string,\n maxBytes: number,\n): string => {\n if (typeof input !== 'string' || input.trim().length === 0) {\n throw invalid(`${field} must be a non-empty string`)\n }\n if (encoder.encode(input).byteLength > maxBytes) {\n throw invalid(`${field} must not exceed ${maxBytes} bytes`)\n }\n return input.trim()\n}\n\nexport const assertToolName = (input: unknown, field = 'tool name'): string => {\n const value = assertNonEmptyString(input, field, 128)\n if (!TOOL_NAME.test(value)) {\n throw invalid(`${field} may contain only ASCII letters, digits, underscore, hyphen, and dot`)\n }\n return value\n}\n\nexport const assertPositiveInteger = (\n input: unknown,\n field: string,\n maximum: number,\n): number => {\n if (!Number.isSafeInteger(input) || (input as number) < 1 || (input as number) > maximum) {\n throw invalid(`${field} must be a safe integer between 1 and ${maximum}`)\n }\n return input as number\n}\n\nexport const isRecord = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) return false\n try {\n const prototype = Object.getPrototypeOf(input) as object | null\n return prototype === Object.prototype || prototype === null\n } catch {\n return false\n }\n}\n","import {\n ConfigError,\n ErrorCodes,\n ToolError,\n type AdapterFactory,\n type SkillDefinition,\n type ToolCall,\n type ToolDefinition,\n} from '@agentskit/core'\nimport { createRuntime, invokeStructured } from '@agentskit/runtime'\nimport { createAjvValidator } from '@agentskit/tools/validation'\nimport { assertNonEmptyString, assertPositiveInteger, assertToolName, isRecord } from './validation'\n\ntype JsonSchema = NonNullable<ToolDefinition['schema']>\n\nexport interface AgentToolConfig {\n /** Tool name exposed to the MCP host (the agent id). */\n id: string\n description: string\n /** The agent's system prompt (its skill). */\n systemPrompt: string\n /** Model adapter the agent runs on (server-side). */\n adapter: AdapterFactory\n maxSteps?: number\n /** Maximum UTF-8 bytes accepted in one task. Default 65536. */\n maxTaskBytes?: number\n}\n\nexport interface TypedAgentToolConfig extends AgentToolConfig {\n inputSchema: JsonSchema\n outputSchema: JsonSchema\n resultToolName: string\n onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>\n}\n\n/**\n * Wrap a whole agent as a single MCP tool. The MCP host calls it with a `task`\n * string; the agent runs server-side (its own skill + reasoning loop on the\n * provided adapter) and returns the result. This is \"agents as MCP tools\" — the\n * host delegates a specialized job rather than orchestrating primitives.\n */\nexport function createAgentTool(config: AgentToolConfig): ToolDefinition {\n const id = assertToolName(config?.id, 'agent tool id')\n const description = assertNonEmptyString(config?.description, 'agent tool description', 4096)\n const systemPrompt = assertNonEmptyString(config?.systemPrompt, 'agent tool systemPrompt', 65_536)\n if (!isRecord(config?.adapter) || typeof config.adapter.createSource !== 'function') {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'agent tool adapter must implement createSource',\n })\n }\n const maxSteps = assertPositiveInteger(config.maxSteps ?? 8, 'agent tool maxSteps', 100)\n const maxTaskBytes = assertPositiveInteger(config.maxTaskBytes ?? 65_536, 'agent tool maxTaskBytes', 1_048_576)\n const skill: SkillDefinition = {\n name: id,\n description,\n systemPrompt,\n }\n const tool: ToolDefinition = {\n name: id,\n description,\n schema: {\n type: 'object',\n properties: { task: { type: 'string', description: 'The task or input for the agent.' } },\n required: ['task'],\n additionalProperties: false,\n },\n execute: async (args: Record<string, unknown>) => {\n if (typeof args.task !== 'string' || args.task.trim().length === 0) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: 'agent tool task must be a non-empty string',\n })\n }\n if (new TextEncoder().encode(args.task).byteLength > maxTaskBytes) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: `agent tool task must not exceed ${maxTaskBytes} bytes`,\n })\n }\n const runtime = createRuntime({ adapter: config.adapter, maxSteps })\n const result = await runtime.run(args.task, { skill })\n return { content: result.content, steps: result.steps }\n },\n }\n return Object.freeze(tool)\n}\n\n/**\n * Expose a Registry agent without discarding its structured output contract.\n * The result tool stays internal to the runtime; only the typed outer tool is\n * visible to the MCP host.\n */\nexport function createTypedAgentTool(config: TypedAgentToolConfig): ToolDefinition {\n const id = assertToolName(config?.id, 'typed agent tool id')\n const description = assertNonEmptyString(config?.description, 'typed agent tool description', 4096)\n const systemPrompt = assertNonEmptyString(config?.systemPrompt, 'typed agent tool systemPrompt', 65_536)\n const resultToolName = assertToolName(config?.resultToolName, 'typed agent result tool name')\n const maxTaskBytes = assertPositiveInteger(config.maxTaskBytes ?? 65_536, 'typed agent input', 1_048_576)\n if (!isRecord(config?.adapter) || typeof config.adapter.createSource !== 'function') {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'typed agent tool adapter must implement createSource',\n })\n }\n if (!isRecord(config.inputSchema) || !isRecord(config.outputSchema)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'typed agent tool schemas must be JSON Schema objects',\n })\n }\n\n const validate = createAjvValidator({ rejectAdditionalProperties: true })\n try {\n validate(config.inputSchema, {})\n validate(config.outputSchema, {})\n } catch {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'typed agent tool schemas must be valid JSON Schema',\n })\n }\n\n const submit: ToolDefinition = {\n name: resultToolName,\n description: 'Return the structured agent result.',\n schema: config.outputSchema,\n execute: async () => 'recorded',\n }\n const skill: SkillDefinition = { name: id, description, systemPrompt }\n const tool: ToolDefinition = {\n name: id,\n description,\n schema: config.inputSchema,\n execute: async (args: Record<string, unknown>) => {\n const task = JSON.stringify(args)\n if (new TextEncoder().encode(task).byteLength > maxTaskBytes) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: `typed agent input must not exceed ${maxTaskBytes} bytes`,\n })\n }\n const input = validate(config.inputSchema, args)\n if (!input.valid) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: input.message ?? 'typed agent input does not match its schema',\n })\n }\n return invokeStructured({\n adapter: config.adapter,\n tool: submit,\n task: `INPUT:\\n${task}`,\n parse: (value) => {\n const output = validate(config.outputSchema, value)\n if (!output.valid) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: output.message ?? 'typed agent output does not match its schema',\n })\n }\n return value\n },\n skill,\n onConfirm: config.onConfirm,\n maxSteps: config.maxSteps ?? 4,\n })\n },\n }\n return Object.freeze(tool)\n}\n","import type { ToolDefinition } from '@agentskit/core'\n\nconst HOSTED = 'https://registry.agentskit.io/r'\nconst RAW = 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/main'\nconst REGISTRY_ID = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/\nconst TOOL_NAME = /^[A-Za-z0-9_.-]{1,128}$/\n\ntype JsonSchema = NonNullable<ToolDefinition['schema']>\n\nexport interface FetchedAgentSkill {\n id: string\n description: string\n systemPrompt: string\n}\n\nexport interface FetchedTypedAgent extends FetchedAgentSkill {\n mode: 'typed'\n inputSchema: JsonSchema\n outputSchema: JsonSchema\n resultToolName: string\n}\n\nexport type FetchedAgent = FetchedAgentSkill | FetchedTypedAgent\n\nexport interface FetchAgentSkillOptions {\n /** Per-request timeout. Default 10000 ms. */\n timeoutMs?: number\n /** Maximum UTF-8 response bytes. Default 131072. */\n maxResponseBytes?: number\n signal?: AbortSignal\n}\n\nconst isRecord = (input: unknown): input is Record<string, unknown> =>\n input !== null && typeof input === 'object' && !Array.isArray(input)\n\nconst readTypedMcpProjection = (input: Record<string, unknown>): Omit<FetchedTypedAgent, 'id' | 'description' | 'systemPrompt'> | null | undefined => {\n const projections = input.projections\n if (!isRecord(projections)) return undefined\n const mcp = projections.mcp\n if (!isRecord(mcp) || mcp.mode === undefined) return undefined\n if (mcp.mode !== 'typed') return undefined\n if (!isRecord(mcp.inputSchema) || !isRecord(mcp.outputSchema)) return null\n if (typeof mcp.resultToolName !== 'string' || !TOOL_NAME.test(mcp.resultToolName)) return null\n return {\n inputSchema: mcp.inputSchema as JsonSchema,\n mode: 'typed',\n outputSchema: mcp.outputSchema as JsonSchema,\n resultToolName: mcp.resultToolName,\n }\n}\n\nconst boundedString = (input: unknown, maximum: number): string | null => {\n if (typeof input !== 'string' || input.trim().length === 0) return null\n return new TextEncoder().encode(input).byteLength <= maximum ? input.trim() : null\n}\n\nconst readBounded = async (response: Response, maximum: number): Promise<string | null> => {\n const declared = Number(response.headers.get('content-length'))\n if (Number.isFinite(declared) && declared > maximum) return null\n if (!response.body) return ''\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let bytes = 0\n let text = ''\n while (true) {\n const chunk = await reader.read()\n if (chunk.done) break\n bytes += chunk.value.byteLength\n if (bytes > maximum) {\n await reader.cancel().catch(() => undefined)\n return null\n }\n text += decoder.decode(chunk.value, { stream: true })\n }\n return text + decoder.decode()\n}\n\nconst requestText = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<string | null> => {\n if (options.signal?.aborted) return null\n const controller = new AbortController()\n let resolveAbort: ((value: null) => void) | undefined\n const aborted = new Promise<null>((resolve) => {\n resolveAbort = resolve\n })\n const abort = (): void => {\n controller.abort()\n resolveAbort?.(null)\n }\n options.signal?.addEventListener('abort', abort, { once: true })\n let timer: ReturnType<typeof setTimeout> | undefined\n try {\n const request = (async (): Promise<string | null> => {\n const response = await fetchImpl(url, { signal: controller.signal })\n if (!response.ok) return null\n return readBounded(response, options.maxResponseBytes)\n })().catch(() => null)\n const timeout = new Promise<null>((resolve) => {\n timer = setTimeout(() => {\n controller.abort()\n resolve(null)\n }, options.timeoutMs)\n })\n return await Promise.race([request, timeout, aborted])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n options.signal?.removeEventListener('abort', abort)\n }\n}\n\nconst requestJson = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<unknown | null> => {\n const text = await requestText(url, fetchImpl, options)\n if (text === null) return null\n try {\n return JSON.parse(text) as unknown\n } catch {\n return null\n }\n}\n\nexport async function fetchAgent(\n id: string,\n fetchImpl: typeof fetch = globalThis.fetch,\n options: FetchAgentSkillOptions = {},\n): Promise<FetchedAgent | null> {\n if (!REGISTRY_ID.test(id) || typeof fetchImpl !== 'function') return null\n const timeoutMs = options.timeoutMs ?? 10_000\n const maxResponseBytes = options.maxResponseBytes ?? 131_072\n if (\n !Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 120_000 ||\n !Number.isSafeInteger(maxResponseBytes) || maxResponseBytes < 1 || maxResponseBytes > 1_048_576\n ) return null\n const bounds = { maxResponseBytes, signal: options.signal, timeoutMs }\n\n const hosted = await requestJson(`${HOSTED}/${id}.json`, fetchImpl, bounds)\n if (isRecord(hosted)) {\n const typed = readTypedMcpProjection(hosted)\n if (typed === null) return null\n if (hosted.skill === null) return null\n if (isRecord(hosted.skill)) {\n const systemPrompt = boundedString(hosted.skill.systemPrompt, 65_536)\n if (systemPrompt) {\n const description = boundedString(hosted.description, 4096) ?? id\n if (typed) return Object.freeze({ description, id, systemPrompt, ...typed })\n return Object.freeze({ description, id, systemPrompt })\n }\n }\n }\n\n const meta = await requestJson(`${RAW}/registry/${id}/meta.json`, fetchImpl, bounds)\n if (!isRecord(meta)) return null\n const typed = readTypedMcpProjection(meta)\n if (typed === null) return null\n const source = await requestText(`${RAW}/registry/${id}/agent.ts`, fetchImpl, bounds)\n if (!source) return null\n const match = source.match(/systemPrompt:\\s*`((?:\\\\.|[^`\\\\])*)`/)\n if (!match) return null\n const systemPrompt = boundedString(\n match[1].replace(/\\\\`/g, '`').replace(/\\\\\\$\\{/g, '${'),\n 65_536,\n )\n if (!systemPrompt) return null\n const skill = {\n id,\n description: boundedString(meta.description, 4096) ?? id,\n systemPrompt,\n }\n return Object.freeze(typed ? { ...skill, ...typed } : skill)\n}\n\nexport async function fetchAgentSkill(\n id: string,\n fetchImpl: typeof fetch = globalThis.fetch,\n options: FetchAgentSkillOptions = {},\n): Promise<FetchedAgentSkill | null> {\n const agent = await fetchAgent(id, fetchImpl, options)\n return agent && 'mode' in agent && agent.mode === 'typed' ? null : agent\n}\n","import { ConfigError, ErrorCodes, type ToolDefinition } from '@agentskit/core'\nimport {\n createMcpServer,\n createStdioTransport,\n type McpServer,\n type McpTransport,\n type StdioLikeProcess,\n} from '@agentskit/tools/mcp'\nimport { assertNonEmptyString, assertToolName, isRecord } from './validation'\n\nexport interface AgentsKitMcpServerOptions {\n /** AgentsKit tools to expose to the MCP host. */\n tools: ToolDefinition[]\n serverInfo?: { name: string; version: string }\n /** Observability hook (call / error / list). Logs must NOT go to stdout — it is the MCP channel. */\n onEvent?: (event: { type: 'call' | 'error' | 'list'; tool?: string; error?: string }) => void\n /**\n * Transport override. Defaults to stdio over the current process (the form\n * Codex / Claude Code / Cursor launch). Inject a custom transport for tests.\n */\n transport?: McpTransport\n}\n\n/**\n * Adapt the current Node process to the `StdioLikeProcess` the transport expects:\n * the server RECEIVES JSON-RPC on stdin and SENDS on stdout.\n */\nexport function processStdio(): StdioLikeProcess {\n return {\n stdin: { write: (chunk: string) => void process.stdout.write(chunk) },\n stdout: {\n on: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.on('data', cb),\n off: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.off('data', cb),\n },\n on: (event: 'exit' | 'close', cb: () => void) =>\n void process.on(event === 'close' ? 'beforeExit' : 'exit', cb),\n }\n}\n\n/**\n * Expose a set of AgentsKit tools as an MCP server (over stdio by default), so\n * any MCP host — Codex, Claude Code, Cursor — can call them.\n */\nexport function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer {\n if (!isRecord(options) || !Array.isArray(options.tools)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'MCP server options must include a tools array',\n })\n }\n\n const names = new Set<string>()\n const tools = options.tools.map((tool, index) => {\n if (!isRecord(tool)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tools[${index}] must be a tool definition`,\n })\n }\n const name = assertToolName(tool.name, `tools[${index}].name`)\n if (names.has(name)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tool names must be unique; duplicate \"${name}\"`,\n })\n }\n names.add(name)\n return Object.freeze({ ...tool, name }) as ToolDefinition\n })\n\n const serverInfo = options.serverInfo === undefined\n ? { name: 'agentskit-mcp', version: '1.0.0' }\n : {\n name: assertNonEmptyString(options.serverInfo?.name, 'serverInfo.name', 128),\n version: assertNonEmptyString(options.serverInfo?.version, 'serverInfo.version', 64),\n }\n\n if (\n options.transport !== undefined &&\n (!isRecord(options.transport) ||\n typeof options.transport.send !== 'function' ||\n typeof options.transport.onMessage !== 'function')\n ) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'transport must implement send and onMessage',\n })\n }\n\n const onEvent = options.onEvent === undefined\n ? undefined\n : (event: Parameters<NonNullable<AgentsKitMcpServerOptions['onEvent']>>[0]): void => {\n try {\n const delivered = (options.onEvent as (value: typeof event) => unknown)(Object.freeze({ ...event }))\n if (delivered !== null && (typeof delivered === 'object' || typeof delivered === 'function')) {\n const then = (delivered as { then?: unknown }).then\n if (typeof then === 'function') void Promise.resolve(delivered).catch(() => undefined)\n }\n } catch {\n // Observation must not alter protocol behavior.\n }\n }\n\n const transport = options.transport ?? createStdioTransport(processStdio())\n return createMcpServer({\n transport,\n tools,\n serverInfo,\n onEvent,\n })\n}\n\nexport { createAgentTool, createTypedAgentTool, type AgentToolConfig, type TypedAgentToolConfig } from './agent-tool'\nexport {\n fetchAgent,\n fetchAgentSkill,\n type FetchedAgent,\n type FetchedAgentSkill,\n type FetchedTypedAgent,\n type FetchAgentSkillOptions,\n} from './registry-fetch'\nexport type { McpServer, McpTransport } from '@agentskit/tools/mcp'\n"]}
package/dist/index.d.cts CHANGED
@@ -1,7 +1,8 @@
1
- import { AdapterFactory, ToolDefinition } from '@agentskit/core';
1
+ import { AdapterFactory, ToolDefinition, ToolCall } from '@agentskit/core';
2
2
  import { McpTransport, McpServer, StdioLikeProcess } from '@agentskit/tools/mcp';
3
3
  export { McpServer, McpTransport } from '@agentskit/tools/mcp';
4
4
 
5
+ type JsonSchema$1 = NonNullable<ToolDefinition['schema']>;
5
6
  interface AgentToolConfig {
6
7
  /** Tool name exposed to the MCP host (the agent id). */
7
8
  id: string;
@@ -14,6 +15,12 @@ interface AgentToolConfig {
14
15
  /** Maximum UTF-8 bytes accepted in one task. Default 65536. */
15
16
  maxTaskBytes?: number;
16
17
  }
18
+ interface TypedAgentToolConfig extends AgentToolConfig {
19
+ inputSchema: JsonSchema$1;
20
+ outputSchema: JsonSchema$1;
21
+ resultToolName: string;
22
+ onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>;
23
+ }
17
24
  /**
18
25
  * Wrap a whole agent as a single MCP tool. The MCP host calls it with a `task`
19
26
  * string; the agent runs server-side (its own skill + reasoning loop on the
@@ -21,12 +28,26 @@ interface AgentToolConfig {
21
28
  * host delegates a specialized job rather than orchestrating primitives.
22
29
  */
23
30
  declare function createAgentTool(config: AgentToolConfig): ToolDefinition;
31
+ /**
32
+ * Expose a Registry agent without discarding its structured output contract.
33
+ * The result tool stays internal to the runtime; only the typed outer tool is
34
+ * visible to the MCP host.
35
+ */
36
+ declare function createTypedAgentTool(config: TypedAgentToolConfig): ToolDefinition;
24
37
 
38
+ type JsonSchema = NonNullable<ToolDefinition['schema']>;
25
39
  interface FetchedAgentSkill {
26
40
  id: string;
27
41
  description: string;
28
42
  systemPrompt: string;
29
43
  }
44
+ interface FetchedTypedAgent extends FetchedAgentSkill {
45
+ mode: 'typed';
46
+ inputSchema: JsonSchema;
47
+ outputSchema: JsonSchema;
48
+ resultToolName: string;
49
+ }
50
+ type FetchedAgent = FetchedAgentSkill | FetchedTypedAgent;
30
51
  interface FetchAgentSkillOptions {
31
52
  /** Per-request timeout. Default 10000 ms. */
32
53
  timeoutMs?: number;
@@ -34,6 +55,7 @@ interface FetchAgentSkillOptions {
34
55
  maxResponseBytes?: number;
35
56
  signal?: AbortSignal;
36
57
  }
58
+ declare function fetchAgent(id: string, fetchImpl?: typeof fetch, options?: FetchAgentSkillOptions): Promise<FetchedAgent | null>;
37
59
  declare function fetchAgentSkill(id: string, fetchImpl?: typeof fetch, options?: FetchAgentSkillOptions): Promise<FetchedAgentSkill | null>;
38
60
 
39
61
  interface AgentsKitMcpServerOptions {
@@ -66,4 +88,4 @@ declare function processStdio(): StdioLikeProcess;
66
88
  */
67
89
  declare function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer;
68
90
 
69
- export { type AgentToolConfig, type AgentsKitMcpServerOptions, type FetchAgentSkillOptions, type FetchedAgentSkill, createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio };
91
+ export { type AgentToolConfig, type AgentsKitMcpServerOptions, type FetchAgentSkillOptions, type FetchedAgent, type FetchedAgentSkill, type FetchedTypedAgent, type TypedAgentToolConfig, createAgentTool, createAgentsKitMcpServer, createTypedAgentTool, fetchAgent, fetchAgentSkill, processStdio };
package/dist/index.d.ts CHANGED
@@ -1,7 +1,8 @@
1
- import { AdapterFactory, ToolDefinition } from '@agentskit/core';
1
+ import { AdapterFactory, ToolDefinition, ToolCall } from '@agentskit/core';
2
2
  import { McpTransport, McpServer, StdioLikeProcess } from '@agentskit/tools/mcp';
3
3
  export { McpServer, McpTransport } from '@agentskit/tools/mcp';
4
4
 
5
+ type JsonSchema$1 = NonNullable<ToolDefinition['schema']>;
5
6
  interface AgentToolConfig {
6
7
  /** Tool name exposed to the MCP host (the agent id). */
7
8
  id: string;
@@ -14,6 +15,12 @@ interface AgentToolConfig {
14
15
  /** Maximum UTF-8 bytes accepted in one task. Default 65536. */
15
16
  maxTaskBytes?: number;
16
17
  }
18
+ interface TypedAgentToolConfig extends AgentToolConfig {
19
+ inputSchema: JsonSchema$1;
20
+ outputSchema: JsonSchema$1;
21
+ resultToolName: string;
22
+ onConfirm?: (toolCall: ToolCall) => boolean | Promise<boolean>;
23
+ }
17
24
  /**
18
25
  * Wrap a whole agent as a single MCP tool. The MCP host calls it with a `task`
19
26
  * string; the agent runs server-side (its own skill + reasoning loop on the
@@ -21,12 +28,26 @@ interface AgentToolConfig {
21
28
  * host delegates a specialized job rather than orchestrating primitives.
22
29
  */
23
30
  declare function createAgentTool(config: AgentToolConfig): ToolDefinition;
31
+ /**
32
+ * Expose a Registry agent without discarding its structured output contract.
33
+ * The result tool stays internal to the runtime; only the typed outer tool is
34
+ * visible to the MCP host.
35
+ */
36
+ declare function createTypedAgentTool(config: TypedAgentToolConfig): ToolDefinition;
24
37
 
38
+ type JsonSchema = NonNullable<ToolDefinition['schema']>;
25
39
  interface FetchedAgentSkill {
26
40
  id: string;
27
41
  description: string;
28
42
  systemPrompt: string;
29
43
  }
44
+ interface FetchedTypedAgent extends FetchedAgentSkill {
45
+ mode: 'typed';
46
+ inputSchema: JsonSchema;
47
+ outputSchema: JsonSchema;
48
+ resultToolName: string;
49
+ }
50
+ type FetchedAgent = FetchedAgentSkill | FetchedTypedAgent;
30
51
  interface FetchAgentSkillOptions {
31
52
  /** Per-request timeout. Default 10000 ms. */
32
53
  timeoutMs?: number;
@@ -34,6 +55,7 @@ interface FetchAgentSkillOptions {
34
55
  maxResponseBytes?: number;
35
56
  signal?: AbortSignal;
36
57
  }
58
+ declare function fetchAgent(id: string, fetchImpl?: typeof fetch, options?: FetchAgentSkillOptions): Promise<FetchedAgent | null>;
37
59
  declare function fetchAgentSkill(id: string, fetchImpl?: typeof fetch, options?: FetchAgentSkillOptions): Promise<FetchedAgentSkill | null>;
38
60
 
39
61
  interface AgentsKitMcpServerOptions {
@@ -66,4 +88,4 @@ declare function processStdio(): StdioLikeProcess;
66
88
  */
67
89
  declare function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer;
68
90
 
69
- export { type AgentToolConfig, type AgentsKitMcpServerOptions, type FetchAgentSkillOptions, type FetchedAgentSkill, createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio };
91
+ export { type AgentToolConfig, type AgentsKitMcpServerOptions, type FetchAgentSkillOptions, type FetchedAgent, type FetchedAgentSkill, type FetchedTypedAgent, type TypedAgentToolConfig, createAgentTool, createAgentsKitMcpServer, createTypedAgentTool, fetchAgent, fetchAgentSkill, processStdio };
package/dist/index.js CHANGED
@@ -1,3 +1,3 @@
1
- export { createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio } from './chunk-5K3ZAG4X.js';
1
+ export { createAgentTool, createAgentsKitMcpServer, createTypedAgentTool, fetchAgent, fetchAgentSkill, processStdio } from './chunk-DU5RLF44.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@agentskit/mcp",
3
- "version": "0.3.8",
3
+ "version": "0.4.1",
4
4
  "description": "Expose AgentsKit tools as an MCP server — use them from Codex, Claude Code, Cursor, or any MCP host.",
5
5
  "keywords": [
6
6
  "codex",
@@ -36,10 +36,10 @@
36
36
  "dist"
37
37
  ],
38
38
  "dependencies": {
39
- "@agentskit/adapters": "0.15.1",
39
+ "@agentskit/adapters": "0.15.2",
40
+ "@agentskit/tools": "0.13.6",
40
41
  "@agentskit/core": "1.12.8",
41
- "@agentskit/runtime": "0.10.15",
42
- "@agentskit/tools": "0.13.5"
42
+ "@agentskit/runtime": "0.10.15"
43
43
  },
44
44
  "devDependencies": {
45
45
  "@types/node": "^25.9.5",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/validation.ts","../src/agent-tool.ts","../src/registry-fetch.ts","../src/index.ts"],"names":["ConfigError","ErrorCodes","isRecord","systemPrompt"],"mappings":"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","file":"chunk-5K3ZAG4X.js","sourcesContent":["import { ConfigError, ErrorCodes } from '@agentskit/core'\n\nconst encoder = new TextEncoder()\nconst TOOL_NAME = /^[A-Za-z0-9_.-]+$/\n\nconst invalid = (message: string): ConfigError =>\n new ConfigError({ code: ErrorCodes.AK_CONFIG_INVALID, message })\n\nexport const assertNonEmptyString = (\n input: unknown,\n field: string,\n maxBytes: number,\n): string => {\n if (typeof input !== 'string' || input.trim().length === 0) {\n throw invalid(`${field} must be a non-empty string`)\n }\n if (encoder.encode(input).byteLength > maxBytes) {\n throw invalid(`${field} must not exceed ${maxBytes} bytes`)\n }\n return input.trim()\n}\n\nexport const assertToolName = (input: unknown, field = 'tool name'): string => {\n const value = assertNonEmptyString(input, field, 128)\n if (!TOOL_NAME.test(value)) {\n throw invalid(`${field} may contain only ASCII letters, digits, underscore, hyphen, and dot`)\n }\n return value\n}\n\nexport const assertPositiveInteger = (\n input: unknown,\n field: string,\n maximum: number,\n): number => {\n if (!Number.isSafeInteger(input) || (input as number) < 1 || (input as number) > maximum) {\n throw invalid(`${field} must be a safe integer between 1 and ${maximum}`)\n }\n return input as number\n}\n\nexport const isRecord = (input: unknown): input is Record<string, unknown> => {\n if (input === null || typeof input !== 'object' || Array.isArray(input)) return false\n try {\n const prototype = Object.getPrototypeOf(input) as object | null\n return prototype === Object.prototype || prototype === null\n } catch {\n return false\n }\n}\n","import {\n ConfigError,\n ErrorCodes,\n ToolError,\n type AdapterFactory,\n type SkillDefinition,\n type ToolDefinition,\n} from '@agentskit/core'\nimport { createRuntime } from '@agentskit/runtime'\nimport { assertNonEmptyString, assertPositiveInteger, assertToolName, isRecord } from './validation'\n\nexport interface AgentToolConfig {\n /** Tool name exposed to the MCP host (the agent id). */\n id: string\n description: string\n /** The agent's system prompt (its skill). */\n systemPrompt: string\n /** Model adapter the agent runs on (server-side). */\n adapter: AdapterFactory\n maxSteps?: number\n /** Maximum UTF-8 bytes accepted in one task. Default 65536. */\n maxTaskBytes?: number\n}\n\n/**\n * Wrap a whole agent as a single MCP tool. The MCP host calls it with a `task`\n * string; the agent runs server-side (its own skill + reasoning loop on the\n * provided adapter) and returns the result. This is \"agents as MCP tools\" — the\n * host delegates a specialized job rather than orchestrating primitives.\n */\nexport function createAgentTool(config: AgentToolConfig): ToolDefinition {\n const id = assertToolName(config?.id, 'agent tool id')\n const description = assertNonEmptyString(config?.description, 'agent tool description', 4096)\n const systemPrompt = assertNonEmptyString(config?.systemPrompt, 'agent tool systemPrompt', 65_536)\n if (!isRecord(config?.adapter) || typeof config.adapter.createSource !== 'function') {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'agent tool adapter must implement createSource',\n })\n }\n const maxSteps = assertPositiveInteger(config.maxSteps ?? 8, 'agent tool maxSteps', 100)\n const maxTaskBytes = assertPositiveInteger(config.maxTaskBytes ?? 65_536, 'agent tool maxTaskBytes', 1_048_576)\n const skill: SkillDefinition = {\n name: id,\n description,\n systemPrompt,\n }\n const tool: ToolDefinition = {\n name: id,\n description,\n schema: {\n type: 'object',\n properties: { task: { type: 'string', description: 'The task or input for the agent.' } },\n required: ['task'],\n additionalProperties: false,\n },\n execute: async (args: Record<string, unknown>) => {\n if (typeof args.task !== 'string' || args.task.trim().length === 0) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: 'agent tool task must be a non-empty string',\n })\n }\n if (new TextEncoder().encode(args.task).byteLength > maxTaskBytes) {\n throw new ToolError({\n code: ErrorCodes.AK_TOOL_INVALID_INPUT,\n message: `agent tool task must not exceed ${maxTaskBytes} bytes`,\n })\n }\n const runtime = createRuntime({ adapter: config.adapter, maxSteps })\n const result = await runtime.run(args.task, { skill })\n return { content: result.content, steps: result.steps }\n },\n }\n return Object.freeze(tool)\n}\n","const HOSTED = 'https://registry.agentskit.io/r'\nconst RAW = 'https://raw.githubusercontent.com/AgentsKit-io/agentskit-registry/main'\nconst REGISTRY_ID = /^[a-z0-9](?:[a-z0-9-]{0,62}[a-z0-9])?$/\n\nexport interface FetchedAgentSkill {\n id: string\n description: string\n systemPrompt: string\n}\n\nexport interface FetchAgentSkillOptions {\n /** Per-request timeout. Default 10000 ms. */\n timeoutMs?: number\n /** Maximum UTF-8 response bytes. Default 131072. */\n maxResponseBytes?: number\n signal?: AbortSignal\n}\n\nconst isRecord = (input: unknown): input is Record<string, unknown> =>\n input !== null && typeof input === 'object' && !Array.isArray(input)\n\nconst boundedString = (input: unknown, maximum: number): string | null => {\n if (typeof input !== 'string' || input.trim().length === 0) return null\n return new TextEncoder().encode(input).byteLength <= maximum ? input.trim() : null\n}\n\nconst readBounded = async (response: Response, maximum: number): Promise<string | null> => {\n const declared = Number(response.headers.get('content-length'))\n if (Number.isFinite(declared) && declared > maximum) return null\n if (!response.body) return ''\n\n const reader = response.body.getReader()\n const decoder = new TextDecoder()\n let bytes = 0\n let text = ''\n while (true) {\n const chunk = await reader.read()\n if (chunk.done) break\n bytes += chunk.value.byteLength\n if (bytes > maximum) {\n await reader.cancel().catch(() => undefined)\n return null\n }\n text += decoder.decode(chunk.value, { stream: true })\n }\n return text + decoder.decode()\n}\n\nconst requestText = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<string | null> => {\n if (options.signal?.aborted) return null\n const controller = new AbortController()\n let resolveAbort: ((value: null) => void) | undefined\n const aborted = new Promise<null>((resolve) => {\n resolveAbort = resolve\n })\n const abort = (): void => {\n controller.abort()\n resolveAbort?.(null)\n }\n options.signal?.addEventListener('abort', abort, { once: true })\n let timer: ReturnType<typeof setTimeout> | undefined\n try {\n const request = (async (): Promise<string | null> => {\n const response = await fetchImpl(url, { signal: controller.signal })\n if (!response.ok) return null\n return readBounded(response, options.maxResponseBytes)\n })().catch(() => null)\n const timeout = new Promise<null>((resolve) => {\n timer = setTimeout(() => {\n controller.abort()\n resolve(null)\n }, options.timeoutMs)\n })\n return await Promise.race([request, timeout, aborted])\n } finally {\n if (timer !== undefined) clearTimeout(timer)\n options.signal?.removeEventListener('abort', abort)\n }\n}\n\nconst requestJson = async (\n url: string,\n fetchImpl: typeof fetch,\n options: Required<Pick<FetchAgentSkillOptions, 'maxResponseBytes' | 'timeoutMs'>> &\n Pick<FetchAgentSkillOptions, 'signal'>,\n): Promise<unknown | null> => {\n const text = await requestText(url, fetchImpl, options)\n if (text === null) return null\n try {\n return JSON.parse(text) as unknown\n } catch {\n return null\n }\n}\n\nexport async function fetchAgentSkill(\n id: string,\n fetchImpl: typeof fetch = globalThis.fetch,\n options: FetchAgentSkillOptions = {},\n): Promise<FetchedAgentSkill | null> {\n if (!REGISTRY_ID.test(id) || typeof fetchImpl !== 'function') return null\n const timeoutMs = options.timeoutMs ?? 10_000\n const maxResponseBytes = options.maxResponseBytes ?? 131_072\n if (\n !Number.isSafeInteger(timeoutMs) || timeoutMs < 1 || timeoutMs > 120_000 ||\n !Number.isSafeInteger(maxResponseBytes) || maxResponseBytes < 1 || maxResponseBytes > 1_048_576\n ) return null\n const bounds = { maxResponseBytes, signal: options.signal, timeoutMs }\n\n const hosted = await requestJson(`${HOSTED}/${id}.json`, fetchImpl, bounds)\n if (isRecord(hosted)) {\n if (hosted.skill === null) return null\n if (isRecord(hosted.skill)) {\n const systemPrompt = boundedString(hosted.skill.systemPrompt, 65_536)\n if (systemPrompt) {\n const description = boundedString(hosted.description, 4096) ?? id\n return Object.freeze({ description, id, systemPrompt })\n }\n }\n }\n\n const meta = await requestJson(`${RAW}/registry/${id}/meta.json`, fetchImpl, bounds)\n if (!isRecord(meta)) return null\n const source = await requestText(`${RAW}/registry/${id}/agent.ts`, fetchImpl, bounds)\n if (!source) return null\n const match = source.match(/systemPrompt:\\s*`((?:\\\\.|[^`\\\\])*)`/)\n if (!match) return null\n const systemPrompt = boundedString(\n match[1].replace(/\\\\`/g, '`').replace(/\\\\\\$\\{/g, '${'),\n 65_536,\n )\n if (!systemPrompt) return null\n return Object.freeze({\n id,\n description: boundedString(meta.description, 4096) ?? id,\n systemPrompt,\n })\n}\n","import { ConfigError, ErrorCodes, type ToolDefinition } from '@agentskit/core'\nimport {\n createMcpServer,\n createStdioTransport,\n type McpServer,\n type McpTransport,\n type StdioLikeProcess,\n} from '@agentskit/tools/mcp'\nimport { assertNonEmptyString, assertToolName, isRecord } from './validation'\n\nexport interface AgentsKitMcpServerOptions {\n /** AgentsKit tools to expose to the MCP host. */\n tools: ToolDefinition[]\n serverInfo?: { name: string; version: string }\n /** Observability hook (call / error / list). Logs must NOT go to stdout — it is the MCP channel. */\n onEvent?: (event: { type: 'call' | 'error' | 'list'; tool?: string; error?: string }) => void\n /**\n * Transport override. Defaults to stdio over the current process (the form\n * Codex / Claude Code / Cursor launch). Inject a custom transport for tests.\n */\n transport?: McpTransport\n}\n\n/**\n * Adapt the current Node process to the `StdioLikeProcess` the transport expects:\n * the server RECEIVES JSON-RPC on stdin and SENDS on stdout.\n */\nexport function processStdio(): StdioLikeProcess {\n return {\n stdin: { write: (chunk: string) => void process.stdout.write(chunk) },\n stdout: {\n on: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.on('data', cb),\n off: (_event: 'data', cb: (chunk: Buffer | string) => void) => void process.stdin.off('data', cb),\n },\n on: (event: 'exit' | 'close', cb: () => void) =>\n void process.on(event === 'close' ? 'beforeExit' : 'exit', cb),\n }\n}\n\n/**\n * Expose a set of AgentsKit tools as an MCP server (over stdio by default), so\n * any MCP host — Codex, Claude Code, Cursor — can call them.\n */\nexport function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer {\n if (!isRecord(options) || !Array.isArray(options.tools)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'MCP server options must include a tools array',\n })\n }\n\n const names = new Set<string>()\n const tools = options.tools.map((tool, index) => {\n if (!isRecord(tool)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tools[${index}] must be a tool definition`,\n })\n }\n const name = assertToolName(tool.name, `tools[${index}].name`)\n if (names.has(name)) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: `tool names must be unique; duplicate \"${name}\"`,\n })\n }\n names.add(name)\n return Object.freeze({ ...tool, name }) as ToolDefinition\n })\n\n const serverInfo = options.serverInfo === undefined\n ? { name: 'agentskit-mcp', version: '1.0.0' }\n : {\n name: assertNonEmptyString(options.serverInfo?.name, 'serverInfo.name', 128),\n version: assertNonEmptyString(options.serverInfo?.version, 'serverInfo.version', 64),\n }\n\n if (\n options.transport !== undefined &&\n (!isRecord(options.transport) ||\n typeof options.transport.send !== 'function' ||\n typeof options.transport.onMessage !== 'function')\n ) {\n throw new ConfigError({\n code: ErrorCodes.AK_CONFIG_INVALID,\n message: 'transport must implement send and onMessage',\n })\n }\n\n const onEvent = options.onEvent === undefined\n ? undefined\n : (event: Parameters<NonNullable<AgentsKitMcpServerOptions['onEvent']>>[0]): void => {\n try {\n const delivered = (options.onEvent as (value: typeof event) => unknown)(Object.freeze({ ...event }))\n if (delivered !== null && (typeof delivered === 'object' || typeof delivered === 'function')) {\n const then = (delivered as { then?: unknown }).then\n if (typeof then === 'function') void Promise.resolve(delivered).catch(() => undefined)\n }\n } catch {\n // Observation must not alter protocol behavior.\n }\n }\n\n const transport = options.transport ?? createStdioTransport(processStdio())\n return createMcpServer({\n transport,\n tools,\n serverInfo,\n onEvent,\n })\n}\n\nexport { createAgentTool, type AgentToolConfig } from './agent-tool'\nexport {\n fetchAgentSkill,\n type FetchedAgentSkill,\n type FetchAgentSkillOptions,\n} from './registry-fetch'\nexport type { McpServer, McpTransport } from '@agentskit/tools/mcp'\n"]}