|
| 1 | +# 🚀 PMCP v1.5.0: Write Once, Deploy Everywhere - WASM/WASI Universal MCP Servers |
| 2 | + |
| 3 | +## 🎯 Major Release: Platform-Agnostic MCP Architecture |
| 4 | + |
| 5 | +### ✨ Headline Feature: Universal WASM Deployment |
| 6 | +**Write once in Rust, deploy everywhere** - The same MCP server code now runs on Cloudflare Workers, Fermyon Spin, and any WASM/WASI-compliant platform, achieving true platform independence similar to the TypeScript SDK architecture. |
| 7 | + |
| 8 | +## 🏗️ Architecture Revolution: Clean Separation of Logic and Transport |
| 9 | + |
| 10 | +### 📐 New Architecture Design |
| 11 | +Following the TypeScript SDK's successful pattern, v1.5.0 introduces a clean separation between: |
| 12 | +- **Core MCP Logic**: Platform-agnostic business logic (`WasmMcpServer`) |
| 13 | +- **Transport Layer**: Thin platform-specific adapters (Cloudflare, Fermyon, etc.) |
| 14 | +- **Universal API**: Consistent interface across all deployment targets |
| 15 | + |
| 16 | +### 🎯 Key Achievement |
| 17 | +```rust |
| 18 | +// Same code runs everywhere |
| 19 | +let server = WasmMcpServer::builder() |
| 20 | + .name("my-mcp-server") |
| 21 | + .version("1.0.0") |
| 22 | + .tool("calculator", SimpleTool::new(...)) |
| 23 | + .build(); |
| 24 | + |
| 25 | +// Deploy to Cloudflare, Fermyon, or any WASM platform |
| 26 | +``` |
| 27 | + |
| 28 | +## 🌟 Major New Features |
| 29 | + |
| 30 | +### 🔧 WasmMcpServer - Universal MCP Implementation |
| 31 | +- **Platform-agnostic core**: Single implementation for all WASM targets |
| 32 | +- **Type-safe builder pattern**: Compile-time validation of server configuration |
| 33 | +- **SimpleTool abstraction**: Easy tool creation with automatic JSON-RPC handling |
| 34 | +- **Full MCP protocol compliance**: Initialize, tools/list, tools/call, notifications |
| 35 | +- **Automatic error handling**: Built-in validation and error responses |
| 36 | + |
| 37 | +### 🌐 Multi-Platform Deployment Support |
| 38 | + |
| 39 | +#### Cloudflare Workers |
| 40 | +- **Global edge deployment**: 200+ locations worldwide |
| 41 | +- **V8 Isolates**: Sub-millisecond cold starts |
| 42 | +- **KV & Durable Objects**: Integrated state management |
| 43 | +- **Cost-effective**: Pay-per-request pricing model |
| 44 | + |
| 45 | +#### Fermyon Spin |
| 46 | +- **Standard WASI**: Uses `wasm32-wasip1` target |
| 47 | +- **Component Model**: First-class WASI component support |
| 48 | +- **Built-in SQLite**: Persistent storage capabilities |
| 49 | +- **Simple deployment**: Single `spin deploy` command |
| 50 | + |
| 51 | +### 🧪 Enhanced Testing Infrastructure |
| 52 | + |
| 53 | +#### MCP Tester Improvements |
| 54 | +- **Scenario-based testing**: YAML/JSON test definitions |
| 55 | +- **Comprehensive assertions**: Success, failure, contains, equals, array operations |
| 56 | +- **Verbose mode support**: Detailed test output with `--verbose` flag |
| 57 | +- **HTTP/JSON-RPC alignment**: Full protocol compliance testing |
| 58 | + |
| 59 | +#### Test Scenarios |
| 60 | +- **calculator-test.yaml**: Comprehensive test suite with error cases |
| 61 | +- **calculator-simple.json**: Basic operation validation |
| 62 | +- **minimal-test.json**: Quick connectivity verification |
| 63 | + |
| 64 | +### 🔄 Transport Layer Improvements |
| 65 | +- **JSON-RPC notification handling**: Proper detection of requests without 'id' field |
| 66 | +- **Empty response support**: Handle 200 OK with no Content-Type (notifications) |
| 67 | +- **Platform-specific adapters**: Minimal boilerplate for each platform |
| 68 | +- **Error propagation**: Consistent error handling across transports |
| 69 | + |
| 70 | +## 📊 Performance & Scalability |
| 71 | + |
| 72 | +### 🚀 Deployment Metrics |
| 73 | +| Platform | Cold Start | Global Scale | State Management | Cost Model | |
| 74 | +|----------|------------|--------------|------------------|------------| |
| 75 | +| **Cloudflare** | 50-200ms | 200+ locations | KV, Durable Objects | Pay-per-request | |
| 76 | +| **Fermyon** | 100-300ms | Regional | SQLite | Instance-based | |
| 77 | +| **WASI Generic** | Varies | Custom | Platform-specific | Flexible | |
| 78 | + |
| 79 | +### ⚡ Runtime Performance |
| 80 | +- **Zero overhead abstraction**: No performance penalty for platform abstraction |
| 81 | +- **Compile-time optimization**: WASM optimization at build time |
| 82 | +- **Minimal binary size**: ~500KB WASM modules |
| 83 | +- **Memory efficient**: Low memory footprint per request |
| 84 | + |
| 85 | +## 🛠️ Developer Experience Improvements |
| 86 | + |
| 87 | +### 📦 Simplified Development |
| 88 | +```bash |
| 89 | +# Build once |
| 90 | +cargo build --target wasm32-unknown-unknown --release |
| 91 | + |
| 92 | +# Deploy anywhere |
| 93 | +wrangler deploy # Cloudflare |
| 94 | +spin deploy # Fermyon |
| 95 | +# ... any WASM platform |
| 96 | +``` |
| 97 | + |
| 98 | +### 🔍 Testing Tools |
| 99 | +```bash |
| 100 | +# Test any deployment with scenarios |
| 101 | +mcp-tester scenario https://<your-deployment> test-scenarios/calculator-test.yaml |
| 102 | + |
| 103 | +# Verbose output for debugging |
| 104 | +mcp-tester tools --verbose https://<your-deployment> |
| 105 | +``` |
| 106 | + |
| 107 | +### 📚 Comprehensive Documentation |
| 108 | +- Platform-specific deployment guides |
| 109 | +- Scenario testing documentation |
| 110 | +- Architecture overview with examples |
| 111 | +- Migration guides from v1.4.x |
| 112 | + |
| 113 | +## 🔧 Technical Improvements |
| 114 | + |
| 115 | +### Core SDK |
| 116 | +- **ServerCore refactoring**: Clean separation of concerns |
| 117 | +- **Protocol version negotiation**: Improved compatibility handling |
| 118 | +- **Type safety enhancements**: Stronger compile-time guarantees |
| 119 | +- **Error recovery**: Better error messages and recovery strategies |
| 120 | + |
| 121 | +### Quality & Testing |
| 122 | +- **100% scenario test pass rate**: All test scenarios passing |
| 123 | +- **Cross-platform validation**: Tested on multiple WASM runtimes |
| 124 | +- **Backward compatibility**: Full compatibility with existing MCP clients |
| 125 | +- **Toyota Way compliance**: Zero tolerance for defects |
| 126 | + |
| 127 | +## 🚀 Migration Guide |
| 128 | + |
| 129 | +### From v1.4.x to v1.5.0 |
| 130 | +1. **Update dependency**: `pmcp = "1.5.0"` |
| 131 | +2. **Choose deployment model**: |
| 132 | + - Use `WasmMcpServer` for WASM deployments |
| 133 | + - Use existing `Server` for native deployments |
| 134 | +3. **Platform adapters**: Add thin wrapper for your platform |
| 135 | +4. **Test with scenarios**: Validate using mcp-tester |
| 136 | + |
| 137 | +### Example Migration |
| 138 | +```rust |
| 139 | +// Before (v1.4.x) |
| 140 | +let server = Server::builder() |
| 141 | + .tool(my_tool_handler) |
| 142 | + .build(); |
| 143 | + |
| 144 | +// After (v1.5.0) - WASM deployment |
| 145 | +let server = WasmMcpServer::builder() |
| 146 | + .tool("my_tool", SimpleTool::new(my_tool_handler)) |
| 147 | + .build(); |
| 148 | +``` |
| 149 | + |
| 150 | +## 📈 What's Next |
| 151 | + |
| 152 | +### Roadmap |
| 153 | +- Additional platform support (Wasmtime, WasmEdge, etc.) |
| 154 | +- State management abstractions |
| 155 | +- Cross-platform resource handlers |
| 156 | +- Enhanced debugging tools |
| 157 | + |
| 158 | +## 🙏 Acknowledgments |
| 159 | + |
| 160 | +Special thanks to all contributors who made this release possible, especially the work on clean architecture separation and comprehensive testing infrastructure. |
| 161 | + |
| 162 | +## 📦 Installation |
| 163 | + |
| 164 | +```toml |
| 165 | +[dependencies] |
| 166 | +pmcp = "1.5.0" |
| 167 | +``` |
| 168 | + |
| 169 | +## 🔗 Resources |
| 170 | + |
| 171 | +- [Documentation](https://docs.rs/pmcp) |
| 172 | +- [Examples](https://github.com/paiml/rust-mcp-sdk/tree/main/examples) |
| 173 | +- [WASM Deployment Guide](https://github.com/paiml/rust-mcp-sdk/tree/main/examples/wasm-mcp-server) |
| 174 | +- [MCP Protocol Specification](https://modelcontextprotocol.io/) |
| 175 | + |
| 176 | +--- |
| 177 | + |
| 178 | +**Breaking Changes**: None - Full backward compatibility maintained |
| 179 | + |
| 180 | +**Minimum Rust Version**: 1.70.0 |
| 181 | + |
| 182 | +**License**: MIT |
0 commit comments