diff --git a/packages/opencontrol/package.json b/packages/opencontrol/package.json index d190aea..68c49d6 100644 --- a/packages/opencontrol/package.json +++ b/packages/opencontrol/package.json @@ -26,11 +26,10 @@ "@tsconfig/bun": "1.0.7", "ai": "4.2.11", "hono": "4.11.4", - "zod": "4.2.1", - "zod-to-json-schema": "3.25.0" + "zod": "4.2.1" }, "devDependencies": { - "@standard-schema/spec": "1.0.0", + "@standard-schema/spec": "1.1.0", "opencontrol-frontend": "workspace:*" } } diff --git a/packages/opencontrol/src/mcp.ts b/packages/opencontrol/src/mcp.ts index 7194f8d..b207e86 100644 --- a/packages/opencontrol/src/mcp.ts +++ b/packages/opencontrol/src/mcp.ts @@ -10,7 +10,6 @@ import { } from "@modelcontextprotocol/sdk/types.js" import { z } from "zod" import { Tool } from "./tool.js" -import { zodToJsonSchema } from "zod-to-json-schema" const RequestSchema = z.union([ InitializeRequestSchema, @@ -41,10 +40,11 @@ export function createMcp(input: { tools: Tool[] }) { return { tools: input.tools.map((tool) => ({ name: tool.name, - inputSchema: zodToJsonSchema( - tool.args || (z.object({}) as any), - "args", - ).definitions!["args"] as any, + inputSchema: (tool.args + ? tool.args["~standard"].jsonSchema.input({ + target: "draft-2020-12", + }) + : { type: "object" }) as { type: "object" }, description: tool.description, })), } satisfies ListToolsResult diff --git a/packages/opencontrol/src/tool.ts b/packages/opencontrol/src/tool.ts index 42b7858..89a358b 100644 --- a/packages/opencontrol/src/tool.ts +++ b/packages/opencontrol/src/tool.ts @@ -1,20 +1,18 @@ -import { StandardSchemaV1 } from "@standard-schema/spec" +import { StandardJSONSchemaV1, StandardSchemaV1 } from "@standard-schema/spec" import { z } from "zod" -export interface Tool< - Args extends undefined | StandardSchemaV1 = undefined | StandardSchemaV1, -> { +type Schema = StandardSchemaV1 & StandardJSONSchemaV1 + +export interface Tool { name: string description: string args?: Args - run: Args extends StandardSchemaV1 + run: Args extends Schema ? (args: StandardSchemaV1.InferOutput) => Promise : () => Promise } -export function tool( - input: Tool, -) { +export function tool(input: Tool) { return input }