You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
For my use cases i need to be able to attach complex (json) _meta to mcp requests. With the current implementation only <string,string> pairs are possible.
Describe the solution you'd like
Replace (maybe optionally) the string, string pair list of _meta in the server settings with a json editor.
Describe alternatives you've considered
I had already implemented this behaviour for v1 and opened a PR (#1159)
Additional context
Since you are no longer accepting direct contributions, i will not open a PR for it, but please consider adding this functionality.
There is nothing in the MCP spec which restricts custom _meta data to just string,string pairs so i don't think the main mcp testing tool (which the inspector is for many people) should do that.
Shipped in #2094 (merge commit b44c090 on v2/main).
_meta values may now be any JSON — objects, arrays, numbers, booleans, null — across core, web, TUI and CLI. Server Settings → Request Metadata is a JSON editor (Ace: code folding, brace auto-closing, per-line error annotation) instead of key/value rows, which structurally could not express an object value.
Your existing mcp.json keeps working: the pre-existing [{ "key", "value" }] pair array is still read, and is rewritten as an object the next time the Inspector saves that entry.
Two caveats worth knowing:
A few keys are reserved by the protocol and keep their own shape — progressToken (a string or a safe integer) and io.modelcontextprotocol/related-task ({ "taskId": "<string>" }). A reserved key whose value does not match is dropped from the request, because a conforming server rejects the entire request over one bad reserved member.
Values must be JSON that survives serialization, so a numeric literal like 1e400 (which parses to Infinity and would be sent as null) is refused with an inline message rather than silently transmitted.
Thanks for the report — and for the v1 prototype in #1159, which made the intended UX unambiguous.
Activity
docs: add the six-month Inspector roadmap (Aug 2026 → Feb 2027)
fix: drop a schema-invalid `_meta.progressToken` instead of sending it
fix: redact secrets nested inside metadata in `servers/show`
fix(web): update a fixture the merge brought in to the object metadat…
fix: validate every reserved `_meta` member against the SDK's own schema
cliffhall commentedon Aug 24, 2026
Shipped in #2094 (merge commit b44c090 on
v2/main)._metavalues may now be any JSON — objects, arrays, numbers, booleans,null— across core, web, TUI and CLI. Server Settings → Request Metadata is a JSON editor (Ace: code folding, brace auto-closing, per-line error annotation) instead of key/value rows, which structurally could not express an object value.Your existing
mcp.jsonkeeps working: the pre-existing[{ "key", "value" }]pair array is still read, and is rewritten as an object the next time the Inspector saves that entry.Two caveats worth knowing:
progressToken(a string or a safe integer) andio.modelcontextprotocol/related-task({ "taskId": "<string>" }). A reserved key whose value does not match is dropped from the request, because a conforming server rejects the entire request over one bad reserved member.1e400(which parses toInfinityand would be sent asnull) is refused with an inline message rather than silently transmitted.Thanks for the report — and for the v1 prototype in #1159, which made the intended UX unambiguous.
Merge branch 'v2/main' into v2/fix/2067-proxy-undici
feat: allow complex JSON values in request _meta
fix(mcpi): restore build after v2/main merge