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

  • add SEP-414 trace context meta accessors (#910)
  • add SEP-2575 meta helpers (#942)

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

  • update Rust toolchain to 1.92 (#797)
  • unify IntoCallToolResult Result impls (#787)

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

  • docs update (#718)
  • (auth) [breaking] support returning extra fields from token exchange (#700)

Fixed

  • downgrade logging of message to TRACE to 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.taskSupport on 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

  • add support for custom requests (#590)
  • add support for custom server notifications (#580)

Fixed

  • update process-wrap to v9.0 (#586)
  • (oauth) rfc8414 should judement the response_types (#485)

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

  • (auth) implement CredentialStore trait (#542)
  • (tool) add _meta to tool definitions (#534)

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 title field 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

  • Skip notification in initialization handshake (#421)
  • add nvim-mcp project built by rmcp (#422)

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

  • Add MCP Elicitation support (#332)
  • keep internal error in worker's quit reason (#372)

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

  • add related project rustfs-mcp (#378)
  • (streamable) add document for extracting http info (#373)

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.outputSchema and CallToolResult.structuredContent (#316)

Fixed

  • don't wrap errors in streamable http auth client (#353)
  • (prompt) remove unused code (#343)

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

  • unified error type (#308)
  • (transport) add builder & expose child stderr (#305)

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