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.

[1.1.0] - 2026-07-12

Added

  • handler_opts request-identity seam on MCP.Transport.StreamableHTTP.Plug. A new public Plug option threads request-scoped options into each session's handler init/1, so an authenticated Streamable-HTTP MCP server can bind a pipeline-established identity into handler state without forking the Plug. Two forms:
    • Statichandler_opts: keyword(), passed verbatim to Handler.init/1.
    • Factoryhandler_opts: (Plug.Conn.t() -> keyword()), evaluated once per session at the initialize request against that request's conn (e.g. reading conn.assigns set by an upstream auth Plug), then bound for the session's lifetime.
  • Validated against EMFA's consumer acceptance criteria (AC1–AC8) in the test suite, and by an external consumer running the seam in production against real Jira.

Security

  • Identity is established server-side by the authenticated Plug pipeline and bound at the initialize trust boundary — it is delivered to the handler via init/1 opts and read from handler state, never supplied by the model as a tool-call argument (which is model-controlled and spoofable). The conn is never leaked into handle_call_tool/3,4, keeping handlers transport-agnostic. A factory that raises or returns a non-keyword fails the session cleanly at initialize (HTTP 500 / JSON-RPC -32603) with no session started and no server-side detail leaked to the client.

Changed

  • Backward-compatible: with no handler_opts (the default []), behaviour is identical to prior releases — existing consumers are unaffected.
  • Docs: clarified that the public Plug option is server_mod: (not the internal MCP.Server handler: key); documented the required client handshake ordering (initialize → notifications/initialized → tools/call; the per-session server stays :waiting until notifications/initialized); fixed the stale Examples link.

[1.0.2] - 2026-07-07

Changed

  • Documentation only — no code changes. Updated docs/prd.md, docs/architecture.md, docs/implementation-plan.md, and docs/onboarding.md headers to reflect the mcp_elixir_sdk package name and current version (they still referred to the pre-rename MCP Ex / v0.2.1). Directory paths (/workspace/elixir_code/mcp_ex/) are intentionally left unchanged.

1.0.1 - 2026-04-16

Changed

  • Renamed package from mcp_ex to mcp_elixir_sdk (the mcp_ex hex name was previously taken by another client-only library). The new name follows the official MCP SDK naming convention (mcp-go-sdk, mcp-python-sdk, mcp-ruby-sdk, mcp-typescript-sdk).
  • Top-level OTP application module renamed from McpEx.Application to MCPElixirSDK.Application (internal, not part of the public API).
  • Default client_info/server_info name updated to mcp_elixir_sdk.

Note

Public module names under the MCP.* namespace (e.g. MCP.Client, MCP.Server, MCP.Server.Handler, MCP.Transport.*) are unchanged, so existing code using these modules continues to work — only the dependency declaration needs updating.

1.0.0 - 2026-04-16

Added

  • First stable release (never published to hex — superseded by 1.0.1 due to package rename)
  • 100% MCP conformance (Tier 1, 30/30 scenarios, 40/40 checks)
  • Full hex package metadata, documentation, and usage rules for AI agents

0.2.3 - 2025-02-17

Changed

  • Updated documentation paths after workspace reorganization

0.2.2 - 2025-02-11

Added

  • Documented sampling timeout behavior over HTTP transport
  • Added link to mcp_ex_examples repo in README

0.2.1 - 2025-02-11

Changed

  • Rewrote README with accurate usage examples

0.2.0 - 2025-02-09

Added

  • 100% MCP conformance (Tier 1) — 30/30 scenarios, 40/40 checks
  • Async tool execution with handle_call_tool/4 and ToolContext
  • SSE streaming for intermediate messages during tool execution
  • Client features: sampling, roots, elicitation callbacks
  • Integration tests covering full client-server workflows

Changed

  • Phase 7 completion: conformance suite integration

0.1.0 - 2025-02-08

Added

  • Initial release
  • MCP Client GenServer with full protocol API
  • MCP Server GenServer with Handler behaviour
  • Stdio transport (newline-delimited JSON-RPC)
  • Streamable HTTP transport (POST + SSE) with Plug and Bandit
  • Core protocol types, JSON-RPC 2.0 messages, capability negotiation
  • Initialization handshake and capability auto-detection
  • Pagination support for list operations
  • Tools, resources, prompts, completions, and logging features