Skip to content

Spec-conformant Tasks, automatic pagination, and reliability hardening

Choose a tag to compare

@simonx1 simonx1 released this 04 Jul 12:48
· 66 commits to main since this release
74e17eb

1.1.0 (2026-07-04)

Breaking Changes

  • Tasks API rewritten to conform to MCP 2025-11-25. The previous implementation
    targeted a tasks/create method that does not exist in the specification.
    • Removed Client#create_task. To create a task, augment a tools/call via the new
      Client#call_tool_as_task(name, arguments, ttl:), which returns a MCPClient::Task.
    • MCPClient::Task fields renamed and reduced to the spec set: idtask_id,
      statestatus; added status_message, created_at, last_updated_at, ttl,
      poll_interval; removed progress, total, message, result, progress_token,
      and progress_percentage. Statuses are now working, input_required,
      completed, failed, cancelled (was pending/running/…).
    • Client#get_task and Client#cancel_task now send the taskId parameter (was id)
      and return a Task with the new field set.

New Features

  • Client#call_tool_as_task — create a task by augmenting tools/call (gated on the
    server's tasks.requests.tools.call capability and the tool's execution.taskSupport).
  • Client#get_task_result (tasks/result) — retrieve the underlying task result.
  • Client#list_tasks (tasks/list, paginated).
  • Tool-level task negotiation: Tool#task_support, #supports_task?, #task_required?,
    #task_optional?, #task_forbidden? (parsed from execution.taskSupport).
  • The client handles notifications/tasks/status server notifications. (It does not
    declare a client tasks capability: that marks a task receiver for
    sampling/elicitation, which is not implemented — the client is a task requestor for
    tools/call only.)
  • Automatic pagination: list_tools and list_prompts now follow the server's
    nextCursor and return the complete set across all pages, with a per-call safety
    bound and an identical-cursor loop guard. No manual cursor handling is required (#148).

Bug Fixes

  • Tool annotations: corrected readOnlyHint/destructiveHint defaults to match the
    MCP 2025-11-25 ToolAnnotations schema — an un-annotated tool is treated as writable,
    potentially destructive, and open-world (#140).
  • Ping utility: the stdio and SSE transports now respond to a server-initiated ping
    with an empty result (#141).
  • stdio deadlock: drain the subprocess's stderr so a server that writes heavily to
    stderr can no longer block the pipe (#142).
  • MCP lifecycle: HTTP and Streamable HTTP transports now send
    notifications/initialized after initialize, as the specification requires (#143).
  • stdio memory leak: bound the pending-response map so responses to abandoned
    requests can no longer accumulate (#144).
  • Logger: stop overwriting a caller-supplied logger's formatter (#145).
  • Ruby 3.4+: declare base64 as a runtime dependency to avoid a LoadError (#146).
  • Retry safety: application-level ServerErrors are no longer retried; only transport
    errors and transient HTTP 5xx responses (TransientServerError) are retried, so
    non-idempotent requests are not executed twice (#149).
  • SSE reconnection: repaired the auto-reconnect path that could never fire because the
    monitor thread killed itself (#150).
  • OAuth discovery: authorization-server and protected-resource metadata discovery now
    follows RFC 8414 and RFC 9728 (#151).

Examples & Tooling

  • Added examples/run_all_examples.sh, a pre-release harness that boots each example's
    server, runs every example, and reports PASS/FAIL/SKIP, plus an examples/README.md
    index. Fixed stale examples (removed the retired Playwright browser_install call,
    robust first-tool selection in streamable_http_example.rb, updated the Gemini model)
    and wired the Zapier/OAuth examples through a gitignored examples/secrets.env (#153).

Documentation

  • Fixed the README OAuth snippet require and corrected method names in the changelog (#147).

Dependencies

  • Bumped faraday to 2.14.3, plus routine development-dependency updates.