Summary
Currently v0 of ncp-mcp-server exposes every tool's inputSchema as {"type":"object"}. That is honest (any object accepted, passed verbatim as the graph root input), but MCP-compatible hosts often use the schema to render input forms or guide LLMs. Richer schemas would noticeably improve adopter UX.
Why this matters
- A real input schema lets hosts render better input forms.
- LLMs use the schema as part of tool-selection reasoning.
- v0 deferred this intentionally (per
docs/MCP_ADAPTER.md §4) until adopter feedback shaped the schema strategy. That feedback is now arriving.
Acceptance criteria
Open questions for the design
- Should the schema validate inputs at the adapter, or pass through and let the graph fail with
INVALID_INPUT?
- Does the schema field belong in
graph.yaml directly, or in a sidecar file?
Where to read
docs/MCP_ADAPTER.md §4 for the current input-schema contract
crates/ncp-mcp-server/src/server.rs for list_tools and call_tool handlers
runtime/src/manifest.rs for graph manifest structure
Summary
Currently
v0ofncp-mcp-serverexposes every tool'sinputSchemaas{"type":"object"}. That is honest (any object accepted, passed verbatim as the graph root input), but MCP-compatible hosts often use the schema to render input forms or guide LLMs. Richer schemas would noticeably improve adopter UX.Why this matters
docs/MCP_ADAPTER.md§4) until adopter feedback shaped the schema strategy. That feedback is now arriving.Acceptance criteria
input_schema:).{"type":"object"}behavior. No breaking change for existing graphs.tools/listinputSchemafor tools whose graphs declare one.{"type":"object"}); invalid schema (graph manifest rejected at startup).docs/MCP_ADAPTER.md§4.Open questions for the design
INVALID_INPUT?graph.yamldirectly, or in a sidecar file?Where to read
docs/MCP_ADAPTER.md§4 for the current input-schema contractcrates/ncp-mcp-server/src/server.rsforlist_toolsandcall_toolhandlersruntime/src/manifest.rsfor graph manifest structure