
0.15  2026-07-30
  - Updated to MCP protocol revision 2026-07-28, which makes the protocol stateless. This is a breaking change for
    every user of this module.
  - Removed the initialize handshake, protocol sessions, and the Mcp-Session-Id header. Every request now declares
    the protocol version and client capabilities it was made with in _meta.
  - Removed MCP::Server::Session, and the sessions and session_timeout attributes from MCP::Server::Transport::HTTP.
    GET and DELETE requests are now answered with status 405.
  - Removed initialize_session, delete_session, ping, and session_id from MCP::Client.
  - Removed the ping method and the RESOURCE_NOT_FOUND constant. Prompts, resources, and tools that were not found
    now use INVALID_PARAMS, and unknown methods are answered with status 404.
  - Added MCP::Server::Legacy, a temporary fallback that answers the initialize handshake of protocol revisions
    older than 2026-07-28, so clients that have not been updated yet can still list and call tools, prompts, and
    resources. It also adds a legacy attribute to MCP::Server::Context, and will be removed again in a future
    release.
  - Added the server/discover method, which replaces initialize, and an instructions attribute to MCP::Server.
  - Added a discover method to MCP::Client.
  - Added subscriptions/listen, which replaces the GET stream and resources/subscribe, to both transports.
  - Added MCP::Server::Subscription class, and a subscriptions attribute to both transports.
  - Added a listen method and a notification event to MCP::Client.
  - Added support for multi-round tool requests, with an input_required method on MCP::Primitive that seals its
    request state with HMAC-SHA256, and matching input_responses and request_state options for call_tool, get_prompt,
    and read_resource in MCP::Client.
  - Added state_secret and state_timeout attributes to MCP::Server.
  - Added input_responses, principal, raw_request_state, state_binding, state_secret, and state_timeout attributes,
    and request_state and seal_state methods, to MCP::Server::Context.
  - Added routing header validation to MCP::Server::Transport::HTTP, covering MCP-Protocol-Version, Mcp-Method,
    Mcp-Name, and the Mcp-Param-* headers declared with x-mcp-header in a tool input schema.
  - Added an origins attribute to MCP::Server::Transport::HTTP, to protect against DNS rebinding attacks.
  - Added cache hints to discovery, list, and read results, with cache_scope and cache_ttl attributes on MCP::Server
    and MCP::Primitive.
  - Added a resultType field and server info to every result.
  - Added a log attribute to MCP::Server, and the INTERNAL_ERROR constant.
  - Fixed a bug where an exception thrown by a prompt, resource, or tool, or a rejected promise returned by one,
    was not turned into a JSON-RPC error. Over stdio it terminated the server, and over HTTP it produced a response
    without a body and leaked the notification stream. The exception is now logged and answered with
    INTERNAL_ERROR.
  - Added JSON Schema 2020-12 support to MCP::Tool, which is now the default dialect, together with a
    max_schema_depth attribute and validation of structuredContent against output_schema. This requires
    JSON::Schema::Tiny 0.034.
  - Added client_capabilities, client_info, log_level, and protocol_version attributes, and a notify_log method, to
    MCP::Server::Context.
  - Added a cancelled event, and cancel and is_cancelled methods, to MCP::Server::Context, so long running tools can
    stop as soon as a client goes away. MCP::Server::Context is now a Mojo::EventEmitter.
  - Added HEADER_MISMATCH, META_CLIENT_CAPABILITIES, META_CLIENT_INFO, META_LOG_LEVEL, META_PROTOCOL_VERSION,
    META_SERVER_INFO, META_SUBSCRIPTION_ID, MISSING_CLIENT_CAPABILITY, SUPPORTED_VERSIONS, and
    UNSUPPORTED_PROTOCOL_VERSION constants to MCP::Constants.
  - Added capabilities and protocol_version attributes to MCP::Client, which renegotiates once when a server rejects
    its protocol version.
  - Improved progress and log notifications to be delivered on the response stream of the request they belong to, so
    they no longer require streaming to be enabled and work with pre-forking web servers.
  - Added a tutorial to the MCP documentation, introducing tools, prompts, resources, and everything around them.
  - Added examples/perldoc_stdio.pl, the server built in the tutorial.

0.13  2026-06-22
  - Switched from JSON::Valdiator to JSON::Schema::Tiny for better portability.

0.12  2026-06-19
  - Fixed bug in MCP::Server::Transport::Stdio where the server could disconnect when reading from Windows pipes,
    such as when spawned by Claude Desktop.

0.11  2026-06-19
  - Added OAuth scope support, so MCP servers can act as OAuth 2.0 resource servers.
  - Added scopes attribute to MCP::Primitive, and therefore to MCP::Tool, MCP::Prompt, and MCP::Resource.
  - Added scopes and insufficient_scope attributes, and a has_scope method, to MCP::Server::Context.
  - Added auth and metadata_url attributes to MCP::Server::Transport::HTTP.
  - Added headers attribute to MCP::Client.
  - Added oauth_metadata method to MCP::Server.
  - Added INSUFFICIENT_SCOPE constant to MCP::Constants.

0.10  2026-05-06
  - Added opt-in server-to-client streaming and session termination to the HTTP transport. Not compatible with
    pre-forking web servers.
  - Added support for list_changed notifications.
  - Added support for progress notifications.
  - Added MCP::Primitive class.
  - Added MCP::Server::Context class.
  - Added MCP::Server::Session class.
  - Added heartbeat, session_timeout, sessions, and streaming attributes, and a notify method, to
    MCP::Server::Transport::HTTP.
  - Added notify method to MCP::Server::Transport::Stdio.
  - Added notifications method to MCP::Server::Transport.
  - Added notify_all method to MCP::Server::Transport::HTTP and MCP::Server::Transport::Stdio.
  - Added notify_list_changed method to MCP::Server.
  - Added delete_session method to MCP::Client.

0.08  2026-02-17
  - Added support for tool annotations. (d3flex)

0.07  2026-01-16
  - Fixed bug in MCP::Prompt where text prompts had the wrong format.

0.06  2025-12-05
  - Protocol version is now 2025-11-25.
  - Added support for resources.
  - Added support for audio and resource results.
  - Added support for sessions specific prompt, resource, and tool lists.
  - Added MCP::Resource class.
  - Added read_resource and list_resources methods to MCP::Client.
  - Added resource method to MCP::Server.
  - Added audio_result and resource_link_result methods to MCP::Tool.
  - Added prompts, resources, and tools events to MCP::Server.

0.05  2025-08-28
  - Added support for prompts.
  - Added MCP::Prompt class.
  - Added get_prompt and list_prompts methods to MCP::Client.
  - Added prompt method to MCP::Server.

0.04  2025-08-04
  - Added support for structured content.
  - Added output_schema attribute to MCP::Tool.
  - Added structured_result method to MCP::Tool.

0.03  2025-08-01
  - Added image_result method to MCP::Tool.
  - Improved streaming HTTP transport to use SSE for async responses.

0.02  2025-08-01
  - Fixed support for tool calls without arguments.

0.01  2025-08-01
  - First release.
