quickstart-resources/weather-server-go
Repository files (latest commit first)
Filename Latest commit message Latest commit date
olaservo 84ffd2d7d2 Add structured output to the Go weather server and client
Both tools declare an OutputSchema and return StructuredContent alongside the
text.

get_alerts returns []Alert, so it answers with a top-level JSON array rather
than an array nested in an object, which protocol revision 2026-07-28 is the
first to allow. "No alerts" is simply []. get_forecast returns an object, for
contrast. The declared schema narrows the inferred ["null","array"] root to
"array": jsonschema-go infers the nullable form because a nil slice is valid
Go, but the handler always builds a slice.

Error paths return an error: a tool declaring an OutputSchema MUST return
conforming structured content, so a path with no data has to fail.

The client compiles every declared OutputSchema at connect time and validates
results against it, using jsonschema-go - already an SDK dependency, so no new
one. Each channel goes to its stated reader: Content is forwarded to the
model, StructuredContent is used as data, reporting how many items came back.

The client no longer treats a missing .env as fatal and checks for
ANTHROPIC_API_KEY after connecting rather than before, matching the Python and
TypeScript clients, so the connection can be exercised without credentials.

Requires go-sdk v1.7.0-pre.3: non-object output schema support (SEP-2106)
landed after v1.6.1 and is in no stable release. Model identifier moves to
claude-sonnet-5; the second call in the tool loop used a hardcoded
ModelClaude3_7SonnetLatest while the first used the package variable, so both
now use the same one.

Note that the SDK sends an array-rooted schema as written on every connection
rather than projecting it down, so an older client rejects the tool list.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 15:36:32 -07:00
..
go.mod Add structured output to the Go weather server and client 2026-08-09 15:36:32 -07:00
go.sum Add structured output to the Go weather server and client 2026-08-09 15:36:32 -07:00
main.go Add structured output to the Go weather server and client 2026-08-09 15:36:32 -07:00
README.md Add structured output to the Go weather server and client 2026-08-09 15:36:32 -07:00
weather.exe Add structured output to the Go weather server and client 2026-08-09 15:36:32 -07:00

A Simple MCP Weather Server written in Go

See the Build an MCP server tutorial for more information.

Building

go build -o weather

Running

./weather

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

Both tools declare 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 in the spec.

Note that an array-rooted schema requires a 2026-07-28 client: the SDK sends it as written on every connection rather than projecting it down, so an older client rejects the tool list.