You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(readme): refocus on MCP 2026-07-28; drop beta labeling
- New '🆕 MCP 2026-07-28' section: what's new (stateless core, MRTR,
subscriptions/listen, Tasks + Apps extensions, SEP-2243 headers, Origin
protection, 2020-12, caching headers), what changed from 2025-11-25
(no handshake, -32002→-32602 + new -32001/-32003/-32004, per-request
logLevel, SEP-2577 deprecations), and a removed-from-core table (7
methods with SEP numbers + 2026 replacements). Facts pulled from the
spec-compliance driver's Major-SEP rows.
- Remove all 'beta' labeling → honest Pre-1.0 (0.4.x) framing.
- Implementation checklist: flag Roots/Sampling/Logging deprecated
(SEP-2577), Session Management as 2025-opt-in, split Tasks into the
2026 extension vs 2025 core.
- Crate count 15→17 (+turul-mcp-ext-tasks, turul-mcp-ext-apps); examples
53→54; function-macro output field output→result (derive uses output,
function macro uses result); repoint the 2026 server/discover
verification off the 2025-pinned resource-test-server to minimal-server;
rewrite the Tasks Architecture section for the real ext-tasks crate;
add a '2026 Protocol Features' examples line.
- WIP banner left untouched.
Docs-only; README is not a doctest target.
Copy file name to clipboardExpand all lines: README.md
+98-23Lines changed: 98 additions & 23 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,25 +12,85 @@
12
12
> - Servers are single-spec per build; the client (`turul-mcp-client`) is bilingual.
13
13
> - Expect churn: examples, docs, and E2E tests are still being migrated to 2026 semantics.
14
14
15
-
# Turul MCP Framework - Beta Rust Implementation
15
+
# Turul MCP Framework
16
16
17
17
A comprehensive Rust framework for building Model Context Protocol (MCP) servers and clients with modern patterns, extensive tooling, and enterprise-grade features. On this branch the default build targets the **MCP 2026-07-28 specification** (stateless core: `server/discover`, per-request `_meta`, no `Mcp-Session-Id`); **MCP 2025-11-25 remains available** as an opt-in (`--no-default-features --features protocol-2025-11-25`).
18
18
19
-
⚠️ **Beta Status**- Active development with ongoing feature enhancements. Default build is MCP 2026-07-28 (stateless); 2025-11-25 is opt-in. Suitable for development and testing.
19
+
**Pre-1.0 (0.4.x).**The framework is production-shaped — comprehensive test coverage, zero-warning gates — but public APIs may still change before 1.0.0. The default build is MCP 2026-07-28 (stateless); 2025-11-25 is opt-in.
20
20
21
-
## 🧪 **Active Development** - Comprehensive Test Coverage
21
+
## 🧪 Comprehensive Test Coverage
22
22
**Broad test coverage across the workspace** • **Complete async SessionContext integration** • **Framework-native testing patterns**
23
23
24
24
## ✨ Key Highlights
25
25
26
-
-**🏗️ 15 Framework Crates**: Complete MCP ecosystem with core framework, client library, task storage, and serverless support
-**📚 Comprehensive Examples**: Real-world business applications and framework demonstrations (most build on the 2026-07-28 default lane; a 2025-11-25 regression set is pinned to the opt-in, and client-using examples are built by explicit CI steps — see EXAMPLES.md)
28
28
-**🧪 Framework-Native Test Suite**: Core framework tests, SessionContext integration tests, and framework-native integration tests
29
29
-**⚡ Multiple Development Patterns**: Derive macros, function attributes, declarative macros, and manual implementation
30
30
-**🌐 Transport Flexibility**: Streamable HTTP via StreamableHttpHandler with SSE streaming (stdio planned)
31
31
-**☁️ Serverless Support**: AWS Lambda integration with streaming responses and SQS event processing
32
32
-**🔧 Development Features**: Session management, real-time notifications, performance monitoring, and UUID v7 support
33
33
34
+
## 🆕 MCP 2026-07-28
35
+
36
+
The default build targets the 2026-07-28 release candidate. This is a **stateless
37
+
rewrite** of the protocol with several core methods removed — if you're coming from
> **Task support:** Add `task_support = "optional"` to enable the "Run as Task" button in MCP Inspector. Values: `"optional"`, `"required"`, `"forbidden"`. Requires `.with_task_storage()` on the server builder.
132
+
> **Task support:**
133
+
> -**2026-07-28** — tasks are the `io.modelcontextprotocol/tasks` extension (SEP-2663). Enable the `ext-tasks` feature, register the store with `.with_ext_tasks(store)`, and mark electable tools with `.ext_task_tool(tool)`. See `examples/ext-tasks-server`.
134
+
> -**2025-11-25 opt-in** — tasks are a core capability: add `task_support = "optional"` (`"optional"` / `"required"` / `"forbidden"`) to enable the "Run as Task" button in MCP Inspector; requires `.with_task_storage()` on the builder.
73
135
74
136
### 2. Derive Macros (Struct-Based)
75
137
@@ -212,15 +274,15 @@ curl -X POST http://127.0.0.1:8641/mcp \
212
274
213
275
### Example Servers - Ready to Run
214
276
215
-
**Core Test Servers:**
277
+
**Core Test Servers** (manifest-pinned to the **2025-11-25** opt-in lane — they are the stateful regression fixtures, so use the 2025 handshake against them, not the 2026 `server/discover` curls below):
216
278
```bash
217
279
# Tools server (test tools)
218
280
cargo run --package tools-test-server -- --port 8002
219
281
220
-
# Resource server (17 test resources)
282
+
# Resource server (test resources)
221
283
cargo run --package resource-test-server -- --port 8080
222
284
223
-
# Prompts server (11 test prompts)
285
+
# Prompts server (test prompts)
224
286
cargo run --package prompts-test-server -- --port 8081
225
287
```
226
288
@@ -243,11 +305,14 @@ cargo run -p stateful-server
243
305
244
306
The default build is stateless: there is no `initialize` handshake and no `Mcp-Session-Id`
245
307
header. Capabilities, client info, and the protocol version travel in `_meta` on every
246
-
request under the `io.modelcontextprotocol/*` namespace.
308
+
request under the `io.modelcontextprotocol/*` namespace. Use a **2026-default** server such
309
+
as `minimal-server` (port 8641) — the `*-test-server` fixtures above are 2025-pinned and
310
+
will not answer `server/discover`.
247
311
248
312
**Step 1: Discover the server**
249
313
```bash
250
-
PORT=8080 # Replace with your server's port
314
+
cargo run -p minimal-server # 2026 default, binds 127.0.0.1:8641
315
+
PORT=8641 # a 2026-default server's port
251
316
curl -X POST http://127.0.0.1:$PORT/mcp \
252
317
-H 'Content-Type: application/json' \
253
318
-H 'MCP-Protocol-Version: 2026-07-28' \
@@ -423,7 +488,7 @@ impl McpMiddleware for AuthMiddleware {
-**`turul-mcp-task-storage`** - Task storage for long-running operations (InMemory, with pluggable backends)
439
506
-**`turul-mcp-server-state-storage`** - Server-global state for dynamic tool coordination
440
507
-**`turul-mcp-aws-lambda`** - AWS Lambda integration for serverless deployment
441
508
-**`turul-mcp-oauth`** - OAuth 2.1 Resource Server support (JWT validation, Bearer middleware)
442
509
443
-
### Tasks Architecture ADRs
510
+
### Tasks Architecture
511
+
512
+
Tasks moved from a **core capability (2025-11-25)** to an **extension (2026-07-28)**, and the framework implements both:
513
+
514
+
-**2026-07-28** — the `io.modelcontextprotocol/tasks` extension (SEP-2663) in `turul-mcp-ext-tasks`, wired into the server behind the opt-in `ext-tasks` feature (`.with_ext_tasks(store)` + `.ext_task_tool(...)`) and the client (`call_tool_or_task`, `task_get`/`task_update`/`task_cancel`/`task_wait`). Server election, the `-32003` capability gate, mid-task input via `tasks/update`, and `notifications/tasks` over `subscriptions/listen` are all implemented. See `examples/ext-tasks-server`.
515
+
-**2025-11-25 opt-in** — the original in-tree core task runtime, gated to `#[cfg(feature = "protocol-2025-11-25")]` (protocol types, storage, runtime, handlers, tests).
444
516
445
-
Tasks are a 2026-07-28 *extension* (and were a core MCP 2025-11-25 capability). On the 2026-07-28 default build the in-tree task runtime is gated to the `protocol-2025-11-25` opt-in (`#[cfg(feature = "protocol-2025-11-25")]`); the framework provides full implementation support (protocol types, storage, runtime, handlers, and tests) under that opt-in. See the architecture decision records for design rationale:
517
+
Architecture decision records:
446
518
447
-
-[ADR-015: Protocol Crate Strategy](docs/adr/015-mcp-2025-11-25-protocol-crate.md) — separate crate for 2025-11-25 spec types including Tasks
519
+
-[ADR-028: Extensions Strategy](docs/adr/028-extensions-strategy.md) — per-extension crates; how the 2026 Tasks/Apps extensions are hosted
520
+
-[ADR-015: Protocol Crate Strategy](docs/adr/015-mcp-2025-11-25-protocol-crate.md) — separate crate for 2025-11-25 spec types including core Tasks
448
521
-[ADR-016: Task Storage Architecture](docs/adr/016-task-storage-architecture.md) — `TaskStorage` trait, 4 backends, state machine, parity test suite
- ⚠️ **Roots** (`RootDefinition`) - Secure file system access boundaries — *deprecated on 2026 (SEP-2577); rides MRTR*
641
+
- ⚠️ **Sampling** (`SamplingDefinition`) - AI model integration patterns — *deprecated on 2026 (SEP-2577); rides MRTR*
642
+
- ✅ **Tasks** — Tasks extension on 2026 (`turul-mcp-ext-tasks`); core capability on the 2025-11-25 opt-in
643
+
- ✅ **Session Management** - Stateful operations with UUID v7 — *2025-11-25 opt-in only; the 2026 core is stateless*
570
644
571
645
### Transport Support
572
646
-**Streamable HTTP** - Production transport via `StreamableHttpHandler` (HTTP/1.1 & HTTP/2 with chunked SSE; stateless on the 2026-07-28 default, stateful with GET SSE on the 2025-11-25 opt-in)
@@ -593,6 +667,7 @@ Development servers for actual business problems:
-**Serverless**: lambda-mcp-server (AWS Lambda with SQS integration)
@@ -1238,9 +1313,9 @@ This project is licensed under the MIT OR Apache-2.0 License - see the LICENSE f
1238
1313
1239
1314
### 🎯 Current Framework State
1240
1315
-**MCP 2026-07-28 adoption (this branch)**: default build targets the 2026-07-28 stateless core; 2025-11-25 remains fully supported as the opt-in stateful line
1241
-
-**Examples Validated**: 53 active examples compile under their lane's CI gates (2026-07-28 default lane plus the pinned 2025-11-25 regression set — see EXAMPLES.md)
1316
+
-**Examples Validated**: 54 active examples compile under their lane's CI gates (2026-07-28 default lane plus the pinned 2025-11-25 regression set — see EXAMPLES.md)
1242
1317
-**SSE Streaming Verified**: Real-time notifications and session-aware logging working correctly
1243
-
-**Beta Status**: Active development with API stability considerations before 1.0.0
1318
+
-**Pre-1.0 (0.4.x)**: production-shaped with comprehensive test coverage; public APIs may still change before 1.0.0
1244
1319
1245
1320
### 🚧 Current Limitations
1246
1321
@@ -1259,7 +1334,7 @@ This project is licensed under the MIT OR Apache-2.0 License - see the LICENSE f
1259
1334
-**Concurrency Stress Testing**: Some resource tests show occasional failures under extreme load
1260
1335
-**Browser Compatibility**: CORS support available but may need tuning for specific client requirements
1261
1336
1262
-
**Framework Philosophy**: We prioritize honest documentation over inflated claims. This beta status reflects our commitment to transparency about the current development state.
1337
+
**Framework Philosophy**: We prioritize honest documentation over inflated claims. The limitations above reflect our commitment to transparency about the current development state.
0 commit comments