From a0ce1f89be55cae4ce9adc7a471bb58be52289d6 Mon Sep 17 00:00:00 2001 From: olaservo Date: Sat, 1 Aug 2026 21:30:21 -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-go/README.md | 2 +- weather-server-go/README.md | 2 +- weather-server-go/main.go | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/mcp-client-go/README.md b/mcp-client-go/README.md index a312832..ae7cd54 100644 --- a/mcp-client-go/README.md +++ b/mcp-client-go/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 The SDK 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 [`jsonschema-go`](https://pkg.go.dev/github.com/google/jsonschema-go/jsonschema), already an SDK dependency. diff --git a/weather-server-go/README.md b/weather-server-go/README.md index f1e92c7..e0a8f05 100644 --- a/weather-server-go/README.md +++ b/weather-server-go/README.md @@ -18,7 +18,7 @@ The server will communicate via stdio and expose two MCP tools: - `get_forecast` - Get weather forecast for a location (requires latitude and longitude) - `get_alerts` - Get weather alerts for a US state (requires two-letter state code) -## Structured output +## Structured content Both tools advertise an `outputSchema` and return `StructuredContent`. `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-go/main.go b/weather-server-go/main.go index caecbd8..5b8e418 100644 --- a/weather-server-go/main.go +++ b/weather-server-go/main.go @@ -65,7 +65,7 @@ type AlertProperties struct { Instruction string `json:"instruction"` } -// Alert is one element of get_alerts' structured output. Returning []Alert +// Alert is one element of get_alerts' structured content. Returning []Alert // makes structuredContent a top-level JSON array rather than an object // wrapping one, which protocol revision 2026-07-28 is the first to allow. type Alert struct { @@ -88,7 +88,7 @@ type Period struct { DetailedForecast string `json:"detailed_forecast"` } -// Forecast is get_forecast's structured output: the object case. +// Forecast is get_forecast's structured content: the object case. type Forecast struct { Latitude float64 `json:"latitude" jsonschema:"Latitude the forecast is for"` Longitude float64 `json:"longitude" jsonschema:"Longitude the forecast is for"`