Skip to content

Commit bd0dc0f

Browse files
committed
fix(examples): swap-rename the streamable clients + EXAMPLES.md staleness
Maintainer-requested rename: the plain `streamable-http-client` name now belongs to the 2026 client (the bilingual, default-lane, spec-negotiating one — spec-neutral name per the naming rule's neutral-token exception); the old hand-parsed 2025 client is `streamable-http-client-2025-11-25` (full date). All reference sites updated (workspace members, ci-gates.sh, ci.yml, label comments in client-initialise-report + lambda-mcp-client, EXAMPLES.md, self-references). Pair RE-VERIFIED LIVE under the new names against minimal-server. Codex review fixes (EXAMPLES.md): - Header: "58 examples" → 55 active (counted from disk) + archived/ note. - Verified line: the 2026-02-26 "phases 1-5 functionally verified (v0.3.0, MCP 2025-11-25)" claim predates the 2026 cutover and no longer applies as stated — now says compile-verified under each lane's CI gates, with functional re-verification tracked in the examples review. - "Client Examples - 5" → 7 (matches the pairs table). - Footer status: v0.3.0/2025-compliance → 0.4.0 branch, 2026-07-28 default + 2025-11-25 opt-in, pointing at the spec-compliance driver. - Pairing invariant tightened: streamable-http-client-2025-11-25 names client-initialise-server as its specific peer (alternatives noted). - Progress demo honestly labeled API-shape-only (echo emits no progress events) in the source docs and the pairs table. Gates: scripts/ci-gates.sh all → ALL GATES PASSED.
1 parent d4c49bd commit bd0dc0f

13 files changed

Lines changed: 600 additions & 594 deletions

File tree

.github/workflows/ci.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -69,7 +69,7 @@ jobs:
6969
- name: Bilingual client (not in default-members)
7070
run: cargo test -p turul-mcp-client
7171
- name: 2026 client example (pairs with minimal-server)
72-
run: cargo build -p streamable-http-client-2026-07-28
72+
run: cargo build -p streamable-http-client
7373

7474
opt-in-2025:
7575
name: Opt-in lane (2025-11-25)

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ members = [
7474
"examples/session-logging-proof-test",
7575
"examples/session-management-compliance-test",
7676
"examples/streamable-http-client",
77-
"examples/streamable-http-client-2026-07-28",
77+
"examples/streamable-http-client-2025-11-25",
7878

7979
# AWS/Lambda authorizer examples
8080
"examples/lambda-authorizer",

EXAMPLES.md

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
# MCP Framework Examples
22

3-
This document provides a comprehensive overview of all **58 examples** in the MCP Framework, organized by learning progression from basic concepts to advanced implementations.
3+
This document provides a comprehensive overview of all **55 active examples** in the MCP Framework (plus `examples/archived/`), organized by learning progression from basic concepts to advanced implementations.
44

5-
**✅ All examples compile and phases 1-5 functionally verified (Compile → Start → Initialize → Execute)**
6-
**Last verified**: 2026-02-26 (v0.3.0, MCP 2025-11-25)
5+
**✅ All active examples compile under their lane's CI gates** (2026-07-28 default lane
6+
+ per-manifest 2025-11-25 pins). Per-example functional re-verification against the
7+
2026 stateless core is tracked in `docs/plans/2026-07-28-examples-review.md` — the
8+
2026-02-26 "phases 1-5" sweep predates the 2026 cutover and no longer applies as stated.
9+
**Last verified**: 2026-06-12 (v0.4.0 branch — MCP 2026-07-28 default, 2025-11-25 opt-in)
710

811
## Client ↔ Server Example Pairs
912

@@ -12,8 +15,8 @@ lane** — run the server first, then point the client at it.
1215

1316
| Client example | Lane | Corresponding server | Notes |
1417
|---|---|---|---|
15-
| `streamable-http-client-2026-07-28` | **2026-07-28** | `minimal-server` (port 8641) | The canonical 2026 stateless pair: `connect()` negotiation, discover retention, `call_tool`, request-scoped progress |
16-
| `streamable-http-client` | 2025-11-25 | any 2025-pinned server (e.g. `client-initialise-server`) | Hand-parsed 2025 POST SSE framing |
18+
| `streamable-http-client` | **2026-07-28** | `minimal-server` (port 8641) | The canonical 2026 stateless pair: `connect()` negotiation, discover retention, `call_tool`, and the request-scoped progress API (shape demo — `echo` emits no progress events) |
19+
| `streamable-http-client-2025-11-25` | 2025-11-25 | `client-initialise-server` (alternatives: any 2025-pinned server) | Hand-parsed 2025 POST SSE framing |
1720
| `client-initialise-report` | 2025-11-25 (wire-pinned) | `client-initialise-server` | Raw-wire lifecycle compliance probe |
1821
| `session-management-compliance-test` | 2025-11-25 (wire-pinned) | `client-initialise-server` | Session-contract regression client |
1922
| `logging-test-client` | 2025-11-25 | `logging-test-server` | `logging/setLevel` wire contract |
@@ -107,7 +110,8 @@ cargo run --example minimal-server
107110
|---------|------|--------|-------------|---------|
108111
| **client-initialise-server** | Server | ✅ VALIDATED | Client connectivity test server | MCP session initialization testing |
109112
| **client-initialise-report** | Client | ✅ VALIDATED | MCP client implementation | Tests server initialization |
110-
| **streamable-http-client** | Client | ✅ VALIDATED | Streamable HTTP client | MCP 2025-11-25 streaming demo |
113+
| **streamable-http-client** | Client | ✅ VALIDATED | 2026-07-28 stateless client (pairs with minimal-server) | connect() negotiation, discover retention, request-scoped progress API |
114+
| **streamable-http-client-2025-11-25** | Client | ✅ VALIDATED | Hand-parsed 2025 Streamable HTTP client | MCP 2025-11-25 streaming demo |
111115
| **logging-test-client** | Client | ✅ VALIDATED | Logging client | Tests logging functionality |
112116
| **session-management-compliance-test** | Combined | ✅ VALIDATED | Session compliance testing | MCP session spec compliance |
113117

@@ -194,7 +198,7 @@ These examples demonstrate MCP 2025-11-25 type construction without starting a s
194198
- **Feature-Specific** - 8 examples (prompts, sampling, elicitation, etc.)
195199
- **Advanced/Composite** - 5 examples (comprehensive, alerts, audit, logging)
196200
- **Session & State** - 4 examples (stateful operations, logging)
197-
- **Client Examples** - 5 examples (client-server communication)
201+
- **Client Examples** - 7 examples (client-server communication — see the pairs table above)
198202
- **AWS Lambda** - 4 examples (server, streaming, client, authorizer)
199203
- **Tool Creation & Schemas** - 6 examples (macro patterns + output schemas)
200204
- **Middleware** - 4 examples (auth, logging, rate-limiting, Lambda auth)
@@ -247,4 +251,4 @@ cargo run --features dynamodb --example simple-dynamodb-session
247251

248252
---
249253

250-
**📋 Framework Status**: v0.3.0 — Full MCP 2025-11-25 compliance including tasks, icons, sampling tools, and URL elicitation.
254+
**📋 Framework Status**: 0.4.0 branch (`feat/turul-mcp-protocol-2026-07-28`) — MCP 2026-07-28 stateless core by default with the 2025-11-25 stateful line as a per-manifest opt-in. Registered spec-gap status lives in `docs/plans/2026-07-28-spec-compliance.md`.

examples/client-initialise-report/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# 2025-11-25-ONLY by design: this raw-wire probe (no turul protocol deps)
22
# hardcodes the 2025 lifecycle — initialize → notifications/initialized →
33
# Mcp-Session-Id — and pairs with client-initialise-server (2025-pinned).
4-
# For the 2026 stateless pair see streamable-http-client-2026-07-28 +
4+
# For the 2026 stateless pair see streamable-http-client +
55
# minimal-server.
66
[package]
77
name = "client-initialise-report"

examples/client-initialise-report/src/main.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
//! Raw-wire probe of the 2025-11-25 stateful lifecycle: `initialize` →
44
//! `notifications/initialized` → `Mcp-Session-Id` on every request. Pairs
55
//! with `client-initialise-server` (2025-pinned). The 2026-07-28 stateless
6-
//! pair is `streamable-http-client-2026-07-28` + `minimal-server`.
6+
//! pair is `streamable-http-client` + `minimal-server`.
77
88
//! # MCP Initialize Session Report Client
99
//!

examples/lambda-mcp-client/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# Test client for lambda-mcp-server, which is PINNED to the 2025-11-25
22
# stateful lane — the bilingual McpClient inside negotiates down to 2025
33
# against it (initialize handshake + Mcp-Session-Id). For the 2026 stateless
4-
# client pattern see streamable-http-client-2026-07-28.
4+
# client pattern see streamable-http-client.
55
[package]
66
name = "lambda-turul-mcp-client"
77
version = "0.4.0"
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
[package]
2+
name = "streamable-http-client-2025-11-25"
3+
version = "0.4.0"
4+
edition.workspace = true
5+
description = "MCP 2025-11-25 Streamable HTTP client example with multi-threaded SSE processing"
6+
7+
# 2025-11-25 regression example; framework deps pinned to the 2025 opt-in
8+
# independent of the workspace 2026 default.
9+
[dependencies]
10+
turul-mcp-client = { workspace = true }
11+
turul-mcp-protocol = { path = "../../crates/turul-mcp-protocol", version = "0.4.0", default-features = false, features = ["protocol-2025-11-25"] }
12+
tokio = { workspace = true }
13+
anyhow = { workspace = true }
14+
serde_json = { workspace = true }
15+
tracing = { workspace = true }
16+
tracing-subscriber = { workspace = true }
17+
clap = { workspace = true }
18+
reqwest = { workspace = true }
19+
futures = { workspace = true }
20+
[[bin]]
21+
name = "streamable-http-client-2025-11-25"
22+
path = "src/main.rs"
23+
test = false

0 commit comments

Comments
 (0)