Skip to content

v0.12.0: MCP SDK v2 and protocol revision 2026-07-28

Choose a tag to compare

@cyanheads cyanheads released this 20 Aug 10:24
· 31 commits to main since this release
v0.12.0
378ddf4

MCP SDK v2 and protocol revision 2026-07-28

  • @modelcontextprotocol/server + @modelcontextprotocol/client replace @modelcontextprotocol/sdk and @hono/mcp; every HTTP endpoint serves revision 2026-07-28 alongside the negotiated 2025 era (#305)
  • ctx.requestInput(spec) and ctx.inputs replace ctx.elicit — one handler serves both eras, with expectInputRequired and createMockContext({ inputResponses, requestState }) for driving the re-entry round
  • Context extends RequestContext and RequestContext is closed — extra plus withExtra(ctx, fields) replace the removed index signature (#110)
  • The experimental tasks surface is gone upstream: task: true, TaskManager, ctx.progress, the tasks capability, the ./tasks subpath, and TASK_STORE_*
  • Tool inputs are strict — an undeclared argument key is rejected by name, and inputSchema advertises additionalProperties: false (#232)
  • The advertised outputSchema declares the error envelope, and tool() rejects an error field on output or enrichment (#241)
  • resources: { subscribe: true } is advertised and backed, and ctx.notifyResourceUpdated(uri) reaches 2026-era clients (#354)
  • ctx.log also emits notifications/message, gated by the client's logging/setLevel
  • Advertised JSON Schema is 2020-12, and prompt() argument requiredness follows the emitted schema (#258)
  • A handler ctx no longer leaks through service errors — both the error and log sinks project to RequestContext via the new toCanonicalContext before serializing
  • Also fixed: flat path: message validation text (#66), -32602 for an unknown tool, 415 on a non-JSON Content-Type, a refined output schema registering again, operation and extra carried onto the handler context, an input_required round no longer counted as a failure, and handler notifications reaching every transport
  • Internal: skills and telemetry docs refreshed for SDK v2, the task-handler duck-type dropped from definition discovery, Biome config schema synced to 2.5.8
  • Upgrading: swap the SDK imports, delete task tools, rewrite ctx.elicit calls, rename any error output field — the changelog entry lists the ordered steps
  • deps: openai peer widens to ^6.48.0 || ^7.0.0, nanoid pinned in overrides, and dev-dep bumps clear the transitive undici advisory

CHANGELOG v0.12.0