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.
- Support customizing the Faraday client in
MCP::Client::HTTP(#306)
- Auto-set
server.transportinTransport#initialize(#305)
- Validate Content-Type on POST requests (#304)
- Support
sampling/createMessageper MCP specification (#282) - Support
completion/completeper MCP specification (#289)
- 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)
- Session expiry controls for
StreamableHTTPTransportviasession_idle_timeout:option (#268)
ServerSessionfor per-connection state (#275)
- Remove
Server#notify_progressbroadcast API (#276) - Remove undocumented handler override methods (#270)
- Reject POST requests without session ID in stateful mode (#274)
- Use accessor method in
server_context_with_metainstead of ivar (#273) - Reject duplicate SSE connections with 409 to prevent stream hijacking
- Allow
Client#call_toolto accept a tool name (#266)
- Return 404 for invalid session ID in
handle_delete(#261)
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)
- Use
autoloadto defer loading of unused subsystems (#255) - Reduce release package size (#239)
- Return 404 for invalid session ID in
handle_regular_request(#257) - Use mutex-protected
session_exists?inhandle_regular_request(#258)
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)
- 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)
- 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)
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)
- Extract
MCP::Annotationsinto a dedicated file (#224)
Resource::Embeddednot setting@resourceininitialize(#220)
- Update licensing to Apache 2.0 for new contributions (#213)
- Omit
iconsfrom responses when empty or nil to reduce context window usage (#212)
- 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)
- Make tool names stricter (#204)
- 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)
- 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)
- 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
- 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
- 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)
- 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)
- 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)
- Custom methods support via
define_custom_method(#75) - Streamable HTTP transport implementation (#33)
- Tool argument validation against schemas (#43)
- 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)
- Input schema validation for schemas without required fields (#73)
- Error handling when sending notifications (#70)
Initial release in collaboration with Shopify