From 8b50489d8bce97b45da892e2c57f502c555456c5 Mon Sep 17 00:00:00 2001 From: Jhin Lee Date: Wed, 14 Oct 2026 11:32:24 -0400 Subject: [PATCH] chore(release): prepare SDK 2.4.3 --- .github/workflows/test_core.yml | 1 + CHANGELOG.md | 11 +++++++- README.md | 14 +++++----- ROADMAP.md | 4 ++- doc/examples.md | 4 +-- doc/getting-started.md | 2 +- doc/interoperability.md | 10 +++---- doc/mcp-2026-07-28-release-runbook.md | 27 ++++++++++--------- doc/quick-reference.md | 6 ++--- doc/spec-coverage-2026-07-28.md | 8 +++--- llms.txt | 6 ++--- pubspec.yaml | 2 +- .../mcp_2026_07_28_release_metadata.json | 2 +- 13 files changed, 55 insertions(+), 42 deletions(-) diff --git a/.github/workflows/test_core.yml b/.github/workflows/test_core.yml index 03229819..30e8c7d7 100644 --- a/.github/workflows/test_core.yml +++ b/.github/workflows/test_core.yml @@ -111,6 +111,7 @@ jobs: version: - 2.2.2 - 2.3.0 + - 2.4.2 steps: - name: Checkout code diff --git a/CHANGELOG.md b/CHANGELOG.md index a212d5e6..388597c2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,4 @@ -## Unreleased +## 2.4.3 ### Added @@ -6,6 +6,15 @@ Streamable HTTP deployment and authentication; install them with `dart run skills@ get`. +### Fixed + +- Corrected IO stream transport examples to use byte streams. + +### Compatibility + +- Public APIs, protocol behavior, and the minimum Dart 3.4 requirement are + unchanged. The separately versioned CLI remains at 0.2.1. + ## 2.4.2 `mcp_dart 2.4.2` prevents unbounded buffering of incoming stdio and IO stream diff --git a/README.md b/README.md index 78798c11..4c556caa 100644 --- a/README.md +++ b/README.md @@ -15,12 +15,12 @@ extensions, host UI behavior, an authorization-server implementation, JSON Schema external-reference resolution, and custom JSON Schema vocabularies. > [!IMPORTANT] -> This release is `mcp_dart 2.4.2`. The separately versioned stable CLI remains +> This release is `mcp_dart 2.4.3`. The separately versioned stable CLI remains > `mcp_dart_cli 0.2.1`, which requires `mcp_dart ^2.4.2`. > Current source passes every scored requirement in the official alpha.11 MCP > `2025-11-25` and `2026-07-28` client and server sets, including all 25 > required 2026 authorization scenarios, plus bidirectional published -> TypeScript SDK 2.2.0 and Python SDK 2.1.1 interoperability. +> TypeScript SDK 2.2.0 and Python SDK 2.3.0 interoperability. ## SDK Tier 1 target @@ -40,7 +40,7 @@ The public maintenance contract is documented in the | Package | Minimum Dart SDK | | --- | --- | -| `mcp_dart 2.4.2` | 3.4 | +| `mcp_dart 2.4.3` | 3.4 | | `mcp_dart_cli 0.2.1` | 3.12 | SDK-only generated projects retain the SDK's Dart 3.4 minimum. CLI projects @@ -65,7 +65,7 @@ important: ```yaml dependencies: - mcp_dart: ^2.4.2 + mcp_dart: ^2.4.3 ``` The snippets below use the current stable SDK line. Package versions @@ -107,7 +107,7 @@ commands. core conformance claim. - Automated MCP 2025-11-25 and MCP 2026-07-28 conformance, bidirectional published TypeScript SDK 2.2.0 interoperability, bidirectional Python SDK - 2.1.1 interoperability, real-browser transport tests, a real Flutter Web + 2.3.0 interoperability, real-browser transport tests, a real Flutter Web service integration in Chrome, deterministic widget tests, and an independent pinned JSON Schema Test Suite gate. - `mcp_dart 2.4.2` bounds incoming stdio and IO stream messages to 10 MiB by @@ -117,7 +117,7 @@ commands. - Hardened Streamable HTTP access and JSON-RPC error diagnostics, plus the deprecated, opt-in legacy HTTP+SSE client with same-origin routing and bidirectional interoperability against official - TypeScript SDK 1.30.0 and Python SDK 2.1.1 peers. + TypeScript SDK 1.32.1 and Python SDK 2.3.0 peers. MCP has three roles: a host owns the user experience, a client connects that host to one server, and a server exposes tools, resources, and prompts. A host @@ -253,7 +253,7 @@ surface. Re-check both packages' current releases before a production decision. - [Versioning policy](https://github.com/leehack/mcp_dart/blob/main/VERSIONING.md) - [Tier 1 roadmap](https://github.com/leehack/mcp_dart/blob/main/ROADMAP.md) - [SDK on pub.dev](https://pub.dev/packages/mcp_dart) -- [2.4.2 API reference](https://pub.dev/documentation/mcp_dart/2.4.2/) +- [2.4.3 API reference](https://pub.dev/documentation/mcp_dart/2.4.3/) - [Changelog](https://github.com/leehack/mcp_dart/blob/main/CHANGELOG.md) - [MCP 2026-07-28 specification](https://modelcontextprotocol.io/specification/2026-07-28) - [MCP 2025-11-25 specification](https://modelcontextprotocol.io/specification/2025-11-25) diff --git a/ROADMAP.md b/ROADMAP.md index eaa36d8d..ba609a75 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -10,7 +10,9 @@ through the ## Current baseline -- Stable `mcp_dart 2.4.2` and `mcp_dart_cli 0.2.1` releases. +- SDK 2.4.3 release preparation adds packaged agent skills and documentation + fixes. Published stable releases remain `mcp_dart 2.4.2` and + `mcp_dart_cli 0.2.1` until publication is verified. - SDK 2.4.2 fixes unbounded incoming stdio and IO stream buffering. See [GHSA-92g6-8c2f-55w5](https://github.com/leehack/mcp_dart/security/advisories/GHSA-92g6-8c2f-55w5) for affected versions and upgrade guidance. diff --git a/doc/examples.md b/doc/examples.md index 5ca1013f..d5119f22 100644 --- a/doc/examples.md +++ b/doc/examples.md @@ -141,8 +141,8 @@ dart run example/client_sse.dart - Session management - A real initialization, tool-list, and tool-call flow - Explicit Host and Origin allowlists for DNS-rebinding protection -- Process smoke tests and bidirectional official TypeScript SDK 1.30.0 and - Python SDK 2.1.1 SSE interoperability tests +- Process smoke tests and bidirectional official TypeScript SDK 1.32.1 and + Python SDK 2.3.0 SSE interoperability tests ### Streamable HTTP diff --git a/doc/getting-started.md b/doc/getting-started.md index e4647cc3..f657efc2 100644 --- a/doc/getting-started.md +++ b/doc/getting-started.md @@ -8,7 +8,7 @@ Add the MCP Dart SDK to your `pubspec.yaml`: ```yaml dependencies: - mcp_dart: ^2.4.2 + mcp_dart: ^2.4.3 ``` Then run: diff --git a/doc/interoperability.md b/doc/interoperability.md index 83ab636d..00e3bed1 100644 --- a/doc/interoperability.md +++ b/doc/interoperability.md @@ -25,15 +25,15 @@ For MCP 2026-07-28 coverage, see the | Dart client -> Dart server | Legacy HTTP+SSE | MCP 2025-11-25 | [`test/client/sse_client_test.dart`](../test/client/sse_client_test.dart), [`test/interop/browser_legacy_sse_client_test.dart`](../test/interop/browser_legacy_sse_client_test.dart), [`example/server_sse.dart`](../example/server_sse.dart), [`example/client_sse.dart`](../example/client_sse.dart) | Verified in source | Covers endpoint discovery, same-origin redirect-free POST routing, initialization, tool listing, tool execution, clean shutdown, and real-Chrome client lifecycle behavior. HTTP+SSE is deprecated; use Streamable HTTP for new integrations. | | Dart client -> TypeScript SDK server | stdio | MCP 2025-11-25 | [`test/interop/dart_client_with_ts_server_test.dart`](../test/interop/dart_client_with_ts_server_test.dart), [`test/interop/ts/`](../test/interop/ts/) | Verified | Requires the TypeScript fixture to be built before running the tagged interop tests. | | Dart client -> TypeScript SDK server | Streamable HTTP | MCP 2025-11-25 | [`test/interop/dart_client_with_ts_server_test.dart`](../test/interop/dart_client_with_ts_server_test.dart), [`test/interop/ts/`](../test/interop/ts/) | Verified | Covers tool calls and stale preconfigured session-id recovery. | -| Dart SDK ↔ TypeScript SDK 1.30.0 | Legacy HTTP+SSE | MCP 2025-11-25 | [`test/interop/dart_client_with_ts_server_test.dart`](../test/interop/dart_client_with_ts_server_test.dart), [`test/interop/ts/src/server.ts`](../test/interop/ts/src/server.ts), [`test/interop/ts/src/legacy_sse_client.ts`](../test/interop/ts/src/legacy_sse_client.ts) | Verified | The deprecated official TypeScript `SSEServerTransport` and `SSEClientTransport` each complete initialization, tool listing, and a tool call with the corresponding Dart peer over real loopback HTTP+SSE. | +| Dart SDK ↔ TypeScript SDK 1.32.1 | Legacy HTTP+SSE | MCP 2025-11-25 | [`test/interop/dart_client_with_ts_server_test.dart`](../test/interop/dart_client_with_ts_server_test.dart), [`test/interop/ts/src/server.ts`](../test/interop/ts/src/server.ts), [`test/interop/ts/src/legacy_sse_client.ts`](../test/interop/ts/src/legacy_sse_client.ts) | Verified | The deprecated official TypeScript `SSEServerTransport` and `SSEClientTransport` each complete initialization, tool listing, and a tool call with the corresponding Dart peer over real loopback HTTP+SSE. | | TypeScript SDK client -> Dart server | stdio | MCP 2025-11-25 | [`test/interop/ts_client_with_dart_server_test.dart`](../test/interop/ts_client_with_dart_server_test.dart), [`test/interop/test_dart_server.dart`](../test/interop/test_dart_server.dart) | Verified | Runs the compiled TypeScript client fixture against a Dart server process and checks that an official TS client can list tools immediately after the lifecycle handshake. | | TypeScript SDK client -> Dart server | Streamable HTTP | MCP 2025-11-25 | [`test/interop/ts_client_with_dart_server_test.dart`](../test/interop/ts_client_with_dart_server_test.dart), [`test/interop/test_dart_server.dart`](../test/interop/test_dart_server.dart) | Verified | Includes official TS Streamable HTTP client lifecycle coverage, pre-`initialized` operation rejection, GET SSE streams, and `Last-Event-ID` replay behavior. | | TypeScript SDK client -> Dart server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/ts_2026_07_28/`](../test/interop/ts_2026_07_28/), [`tool/testing/run_ts_2026_07_28_interop.dart`](../tool/testing/run_ts_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Published `@modelcontextprotocol/client@2.2.0` negotiates the post-#3002 wire with a spec-correct Dart server and covers discovery, routing headers, tool calls, multi-round input, progress, subscriptions, and cancellation. | | Dart MCP 2026-07-28 client -> TypeScript SDK server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/ts_2026_07_28/src/server.mjs`](../test/interop/ts_2026_07_28/src/server.mjs), [`tool/testing/run_ts_2026_07_28_interop.dart`](../tool/testing/run_ts_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Uses published `@modelcontextprotocol/server@2.2.0` through its `createMcpHandler` entry; covers `server/discover`, `tools/list`, `tools/call`, one-time `HeaderMismatch` metadata refresh and retry, MCP 2026-07-28 `input_required`, request-stream cancellation, and post-cancellation recovery. | | Dart client -> Python MCP server | stdio | Server-dependent | [`doc/transports.md`](transports.md#connect-to-python-server) | Documented recipe | The transport can spawn Python servers over stdio; the MCP 2025-11-25 recipe remains separate from the MCP 2026-07-28 fixture. | -| Python SDK 2.1.1 client -> Dart server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/python_2026_07_28/`](../test/interop/python_2026_07_28/), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Published `mcp==2.1.1` negotiates the canonical post-#3002 discovery wire and covers discovery, tool listing, and tool execution. | -| Dart MCP 2026-07-28 client -> Python SDK 2.1.1 server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/python_2026_07_28/server.py`](../test/interop/python_2026_07_28/server.py), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Uses the official Python SDK `mcp==2.1.1` server and covers discovery, protocol selection, `tools/list`, and `tools/call`. | -| Dart SDK ↔ Python SDK 2.1.1 | Legacy HTTP+SSE | MCP 2025-11-25 | [`test/interop/python_2026_07_28/legacy_sse_client.py`](../test/interop/python_2026_07_28/legacy_sse_client.py), [`test/interop/python_2026_07_28/legacy_sse_server.py`](../test/interop/python_2026_07_28/legacy_sse_server.py), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Published `mcp==2.1.1` retains the deprecated SSE client and server APIs. Both directions negotiate MCP 2025-11-25 and complete initialization, tool listing, and a tool call over real loopback HTTP+SSE. | +| Python SDK 2.3.0 client -> Dart server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/python_2026_07_28/`](../test/interop/python_2026_07_28/), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Published `mcp==2.3.0` negotiates the canonical post-#3002 discovery wire and covers discovery, tool listing, and tool execution. | +| Dart MCP 2026-07-28 client -> Python SDK 2.3.0 server | Streamable HTTP | MCP 2026-07-28 | [`test/interop/python_2026_07_28/server.py`](../test/interop/python_2026_07_28/server.py), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Uses the official Python SDK `mcp==2.3.0` server and covers discovery, protocol selection, `tools/list`, and `tools/call`. | +| Dart SDK ↔ Python SDK 2.3.0 | Legacy HTTP+SSE | MCP 2025-11-25 | [`test/interop/python_2026_07_28/legacy_sse_client.py`](../test/interop/python_2026_07_28/legacy_sse_client.py), [`test/interop/python_2026_07_28/legacy_sse_server.py`](../test/interop/python_2026_07_28/legacy_sse_server.py), [`tool/testing/run_python_2026_07_28_interop.dart`](../tool/testing/run_python_2026_07_28_interop.dart), [`interop_2026_07_28.yml`](../.github/workflows/interop_2026_07_28.yml) | Verified | Published `mcp==2.3.0` retains the deprecated SSE client and server APIs. Both directions negotiate MCP 2025-11-25 and complete initialization, tool listing, and a tool call over real loopback HTTP+SSE. | | Dart browser client -> Dart server | Streamable HTTP | MCP 2025-11-25 and MCP 2026-07-28 | [`test/browser/mcp_2026_07_28_streamable_http_test.dart`](../test/browser/mcp_2026_07_28_streamable_http_test.dart), [`tool/testing/run_browser_2026_07_28_interop.dart`](../tool/testing/run_browser_2026_07_28_interop.dart) | Verified | A real Chrome client completes 12 tool-list requests and 12 tool calls in each profile over cross-origin Streamable HTTP. It also proves MCP 2026-07-28 request-stream cancellation and recovery. The MCP 2025-11-25 case waits for response-stream reconnect timers and guards against browser connection-slot exhaustion. | | Flutter Web example -> Dart server | Streamable HTTP | MCP 2026-07-28 | [`example/flutter_http_client/test/browser_e2e_test.dart`](../example/flutter_http_client/test/browser_e2e_test.dart), [`tool/testing/run_flutter_web_example_e2e.dart`](../tool/testing/run_flutter_web_example_e2e.dart), [`test_core.yml`](../.github/workflows/test_core.yml) | Verified | The example's real service layer runs in Chrome and completes connection, 12 tool-list requests, 12 tool calls, expected RPC-error recovery, reconnect, a post-reconnect request, and disconnect. Deterministic widget tests cover the UI separately. Flutter Web cannot spawn stdio servers. | | MCP Apps host/client metadata | stdio or Streamable HTTP | MCP 2026-07-28 plus `io.modelcontextprotocol/ui` extension | [`doc/mcp-apps.md`](mcp-apps.md), [`example/mcp_apps_helpers_server.dart`](../example/mcp_apps_helpers_server.dart), [`test/types/mcp_ui_test.dart`](../test/types/mcp_ui_test.dart), [`test/server/mcp_ui_test.dart`](../test/server/mcp_ui_test.dart) | Verified | Verified coverage is limited to SDK metadata helpers, serialization, and checked-in examples; host rendering behavior varies by host, so verify UI metadata against your target host. | @@ -83,7 +83,7 @@ post-cancellation tool calls in addition to discovery and normal tool calls. The `Run MCP 2026-07-28 Interop` workflow covers relevant PRs, manual dispatch, and a daily schedule on `main`. -The official Python SDK 2.1.1 fixture runs each direction independently: +The official Python SDK 2.3.0 fixture runs each direction independently: ```bash python3 -m venv .dart_tool/python-2026-interop diff --git a/doc/mcp-2026-07-28-release-runbook.md b/doc/mcp-2026-07-28-release-runbook.md index 57ff7732..a86498ce 100644 --- a/doc/mcp-2026-07-28-release-runbook.md +++ b/doc/mcp-2026-07-28-release-runbook.md @@ -222,11 +222,11 @@ all required checks green and no unresolved review thread. On the final release-prep commit: -- Set the root package version to the selected stable SDK version (`2.4.2` for +- Set the root package version to the selected stable SDK version (`2.4.3` for the current follow-up release). - Restore root `documentation` and all user-facing repository links to `main`. - Replace older dependency snippets in the README, getting-started, - quick-reference, and current release docs with `mcp_dart: ^2.4.2`. Preserve + quick-reference, and current release docs with `mcp_dart: ^2.4.3`. Preserve version-specific historical migration guides. - Keep the durable `2026-07-28` document, fixture, command, and workflow names; update maturity wording only when it matches the reviewed upstream input. @@ -243,7 +243,7 @@ On the final release-prep commit: - Stop presenting `previewProtocolVersion` as the preferred public name. Keep it only as a deprecated alias of `stableProtocolVersion` for prerelease adopters, and update examples to use the stable/default constants. -- Move the relevant root changelog entries under `## 2.4.2` and remove wording +- Move the relevant root changelog entries under `## 2.4.3` and remove wording that presents the stable package itself as a preview. Keep upstream release-candidate facts explicit while they remain true. - Keep migration and compatibility notes explicit: `McpProtocol.stable` @@ -252,8 +252,8 @@ On the final release-prep commit: link it from the tagged README and changelog. - Run `dart pub publish --dry-run` again from a clean checkout of the exact release commit. Do not create the release tag until this succeeds. -- Run the shared metadata validator with `--package mcp_dart --tag v2.4.2`. - It must require substantive notes under the exact `## 2.4.2` changelog +- Run the shared metadata validator with `--package mcp_dart --tag v2.4.3`. + It must require substantive notes under the exact `## 2.4.3` changelog heading, exact reviewed input versions and pins, and verify that the default protocol is `2026-07-28` while the initialization and deprecated compatibility aliases remain at `2025-11-25`. @@ -288,7 +288,7 @@ coordinated prep cannot mix channels. reuse an existing tag only when that tag resolves to the exact original release commit; the workflow never moves it. Manual dispatch is a recovery path only. -2. Verify tag `v2.4.2`, the GitHub release, and the `Publish to pub.dev` workflow. +2. Verify tag `v2.4.3`, the GitHub release, and the `Publish to pub.dev` workflow. If GitHub release creation fails after the tag was pushed, use **Re-run all jobs** on the original failed `Create Release` run so the workflow retains the original release commit. Do not start a fresh dispatch after `main` @@ -296,14 +296,15 @@ coordinated prep cannot mix channels. different commit. If publication fails after the tag was pushed, rerun the failed tag-triggered `Publish to pub.dev` workflow; reusing a tag does not emit another push event. -3. Confirm pub.dev shows version `2.4.2`, immutable `v2.4.2` documentation +3. Confirm pub.dev shows version `2.4.3`, immutable `v2.4.3` documentation links, and a successful package analysis. Checked-in links on `main` remain pointed at `main`. -4. Create a clean temporary Dart project, resolve `mcp_dart: ^2.4.2`, and run a +4. Create a clean temporary Dart project, resolve `mcp_dart: ^2.4.3`, and run a minimal MCP 2026-07-28 client/server smoke test using only the published - package. For this release, exercise the incoming-message limits through - public stdio client, stdio server, and IO stream APIs, including valid - custom limits and fatal-overflow shutdown with a blocked outgoing write. + package. For this release, verify that all three agent skills are included + in the published archive and can be installed with `dart run skills@ get`. + Retain public stdio client, stdio server, and IO stream smoke coverage for + the incoming-message limits introduced in 2.4.2. Confirm the published package earns 160/160 under the current Pana. Do not start a selected CLI release until the published SDK dependency resolves @@ -311,8 +312,8 @@ publicly. ## 5. Prepare and publish `mcp_dart_cli` -Skip this section for the SDK-only 2.4.2 release. The already-published CLI -remains 0.2.0 and its `^2.3.0` SDK constraint accepts 2.4.2. +Skip this section for the SDK-only 2.4.3 release. The already-published CLI +remains 0.2.1 and its `^2.4.2` SDK constraint accepts 2.4.3. - Set the CLI version and `packageVersion` constant to `0.2.0`, and set `generatedSdkConstraint` to `^2.3.0`. diff --git a/doc/quick-reference.md b/doc/quick-reference.md index 9046eabb..46586c72 100644 --- a/doc/quick-reference.md +++ b/doc/quick-reference.md @@ -8,19 +8,19 @@ Use this page for common `mcp_dart` calls. The [server guide](server-guide.md), ```yaml dependencies: - mcp_dart: ^2.4.2 + mcp_dart: ^2.4.3 ``` ```dart import 'package:mcp_dart/mcp_dart.dart'; ``` -The 2.4.2 SDK requires Dart 3.4 or later. The stable 0.2.1 CLI requires +The 2.4.3 SDK requires Dart 3.4 or later. The stable 0.2.1 CLI requires Dart 3.12 or later. ## Protocol profile -The 2.4.2 SDK defaults to `McpProtocol.stable`: try MCP `2026-07-28`, then +The 2.4.3 SDK defaults to `McpProtocol.stable`: try MCP `2026-07-28`, then fall back to legacy initialization when needed. Body-only discovery probes are bounded to five seconds; HTTP retains its normal request timeout. diff --git a/doc/spec-coverage-2026-07-28.md b/doc/spec-coverage-2026-07-28.md index 7e98cb8b..442f42f7 100644 --- a/doc/spec-coverage-2026-07-28.md +++ b/doc/spec-coverage-2026-07-28.md @@ -107,7 +107,7 @@ groups and no unsupported-dialect or invalid-schema groups. CI runs the official conformance gates in the core workflow. The `Run MCP 2026-07-28 Interop` workflow runs the TypeScript SDK 2.2.0 and Python -SDK 2.1.1 interop fixtures on relevant PRs, manual dispatch, and the daily +SDK 2.3.0 interop fixtures on relevant PRs, manual dispatch, and the daily `main` schedule. ## Matrix @@ -115,9 +115,9 @@ SDK 2.1.1 interop fixtures on relevant PRs, manual dispatch, and the daily | Spec area | Official source | Requirement tracked here | Local coverage | Cross-SDK coverage | Official conformance | Status | | --- | --- | --- | --- | --- | --- | --- | | Default stable profile with legacy opt-out | [Versioning and compatibility](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning), [stdio backward compatibility](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports/stdio#backward-compatibility) | The 2.3 line defaults to `McpProtocol.stable`. Current source bounds silent discovery on body-only transports to five seconds before legacy fallback; if a stdio server exits during that probe, the transport starts a fresh child before `initialize`. HTTP keeps its normal request timeout. Callers can explicitly select `McpProtocol.legacy` or `McpProtocol.require2026`. | [`test/client/client_test.dart`](../test/client/client_test.dart), [`test/client/stdio_client_test.dart`](../test/client/stdio_client_test.dart), [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`doc/mcp-2026-07-28.md`](mcp-2026-07-28.md) | TypeScript SDK 2.2.0 interop covers explicit MCP 2026-07-28 negotiation; local tests cover the default-option, silent-legacy-server, process-exit fallback, and strict no-fallback paths. | MCP 2025-11-25 and MCP 2026-07-28 conformance both run in CI. | Verified | -| Version negotiation and discovery | [Discovery](https://modelcontextprotocol.io/specification/2026-07-28/server/discover), [Versioning](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning) | Servers implement `server/discover`, advertise supported versions and capabilities, reject unsupported versions with structured error data, and clients retry or fall back according to transport-era rules. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/conformance/mcp_2026_07_28_server.dart`](../test/conformance/mcp_2026_07_28_server.dart), [`test/conformance/mcp_2026_07_28_client.dart`](../test/conformance/mcp_2026_07_28_client.dart) | Published TypeScript SDK 2.2.0 and Python SDK 2.1.1 pass both directions on the post-#3002 wire. Dart retains read-only legacy-body compatibility for older prerelease peers. | Published alpha.11 includes conformance PR #403 and passes the post-#3002 discovery semantics. | Verified | +| Version negotiation and discovery | [Discovery](https://modelcontextprotocol.io/specification/2026-07-28/server/discover), [Versioning](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning) | Servers implement `server/discover`, advertise supported versions and capabilities, reject unsupported versions with structured error data, and clients retry or fall back according to transport-era rules. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/conformance/mcp_2026_07_28_server.dart`](../test/conformance/mcp_2026_07_28_server.dart), [`test/conformance/mcp_2026_07_28_client.dart`](../test/conformance/mcp_2026_07_28_client.dart) | Published TypeScript SDK 2.2.0 and Python SDK 2.3.0 pass both directions on the post-#3002 wire. Dart retains read-only legacy-body compatibility for older prerelease peers. | Published alpha.11 includes conformance PR #403 and passes the post-#3002 discovery semantics. | Verified | | Stateless request metadata | [Overview](https://modelcontextprotocol.io/specification/2026-07-28/basic), [Versioning](https://modelcontextprotocol.io/specification/2026-07-28/basic/versioning) | Every MCP 2026-07-28 request carries protocol version and client capabilities in `_meta`; client identity is optional, while a present malformed identity is rejected. Servers do not infer protocol state from a prior request. Non-MCP metadata remains opaque and is preserved. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/server/streamable_https_test.dart`](../test/server/streamable_https_test.dart) | Published TypeScript SDK 2.2.0 and conformance alpha.11 cover identified and anonymous requests. | Published alpha.11 accepts omitted `clientInfo`; `server-stateless` passes without an expected failure. | Verified | -| Stateless result identity | [Schema reference](https://modelcontextprotocol.io/specification/2026-07-28/schema) | `McpServer` stamps its configured identity by default in successful MCP 2026-07-28 result `_meta["io.modelcontextprotocol/serverInfo"]`. A valid handler-authored value wins, `null` omits the optional key, and malformed non-null output is rejected before serialization. Discovery has no body `serverInfo`; missing canonical identity is anonymous, while a present malformed or `null` canonical value is rejected. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/types_test.dart`](../test/types_test.dart) cover discovery, list/tool/task/subscription metadata merging, handler precedence, anonymous identity, malformed output, and legacy isolation. | Published TypeScript SDK 2.2.0 and Python SDK 2.1.1 validate the final result metadata shape in both directions. Dart reads legacy discovery-body identity from older prerelease peers and ignores malformed values in that obsolete location. | Published alpha.11 checks canonical discovery identity metadata. | Verified | +| Stateless result identity | [Schema reference](https://modelcontextprotocol.io/specification/2026-07-28/schema) | `McpServer` stamps its configured identity by default in successful MCP 2026-07-28 result `_meta["io.modelcontextprotocol/serverInfo"]`. A valid handler-authored value wins, `null` omits the optional key, and malformed non-null output is rejected before serialization. Discovery has no body `serverInfo`; missing canonical identity is anonymous, while a present malformed or `null` canonical value is rejected. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/types_test.dart`](../test/types_test.dart) cover discovery, list/tool/task/subscription metadata merging, handler precedence, anonymous identity, malformed output, and legacy isolation. | Published TypeScript SDK 2.2.0 and Python SDK 2.3.0 validate the final result metadata shape in both directions. Dart reads legacy discovery-body identity from older prerelease peers and ignores malformed values in that obsolete location. | Published alpha.11 checks canonical discovery identity metadata. | Verified | | JSON-RPC envelopes and errors | [Base protocol](https://modelcontextprotocol.io/specification/2026-07-28/basic) | String and integer request IDs retain their wire identity, arbitrary JSON-RPC error `data` remains observable, and unknown metadata is preserved. | [`test/types_edge_cases_test.dart`](../test/types_edge_cases_test.dart), [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart) | Cross-SDK fixtures exercise normal success and error envelopes. | Error and malformed-request scenarios in alpha.11. | Verified | | Streamable HTTP routing headers | [Key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog), [Transports](https://modelcontextprotocol.io/specification/2026-07-28/basic/transports) | MCP 2026-07-28 HTTP POST requests include required protocol, method, name, and parameter-routing headers; mismatches reject with routing-header errors. A `HeaderMismatch` refreshes `tools/list` metadata before one retry. Stateless SSE responses preserve browser CORS headers. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/server/streamable_https_test.dart`](../test/server/streamable_https_test.dart), [`test/server/streamable_mcp_server_test.dart`](../test/server/streamable_mcp_server_test.dart), [`test/browser/mcp_2026_07_28_streamable_http_test.dart`](../test/browser/mcp_2026_07_28_streamable_http_test.dart) | Published TypeScript SDK 2.2.0 validates `x-mcp-header` mirroring and raw rejection against Dart; its server validates Dart's schema-refresh retry. Chrome validates the real cross-origin path. | `stateless-http.requires-routing-headers`, `stateless-http.validates-parameter-headers`, and related alpha.11 cases. | Verified | | Removed session and resumability behavior | [Key changes](https://modelcontextprotocol.io/specification/2026-07-28/changelog) | MCP 2026-07-28 Streamable HTTP omits protocol-level sessions, rejects removed GET/DELETE behaviors, JSON-RPC batches, and client response/error POSTs, and cancels a stateless request by closing only that POST response stream without legacy notification redelivery. | [`test/mcp_2026_07_28_test.dart`](../test/mcp_2026_07_28_test.dart), [`test/server/streamable_mcp_server_test.dart`](../test/server/streamable_mcp_server_test.dart), [`test/client/streamable_https_test.dart`](../test/client/streamable_https_test.dart), [`test/browser/mcp_2026_07_28_streamable_http_test.dart`](../test/browser/mcp_2026_07_28_streamable_http_test.dart) | Published TypeScript SDK 2.2.0 verifies request cancellation and recovery in both directions. Loopback HTTP and real Chrome add sibling isolation and cleanup coverage. Python cancellation is not yet covered. | `stateless-http.rejects-non-post-methods`, `stateless-http.rejects-batch-payloads`, and related alpha.11 cases. | Verified | @@ -136,7 +136,7 @@ SDK 2.1.1 interop fixtures on relevant PRs, manual dispatch, and the daily These are gaps in external evidence unless stated otherwise; they are not known missing core protocol behavior. -- Published TypeScript SDK 2.2.0 and Python SDK 2.1.1 include the post-#3002 +- Published TypeScript SDK 2.2.0 and Python SDK 2.3.0 include the post-#3002 discovery identity shape and pass their checked-in bidirectional fixtures. The read-only legacy-body identity reader remains for older prerelease peers. - The official conformance package is still alpha. Alpha.11 freezes the diff --git a/llms.txt b/llms.txt index 474ee90e..b03e656b 100644 --- a/llms.txt +++ b/llms.txt @@ -3,7 +3,7 @@ `mcp_dart` is a community Dart and Flutter SDK for Model Context Protocol (MCP) servers, clients, and hosts. -- SDK release: `2.4.2` +- SDK release: `2.4.3` - CLI stable: `0.2.1` - SDK minimum: Dart 3.4 - CLI minimum: Dart 3.12 @@ -21,7 +21,7 @@ for new remote integrations. ## Release status -The 2.4.2 release retains the complete core client/server wire surface of the +The 2.4.3 release retains the complete core client/server wire surface of the final MCP `2026-07-28` specification, the MCP `2025-11-25` feature set, and negotiation with supported earlier initialization versions. Core means the normative wire requirements assigned to client and server roles by @@ -43,7 +43,7 @@ Pin the stable 2.4 line explicitly: ```yaml dependencies: - mcp_dart: ^2.4.2 + mcp_dart: ^2.4.3 ``` ## Primary import diff --git a/pubspec.yaml b/pubspec.yaml index e88fd869..d7d1b003 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: mcp_dart description: Dart and Flutter SDK for building Model Context Protocol (MCP) servers, clients, hosts, and AI tools. -version: 2.4.2 +version: 2.4.3 repository: https://github.com/leehack/mcp_dart homepage: https://github.com/leehack/mcp_dart issue_tracker: https://github.com/leehack/mcp_dart/issues diff --git a/tool/release/mcp_2026_07_28_release_metadata.json b/tool/release/mcp_2026_07_28_release_metadata.json index ae787877..ddc1734c 100644 --- a/tool/release/mcp_2026_07_28_release_metadata.json +++ b/tool/release/mcp_2026_07_28_release_metadata.json @@ -1,5 +1,5 @@ { - "sdkStableVersion": "2.4.2", + "sdkStableVersion": "2.4.3", "cliStableVersion": "0.2.1", "protocolVersion": "2026-07-28", "legacyInitializationProtocolVersion": "2025-11-25",