Releases: mark3labs/mcp-go
Release v0.37.0
⚠️ Breaking Changes
The Result.Meta
field type has changed from map[string]any
to *Meta
. Code that directly accesses or sets this field will need to be updated:
// Before (v0.36.0 and earlier):
result.Meta = map[string]any{"key": "value"}
// After (v0.37.0):
result.Meta = &mcp.Meta{AdditionalFields: map[string]any{"key": "value"}}
What's Changed
- Replace Prompts/Resources/Resource Templates by @dgageot in #518
- Update server.go race condition by @outofthisworld in #524
- task: add _meta field to relevant types as defined in MCP specification by @buraksenn in #429
- feat: implement sampling support for Streamable HTTP transport by @andig in #515
- Fix SSE transport not properly handling HTTP/2 NO_ERROR disconnections by @okoshi-f in #509
- feat: add thread-safe
SetExpectedState
for cross-request OAuth flows by @sd2k in #500 - feat: allow to set a custom logger in the SSE and STDIO clients by @caarlos0 in #525
New Contributors
- @outofthisworld made their first contribution in #524
- @buraksenn made their first contribution in #429
- @andig made their first contribution in #515
- @okoshi-f made their first contribution in #509
- @caarlos0 made their first contribution in #525
Full Changelog: v0.36.0...v0.37.0
Release v0.36.0
What's Changed
- Add defs field to ToolsInputSchema by @ostafen in #488
- Remove
sampling_server
binary file by @JeffreyCA in #512 - chore: remove comments related to JSON-Batching by @cryo-zd in #514
- feat: support structured content and output schema by @pottekkat in #460
- Hide error log when it's not useful by @dgageot in #517
New Contributors
- @ostafen made their first contribution in #488
- @JeffreyCA made their first contribution in #512
- @dgageot made their first contribution in #517
Full Changelog: v0.35.0...v0.36.0
Release v0.35.0
What's Changed
- Http headers by @adityamj in #480
- fix: check if resp is nil on error for initialize methods by @pottekkat in #492
- Fix race condition in stdio.SendRequest with canceled context by @ezynda3 in #503
- Embed client capabilities into the Session by @ardaguclu in #491
- enhc(server): allow adding multiple resource templates at once by @rafaeljusto in #483
- Get rid of binary file. by @wkoszek in #505
- feat: implement protocol version negotiation by @ezynda3 in #502
New Contributors
- @adityamj made their first contribution in #480
- @ardaguclu made their first contribution in #491
- @rafaeljusto made their first contribution in #483
- @wkoszek made their first contribution in #505
Full Changelog: v0.34.0...v0.35.0
v0.34.0
What's Changed
- fix(streamable_http): ensure graceful shutdown to prevent close reque… by @sunerpy in #477
- fix(streamble_http) SendNotification not work bug by @Robin-ZMH in #473
- refactor: replace fmt.Errorf with TransportError wrapper by @AdamShannag in #486
- fix
Content-Type: application/json; charset=utf-8
error by @oldweipro in #478 - feat: Inprocess sampling support by @ezynda3 in #487
- feat: support in tool result handling & update example by @CocaineCong in #467
- feat(logging): add support for send log message notifications and implemented the
SessionWithLogging
interface onstreamableHttpSession
by @sunerpy in #484
New Contributors
- @sunerpy made their first contribution in #477
- @Robin-ZMH made their first contribution in #473
- @AdamShannag made their first contribution in #486
- @oldweipro made their first contribution in #478
- @CocaineCong made their first contribution in #467
Full Changelog: v0.33.0...v0.34.0
Release v0.33.0
What's Changed
- fix(server): Fix the logic of the WithStateLess function by @dcsunny in #387
- fix(srv/stream): correct handleGet status code to 200 by @cryo-zd in #379
- Add an example of an in process client by @edwardcqian in #371
- feat: add type-safe array items helper functions by @davidleitw in #396
- Issue 400 fix by @ozzyozbourne in #406
- fix(client/transport/stream): check for nil pointer by @dinistavares in #404
- feat: add ResourceLink type and parsing support by @chenmingyong0423 in #407
- Fix docs by @ezynda3 in #430
- feat: client-side streamable-http transport supports continuously listening by @leavez in #317
- feature: add support ResourceTemplates to mcptest package by @Slach in #449
- Add support for MCP host session management by @C0deKing in #466
- docs: Fix unused import in readme example by @Squiry in #469
- Support creating an
Stdio
client with options by @peteski22 in #457 - Implement sampling in Stdio by @ezynda3 in #461
New Contributors
- @dcsunny made their first contribution in #387
- @edwardcqian made their first contribution in #371
- @davidleitw made their first contribution in #396
- @ozzyozbourne made their first contribution in #406
- @dinistavares made their first contribution in #404
- @chenmingyong0423 made their first contribution in #407
- @Slach made their first contribution in #449
- @C0deKing made their first contribution in #466
- @Squiry made their first contribution in #469
- @peteski22 made their first contribution in #457
Full Changelog: v0.32.0...v0.33.0
Release v0.32.0
What's Changed
- feat(mcp): add NewToolResultErrorf by @icholy in #357
- feat(mcptest): extend test server with prompt and resource support by @vasayxtx in #346
- [streamable-http] Add ability to override the http.Client by @tra4less in #359
- fixed logo issue in home page by @asaf-shitrit in #364
- feat(mcptest): Change
Server.Start
to accept acontext.Context
. by @octo in #339 - fix(test/stdio): address io:read/write on closed pipe error by @cryo-zd in #360
- [SSE][OAuth] Add OAuth support to SSE client by @giridhar-murthy-glean in #340
- More comprehensive docs by @ezynda3 in #374
- fix(srv/stream): properly remove sessionTool to prevent memory leak by @cryo-zd in #365
- fix: SSE parser now correctly handles events without event field by @ezynda3 in #376
- fix: ignore session IDs in stateless mode instead of rejecting them by @ezynda3 in #375
- support search www doc by @dugenkui03 in #378
- Optimize docs by @dugenkui03 in #386
New Contributors
- @icholy made their first contribution in #357
- @vasayxtx made their first contribution in #346
- @tra4less made their first contribution in #359
- @asaf-shitrit made their first contribution in #364
- @giridhar-murthy-glean made their first contribution in #340
Full Changelog: v0.31.0...v0.32.0
Release v0.31.0
What's Changed
- [feat] separate request struct by @OswinWu in #333
- fix: logo on website is squashed by @corani in #349
- fix: panic when streamable HTTP server sends notification by @dugenkui03 in #348
- fix: move styles.css to www/docs by @corani in #354
- fix(server): resolve stdio server context cancellation bug by @sonirico in #331
- Add option to StreamableHTTPServer to allow custom http server instance by @yash025 in #347
- fix(Srv/stream): add ID field to
PingRequest
by @cryo-zd in #353
New Contributors
- @OswinWu made their first contribution in #333
- @corani made their first contribution in #349
- @sonirico made their first contribution in #331
Full Changelog: v0.30.1...v0.31.0
Release v0.30.1
What's Changed
Full Changelog: v0.30.0...v0.30.1
Release v0.30.0
What's Changed
- Feat: Impl Server-Side Streamable HTTP transport by @leavez in #273
- Support customize request header by @dugenkui03 in #315
- docs: add regeneration instructions by @pmenglund in #309
- docs(examples): correct use of
GetArguments
by @jamietanna in #316 - fix: avoid painc caused by writing to closed channel by @cryo-zd in #318
- docs: use helper functions and return error as result by @pottekkat in #322
- Update README.md by @dugenkui03 in #323
- Feat(prompts): add DeletePrompts method to MCPServer by @God-Jay in #320
- Scaffold documentation site by @ezynda3 in #324
- Docs by @ezynda3 in #325
- feat: Implement OAuth in the client by @ezynda3 in #296
- feat(server): persist client info in sessions by @ShawkyZ in #313
New Contributors
- @pmenglund made their first contribution in #309
- @jamietanna made their first contribution in #316
- @God-Jay made their first contribution in #320
- @ShawkyZ made their first contribution in #313
Full Changelog: v0.29.0...v0.30.0
Release v0.29.0
What's Changed
- refactor: make CallToolRequest.Arguments more flexible (Breaking Change) by @ezynda3 in #287
- Drop unused fields from server.sseSession by @ggoodman in #303
- chore: remove unused variables and type arguments by @pottekkat in #302
- chore(Srv/stdio): duplicated setting of ErrorLogger by @cryo-zd in #306
- fix: handle the situation where the channel is closed by @button-chen in #304
Breaking Changes
In v0.29.0
, MCP-Go introduces breaking changes to tool request handling. The main change is that request.Params.Arguments
is no longer directly accessible as a map. Instead, you must use the new GetArguments()
method to retrieve arguments as a map. For type-safe argument access, new helper methods like RequireString()
, RequireFloat()
, and RequireBool()
have been added. To migrate:
- Replace direct access to
request.Params.Arguments["key"]
withrequest.GetArguments()["key"]
- For better type safety, use the new helper methods:
request.RequireString("key")
,request.RequireFloat("key")
, etc. - For complex argument structures, use the new
BindArguments()
method with a struct, or try the new typed tool handlers withmcp.NewTypedToolHandler()
as shown in the newexamples/typed_tools
example.
New Contributors
- @ggoodman made their first contribution in #303
- @button-chen made their first contribution in #304
Full Changelog: v0.28.0...v0.29.0