From 506e1f70de855101b0ad0c058daa9ba95e27362a Mon Sep 17 00:00:00 2001 From: olaservo Date: Sat, 1 Aug 2026 21:30:22 -0700 Subject: [PATCH] Say "structured content", not "structured output" MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The spec never uses the phrase "structured output". It defines two separate things under Tool Result: "Structured Content" (the `structuredContent` field) and "Output Schema" (the `outputSchema` field). Collapsing them into "structured output" conflates the two. It is also actively confusing here. In LLM tooling "structured output" means constrained decoding — making the *model* emit conforming JSON. These clients call a model API, so a reader could reasonably take the phrase to mean the tool constrains the model's response, which is the opposite of what is going on: the tool describes the shape of its own result. Headings and prose now say "structured content". References to real identifiers are left alone: the Python SDK's own docs page is called Structured Output and lives at docs/servers/structured-output.md, and its decorator parameter is `structured_output`. Co-Authored-By: Claude Opus 5 --- mcp-client-rust/README.md | 2 +- weather-server-rust/README.md | 2 +- weather-server-rust/src/main.rs | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mcp-client-rust/README.md b/mcp-client-rust/README.md index ad98e10..ef98b76 100644 --- a/mcp-client-rust/README.md +++ b/mcp-client-rust/README.md @@ -2,7 +2,7 @@ See the [Build an MCP client](https://modelcontextprotocol.io/docs/develop/build-client) tutorial for more information. -## Structured output +## Structured content rmcp does not validate tool output, so this client compiles each declared `outputSchema` at connect time and checks results against it — the spec's client-side SHOULD. It uses the [`jsonschema`](https://docs.rs/jsonschema) crate, which rmcp's own documentation recommends. diff --git a/weather-server-rust/README.md b/weather-server-rust/README.md index a0d5bc6..9b9a5ca 100644 --- a/weather-server-rust/README.md +++ b/weather-server-rust/README.md @@ -2,7 +2,7 @@ See the [Build an MCP server](https://modelcontextprotocol.io/docs/develop/build-server) tutorial for more information. -## Structured output +## Structured content Both tools declare an `output_schema` and return `structured_content`. `get_forecast` returns an object; `get_alerts` returns a top-level JSON array, which protocol revision `2026-07-28` is the first to allow — see [Structured Content](https://modelcontextprotocol.io/specification/draft/server/tools#structured-content) in the spec. diff --git a/weather-server-rust/src/main.rs b/weather-server-rust/src/main.rs index 4447bf4..23c0ff6 100644 --- a/weather-server-rust/src/main.rs +++ b/weather-server-rust/src/main.rs @@ -68,7 +68,7 @@ struct ForecastPeriod { detailed_forecast: String, } -/// One element of `get_alerts`' structured output. Declaring `Vec` as +/// One element of `get_alerts`' structured content. Declaring `Vec` as /// the output schema makes `structuredContent` a top-level JSON array rather /// than an object wrapping one, which revision 2026-07-28 is the first to allow. #[derive(Debug, Serialize, JsonSchema)] @@ -85,7 +85,7 @@ pub struct Alert { instructions: String, } -/// `get_forecast`' structured output: the object case. +/// `get_forecast`' structured content: the object case. #[derive(Debug, Serialize, JsonSchema)] pub struct Forecast { /// Latitude the forecast is for.