Skip to content

[Bug]: Proxied MCP server tools fail to load when inputSchema declares a draft 2020-12 $schema #1477

Open

Description

@jirispilka

Problem

getMCPServerTools() (src/mcp/proxy.ts) compiles each proxied tool's inputSchema with the shared AJV instance, which only has the draft-07 meta-schema. When a tool's inputSchema declares "$schema": "https://json-schema.org/draft/2020-12/schema", compilation throws and none of the Actor's tools load, not just that one tool.

Zod 4 toJSONSchema() adds this $schema, so TypeScript MCP servers that use Zod 4 run into this. MCP 2025-11-25 makes 2020-12 the default dialect for tool schemas.

Regular Actor tools are not affected because buildActorInputSchema() already removes $schema.

Evidence

Hosted server log, 2026-10-04:

ERROR {"actorFullName":"lexxer/transcriptpack-youtube-transcripts","actorId":"g4kWYLgKjbOSH30qB","error":{"message":"no schema with key or ref \"https://json-schema.org/draft/2020-12/schema\"","name":"Error","stack":"Error: no schema with key or ref ...\n    at Ajv.validate ...\n    at Ajv.validateSchema ..."},"msg":"Failed to load tools from MCP server"}

To reproduce, call getMCPServerTools() with a mock client whose listTools() returns one tool with that $schema. It throws the same error.

Affected

Any Actor MCP server whose tool schemas declare a draft other than 07. This happens in both stdio and hosted mode. Adding such an Actor as a tool loads none of its tools.

Expected

The Actor's tools load and their input is validated.


Found in production logs. Drafted and reproduced with Claude Code.

Activity

  1. added
    bugSomething isn't working.
    t-aiIssues owned by the AI team.
    on Oct 5, 2026
  2. jirispilka commented on Oct 15, 2026

    @jirispilka
    CollaboratorAuthor

    Still happening on the hosted server after the 0.18.x releases. ERROR entries with no schema with key or ref "https://json-schema.org/draft/2020-12/schema", per day:

    Day (2026-10) 09 10 11 12 13 14
    Count 26 22 22 45 31 48

    The counts did not change across the 0.17.4 → 0.18.0 → 0.18.2 releases. lexxer/transcriptpack-youtube-transcripts is still the Actor in the sampled entries.

    Drafted with Claude Code.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working.t-aiIssues owned by the AI team.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions