@agentskit/mcp 0.3.3 → 0.3.4
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.
- package/README.md +20 -2
- package/dist/bin.cjs +1 -1
- package/dist/bin.cjs.map +1 -1
- package/dist/bin.js +2 -2
- package/dist/bin.js.map +1 -1
- package/dist/{chunk-CKAUENP5.js → chunk-5K3ZAG4X.js} +2 -2
- package/dist/{chunk-CKAUENP5.js.map → chunk-5K3ZAG4X.js.map} +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/index.js +1 -1
- package/package.json +5 -3
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@ Profile: <code>major-package</code>
|
|
|
9
9
|
[](../../docs/STABILITY.md)
|
|
10
10
|
|
|
11
11
|
Expose AgentsKit tools as an [MCP](https://modelcontextprotocol.io) server — use
|
|
12
|
-
them from Claude
|
|
12
|
+
them from Codex, Claude Code, Cursor, or any MCP host.
|
|
13
13
|
|
|
14
14
|
|
|
15
15
|
## Verified proof
|
|
@@ -34,7 +34,7 @@ Docs: [package guide](https://www.agentskit.io/docs/packages/mcp) · [agent hand
|
|
|
34
34
|
npx @agentskit/mcp --tools fetch,search
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
Then point your MCP host at the command. Example (
|
|
37
|
+
Then point your MCP host at the command. Example (generic JSON config):
|
|
38
38
|
|
|
39
39
|
```json
|
|
40
40
|
{
|
|
@@ -44,6 +44,24 @@ Then point your MCP host at the command. Example (Claude Desktop config):
|
|
|
44
44
|
}
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
+
## Coding-agent hosts
|
|
48
|
+
|
|
49
|
+
Every host launches the same safe STDIO command. Only its configuration wrapper
|
|
50
|
+
changes:
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
# Codex
|
|
54
|
+
codex mcp add agentskit -- npx -y @agentskit/mcp@0.3.3 --tools fetch,search
|
|
55
|
+
|
|
56
|
+
# Claude Code (shared project configuration)
|
|
57
|
+
claude mcp add --scope project --transport stdio agentskit -- npx -y @agentskit/mcp@0.3.3 --tools fetch,search
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Cursor uses the same `command` and `args` in `.cursor/mcp.json`. See the
|
|
61
|
+
[verified coding-agent recipe](../../apps/docs-next/content/docs/reference/recipes/coding-agent-mcp.mdx)
|
|
62
|
+
for complete Codex, Claude Code, Cursor, and generic MCP configurations plus the
|
|
63
|
+
offline protocol proof.
|
|
64
|
+
|
|
47
65
|
## Flags
|
|
48
66
|
|
|
49
67
|
| Flag | Effect |
|
package/dist/bin.cjs
CHANGED
|
@@ -347,7 +347,7 @@ var DEFAULT_MODEL = {
|
|
|
347
347
|
deepseek: "deepseek-chat",
|
|
348
348
|
gemini: "gemini-2.0-flash",
|
|
349
349
|
grok: "grok-2",
|
|
350
|
-
groq: "
|
|
350
|
+
groq: "openai/gpt-oss-120b",
|
|
351
351
|
mistral: "mistral-large-latest",
|
|
352
352
|
ollama: "llama3",
|
|
353
353
|
openai: "gpt-4o"
|
package/dist/bin.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/validation.ts","../src/agent-tool.ts","../src/registry-fetch.ts","../src/index.ts","../src/cli.ts","../src/bin.ts"],"names":["ConfigError","ErrorCodes","ToolError","runtime","createRuntime","isRecord","systemPrompt","createStdioTransport","createMcpServer","anthropic","cerebras","cohere","deepseek","fireworks","gemini","grok","groq","huggingface","kimi","llamacpp","lmstudio","mistral","openai","openrouter","qwen","together","vllm","ollama","warn","tools","fetchUrl","webSearch","filesystem","sqliteQueryTool","shell","dispatchFromCatalog"],"mappings":"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","file":"bin.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 * Claude Desktop / Cursor / Windsurf 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 — Claude Desktop, Cursor, Windsurf — 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","import type { AdapterFactory, ToolDefinition } from '@agentskit/core'\nimport {\n anthropic,\n cerebras,\n cohere,\n deepseek,\n fireworks,\n gemini,\n grok,\n groq,\n huggingface,\n kimi,\n llamacpp,\n lmstudio,\n mistral,\n ollama,\n openai,\n openrouter,\n qwen,\n together,\n vllm,\n} from '@agentskit/adapters'\nimport { dispatchFromCatalog } from '@agentskit/adapters/catalog'\nimport { fetchUrl, filesystem, shell, sqliteQueryTool, webSearch } from '@agentskit/tools'\nimport type { McpServer } from '@agentskit/tools/mcp'\nimport { createAgentTool } from './agent-tool'\nimport { createAgentsKitMcpServer } from './index'\nimport { fetchAgentSkill, type FetchedAgentSkill } from './registry-fetch'\n\nconst VALUE_FLAGS = new Set([\n '--agents', '--api-key', '--base-url', '--fs-root', '--max-steps', '--model',\n '--provider', '--sqlite', '--tools',\n])\nconst BOOLEAN_FLAGS = new Set(['--allow-shell', '--help'])\nconst TOOL_IDS = new Set(['fetch', 'filesystem', 'search', 'shell', 'sqlite'])\n\nexport interface McpCliOptions {\n agents: string[]\n allowShell: boolean\n apiKey?: string\n baseUrl?: string\n fsRoot?: string\n help: boolean\n maxSteps: number\n model?: string\n provider: string\n sqlite?: string\n tools: string[]\n}\n\nexport type McpCliParseResult =\n | { message: string; status: 'rejected' }\n | { options: McpCliOptions; status: 'parsed' }\n\nconst csv = (input: string): string[] =>\n [...new Set(input.split(',').map((value) => value.trim()).filter(Boolean))]\n\nexport const parseMcpCliArgs = (argv: readonly string[]): McpCliParseResult => {\n const values = new Map<string, string>()\n const booleans = new Set<string>()\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]!\n if (BOOLEAN_FLAGS.has(argument)) {\n if (booleans.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n booleans.add(argument)\n continue\n }\n if (!VALUE_FLAGS.has(argument)) return { message: `unknown argument: ${argument}`, status: 'rejected' }\n if (values.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n return { message: `missing value for ${argument}`, status: 'rejected' }\n }\n values.set(argument, value)\n index += 1\n }\n\n const tools = values.has('--tools') ? csv(values.get('--tools')!) : ['fetch', 'search']\n const unknownTool = tools.find((tool) => !TOOL_IDS.has(tool))\n if (unknownTool) return { message: `unknown tool: ${unknownTool}`, status: 'rejected' }\n const agents = values.has('--agents') ? csv(values.get('--agents')!) : []\n const maxStepsText = values.get('--max-steps') ?? '8'\n const maxSteps = Number(maxStepsText)\n if (!Number.isSafeInteger(maxSteps) || maxSteps < 1 || maxSteps > 100) {\n return { message: '--max-steps must be a safe integer between 1 and 100', status: 'rejected' }\n }\n\n return {\n options: {\n agents,\n allowShell: booleans.has('--allow-shell'),\n apiKey: values.get('--api-key'),\n baseUrl: values.get('--base-url'),\n fsRoot: values.get('--fs-root'),\n help: booleans.has('--help'),\n maxSteps,\n model: values.get('--model'),\n provider: (values.get('--provider') ?? 'openai').toLowerCase(),\n sqlite: values.get('--sqlite'),\n tools,\n },\n status: 'parsed',\n }\n}\n\ntype KeyedFactory = (config: { apiKey: string; baseUrl?: string; model: string }) => AdapterFactory\ntype LocalFactory = (config: { baseUrl?: string; model: string }) => AdapterFactory\n\nconst KEYED: Record<string, KeyedFactory> = {\n anthropic, cerebras, cohere, deepseek, fireworks, gemini, grok, groq,\n huggingface, kimi, llamacpp, lmstudio, mistral, openai, openrouter, qwen,\n together, vllm,\n}\nconst LOCAL: Record<string, LocalFactory> = { ollama }\nconst LOCAL_COMPAT = new Set(['llamacpp', 'lmstudio', 'vllm'])\nconst DEFAULT_MODEL: Record<string, string> = {\n anthropic: 'claude-sonnet-4-6',\n deepseek: 'deepseek-chat',\n gemini: 'gemini-2.0-flash',\n grok: 'grok-2',\n groq: 'llama-3.3-70b-versatile',\n mistral: 'mistral-large-latest',\n ollama: 'llama3',\n openai: 'gpt-4o',\n}\n\nexport interface McpCliDependencies {\n createServer?: typeof createAgentsKitMcpServer\n env?: Readonly<Record<string, string | undefined>>\n fetchSkill?: (id: string) => Promise<FetchedAgentSkill | null>\n warn?: (message: string) => void\n}\n\nexport type McpCliRunResult =\n | { exitCode: 0; server: McpServer; status: 'started'; toolNames: string[] }\n | { exitCode: 0; status: 'help' }\n | { exitCode: 1; status: 'rejected' }\n\nexport const MCP_CLI_HELP = [\n 'Usage: agentskit-mcp [options]',\n '--tools <fetch,search,filesystem,shell,sqlite>',\n '--agents <registry-ids> --provider <provider> --model <model>',\n '--fs-root <dir> --sqlite <file> --allow-shell',\n].join('\\n')\n\nconst buildPrimitiveTools = (options: McpCliOptions, warn: (message: string) => void): ToolDefinition[] => {\n const tools: ToolDefinition[] = []\n if (options.tools.includes('fetch')) tools.push(fetchUrl())\n if (options.tools.includes('search')) tools.push(webSearch())\n if (options.tools.includes('filesystem')) {\n if (options.fsRoot) tools.push(...filesystem({ basePath: options.fsRoot }))\n else warn('skipping \"filesystem\": pass --fs-root <dir>')\n }\n if (options.tools.includes('sqlite')) {\n if (options.sqlite) tools.push(sqliteQueryTool({ path: options.sqlite }))\n else warn('skipping \"sqlite\": pass --sqlite <file>')\n }\n if (options.tools.includes('shell')) {\n if (options.allowShell) tools.push(shell())\n else warn('skipping \"shell\": pass --allow-shell (runs commands)')\n }\n return tools\n}\n\nconst resolveAdapter = (\n options: McpCliOptions,\n env: Readonly<Record<string, string | undefined>>,\n warn: (message: string) => void,\n): AdapterFactory | null => {\n const model = options.model ?? DEFAULT_MODEL[options.provider]\n if (!model) {\n warn(`--agents needs a model for \"${options.provider}\": pass --model`)\n return null\n }\n const local = LOCAL[options.provider]\n if (local) return local({ baseUrl: options.baseUrl, model })\n\n const envName = `${options.provider.toUpperCase().replace(/-/g, '_')}_API_KEY`\n const apiKey = options.apiKey ?? env[envName] ?? (LOCAL_COMPAT.has(options.provider) ? 'local' : undefined)\n if (!apiKey) {\n warn(`--agents needs a key for \"${options.provider}\": pass --api-key or set ${envName}`)\n return null\n }\n const keyed = KEYED[options.provider]\n if (keyed) return keyed({ apiKey, baseUrl: options.baseUrl, model })\n try {\n return dispatchFromCatalog({ apiKey, baseUrl: options.baseUrl, model, provider: options.provider })\n } catch {\n warn(`unknown or incompatible provider \"${options.provider}\"`)\n return null\n }\n}\n\nexport const runMcpCli = async (\n argv: readonly string[],\n dependencies: McpCliDependencies = {},\n): Promise<McpCliRunResult> => {\n const warn = dependencies.warn ?? (() => undefined)\n const parsed = parseMcpCliArgs(argv)\n if (parsed.status === 'rejected') {\n warn(parsed.message)\n return { exitCode: 1, status: 'rejected' }\n }\n if (parsed.options.help) {\n warn(MCP_CLI_HELP)\n return { exitCode: 0, status: 'help' }\n }\n\n const tools = buildPrimitiveTools(parsed.options, warn)\n if (parsed.options.agents.length > 0) {\n const adapter = resolveAdapter(parsed.options, dependencies.env ?? process.env, warn)\n if (adapter) {\n const fetchSkill = dependencies.fetchSkill ?? fetchAgentSkill\n for (const id of parsed.options.agents) {\n const skill = await fetchSkill(id).catch(() => null)\n if (!skill) {\n warn(`skipping agent \"${id}\": not found or not runnable`)\n continue\n }\n tools.push(createAgentTool({ ...skill, adapter, maxSteps: parsed.options.maxSteps }))\n }\n }\n }\n\n if (tools.length === 0) {\n warn('no tools or agents enabled — nothing to serve')\n return { exitCode: 1, status: 'rejected' }\n }\n const seen = new Set<string>()\n const duplicate = tools.find((tool) => {\n if (seen.has(tool.name)) return true\n seen.add(tool.name)\n return false\n })\n if (duplicate) {\n warn(`duplicate tool name: ${duplicate.name}`)\n return { exitCode: 1, status: 'rejected' }\n }\n const createServer = dependencies.createServer ?? createAgentsKitMcpServer\n let server: McpServer\n try {\n server = createServer({\n tools,\n onEvent: (event) => {\n if (event.type === 'error') warn(`tool error (${event.tool ?? 'unknown'}): ${event.error ?? 'unknown'}`)\n },\n })\n } catch {\n warn('failed to start MCP server')\n return { exitCode: 1, status: 'rejected' }\n }\n const toolNames = tools.map((tool) => tool.name)\n warn(`serving ${toolNames.length} item(s) over stdio (${toolNames.join(', ')})`)\n return { exitCode: 0, server, status: 'started', toolNames }\n}\n","#!/usr/bin/env node\nimport { runMcpCli } from './cli'\n\nconst warn = (message: string): void => {\n process.stderr.write(`agentskit-mcp: ${message}\\n`)\n}\n\nvoid runMcpCli(process.argv.slice(2), { warn }).then((result) => {\n process.exitCode = result.exitCode\n}).catch(() => {\n warn('unexpected startup failure')\n process.exitCode = 1\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/validation.ts","../src/agent-tool.ts","../src/registry-fetch.ts","../src/index.ts","../src/cli.ts","../src/bin.ts"],"names":["ConfigError","ErrorCodes","ToolError","runtime","createRuntime","isRecord","systemPrompt","createStdioTransport","createMcpServer","anthropic","cerebras","cohere","deepseek","fireworks","gemini","grok","groq","huggingface","kimi","llamacpp","lmstudio","mistral","openai","openrouter","qwen","together","vllm","ollama","warn","tools","fetchUrl","webSearch","filesystem","sqliteQueryTool","shell","dispatchFromCatalog"],"mappings":"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","file":"bin.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","import type { AdapterFactory, ToolDefinition } from '@agentskit/core'\nimport {\n anthropic,\n cerebras,\n cohere,\n deepseek,\n fireworks,\n gemini,\n grok,\n groq,\n huggingface,\n kimi,\n llamacpp,\n lmstudio,\n mistral,\n ollama,\n openai,\n openrouter,\n qwen,\n together,\n vllm,\n} from '@agentskit/adapters'\nimport { dispatchFromCatalog } from '@agentskit/adapters/catalog'\nimport { fetchUrl, filesystem, shell, sqliteQueryTool, webSearch } from '@agentskit/tools'\nimport type { McpServer } from '@agentskit/tools/mcp'\nimport { createAgentTool } from './agent-tool'\nimport { createAgentsKitMcpServer } from './index'\nimport { fetchAgentSkill, type FetchedAgentSkill } from './registry-fetch'\n\nconst VALUE_FLAGS = new Set([\n '--agents', '--api-key', '--base-url', '--fs-root', '--max-steps', '--model',\n '--provider', '--sqlite', '--tools',\n])\nconst BOOLEAN_FLAGS = new Set(['--allow-shell', '--help'])\nconst TOOL_IDS = new Set(['fetch', 'filesystem', 'search', 'shell', 'sqlite'])\n\nexport interface McpCliOptions {\n agents: string[]\n allowShell: boolean\n apiKey?: string\n baseUrl?: string\n fsRoot?: string\n help: boolean\n maxSteps: number\n model?: string\n provider: string\n sqlite?: string\n tools: string[]\n}\n\nexport type McpCliParseResult =\n | { message: string; status: 'rejected' }\n | { options: McpCliOptions; status: 'parsed' }\n\nconst csv = (input: string): string[] =>\n [...new Set(input.split(',').map((value) => value.trim()).filter(Boolean))]\n\nexport const parseMcpCliArgs = (argv: readonly string[]): McpCliParseResult => {\n const values = new Map<string, string>()\n const booleans = new Set<string>()\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]!\n if (BOOLEAN_FLAGS.has(argument)) {\n if (booleans.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n booleans.add(argument)\n continue\n }\n if (!VALUE_FLAGS.has(argument)) return { message: `unknown argument: ${argument}`, status: 'rejected' }\n if (values.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n return { message: `missing value for ${argument}`, status: 'rejected' }\n }\n values.set(argument, value)\n index += 1\n }\n\n const tools = values.has('--tools') ? csv(values.get('--tools')!) : ['fetch', 'search']\n const unknownTool = tools.find((tool) => !TOOL_IDS.has(tool))\n if (unknownTool) return { message: `unknown tool: ${unknownTool}`, status: 'rejected' }\n const agents = values.has('--agents') ? csv(values.get('--agents')!) : []\n const maxStepsText = values.get('--max-steps') ?? '8'\n const maxSteps = Number(maxStepsText)\n if (!Number.isSafeInteger(maxSteps) || maxSteps < 1 || maxSteps > 100) {\n return { message: '--max-steps must be a safe integer between 1 and 100', status: 'rejected' }\n }\n\n return {\n options: {\n agents,\n allowShell: booleans.has('--allow-shell'),\n apiKey: values.get('--api-key'),\n baseUrl: values.get('--base-url'),\n fsRoot: values.get('--fs-root'),\n help: booleans.has('--help'),\n maxSteps,\n model: values.get('--model'),\n provider: (values.get('--provider') ?? 'openai').toLowerCase(),\n sqlite: values.get('--sqlite'),\n tools,\n },\n status: 'parsed',\n }\n}\n\ntype KeyedFactory = (config: { apiKey: string; baseUrl?: string; model: string }) => AdapterFactory\ntype LocalFactory = (config: { baseUrl?: string; model: string }) => AdapterFactory\n\nconst KEYED: Record<string, KeyedFactory> = {\n anthropic, cerebras, cohere, deepseek, fireworks, gemini, grok, groq,\n huggingface, kimi, llamacpp, lmstudio, mistral, openai, openrouter, qwen,\n together, vllm,\n}\nconst LOCAL: Record<string, LocalFactory> = { ollama }\nconst LOCAL_COMPAT = new Set(['llamacpp', 'lmstudio', 'vllm'])\nconst DEFAULT_MODEL: Record<string, string> = {\n anthropic: 'claude-sonnet-4-6',\n deepseek: 'deepseek-chat',\n gemini: 'gemini-2.0-flash',\n grok: 'grok-2',\n groq: 'openai/gpt-oss-120b',\n mistral: 'mistral-large-latest',\n ollama: 'llama3',\n openai: 'gpt-4o',\n}\n\nexport interface McpCliDependencies {\n createServer?: typeof createAgentsKitMcpServer\n env?: Readonly<Record<string, string | undefined>>\n fetchSkill?: (id: string) => Promise<FetchedAgentSkill | null>\n warn?: (message: string) => void\n}\n\nexport type McpCliRunResult =\n | { exitCode: 0; server: McpServer; status: 'started'; toolNames: string[] }\n | { exitCode: 0; status: 'help' }\n | { exitCode: 1; status: 'rejected' }\n\nexport const MCP_CLI_HELP = [\n 'Usage: agentskit-mcp [options]',\n '--tools <fetch,search,filesystem,shell,sqlite>',\n '--agents <registry-ids> --provider <provider> --model <model>',\n '--fs-root <dir> --sqlite <file> --allow-shell',\n].join('\\n')\n\nconst buildPrimitiveTools = (options: McpCliOptions, warn: (message: string) => void): ToolDefinition[] => {\n const tools: ToolDefinition[] = []\n if (options.tools.includes('fetch')) tools.push(fetchUrl())\n if (options.tools.includes('search')) tools.push(webSearch())\n if (options.tools.includes('filesystem')) {\n if (options.fsRoot) tools.push(...filesystem({ basePath: options.fsRoot }))\n else warn('skipping \"filesystem\": pass --fs-root <dir>')\n }\n if (options.tools.includes('sqlite')) {\n if (options.sqlite) tools.push(sqliteQueryTool({ path: options.sqlite }))\n else warn('skipping \"sqlite\": pass --sqlite <file>')\n }\n if (options.tools.includes('shell')) {\n if (options.allowShell) tools.push(shell())\n else warn('skipping \"shell\": pass --allow-shell (runs commands)')\n }\n return tools\n}\n\nconst resolveAdapter = (\n options: McpCliOptions,\n env: Readonly<Record<string, string | undefined>>,\n warn: (message: string) => void,\n): AdapterFactory | null => {\n const model = options.model ?? DEFAULT_MODEL[options.provider]\n if (!model) {\n warn(`--agents needs a model for \"${options.provider}\": pass --model`)\n return null\n }\n const local = LOCAL[options.provider]\n if (local) return local({ baseUrl: options.baseUrl, model })\n\n const envName = `${options.provider.toUpperCase().replace(/-/g, '_')}_API_KEY`\n const apiKey = options.apiKey ?? env[envName] ?? (LOCAL_COMPAT.has(options.provider) ? 'local' : undefined)\n if (!apiKey) {\n warn(`--agents needs a key for \"${options.provider}\": pass --api-key or set ${envName}`)\n return null\n }\n const keyed = KEYED[options.provider]\n if (keyed) return keyed({ apiKey, baseUrl: options.baseUrl, model })\n try {\n return dispatchFromCatalog({ apiKey, baseUrl: options.baseUrl, model, provider: options.provider })\n } catch {\n warn(`unknown or incompatible provider \"${options.provider}\"`)\n return null\n }\n}\n\nexport const runMcpCli = async (\n argv: readonly string[],\n dependencies: McpCliDependencies = {},\n): Promise<McpCliRunResult> => {\n const warn = dependencies.warn ?? (() => undefined)\n const parsed = parseMcpCliArgs(argv)\n if (parsed.status === 'rejected') {\n warn(parsed.message)\n return { exitCode: 1, status: 'rejected' }\n }\n if (parsed.options.help) {\n warn(MCP_CLI_HELP)\n return { exitCode: 0, status: 'help' }\n }\n\n const tools = buildPrimitiveTools(parsed.options, warn)\n if (parsed.options.agents.length > 0) {\n const adapter = resolveAdapter(parsed.options, dependencies.env ?? process.env, warn)\n if (adapter) {\n const fetchSkill = dependencies.fetchSkill ?? fetchAgentSkill\n for (const id of parsed.options.agents) {\n const skill = await fetchSkill(id).catch(() => null)\n if (!skill) {\n warn(`skipping agent \"${id}\": not found or not runnable`)\n continue\n }\n tools.push(createAgentTool({ ...skill, adapter, maxSteps: parsed.options.maxSteps }))\n }\n }\n }\n\n if (tools.length === 0) {\n warn('no tools or agents enabled — nothing to serve')\n return { exitCode: 1, status: 'rejected' }\n }\n const seen = new Set<string>()\n const duplicate = tools.find((tool) => {\n if (seen.has(tool.name)) return true\n seen.add(tool.name)\n return false\n })\n if (duplicate) {\n warn(`duplicate tool name: ${duplicate.name}`)\n return { exitCode: 1, status: 'rejected' }\n }\n const createServer = dependencies.createServer ?? createAgentsKitMcpServer\n let server: McpServer\n try {\n server = createServer({\n tools,\n onEvent: (event) => {\n if (event.type === 'error') warn(`tool error (${event.tool ?? 'unknown'}): ${event.error ?? 'unknown'}`)\n },\n })\n } catch {\n warn('failed to start MCP server')\n return { exitCode: 1, status: 'rejected' }\n }\n const toolNames = tools.map((tool) => tool.name)\n warn(`serving ${toolNames.length} item(s) over stdio (${toolNames.join(', ')})`)\n return { exitCode: 0, server, status: 'started', toolNames }\n}\n","#!/usr/bin/env node\nimport { runMcpCli } from './cli'\n\nconst warn = (message: string): void => {\n process.stderr.write(`agentskit-mcp: ${message}\\n`)\n}\n\nvoid runMcpCli(process.argv.slice(2), { warn }).then((result) => {\n process.exitCode = result.exitCode\n}).catch(() => {\n warn('unexpected startup failure')\n process.exitCode = 1\n})\n"]}
|
package/dist/bin.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { fetchAgentSkill, createAgentTool, createAgentsKitMcpServer } from './chunk-
|
|
2
|
+
import { fetchAgentSkill, createAgentTool, createAgentsKitMcpServer } from './chunk-5K3ZAG4X.js';
|
|
3
3
|
import { ollama, vllm, together, qwen, openrouter, openai, mistral, lmstudio, llamacpp, kimi, huggingface, groq, grok, gemini, fireworks, deepseek, cohere, cerebras, anthropic } from '@agentskit/adapters';
|
|
4
4
|
import { dispatchFromCatalog } from '@agentskit/adapters/catalog';
|
|
5
5
|
import { fetchUrl, webSearch, filesystem, sqliteQueryTool, shell } from '@agentskit/tools';
|
|
@@ -90,7 +90,7 @@ var DEFAULT_MODEL = {
|
|
|
90
90
|
deepseek: "deepseek-chat",
|
|
91
91
|
gemini: "gemini-2.0-flash",
|
|
92
92
|
grok: "grok-2",
|
|
93
|
-
groq: "
|
|
93
|
+
groq: "openai/gpt-oss-120b",
|
|
94
94
|
mistral: "mistral-large-latest",
|
|
95
95
|
ollama: "llama3",
|
|
96
96
|
openai: "gpt-4o"
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/bin.ts"],"names":["warn"],"mappings":"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","file":"bin.js","sourcesContent":["import type { AdapterFactory, ToolDefinition } from '@agentskit/core'\nimport {\n anthropic,\n cerebras,\n cohere,\n deepseek,\n fireworks,\n gemini,\n grok,\n groq,\n huggingface,\n kimi,\n llamacpp,\n lmstudio,\n mistral,\n ollama,\n openai,\n openrouter,\n qwen,\n together,\n vllm,\n} from '@agentskit/adapters'\nimport { dispatchFromCatalog } from '@agentskit/adapters/catalog'\nimport { fetchUrl, filesystem, shell, sqliteQueryTool, webSearch } from '@agentskit/tools'\nimport type { McpServer } from '@agentskit/tools/mcp'\nimport { createAgentTool } from './agent-tool'\nimport { createAgentsKitMcpServer } from './index'\nimport { fetchAgentSkill, type FetchedAgentSkill } from './registry-fetch'\n\nconst VALUE_FLAGS = new Set([\n '--agents', '--api-key', '--base-url', '--fs-root', '--max-steps', '--model',\n '--provider', '--sqlite', '--tools',\n])\nconst BOOLEAN_FLAGS = new Set(['--allow-shell', '--help'])\nconst TOOL_IDS = new Set(['fetch', 'filesystem', 'search', 'shell', 'sqlite'])\n\nexport interface McpCliOptions {\n agents: string[]\n allowShell: boolean\n apiKey?: string\n baseUrl?: string\n fsRoot?: string\n help: boolean\n maxSteps: number\n model?: string\n provider: string\n sqlite?: string\n tools: string[]\n}\n\nexport type McpCliParseResult =\n | { message: string; status: 'rejected' }\n | { options: McpCliOptions; status: 'parsed' }\n\nconst csv = (input: string): string[] =>\n [...new Set(input.split(',').map((value) => value.trim()).filter(Boolean))]\n\nexport const parseMcpCliArgs = (argv: readonly string[]): McpCliParseResult => {\n const values = new Map<string, string>()\n const booleans = new Set<string>()\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]!\n if (BOOLEAN_FLAGS.has(argument)) {\n if (booleans.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n booleans.add(argument)\n continue\n }\n if (!VALUE_FLAGS.has(argument)) return { message: `unknown argument: ${argument}`, status: 'rejected' }\n if (values.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n return { message: `missing value for ${argument}`, status: 'rejected' }\n }\n values.set(argument, value)\n index += 1\n }\n\n const tools = values.has('--tools') ? csv(values.get('--tools')!) : ['fetch', 'search']\n const unknownTool = tools.find((tool) => !TOOL_IDS.has(tool))\n if (unknownTool) return { message: `unknown tool: ${unknownTool}`, status: 'rejected' }\n const agents = values.has('--agents') ? csv(values.get('--agents')!) : []\n const maxStepsText = values.get('--max-steps') ?? '8'\n const maxSteps = Number(maxStepsText)\n if (!Number.isSafeInteger(maxSteps) || maxSteps < 1 || maxSteps > 100) {\n return { message: '--max-steps must be a safe integer between 1 and 100', status: 'rejected' }\n }\n\n return {\n options: {\n agents,\n allowShell: booleans.has('--allow-shell'),\n apiKey: values.get('--api-key'),\n baseUrl: values.get('--base-url'),\n fsRoot: values.get('--fs-root'),\n help: booleans.has('--help'),\n maxSteps,\n model: values.get('--model'),\n provider: (values.get('--provider') ?? 'openai').toLowerCase(),\n sqlite: values.get('--sqlite'),\n tools,\n },\n status: 'parsed',\n }\n}\n\ntype KeyedFactory = (config: { apiKey: string; baseUrl?: string; model: string }) => AdapterFactory\ntype LocalFactory = (config: { baseUrl?: string; model: string }) => AdapterFactory\n\nconst KEYED: Record<string, KeyedFactory> = {\n anthropic, cerebras, cohere, deepseek, fireworks, gemini, grok, groq,\n huggingface, kimi, llamacpp, lmstudio, mistral, openai, openrouter, qwen,\n together, vllm,\n}\nconst LOCAL: Record<string, LocalFactory> = { ollama }\nconst LOCAL_COMPAT = new Set(['llamacpp', 'lmstudio', 'vllm'])\nconst DEFAULT_MODEL: Record<string, string> = {\n anthropic: 'claude-sonnet-4-6',\n deepseek: 'deepseek-chat',\n gemini: 'gemini-2.0-flash',\n grok: 'grok-2',\n groq: 'llama-3.3-70b-versatile',\n mistral: 'mistral-large-latest',\n ollama: 'llama3',\n openai: 'gpt-4o',\n}\n\nexport interface McpCliDependencies {\n createServer?: typeof createAgentsKitMcpServer\n env?: Readonly<Record<string, string | undefined>>\n fetchSkill?: (id: string) => Promise<FetchedAgentSkill | null>\n warn?: (message: string) => void\n}\n\nexport type McpCliRunResult =\n | { exitCode: 0; server: McpServer; status: 'started'; toolNames: string[] }\n | { exitCode: 0; status: 'help' }\n | { exitCode: 1; status: 'rejected' }\n\nexport const MCP_CLI_HELP = [\n 'Usage: agentskit-mcp [options]',\n '--tools <fetch,search,filesystem,shell,sqlite>',\n '--agents <registry-ids> --provider <provider> --model <model>',\n '--fs-root <dir> --sqlite <file> --allow-shell',\n].join('\\n')\n\nconst buildPrimitiveTools = (options: McpCliOptions, warn: (message: string) => void): ToolDefinition[] => {\n const tools: ToolDefinition[] = []\n if (options.tools.includes('fetch')) tools.push(fetchUrl())\n if (options.tools.includes('search')) tools.push(webSearch())\n if (options.tools.includes('filesystem')) {\n if (options.fsRoot) tools.push(...filesystem({ basePath: options.fsRoot }))\n else warn('skipping \"filesystem\": pass --fs-root <dir>')\n }\n if (options.tools.includes('sqlite')) {\n if (options.sqlite) tools.push(sqliteQueryTool({ path: options.sqlite }))\n else warn('skipping \"sqlite\": pass --sqlite <file>')\n }\n if (options.tools.includes('shell')) {\n if (options.allowShell) tools.push(shell())\n else warn('skipping \"shell\": pass --allow-shell (runs commands)')\n }\n return tools\n}\n\nconst resolveAdapter = (\n options: McpCliOptions,\n env: Readonly<Record<string, string | undefined>>,\n warn: (message: string) => void,\n): AdapterFactory | null => {\n const model = options.model ?? DEFAULT_MODEL[options.provider]\n if (!model) {\n warn(`--agents needs a model for \"${options.provider}\": pass --model`)\n return null\n }\n const local = LOCAL[options.provider]\n if (local) return local({ baseUrl: options.baseUrl, model })\n\n const envName = `${options.provider.toUpperCase().replace(/-/g, '_')}_API_KEY`\n const apiKey = options.apiKey ?? env[envName] ?? (LOCAL_COMPAT.has(options.provider) ? 'local' : undefined)\n if (!apiKey) {\n warn(`--agents needs a key for \"${options.provider}\": pass --api-key or set ${envName}`)\n return null\n }\n const keyed = KEYED[options.provider]\n if (keyed) return keyed({ apiKey, baseUrl: options.baseUrl, model })\n try {\n return dispatchFromCatalog({ apiKey, baseUrl: options.baseUrl, model, provider: options.provider })\n } catch {\n warn(`unknown or incompatible provider \"${options.provider}\"`)\n return null\n }\n}\n\nexport const runMcpCli = async (\n argv: readonly string[],\n dependencies: McpCliDependencies = {},\n): Promise<McpCliRunResult> => {\n const warn = dependencies.warn ?? (() => undefined)\n const parsed = parseMcpCliArgs(argv)\n if (parsed.status === 'rejected') {\n warn(parsed.message)\n return { exitCode: 1, status: 'rejected' }\n }\n if (parsed.options.help) {\n warn(MCP_CLI_HELP)\n return { exitCode: 0, status: 'help' }\n }\n\n const tools = buildPrimitiveTools(parsed.options, warn)\n if (parsed.options.agents.length > 0) {\n const adapter = resolveAdapter(parsed.options, dependencies.env ?? process.env, warn)\n if (adapter) {\n const fetchSkill = dependencies.fetchSkill ?? fetchAgentSkill\n for (const id of parsed.options.agents) {\n const skill = await fetchSkill(id).catch(() => null)\n if (!skill) {\n warn(`skipping agent \"${id}\": not found or not runnable`)\n continue\n }\n tools.push(createAgentTool({ ...skill, adapter, maxSteps: parsed.options.maxSteps }))\n }\n }\n }\n\n if (tools.length === 0) {\n warn('no tools or agents enabled — nothing to serve')\n return { exitCode: 1, status: 'rejected' }\n }\n const seen = new Set<string>()\n const duplicate = tools.find((tool) => {\n if (seen.has(tool.name)) return true\n seen.add(tool.name)\n return false\n })\n if (duplicate) {\n warn(`duplicate tool name: ${duplicate.name}`)\n return { exitCode: 1, status: 'rejected' }\n }\n const createServer = dependencies.createServer ?? createAgentsKitMcpServer\n let server: McpServer\n try {\n server = createServer({\n tools,\n onEvent: (event) => {\n if (event.type === 'error') warn(`tool error (${event.tool ?? 'unknown'}): ${event.error ?? 'unknown'}`)\n },\n })\n } catch {\n warn('failed to start MCP server')\n return { exitCode: 1, status: 'rejected' }\n }\n const toolNames = tools.map((tool) => tool.name)\n warn(`serving ${toolNames.length} item(s) over stdio (${toolNames.join(', ')})`)\n return { exitCode: 0, server, status: 'started', toolNames }\n}\n","#!/usr/bin/env node\nimport { runMcpCli } from './cli'\n\nconst warn = (message: string): void => {\n process.stderr.write(`agentskit-mcp: ${message}\\n`)\n}\n\nvoid runMcpCli(process.argv.slice(2), { warn }).then((result) => {\n process.exitCode = result.exitCode\n}).catch(() => {\n warn('unexpected startup failure')\n process.exitCode = 1\n})\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/bin.ts"],"names":["warn"],"mappings":"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","file":"bin.js","sourcesContent":["import type { AdapterFactory, ToolDefinition } from '@agentskit/core'\nimport {\n anthropic,\n cerebras,\n cohere,\n deepseek,\n fireworks,\n gemini,\n grok,\n groq,\n huggingface,\n kimi,\n llamacpp,\n lmstudio,\n mistral,\n ollama,\n openai,\n openrouter,\n qwen,\n together,\n vllm,\n} from '@agentskit/adapters'\nimport { dispatchFromCatalog } from '@agentskit/adapters/catalog'\nimport { fetchUrl, filesystem, shell, sqliteQueryTool, webSearch } from '@agentskit/tools'\nimport type { McpServer } from '@agentskit/tools/mcp'\nimport { createAgentTool } from './agent-tool'\nimport { createAgentsKitMcpServer } from './index'\nimport { fetchAgentSkill, type FetchedAgentSkill } from './registry-fetch'\n\nconst VALUE_FLAGS = new Set([\n '--agents', '--api-key', '--base-url', '--fs-root', '--max-steps', '--model',\n '--provider', '--sqlite', '--tools',\n])\nconst BOOLEAN_FLAGS = new Set(['--allow-shell', '--help'])\nconst TOOL_IDS = new Set(['fetch', 'filesystem', 'search', 'shell', 'sqlite'])\n\nexport interface McpCliOptions {\n agents: string[]\n allowShell: boolean\n apiKey?: string\n baseUrl?: string\n fsRoot?: string\n help: boolean\n maxSteps: number\n model?: string\n provider: string\n sqlite?: string\n tools: string[]\n}\n\nexport type McpCliParseResult =\n | { message: string; status: 'rejected' }\n | { options: McpCliOptions; status: 'parsed' }\n\nconst csv = (input: string): string[] =>\n [...new Set(input.split(',').map((value) => value.trim()).filter(Boolean))]\n\nexport const parseMcpCliArgs = (argv: readonly string[]): McpCliParseResult => {\n const values = new Map<string, string>()\n const booleans = new Set<string>()\n for (let index = 0; index < argv.length; index += 1) {\n const argument = argv[index]!\n if (BOOLEAN_FLAGS.has(argument)) {\n if (booleans.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n booleans.add(argument)\n continue\n }\n if (!VALUE_FLAGS.has(argument)) return { message: `unknown argument: ${argument}`, status: 'rejected' }\n if (values.has(argument)) return { message: `duplicate flag: ${argument}`, status: 'rejected' }\n const value = argv[index + 1]\n if (value === undefined || value.startsWith('--')) {\n return { message: `missing value for ${argument}`, status: 'rejected' }\n }\n values.set(argument, value)\n index += 1\n }\n\n const tools = values.has('--tools') ? csv(values.get('--tools')!) : ['fetch', 'search']\n const unknownTool = tools.find((tool) => !TOOL_IDS.has(tool))\n if (unknownTool) return { message: `unknown tool: ${unknownTool}`, status: 'rejected' }\n const agents = values.has('--agents') ? csv(values.get('--agents')!) : []\n const maxStepsText = values.get('--max-steps') ?? '8'\n const maxSteps = Number(maxStepsText)\n if (!Number.isSafeInteger(maxSteps) || maxSteps < 1 || maxSteps > 100) {\n return { message: '--max-steps must be a safe integer between 1 and 100', status: 'rejected' }\n }\n\n return {\n options: {\n agents,\n allowShell: booleans.has('--allow-shell'),\n apiKey: values.get('--api-key'),\n baseUrl: values.get('--base-url'),\n fsRoot: values.get('--fs-root'),\n help: booleans.has('--help'),\n maxSteps,\n model: values.get('--model'),\n provider: (values.get('--provider') ?? 'openai').toLowerCase(),\n sqlite: values.get('--sqlite'),\n tools,\n },\n status: 'parsed',\n }\n}\n\ntype KeyedFactory = (config: { apiKey: string; baseUrl?: string; model: string }) => AdapterFactory\ntype LocalFactory = (config: { baseUrl?: string; model: string }) => AdapterFactory\n\nconst KEYED: Record<string, KeyedFactory> = {\n anthropic, cerebras, cohere, deepseek, fireworks, gemini, grok, groq,\n huggingface, kimi, llamacpp, lmstudio, mistral, openai, openrouter, qwen,\n together, vllm,\n}\nconst LOCAL: Record<string, LocalFactory> = { ollama }\nconst LOCAL_COMPAT = new Set(['llamacpp', 'lmstudio', 'vllm'])\nconst DEFAULT_MODEL: Record<string, string> = {\n anthropic: 'claude-sonnet-4-6',\n deepseek: 'deepseek-chat',\n gemini: 'gemini-2.0-flash',\n grok: 'grok-2',\n groq: 'openai/gpt-oss-120b',\n mistral: 'mistral-large-latest',\n ollama: 'llama3',\n openai: 'gpt-4o',\n}\n\nexport interface McpCliDependencies {\n createServer?: typeof createAgentsKitMcpServer\n env?: Readonly<Record<string, string | undefined>>\n fetchSkill?: (id: string) => Promise<FetchedAgentSkill | null>\n warn?: (message: string) => void\n}\n\nexport type McpCliRunResult =\n | { exitCode: 0; server: McpServer; status: 'started'; toolNames: string[] }\n | { exitCode: 0; status: 'help' }\n | { exitCode: 1; status: 'rejected' }\n\nexport const MCP_CLI_HELP = [\n 'Usage: agentskit-mcp [options]',\n '--tools <fetch,search,filesystem,shell,sqlite>',\n '--agents <registry-ids> --provider <provider> --model <model>',\n '--fs-root <dir> --sqlite <file> --allow-shell',\n].join('\\n')\n\nconst buildPrimitiveTools = (options: McpCliOptions, warn: (message: string) => void): ToolDefinition[] => {\n const tools: ToolDefinition[] = []\n if (options.tools.includes('fetch')) tools.push(fetchUrl())\n if (options.tools.includes('search')) tools.push(webSearch())\n if (options.tools.includes('filesystem')) {\n if (options.fsRoot) tools.push(...filesystem({ basePath: options.fsRoot }))\n else warn('skipping \"filesystem\": pass --fs-root <dir>')\n }\n if (options.tools.includes('sqlite')) {\n if (options.sqlite) tools.push(sqliteQueryTool({ path: options.sqlite }))\n else warn('skipping \"sqlite\": pass --sqlite <file>')\n }\n if (options.tools.includes('shell')) {\n if (options.allowShell) tools.push(shell())\n else warn('skipping \"shell\": pass --allow-shell (runs commands)')\n }\n return tools\n}\n\nconst resolveAdapter = (\n options: McpCliOptions,\n env: Readonly<Record<string, string | undefined>>,\n warn: (message: string) => void,\n): AdapterFactory | null => {\n const model = options.model ?? DEFAULT_MODEL[options.provider]\n if (!model) {\n warn(`--agents needs a model for \"${options.provider}\": pass --model`)\n return null\n }\n const local = LOCAL[options.provider]\n if (local) return local({ baseUrl: options.baseUrl, model })\n\n const envName = `${options.provider.toUpperCase().replace(/-/g, '_')}_API_KEY`\n const apiKey = options.apiKey ?? env[envName] ?? (LOCAL_COMPAT.has(options.provider) ? 'local' : undefined)\n if (!apiKey) {\n warn(`--agents needs a key for \"${options.provider}\": pass --api-key or set ${envName}`)\n return null\n }\n const keyed = KEYED[options.provider]\n if (keyed) return keyed({ apiKey, baseUrl: options.baseUrl, model })\n try {\n return dispatchFromCatalog({ apiKey, baseUrl: options.baseUrl, model, provider: options.provider })\n } catch {\n warn(`unknown or incompatible provider \"${options.provider}\"`)\n return null\n }\n}\n\nexport const runMcpCli = async (\n argv: readonly string[],\n dependencies: McpCliDependencies = {},\n): Promise<McpCliRunResult> => {\n const warn = dependencies.warn ?? (() => undefined)\n const parsed = parseMcpCliArgs(argv)\n if (parsed.status === 'rejected') {\n warn(parsed.message)\n return { exitCode: 1, status: 'rejected' }\n }\n if (parsed.options.help) {\n warn(MCP_CLI_HELP)\n return { exitCode: 0, status: 'help' }\n }\n\n const tools = buildPrimitiveTools(parsed.options, warn)\n if (parsed.options.agents.length > 0) {\n const adapter = resolveAdapter(parsed.options, dependencies.env ?? process.env, warn)\n if (adapter) {\n const fetchSkill = dependencies.fetchSkill ?? fetchAgentSkill\n for (const id of parsed.options.agents) {\n const skill = await fetchSkill(id).catch(() => null)\n if (!skill) {\n warn(`skipping agent \"${id}\": not found or not runnable`)\n continue\n }\n tools.push(createAgentTool({ ...skill, adapter, maxSteps: parsed.options.maxSteps }))\n }\n }\n }\n\n if (tools.length === 0) {\n warn('no tools or agents enabled — nothing to serve')\n return { exitCode: 1, status: 'rejected' }\n }\n const seen = new Set<string>()\n const duplicate = tools.find((tool) => {\n if (seen.has(tool.name)) return true\n seen.add(tool.name)\n return false\n })\n if (duplicate) {\n warn(`duplicate tool name: ${duplicate.name}`)\n return { exitCode: 1, status: 'rejected' }\n }\n const createServer = dependencies.createServer ?? createAgentsKitMcpServer\n let server: McpServer\n try {\n server = createServer({\n tools,\n onEvent: (event) => {\n if (event.type === 'error') warn(`tool error (${event.tool ?? 'unknown'}): ${event.error ?? 'unknown'}`)\n },\n })\n } catch {\n warn('failed to start MCP server')\n return { exitCode: 1, status: 'rejected' }\n }\n const toolNames = tools.map((tool) => tool.name)\n warn(`serving ${toolNames.length} item(s) over stdio (${toolNames.join(', ')})`)\n return { exitCode: 0, server, status: 'started', toolNames }\n}\n","#!/usr/bin/env node\nimport { runMcpCli } from './cli'\n\nconst warn = (message: string): void => {\n process.stderr.write(`agentskit-mcp: ${message}\\n`)\n}\n\nvoid runMcpCli(process.argv.slice(2), { warn }).then((result) => {\n process.exitCode = result.exitCode\n}).catch(() => {\n warn('unexpected startup failure')\n process.exitCode = 1\n})\n"]}
|
|
@@ -254,5 +254,5 @@ function createAgentsKitMcpServer(options) {
|
|
|
254
254
|
}
|
|
255
255
|
|
|
256
256
|
export { createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio };
|
|
257
|
-
//# sourceMappingURL=chunk-
|
|
258
|
-
//# sourceMappingURL=chunk-
|
|
257
|
+
//# sourceMappingURL=chunk-5K3ZAG4X.js.map
|
|
258
|
+
//# sourceMappingURL=chunk-5K3ZAG4X.js.map
|
|
@@ -1 +1 @@
|
|
|
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-CKAUENP5.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 * Claude Desktop / Cursor / Windsurf 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 — Claude Desktop, Cursor, Windsurf — 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","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"]}
|
package/dist/index.cjs.map
CHANGED
|
@@ -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 * Claude Desktop / Cursor / Windsurf 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 — Claude Desktop, Cursor, Windsurf — 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","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"]}
|
package/dist/index.d.cts
CHANGED
|
@@ -51,7 +51,7 @@ interface AgentsKitMcpServerOptions {
|
|
|
51
51
|
}) => void;
|
|
52
52
|
/**
|
|
53
53
|
* Transport override. Defaults to stdio over the current process (the form
|
|
54
|
-
* Claude
|
|
54
|
+
* Codex / Claude Code / Cursor launch). Inject a custom transport for tests.
|
|
55
55
|
*/
|
|
56
56
|
transport?: McpTransport;
|
|
57
57
|
}
|
|
@@ -62,7 +62,7 @@ interface AgentsKitMcpServerOptions {
|
|
|
62
62
|
declare function processStdio(): StdioLikeProcess;
|
|
63
63
|
/**
|
|
64
64
|
* Expose a set of AgentsKit tools as an MCP server (over stdio by default), so
|
|
65
|
-
* any MCP host — Claude
|
|
65
|
+
* any MCP host — Codex, Claude Code, Cursor — can call them.
|
|
66
66
|
*/
|
|
67
67
|
declare function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer;
|
|
68
68
|
|
package/dist/index.d.ts
CHANGED
|
@@ -51,7 +51,7 @@ interface AgentsKitMcpServerOptions {
|
|
|
51
51
|
}) => void;
|
|
52
52
|
/**
|
|
53
53
|
* Transport override. Defaults to stdio over the current process (the form
|
|
54
|
-
* Claude
|
|
54
|
+
* Codex / Claude Code / Cursor launch). Inject a custom transport for tests.
|
|
55
55
|
*/
|
|
56
56
|
transport?: McpTransport;
|
|
57
57
|
}
|
|
@@ -62,7 +62,7 @@ interface AgentsKitMcpServerOptions {
|
|
|
62
62
|
declare function processStdio(): StdioLikeProcess;
|
|
63
63
|
/**
|
|
64
64
|
* Expose a set of AgentsKit tools as an MCP server (over stdio by default), so
|
|
65
|
-
* any MCP host — Claude
|
|
65
|
+
* any MCP host — Codex, Claude Code, Cursor — can call them.
|
|
66
66
|
*/
|
|
67
67
|
declare function createAgentsKitMcpServer(options: AgentsKitMcpServerOptions): McpServer;
|
|
68
68
|
|
package/dist/index.js
CHANGED
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export { createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio } from './chunk-
|
|
1
|
+
export { createAgentTool, createAgentsKitMcpServer, fetchAgentSkill, processStdio } from './chunk-5K3ZAG4X.js';
|
|
2
2
|
//# sourceMappingURL=index.js.map
|
|
3
3
|
//# sourceMappingURL=index.js.map
|
package/package.json
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@agentskit/mcp",
|
|
3
|
-
"version": "0.3.
|
|
4
|
-
"description": "Expose AgentsKit tools as an MCP server — use them from Claude
|
|
3
|
+
"version": "0.3.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
|
+
"codex",
|
|
7
|
+
"claude-code",
|
|
6
8
|
"agentskit",
|
|
7
9
|
"mcp",
|
|
8
10
|
"model-context-protocol",
|
|
@@ -34,7 +36,7 @@
|
|
|
34
36
|
"dist"
|
|
35
37
|
],
|
|
36
38
|
"dependencies": {
|
|
37
|
-
"@agentskit/adapters": "0.14.
|
|
39
|
+
"@agentskit/adapters": "0.14.3",
|
|
38
40
|
"@agentskit/core": "1.12.7",
|
|
39
41
|
"@agentskit/runtime": "0.10.14",
|
|
40
42
|
"@agentskit/tools": "0.13.3"
|