Changelog
July 8, 2026 ยท View on GitHub
All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
[Unreleased]
2.2.0 - 2026-07-08
Added
- reject auth servers lacking S256 PKCE support (#955)
Fixed
- pass client conformance suite (#960)
- don't respond to cancelled requests (#957)
- fail orphaned streamable HTTP responses on reinit (#914)
- address 2025-11-25 conformance audit findings (#951)
2.1.0 - 2026-07-02
Added
Fixed
- (transport) make AsyncRwTransport::receive cancel-safe (#941) (#947)
- (auth) preserve refresh_token when refresh response omits it (#949)
- block redirect header leaks (#936)
- don't respond to unparsable messages (#940)
- negotiate protocol version in handler (#930)
2.0.0 - 2026-06-27
Added
- [breaking] relax tool result structuredContent type (#919)
- deprecate roots/sampling/logging types (#923)
- [breaking] align model types with MCP 2025-11-25 spec (#927)
Fixed
- prevent OAuth resource spoofing (#937)
- block oauth metadata ssrf (#935)
- prevent streamable HTTP session leak (#934)
- fill missing fully qualified syntax in prompt_handler macros (#866)
- (rmcp) add Audio variant to PromptMessageContent (#865)
Other
- consolidate repeated rmcp tests (#931)
- Revert "feat!: relax tool result structuredContent type (#919)" (#932)
- align README examples with v2 model API (#928)
1.8.0 - 2026-06-22
Added
- standardize resource-not-found error code (SEP-2164) (#899)
- validate OAuth authorization response issuer (#896)
- specify OIDC application_type during dynamic client registration (SEP-837) (#883)
- deprecate roots, sampling, and logging (SEP-2577) (#884)
Fixed
- (auth) preserve configured reqwest client (#917)
- (auth) align OAuth metadata discovery ordering (#887)
- align progress timeout token (#909)
- (elicitation) preserve enumNames through ElicitationSchema serde round-trip (#905)
- return tool errors for invalid arguments (#894)
- (auth) apply offline_access to reauth paths (#897)
- update peer info on duplicate initialize (#862)
- strip and validate tool outputSchema and inputSchema (#860)
- remove unnecessary fields from tools' inputSchema (#856)
- reject init header/body version mismatch (#853)
- align protocol version negotiation (#855)
- accept 200 with empty body in response to notifications in addition to 202 (#849)
Other
- Allow custom HTTP clients for OAuth (#908)
- Add progress-aware request timeout reset (#858)
- (server) document Err vs Ok(CallToolResult::error) visibility contract on ServerHandler::call_tool (#854)
- refine mcpmate listing copy (#885)
- added jilebi-mcp to the list of built with rmcp (#861)
1.7.0 - 2026-05-13
Added
- add task-based stdio examples (#839)
Fixed
- (rmcp) flatten Resource variant of PromptMessageContent (#843)
- reply -32700 on stdio parse errors instead of closing (#833)
Other
- (rmcp) remove dependency on chrono default features (#829)
- Fix/issue 817 idle timeout log level (#824)
1.6.0 - 2026-05-01
Added
- (http) log Host/Origin rejections (#826)
- (http) add Origin header validation (#823)
- (router) support runtime disabling of tools (#809)
- optional session store (resumabillity support) (#775)
Fixed
- add init_timeout for streamable-http sessions (#811)
- (http) fall back to :authority for HTTP/2 (#827)
- (docs) use correct Parameters
syntax in tool examples (#814)
Other
- add systemprompt-template to Built with rmcp (#820)
1.5.0 - 2026-04-16
Added
- (transport) add constructors for non_exhaustive error types (#806)
- add 2025-11-25 protocol version support (#802)
Fixed
- treat resource metadata JSON parse failure as soft error (#810)
- include http_request_id in request-wise priming event IDs (#799)
- (http) drain SSE stream for connection reuse (#790)
Other
- (deps) update which requirement from 7 to 8 (#807)
1.4.0 - 2026-04-09
Added
- add Default and constructors to ServerSseMessage (#794)
- add meta to elicitation results (#792)
- (macros) auto-generate get_info and default router (#785)
- (transport) add which_command for cross-platform executable resolution (#774)
- (auth) add StoredCredentials::new() constructor (#778)
Fixed
- (server) remove initialized notification gate to support Streamable HTTP (#788)
- default session keep_alive to 5 minutes (#780)
- (http) add host check (#764)
- exclude local feature from docs.rs build (#782)
Other
1.3.0 - 2026-03-24
Added
- (transport) add Unix domain socket client for streamable HTTP (#749)
- (auth) implement SEP-2207 OIDC-flavored refresh token guidance (#676)
- add configuration for transparent session re-init (#760)
- add local feature for !Send tool handler support (#740)
Fixed
- prevent CallToolResult and GetTaskPayloadResult from shadowing CustomResult in untagged enums (#771)
- drain in-flight responses on stdin EOF (#759)
- remove default type param from StreamableHttpService (#758)
- use cfg-gated Send+Sync supertraits to avoid semver break (#757)
- (rmcp) surface JSON-RPC error bodies on HTTP 4xx responses (#748)
- default CallToolResult content to empty vec on missing field (#752)
- (auth) redact secrets in Debug output for StoredCredentials and StoredAuthorizationState (#744)
Other
- fix all clippy warnings across workspace (#746)
1.2.0 - 2026-03-11
Added
- add missing constructors for non-exhaustive model types (#739)
- include granted scopes in OAuth refresh token request (#731)
Fixed
- handle ping requests sent before initialize handshake (#745)
- allow deserializing notifications without params field (#729)
Other
- (deps) update jsonwebtoken requirement from 9 to 10 (#737)
1.1.1 - 2026-03-09
Fixed
- accept logging/setLevel and ping before initialized notification (#730)
1.1.0 - 2026-03-04
Added
- implement OAuth 2.0 Client Credentials flow (#707)
Other
- add McpMux to Built with rmcp section (#717)
1.0.0 - 2026-03-03
Fixed
- (auth) pass WWW-Authenticate scopes to DCR registration request (#705)
- api ergonomics follow-up (#720)
- (streamable-http) map stale session 401 to status-aware error (#709)
1.0.0-alpha - 2026-03-03
Added
Fixed
- downgrade logging of message to
TRACEto avoid spamming logs (#699)
Other
- add #[non_exhaustive] and mutation methods to improve compatibility (#715)
0.17.0 - 2026-02-27
Added
- (streamable-http) add json_response option for stateless server mode (#683)
- mcp sdk conformance (#687)
- add default value support to string, number, and integer schemas (#686)
- add trait-based tool declaration (#677)
- send and validate MCP-Protocol-Version header (#675)
Fixed
- improve error logging and remove token secret from logs (#685)
- refresh token expiry (#680)
- gate optional dependencies behind feature flags (#672)
- allow empty content in CallToolResult (#681)
- (schema) remove AddNullable from draft2020_12 settings (#664)
Other
- add prose documentation for core features to meet conformance (#702)
- Fix/sse channel replacement conflict (#682)
- document session management for streamable HTTP transport (#674)
0.16.0 - 2026-02-17
Added
- add support for custom HTTP headers in StreamableHttpClient (#655)
- (auth) add token_endpoint_auth_method to OAuthClientConfig (#648)
Fixed
- remove unnecessary doc-cfg (#661)
- duplicate meta serialization (#662)
- sort list_all() output in ToolRouter and PromptRouter for deterministic ordering (#665)
- align task response types with MCP spec (#658)
Other
- upgrade reqwest to 0.13.2 (#669)
- include LICENSE in final crate tarball (#657)
- (deps) update rand requirement from 0.9 to 0.10 (#650)
- remove unused axum dependency from server-side-http feature (#642)
- 11-25-2025 compliant Auth (#651)
- add rudof-mcp to MCP servers list (#645)
0.15.0 - 2026-02-10
Added
- (elicitation) add support URL elicitation. SEP-1036 (#605)
- enforce SEP-1577 MUST requirements for sampling with tools (#646)
- add native-tls as an optional TLS backend (#631)
- (capabilities) add extensions field for SEP-1724 (#643)
Fixed
- (tasks) avoid dropping completed task results during collection (#639)
- (auth) oauth metadata discovery (#641)
- compilation with --no-default-features (#593)
- (tasks) expose
execution.taskSupporton tools (#635) - (tasks) correct enum variant ordering for deserialization (#634)
Other
- Add optional description field to Implementation struct (#649)
- Implement SEP-1577: Sampling With Tools (#628)
0.14.0 - 2026-01-23
Fixed
- (tasks) #626 model task capabilities correctly (#627)
- don't treat non-success HTTP codes as transport errors (#618)
Other
- show README content on docs.rs (#583)
- added hyper-mcp to the list of built with rmcp (#621)
- Implement SEP-1319: Decouple Request Payload from RPC Methods (#617)
0.13.0 - 2026-01-15
Added
- provide blanket implementations for ClientHandler and ServerHandler traits (#609)
- (service) add close() method for graceful connection shutdown (#588)
- (auth) add StateStore trait for pluggable OAuth state storage (#614)
- (elicitation) implement SEP-1330 Elicitation Enum Schema Improvements (#539)
- (task) add task support (SEP-1686) (#536)
Fixed
- use the json rpc error from the initialize response and bubble it up to the client (#569)
- (build) fix build of the project when no features are selected (#606)
- use Semaphore instead of Notify in OneshotTransport to prevent race condition (#611)
- add OpenID Connect discovery support per spec-2025-11-25 4.3 (#598)
- only try to refresh access tokens if we have a refresh token or an expiry time (#594)
- (docs) add spreadsheet-mcp to Built with rmcp (#582)
Other
- (elicitation) improve enum schema builder, small changes of elicitation builder (#608)
- add pre-commit hook for conventional commit verification (#619)
- clean up optional dependencies (#546)
- re-export ServerSseMessage from session module (#612)
- Implement SEP-1699: Support SSE Polling via Server-Side Disconnect (#604)
- update README external links (#603)
- clarity and formatting (#602)
- Add optional icons field to RawResourceTemplate (#589)
0.12.0 - 2025-12-18
Added
Fixed
Other
- Add SEP-991 (CIMD) support for URL-based client IDs (#570)
- merge cached_schema_for_type into schema_for_type (#581)
- Add NexusCore MCP to project list (#573)
0.11.0 - 2025-12-08
Added
- (meta) add _meta field to prompts, resources and paginated result (#558)
- [breaking] remove SSE transport support (#562)
Fixed
- (streamable-http) gracefully shutdown while client connected (#494)
Other
- Implements outputSchema validation (#566)
- add video-transcriber-mcp-rs to projects built with rmcp (#565)
0.10.0 - 2025-12-01
Added
- add support for custom client notifications (#556)
Other
- replace paste with pastey for macros feature (#564)
0.9.1 - 2025-11-24
Added
- (streamable-http) support both SSE and JSON response formats (#540)
Fixed
- don't block on creating the SSE stream (#553)
- (shemars) use JSON Schema 2020-12 as Default Dialect (#549)
- (oauth) let OAuth discovery skip to next well-known URL candidate on JSON parse error. (#545)
Other
- Implementation of SEP-986: Specify Format for Tool Names (#551)
0.9.0 - 2025-11-17
Added
0.8.5 - 2025-11-05
Fixed
- (oauth) respect oauth-protected-resource discovery (#511)
0.8.4 - 2025-11-04
Fixed
- (oauth) fix oauth credential refresh (#509)
- do not manually construct fallback authorization metadata (#507)
- (doc) add stakpak-agent to Built with rmcp section (#500)
0.8.3 - 2025-10-22
Fixed
- accept 204 in addition to 202 on initialize (#497)
0.8.2 - 2025-10-21
Added
- add type-safe elicitation schema support (#465) (#466)
- (SEP-973) following change Icon.sizes from string to string array (#479)
Fixed
- (oauth) three oauth discovery and registration issues (#489)
- (oauth) dynamic client registration should be optional (#463)
- (sse-client) consume control frames; refresh message endpoint (#448)
Other
- Streamable HTTP: drain SSE frames until the initialize response, ignoring early notifications to prevent handshake timeouts (#467)
- bump crate version in README.md (#471)
0.8.1 - 2025-10-07
Fixed
- (oauth) pass bearer token to all streamable http requests (#476)
- fix spellcheck on intentional typo in CHANGELOG (#470)
0.8.0 - 2025-10-04
Added
- allow clients to override client_name (#469)
Fixed
- (oauth) support suffixed and prefixed well-known paths (#459)
- generate default schema for tools with no params (#446)
Other
- bump to rust 1.90.0 (#453)
0.7.0 - 2025-09-24
Fixed
- return auth errors (#451)
- (oauth) do not treat empty secret as valid for public clients (#443)
- (clippy) add doc comment for generated tool attr fn (#439)
- (oauth) require CSRF token as part of the OAuth authorization flow. (#435)
Other
- (root) Add Terminator to Built with rmcp section (#437)
- Non-empty paths in OAuth2 Authorization Server Metadata URLs (#441)
0.6.4 - 2025-09-11
Added
- (SEP-973) add support for icons and websiteUrl across relevant types (#432)
- implement context-aware completion (MCP 2025-06-18) (#396)
- add
titlefield for data types (#410)
Fixed
- crates/rmcp/src/handler/client/progress.rs XXXXXX -> dispatcher (#429)
- build issue due to missing struct field (#427)
- generate simple {} schema for tools with no parameters (#425)
Other
0.6.3 - 2025-09-04
Fixed
- change JSON-RPC request ID type from u32 to i64 (#416)
0.6.2 - 2025-09-04
Added
- (rmcp) add optional _meta to CallToolResult, EmbeddedResource, and ResourceContents (#386)
Fixed
- resolve compatibility issues with servers sending LSP notifications (#413)
- remove batched json rpc support (#408)
- transport-streamable-http-server depends on transport-worker (#405)
- (typo) correct typo in error message for transport cancellation and field. (#404)
Other
- Spec conformance: meta support and spec updates (#415)
- add the rmcp-openapi and rmcp-actix-web related projects (#406)
0.6.1 - 2025-08-29
Added
- (rmcp) add authorization header support for the streamable http client (#390)
- (model) add helpers to build enum from concrete values (#393)
- (model) expose client method name (#391)
- add resource_link support to tools and prompts (#381)
- Add prompt support (#351)
- include reqwest in transport-streamble-http-client feature (#376)
Fixed
- (auth) url parse is not correct (#402)
- (readme) missing use declarations, more accurate server instructions (#399)
- enhance transport graceful shutdown with proper writer closure (#392)
Other
- simplify remove_route method signature (#401)
0.6.0 - 2025-08-19
Added
Fixed
- match shape of the calltoolresult schema (#377)
- make stdio shutdown more graceful (#364)
- (tool) remove unnecessary schema validation (#375)
- (rmcp) return serialized json with structured content (#368)
Other
0.5.0 - 2025-08-07
Fixed
- correct numeric types in progress notifications (#361)
0.4.1 - 2025-08-07
Fixed
- (rmcp) allow both content and structured content (#359)
0.4.0 - 2025-08-05
Added
- [breaking] Add support for
Tool.outputSchemaandCallToolResult.structuredContent(#316)
Fixed
0.3.2 - 2025-07-30
Fixed
- (capabilities) do not serialize None as null for
list_changed(#341) - (Transport) close oneshot transport on error (#340)
- (oauth) expose OAuthTokenResponse publicly (#335)
0.3.1 - 2025-07-29
Fixed
- use mimeType instead of mime_type for MCP specification compliance (#339)
- return a 405 for GET and DELETE if stateful_mode=false (#331)
- propagate tracing spans when spawning new tokio tasks (#334)
- Explicitly added client_id as an extra parameter causes bad token requests (#322)
Other
- Fix formatting in crate descriptions in README.md (#333)
0.3.0 - 2025-07-15
Added
Other
- (deps) update schemars requirement from 0.8 to 1.0 (#258)
- (rmcp) bump rmcp-macros version to match (#311)
- fix packages used for server example (#309)
0.2.1 - 2025-07-03
Other
- (docs) Minor README updates (#301)
0.2.0 - 2025-07-02
Added
- mark boxed http body as sync (#291)
- add progress notification handling and related structures (#282)
- allow failable service creation in streamable HTTP tower service (#244)
- provide more context information (#236)
- stateless mode of streamable http client (#233)
- add cancellation_token method to
RunningService(#218) - better http server support (#199)
- throw initialize error detail (#192)
- sse client optionally skip the endpoint event (#187)
- (server) add annotation to tool macro (#184)
- (model) add json schema generation support for all model types (#176)
- (openapi) add OpenAPI v3 compatibility and test for nullable field schema workaround (#135) (#137)
- (extension) extract http request part into rmcp extension (#163)
- (transport) support streamable http server (#152)
- (oauth) fixes + cache client credentials (#157)
- allow use of reqwest without ring provider (#155)
- extensions to context (#102)
- revision-2025-03-26 without streamable http (#84)
- (tool) allow tool call return a serializable value in json format (#75) (#78)
- Sse server auto ping (#74)
- (transport) Sse client transport trait (#67)
Fixed
- let users decide what to wrap in child process command (#279)
- cancellable initialization process (#280)
- inject part into extension when handing init req (#275)
- streamable http server close request channel on response(#266) (#270)
- streamable http client close on response (#268)
- expose TokioChildWrapper::id() in TokioChildProcess and TokioChildProcessOut (#254)
- add compatibility handling for non-standard notifications in async_rw (#247)
- allow SSE server router to be nested (#240)
- error for status in post method of streamable http client (#238)
- disable wasmbind in chrono for wasm32-unknown-unknown (#234)
- (examples) add clients in examples's readme (#225)
- generic ServerHandler (#223)
- comment error (#215)
- resolve the server 406 error in API calls (#203)
- sse endpoint build follow js's
new URL(url, base)(#197) - more friendly interface to get service error (#190)
- cleanup zombie processes for child process client (#156)
- (schemar) use self-defined settings (#180)
- (transport-sse-server) cleanup on connection drop (#165)
- (test) skip serialize tool's annotation if empty (#160)
- fix resource leak (#136)
- (handler) do call handler methods when initialize server (#118)
- (server) schemars compilation errors (#104)
- (test) fix test introduced by #97 (#101)
- (macro) add generics marco types support (#98)
- (typo) nit language corrections (#90)
- (typo) s/marcos/macros/ (#85)
- (client) add error enum while deal client info (#76)
- (notification) fix wrongly error report in notification (#70)
- (test) fix tool deserialization error (#68)
- (server) add error enum while deal server info (#51)
Other
- add simpling example and test (#289)
- add update for test_message_schema (#286)
- add notion clear in model.rs (#284)
- cov settings, and fix several building warnings (#281)
- refactor tool macros and router implementation (#261)
- fix regression in URL joining (#265)
- remove erroneous definitions_path (#264)
- allow using a TokioCommandWrap for TokioChildProcess::new closes #243 (#245)
- Fix typo (#249)
- provide http server as tower service (#228)
- (deps) update sse-stream requirement from 0.1.4 to 0.2.0 (#230)
- Server info is only retrieved once during initialization (#214)
- (deps) update base64 requirement from 0.21 to 0.22 (#209)
- revert badge (#202)
- use hierarchical readme for publishing (#198)
- Ci/coverage badge (#191)
- fix error introduced by merge, and reorganize feature (#185)
- Transport trait and worker transport, and streamable http client with those new features. (#167)
- add oauth2 support (#130)
- remove un-used tower.rs (#125)
- update calculator example description (#115)
- fix the url (#120)
- add a simple chat client for example (#119)
- add an overview to
rmcp/src/lib.rs(#116) - (context) test context request handling and refactor for reusable client-server tests (#97)
- (logging) Add tests for logging (#96)
- Adopt Devcontainer for Development Environment (#81)
- fix typos (#79)
- format and fix typo (#72)
- add documentation generation job (#59)
- add test with js server (#65)
- fmt the project (#54)
- (sse_server) separate router and server startup (#52)
- fix broken link (#53)
- fix the branch name for git dependency (#46)
- Move whole rmcp crate to official rust sdk (#44)
- Initial commit