New features and changes have landed, making it a good time to cut a release. Further feature proposals can be incorporated in future releases.
12 KiB
12 KiB
Changelog
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]
[0.23.0] - 2026-07-07
Added
- Add a session-ownership hook to
StreamableHTTPTransport
Changed
- Require calling
MCP::Client#connectbefore sending requests on stdio transport (#427)
Deprecated
- Annotate Roots, Sampling, and Logging APIs as deprecated per SEP-2577 (#429)
Fixed
- Fix an incorrect
result: nullresponse to an id-bearing notification message (#435) - Validate
HostandOriginheaders to prevent DNS rebinding per MCP 2025-11-25 - Bound stateful session retention to prevent an initialize-flood DoS
- Bound stdio frame reads with
max_line_bytes - Bound request body and frame reads to prevent memory-exhaustion DoS
[0.22.0] - 2026-06-27
Added
- Add
audiencerole validation forMCP::Annotationsper MCP specification (#422) - Send SEP-2243
Mcp-MethodandMcp-Nameheaders per MCP specification (#423) - Support client-side
notifications/cancelledper MCP specification (#425)
Changed
- Conform Tool Schemas to JSON Schema 2020-12 per SEP-2106 (#417)
Fixed
- Fix a
SyntaxErroron Ruby 2.7.0 caused by arguments forwarding syntax (#419)
[0.21.0] - 2026-06-20
Added
- Support capability extensions per SEP-2133 (#405)
- Add range validation for
MCP::Annotations#priorityper MCP specification (#410) - Isolate stateless requests in ephemeral sessions per SEP-2567 (#415)
Changed
- Set OIDC
application_typeon Dynamic Client Registration per SEP-837 (#408) - Fall back to legacy 2025-03-26 OAuth discovery for servers without PRM (#414)
[0.20.0] - 2026-06-14
Added
- Support W3C Trace Context Propagation via
_metaper SEP-414 (#397) - Support OAuth
client_credentialsgrant in OAuth client (#399) - Add
annotationsfield toMCP::ResourceandMCP::ResourceTemplateper MCP specification (#403)
Changed
- Re-run OAuth flow on 403
insufficient_scope(step-up) (#368) - Speed up
Tool::Schemavalidation by 5x to 100x (#369) - Use JSON-RPC error envelope for
StreamableHTTPTransporterrors (#371) - Pin RFC 8414 default well-known suffix per SEP-2351 (#395)
- Default missing
MCP-Protocol-Versionto2025-03-26inStreamableHTTPTransport(#392)
Fixed
- Preserve the request ID in invalid request error responses (#400)
- Standardize Resource Not Found errors on -32602 with URI data per SEP-2164 (#402)
[0.19.0] - 2026-06-13
Added
- Support Client ID Metadata Documents in OAuth client (#361)
- Request
offline_accessscope when supported (#365) - Add
sizefield toMCP::Resourceper MCP specification (#393)
[0.18.0] - 2026-05-30
Added
- Support server-to-client
pingper MCP specification (#358)
Changed
- Warn on implicit stdio initialization (#338)
- Cache
Tool::Schemavalidation to avoid re-validating identical schemas (#363)
Fixed
- Fix case-sensitive
Acceptheader comparison (#359)
[0.17.0] - 2026-05-19
Added
- Add OAuth 2.1 client support for MCP authorization flow (#353)
Fixed
- Validate
MCP-Protocol-Versionheader inStreamableHTTPTransport(#347) - Reject duplicate
initializerequests (#350) - Reject non-Hash JSON-RPC bodies in
StreamableHTTPTransport(#354)
[0.16.0] - 2026-05-14
Added
- Add opt-in tool output validation (#344)
Changed
- Advertise JSON Schema 2020-12 dialect on emitted tool schemas (#342)
Fixed
- Preserve client tool output schemas (#343)
- Fix missing
output_schemaargument indefine_toolAPI (#301)
[0.15.0] - 2026-05-05
Added
- Support
notifications/cancelledper MCP specification (#332) - Add client-level
connectfor initialize handshake (#327) - Add client-level
connecthandshake to stdio transport (#336)
Changed
- Return tool argument validation failures as tool execution errors (#333)
Removed
- Remove obsolete
MCP::Transportsmodule (#331)
[0.14.0] - 2026-04-24
Added
- Support pagination per MCP specification (#320)
- Support resource subscriptions per MCP specification (#313)
- Add
roots/listandnotifications/roots/list_changedsupport (#315) - Support JSON response mode for
StreamableHTTPTransport(#328) - Add HTTP client close for explicit session termination (#326)
- Track
Mcp-Session-Idand protocol version in HTTP client (#325) - Support
pingclient API per MCP specification (#324)
Fixed
- Handle 202 Accepted response in HTTP client (#323)
Changed
- Parse SSE responses in HTTP client via
event_stream_parser(#322)
[0.13.0] - 2026-04-16
Added
- Make
StreamableHTTPTransporta Rack application (#263) - Support
elicitation/createper MCP specification (#312) - Add
around_requesthook for request instrumentation (#309) - Add
_metafield to resource, content, and result classes (#310)
Removed
- Remove
Server#create_sampling_messagedirect call (#311)
[0.12.0] - 2026-04-11
Added
- Support customizing the Faraday client in
MCP::Client::HTTP(#306)
Changed
- Auto-set
server.transportinTransport#initialize(#305)
Fixed
- Validate Content-Type on POST requests (#304)
[0.11.0] - 2026-04-06
Added
- Support
sampling/createMessageper MCP specification (#282) - Support
completion/completeper MCP specification (#289)
Fixed
- Support POST response SSE streams for server-to-client messages (#294)
- Return protocol errors for invalid arguments and server errors (#285)
- Fix client methods silently swallowing JSON-RPC error responses (#281)
- Close streams outside mutex in session cleanup (#291)
[0.10.0] - 2026-03-30
Added
- Session expiry controls for
StreamableHTTPTransportviasession_idle_timeout:option (#268)
Changed
ServerSessionfor per-connection state (#275)
Removed
- Remove
Server#notify_progressbroadcast API (#276) - Remove undocumented handler override methods (#270)
Fixed
- Reject POST requests without session ID in stateful mode (#274)
[0.9.2] - 2026-03-27
Fixed
- Use accessor method in
server_context_with_metainstead of ivar (#273) - Reject duplicate SSE connections with 409 to prevent stream hijacking
[0.9.1] - 2026-03-23
Added
- Allow
Client#call_toolto accept a tool name (#266)
Fixed
- Return 404 for invalid session ID in
handle_delete(#261)
[0.9.0] - 2026-03-20
Added
MCP::Client::Stdiotransport (#262)- Progress notifications per MCP specification (#254)
- Automatic
_metaparameter extraction support (#172) - CORS and Accept wildcard support for browser-based MCP clients (#253)
Changed
- Use
autoloadto defer loading of unused subsystems (#255) - Reduce release package size (#239)
Fixed
- Return 404 for invalid session ID in
handle_regular_request(#257) - Use mutex-protected
session_exists?inhandle_regular_request(#258)
[0.8.0] - 2026-03-03
Added
Content::EmbeddedResourceclass for embedded resource content type (#244)Content::Audioclass for audio content type (#243)$refsupport inTool::Schemafor protocol version 2025-11-25 (#242)- MCP conformance test suite (#248)
Fixed
- Handle
Errno::ECONNRESETin SSE stream operations (#249) - Fix default handler return values to comply with MCP spec (#247)
- Fix
Prompt#validate_arguments!crash when arguments arenil(#246) - Return 202 Accepted for SSE responses per MCP spec (#245)
- Fix
Content::Image#to_hto returnmimeType(camelCase) per MCP spec (#241)
[0.7.1] - 2026-02-21
Fixed
- Fix
Resource::Contents#to_hto use correct property names per MCP spec (#235) - Return JSON-RPC protocol errors for unknown tool calls (#231)
- Fix
logging/setLevelto return empty hash per MCP specification (#230)
[0.7.0] - 2026-02-14
Added
loggingsupport (#103)- Protocol version negotiation to server initialization (#223)
- Tool arguments to instrumentation data (#218)
- Client info to instrumentation callback (#221)
resource_templatestoMCP::Client(#225)
Changed
- Extract
MCP::Annotationsinto a dedicated file (#224)
Fixed
Resource::Embeddednot setting@resourceininitialize(#220)
[0.6.0] - 2026-01-16
Changed
- Update licensing to Apache 2.0 for new contributions (#213)
Fixed
- Omit
iconsfrom responses when empty or nil to reduce context window usage (#212)
[0.5.0] - 2026-01-11
Added
- Protocol specification version "2025-11-25" support (#184)
iconsparameter support (#205)websiteUrlparameter inserverInfo(#188)descriptionparameter inserverInfo(#201)additionalPropertiessupport for schema validation (#198)- "Draft" protocol version to supported versions (#179)
statelessmode for high availability (#101)- Exception messages for tool call errors (#194)
- Elicitation skeleton (#178)
prompts/listandprompts/getsupport to client (#163)- Accept header validation for HTTP client transport (#207)
- Ruby 2.7 - Ruby 3.1 support (#206)
Changed
- Make tool names stricter (#204)
Fixed
- Symlink path comparison in schema validation (#193)
- Duplicate tool names across namespaces now raise an error (#199)
- Tool error handling to follow MCP spec (#165)
- XSS vulnerability in json_rpc_handler (#175)
[0.4.0] - 2025-10-15
Added
- Client resources support with
resources/listandresources/readmethods (#160) _metafield support for Tool schema (#124)_metafield support for Prompttitlefield support for prompt argumentscall_tool_rawmethod to client for accessing full tool responses (#149)- Structured content support in tool responses (#147)
- AGENTS.md development guidance documentation (#134)
- Dependabot configuration for automated dependency updates (#138)
Changed
- Set default
contentto empty array instead ofnil(#150) - Improved prompt spec compliance (#153)
- Allow output schema to be array of objects (#144)
- Return 202 response code for accepted JSON-RPC notifications (#114)
- Added validation to
MCP::Configurationsetters (#145) - Updated metaschema URI format for cross-OS compatibility
Fixed
- Client tools functionality and test coverage (#166)
- Client resources test for empty responses (#162)
- Documentation typos and incorrect examples (#157, #146)
- Removed redundant transport requires (#154)
- Cleaned up unused block parameters and magic comments
[0.3.0] - 2025-09-14
Added
- Tool output schema support with comprehensive validation (#122)
- HTTP client transport layer for MCP clients (#28)
- Tool annotations validation for protocol compatibility (#122)
- Server instructions support (#87)
- Title support in server info (#119)
- Default values for tool annotation hints (#118)
- Notifications/initialized method implementation (#84)
Changed
- Make default protocol version the latest specification version (#83)
- Protocol version validation to ensure valid values (#80)
- Improved tool handling for tools with no arguments (#85, #86)
- Better error handling and response API (#109)
Fixed
- JSON-RPC notification format in Streamable HTTP transport (#91)
- Errors when title is not specified (#126)
- Tools with missing arguments handling (#86)
- Namespacing issues in README examples (#89)
[0.2.0] - 2025-07-15
Added
- Custom methods support via
define_custom_method(#75) - Streamable HTTP transport implementation (#33)
- Tool argument validation against schemas (#43)
Changed
- Server context is now optional for Tools and Prompts (#54)
- Improved capability handling and removed automatic capability determination (#61, #63)
- Refactored architecture in preparation for client support (#27)
Fixed
- Input schema validation for schemas without required fields (#73)
- Error handling when sending notifications (#70)
[0.1.0] - 2025-05-30
Initial release in collaboration with Shopify