MCP header annotation validator

Paste a tool definition. Find out whether a conforming Streamable HTTP client deletes it from tools/list.

Checked against spec revision 2026-07-28

Your SDK writes the schema. model_json_schema() in Pydantic and zod-to-json-schema both emit $defs plus $ref for any nested model, and anyOf for any optional field. An x-mcp-header annotation that lands inside either one is not statically reachable from the schema root, and the 2026-07-28 constraint list makes that a rejection. The client drops the whole tool and tells your server nothing. Load the first sample below to see it.

Check a tool definition

Load a case:

Nothing is uploaded. The parse, the graph traversal and every clause check run in this page.

Runtime value panel (does not feed the verdict)

Everything above is definition validity. It is decided from inputSchema alone, with no argument values in hand. How a client turns a call argument into the bytes of an Mcp-Param-{name} field value is a separate, runtime obligation, and it is normatively defined in Custom Headers from Tool Parameters on the Streamable HTTP transport page. That page is not part of the offline spec copy this tool was built against, so this panel computes the encoding arithmetic for you and asserts nothing about the transport page's table. A non-ASCII default in a schema is not a definition-validity failure and never changes the verdict above.

The normative text

Quoted verbatim from the on-disk copy of Tools, Model Context Protocol specification, page banner "Version 2026-07-28 (latest)". Superscripts and the U+2212 minus sign are rendered in ASCII as ^ and -; nothing else is altered.

Tool data type

Properties MAY include an x-mcp-header annotation to expose parameter values as HTTP headers

x-mcp-header

The x-mcp-header extension property allows servers to designate specific tool parameters to be mirrored into HTTP headers when using the Streamable HTTP transport. This enables network intermediaries (load balancers, proxies, WAFs) to route and process requests based on parameter values without parsing the request body.

The x-mcp-header property is placed directly within the JSON Schema of the property to be mirrored. Its value specifies the name portion of the resulting Mcp-Param-{name} HTTP header.

Constraints on x-mcp-header values:

Clients using the Streamable HTTP transport MUST reject tool definitions where any x-mcp-header value violates these constraints. Rejection means the client MUST exclude the invalid tool from the result of tools/list. Clients SHOULD log a warning when rejecting a tool definition, including the tool name and the reason for rejection. This ensures that a single malformed tool definition does not prevent other valid tools from being used. Clients using other transports (e.g., stdio) MAY ignore x-mcp-header annotations entirely.

Server developers SHOULD NOT mark sensitive parameters (passwords, API keys, tokens, PII) with x-mcp-header, as header values are visible to network intermediaries.

Two things in that block do the damage. Rejection is at MUST and it removes the entire tool, not the annotation. The feedback path is at SHOULD and it is a client-side log line, so a server operator can watch a tool vanish from every client with nothing in their own logs to explain it.

What this tool does not decide

Independence

This is an independent tool by 0xelitesystem. It is not affiliated with, endorsed by, or connected to the Model Context Protocol project, Pydantic, or the authors of zod-to-json-schema. Those names appear only because their published output shapes are what trip the constraint. The spec text quoted above is quoted for identification and commentary; no code from any of those projects is reproduced here. The checks were implemented from the normative constraint list, not ported from an implementation.