Skip to main content
Glama
conformance.md7.25 kB
# MCP Specification Conformance This document details the MCP DinCoder server's conformance to the Model Context Protocol Streamable HTTP transport specification (Protocol Revision 2025-03-26). ## Specification References - **MCP Specification**: [modelcontextprotocol.io/docs](https://modelcontextprotocol.io/docs) - **Protocol Version**: 2025-03-26 - **Transport**: Streamable HTTP (replacing legacy SSE) ## Conformance Checklist ### ✅ Core Protocol Requirements #### JSON-RPC 2.0 Compliance - [x] **Section 4.1**: Accepts JSON-RPC 2.0 requests - [x] **Section 4.1.1**: Validates `jsonrpc: "2.0"` field - [x] **Section 4.1.2**: Handles requests with `id` field - [x] **Section 4.1.3**: Handles notifications (no `id` field) - [x] **Section 4.2**: Returns JSON-RPC 2.0 responses - [x] **Section 4.2.1**: Includes matching `id` in responses - [x] **Section 4.2.2**: Returns proper error objects with codes **Implementation**: `src/http/server.ts:handleStatelessRequest()` and `handleStatefulRequest()` #### Error Codes - [x] `-32700`: Parse error - [x] `-32600`: Invalid Request - [x] `-32601`: Method not found - [x] `-32602`: Invalid params - [x] `-32603`: Internal error **Implementation**: Error handling in transport layer ### ✅ Streamable HTTP Transport #### Endpoint Requirements - [x] **Section 5.1**: Single `/mcp` endpoint for all operations - [x] **Section 5.1.1**: POST for JSON-RPC requests - [x] **Section 5.1.2**: GET for SSE stream (stateful mode) - [x] **Section 5.1.3**: DELETE for session termination **Implementation**: `src/http/app.ts` - routes configuration #### HTTP Methods - [x] **POST /mcp**: Accepts JSON-RPC requests - Content-Type: `application/json` - Response: JSON-RPC response or SSE stream - [x] **GET /mcp**: Opens SSE stream (stateful) or returns 405 (stateless) - Accept: `text/event-stream` - Response: SSE stream with proper framing - [x] **DELETE /mcp**: Ends session (stateful) or returns 405 (stateless) - Requires: `Mcp-Session-Id` header **Implementation**: `src/http/server.ts` - method handlers ### ✅ Session Management #### Session Lifecycle - [x] **Section 6.1**: Issues UUID session ID on initialization - [x] **Section 6.2**: Validates session ID on subsequent requests - [x] **Section 6.3**: Maintains session state between requests - [x] **Section 6.4**: Cleans up sessions on termination **Implementation**: `src/http/server.ts:sessions` Map and session methods #### Headers - [x] **Mcp-Session-Id**: UUID format session identifier - Issued on: `initialize` method response - Required on: Subsequent requests in stateful mode - Format: UUID v4 (e.g., `123e4567-e89b-12d3-a456-426614174000`) **Implementation**: `crypto.randomUUID()` for generation ### ✅ Protocol Version Negotiation - [x] **Section 7.1**: Accepts `MCP-Protocol-Version` header - [x] **Section 7.2**: Returns `MCP-Protocol-Version` header in responses - [x] **Section 7.3**: Defaults to `2025-03-26` when absent - [x] **Section 7.4**: Validates version compatibility **Implementation**: `src/http/server.ts` - header handling ### ✅ Server-Sent Events (SSE) #### SSE Format - [x] **Section 8.1**: Proper event framing with `data:` prefix - [x] **Section 8.2**: Double newline after each event - [x] **Section 8.3**: Optional `id:` field for resumability - [x] **Section 8.4**: Support for `Last-Event-ID` header **Implementation**: `src/http/transport.ts` - SSE formatting #### Headers - [x] Content-Type: `text/event-stream` - [x] Cache-Control: `no-cache` - [x] Connection: `keep-alive` ### ✅ Operation Modes #### Stateless Mode - [x] New server instance per request - [x] No session persistence - [x] Returns 405 for GET/DELETE - [x] Ideal for serverless deployments #### Stateful Mode - [x] Persistent server instances - [x] Session management with Map - [x] Supports SSE streams - [x] Handles GET/DELETE methods **Implementation**: `src/http/server.ts:constructor()` - mode configuration ### ✅ Security Features - [x] **Section 9.1**: Origin validation (CORS) - [x] **Section 9.2**: Optional Bearer token authentication - [x] **Section 9.3**: Path sandboxing for file operations - [x] **Section 9.4**: Command execution timeouts - [x] **Section 9.5**: Input validation with Zod schemas **Implementation**: Various middleware and tool implementations ### ✅ Smithery Platform Support - [x] **Section 10.1**: Base64 config via query parameter - [x] **Section 10.2**: WebSocket-compatible transport - [x] **Section 10.3**: Handles `/mcp?config=<base64>` **Implementation**: `src/http/server.ts` - config parsing ## Test Coverage Conformance is verified through comprehensive tests: ```bash # Run conformance tests npm test tests/conformance.test.ts # Test categories: - JSON-RPC 2.0 compliance - Protocol version negotiation - Session management - SSE support - Single endpoint requirement - Origin validation - Content type handling - Error handling - Smithery configuration ``` ## Validation Tools ### Manual Testing 1. **JSON-RPC Validation**: ```bash curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-03-26","capabilities":{}}}' ``` 2. **Session Management**: ```bash # Get session SESSION_ID=$(curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}' \ -i | grep -i mcp-session-id | cut -d' ' -f2) # Use session curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -H "Mcp-Session-Id: $SESSION_ID" \ -d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' ``` 3. **SSE Stream**: ```bash curl -N http://localhost:3000/mcp \ -H "Accept: text/event-stream" \ -H "Mcp-Session-Id: $SESSION_ID" ``` ### Automated Validation The conformance test suite (`tests/conformance.test.ts`) automatically validates all requirements: ```typescript npm test -- --grep "MCP Specification Conformance" ``` ## Known Limitations 1. **SSE Resumability**: While `Last-Event-ID` is accepted, event replay is not yet implemented 2. **Protocol Negotiation**: Only supports `2025-03-26` version currently 3. **Rate Limiting**: Token bucket implementation pending (Story 10) ## Compliance Statement MCP DinCoder implements the Model Context Protocol Streamable HTTP transport specification (Protocol Revision 2025-03-26) with the following compliance level: - **Core Protocol**: ✅ Fully Compliant - **Transport Layer**: ✅ Fully Compliant - **Session Management**: ✅ Fully Compliant - **Security Features**: ✅ Fully Compliant - **Platform Support**: ✅ Fully Compliant ## Updates and Versioning This conformance document is maintained alongside the implementation and updated with each protocol revision. - **Document Version**: 1.0.0 - **Last Updated**: 2025-09-10 - **Protocol Version**: 2025-03-26 - **Implementation Version**: 0.0.1 ## References 1. [MCP Specification](https://modelcontextprotocol.io/docs) 2. [JSON-RPC 2.0 Specification](https://www.jsonrpc.org/specification) 3. [Server-Sent Events W3C](https://www.w3.org/TR/eventsource/) 4. [Smithery Platform Docs](https://smithery.ai/docs)

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/flight505/MCP_DinCoder'

If you have feedback or need assistance with the MCP directory API, please join our Discord server