44
55This document verifies that the Wazuh MCP Remote Server fully complies with the latest Model Context Protocol specifications.
66
7- ** Current Implementation Status** : ✅ ** FULLY COMPLIANT with MCP 2025-06-18 **
7+ ** Current Implementation Status** : ✅ ** FULLY COMPLIANT with MCP 2025-11-25 **
88
99** References:**
10- - [ MCP Specification 2025-06-18 ] ( https://modelcontextprotocol.io/specification/2025-06-18 /basic/transports )
11- - [ MCP Transport Evolution ] ( https://blog.fka.dev/blog /2025-06-06-why-mcp-deprecated-sse-and-go-with- streamable-http/ )
12- - [ Streamable HTTP Implementation Guide ] ( https://blog.cloudflare.com/streamable-http-mcp-servers-python/ )
10+ - [ MCP Specification 2025-11-25 ] ( https://modelcontextprotocol.io/specification/2025-11-25 /basic/transports )
11+ - [ MCP Streamable HTTP Transport ] ( https://modelcontextprotocol.io/specification /2025-11-25/basic/transports# streamable-http )
12+ - [ MCP Server Development ] ( https://modelcontextprotocol.io/docs/develop/build-server )
1313
1414---
1515
16- ## ✅ ** COMPLIANCE CHECKLIST - MCP 2025-06-18 **
16+ ## ✅ ** COMPLIANCE CHECKLIST - MCP 2025-11-25 **
1717
18- ### 🔗 ** Primary Transport: Streamable HTTP (NEW STANDARD) **
18+ ### 🔗 ** Primary Transport: Streamable HTTP**
1919
2020| Requirement | Status | Implementation |
2121| -------------| --------| ----------------|
2222| ** Single ` /mcp ` endpoint** | ✅ COMPLIANT | ` @app.post("/mcp") ` and ` @app.get("/mcp") ` implemented |
2323| ** POST method support** | ✅ COMPLIANT | JSON-RPC requests via POST |
24- | ** GET method support** | ✅ COMPLIANT | Session info and SSE stream via GET |
24+ | ** GET method support (SSE only) ** | ✅ COMPLIANT | Returns 405 without SSE Accept header (per spec) |
2525| ** DELETE method support** | ✅ COMPLIANT | Session termination via DELETE |
26- | ** MCP-Protocol-Version header** | ✅ COMPLIANT | Validates and supports 2025-06-18 , 2025-03-26, 2024-11-05 |
26+ | ** MCP-Protocol-Version header** | ✅ COMPLIANT | Validates 2025-11-25 , 2025-03-26, 2024-11-05; returns 400 for invalid |
2727| ** Accept header handling** | ✅ COMPLIANT | Supports both ` application/json ` and ` text/event-stream ` |
2828| ** Dynamic response format** | ✅ COMPLIANT | JSON or SSE based on Accept header |
29- | ** Mcp-Session-Id header** | ✅ COMPLIANT | Full session management with header |
29+ | ** MCP-Session-Id header** | ✅ COMPLIANT | Full session management with proper casing |
30+ | ** SSE priming event** | ✅ COMPLIANT | Empty data priming event sent first (per 2025-11-25) |
31+ | ** SSE event IDs** | ✅ COMPLIANT | Unique event IDs for resumability |
3032
31- ** Implementation Location:** ` src/wazuh_mcp_server/server.py:1173-1403 `
33+ ** Implementation Location:** ` src/wazuh_mcp_server/server.py `
3234
3335### 🔄 ** Legacy Transport: SSE (BACKWARDS COMPATIBILITY)**
3436
@@ -57,24 +59,26 @@ This document verifies that the Wazuh MCP Remote Server fully complies with the
5759| Requirement | Status | Implementation |
5860| -------------| --------| ----------------|
5961| ** Version header support** | ✅ COMPLIANT | ` MCP-Protocol-Version ` header parsed |
60- | ** Multiple version support** | ✅ COMPLIANT | 2025-06-18 , 2025-03-26, 2024-11-05 |
62+ | ** Multiple version support** | ✅ COMPLIANT | 2025-11-25 , 2025-03-26, 2024-11-05 |
6163| ** Default version fallback** | ✅ COMPLIANT | Defaults to 2025-03-26 if no header (per spec) |
62- | ** Version validation** | ✅ COMPLIANT | ` validate_protocol_version() ` function |
64+ | ** Strict version validation** | ✅ COMPLIANT | Returns HTTP 400 for unsupported versions |
65+ | ** Version validation** | ✅ COMPLIANT | ` validate_protocol_version() ` function with strict mode |
6366
64- ** Implementation Location:** ` src/wazuh_mcp_server/server.py:280-299 `
67+ ** Implementation Location:** ` src/wazuh_mcp_server/server.py `
6568
66- ### 🛡️ ** Security Requirements**
69+ ### 🛡️ ** Security Requirements (2025-11-25) **
6770
6871| Requirement | Status | Implementation |
6972| -------------| --------| ----------------|
70- | ** Origin validation** | ✅ COMPLIANT | DNS rebinding protection |
73+ | ** Origin validation (conditional)** | ✅ COMPLIANT | Only validates if Origin header present (per 2025-11-25) |
74+ | ** 403 for invalid Origin** | ✅ COMPLIANT | Returns 403 when Origin is present but not allowed |
7175| ** HTTPS support** | ✅ COMPLIANT | Production deployment with TLS |
7276| ** CORS configuration** | ✅ COMPLIANT | Restricted origins and methods |
7377| ** Rate limiting** | ✅ COMPLIANT | Request rate limiting implemented |
7478| ** Input validation** | ✅ COMPLIANT | Comprehensive input sanitization |
7579| ** Security headers** | ✅ COMPLIANT | CSP, HSTS, X-Frame-Options |
7680
77- ** Implementation Location:** ` src/wazuh_mcp_server/security.py `
81+ ** Implementation Location:** ` src/wazuh_mcp_server/security.py ` , ` src/wazuh_mcp_server/server.py `
7882
7983### 📋 ** Protocol Compliance**
8084
@@ -86,23 +90,46 @@ This document verifies that the Wazuh MCP Remote Server fully complies with the
8690| ** Error handling** | ✅ COMPLIANT | Standard MCP error codes |
8791| ** Capability negotiation** | ✅ COMPLIANT | Server capabilities exposed |
8892
89- ** Implementation Location:** ` src/wazuh_mcp_server/server.py:302-877 `
93+ ** Implementation Location:** ` src/wazuh_mcp_server/server.py `
94+
95+ ### 📝 ** MCP Methods (2025-11-25)**
96+
97+ | Method | Status | Implementation |
98+ | --------| --------| ----------------|
99+ | ** initialize** | ✅ COMPLIANT | Session creation with capability negotiation |
100+ | ** ping** | ✅ COMPLIANT | Returns empty ` {} ` per spec |
101+ | ** tools/list** | ✅ COMPLIANT | 29 tools with pagination support |
102+ | ** tools/call** | ✅ COMPLIANT | Tool execution with error handling |
103+ | ** prompts/list** | ✅ COMPLIANT | 4 security prompts with pagination |
104+ | ** prompts/get** | ✅ COMPLIANT | Prompt content with argument substitution |
105+ | ** resources/list** | ✅ COMPLIANT | 6 Wazuh resources |
106+ | ** resources/read** | ✅ COMPLIANT | Resource content via ` wazuh:// ` URIs |
107+ | ** resources/templates/list** | ✅ COMPLIANT | 3 parameterized templates |
108+ | ** logging/setLevel** | ✅ COMPLIANT | RFC 5424 log levels |
109+ | ** completion/complete** | ✅ COMPLIANT | Argument suggestions |
110+
111+ ### 📬 ** MCP Notifications**
112+
113+ | Notification | Status | Implementation |
114+ | --------------| --------| ----------------|
115+ | ** notifications/initialized** | ✅ COMPLIANT | Tracks session initialization state |
116+ | ** notifications/cancelled** | ✅ COMPLIANT | Handles cancellation gracefully |
90117
91118---
92119
93120## 🎯 ** Client Integration**
94121
95122### ✅ ** Recommended Configuration (Streamable HTTP)**
96123
97- ** New Standard - MCP 2025-06-18 :**
124+ ** Latest Standard - MCP 2025-11-25 :**
98125``` json
99126{
100127 "mcpServers" : {
101128 "wazuh" : {
102129 "url" : " https://your-server.com/mcp" ,
103130 "headers" : {
104131 "Authorization" : " Bearer your-jwt-token" ,
105- "MCP-Protocol-Version" : " 2025-06-18 "
132+ "MCP-Protocol-Version" : " 2025-11-25 "
106133 }
107134 }
108135 }
@@ -136,10 +163,11 @@ This document verifies that the Wazuh MCP Remote Server fully complies with the
136163
137164#### Streamable HTTP (Recommended):
1381651 . ** Client connects to** : ` https://server.com/mcp `
139- 2 . ** Headers sent** : ` Authorization: Bearer <token> ` , ` MCP-Protocol-Version: 2025-06-18 ` , ` Origin: https://client.com `
166+ 2 . ** Headers sent** : ` Authorization: Bearer <token> ` , ` MCP-Protocol-Version: 2025-11-25 ` , ` Origin: https://client.com `
1401673 . ** POST requests** : Send JSON-RPC requests, get JSON or SSE responses
141- 4 . ** GET requests** : Retrieve session info or establish SSE stream
168+ 4 . ** GET requests** : Establish SSE stream only (requires ` Accept: text/event- stream` ; returns 405 otherwise)
1421695 . ** DELETE requests** : Cleanly terminate session
170+ 6 . ** Session header** : ` MCP-Session-Id ` returned and required for subsequent requests
143171
144172#### Legacy SSE:
1451731 . ** Client connects to** : ` https://server.com/sse `
@@ -151,43 +179,70 @@ This document verifies that the Wazuh MCP Remote Server fully complies with the
151179
152180## 🔍 ** Standards Verification Tests**
153181
154- ### ✅ ** Streamable HTTP Tests (2025-06-18 )**
182+ ### ✅ ** Streamable HTTP Tests (2025-11-25 )**
155183
156184``` bash
157185# Test MCP endpoint availability
158186curl -I http://localhost:3000/mcp
159187# Expected: 401 Unauthorized (authentication required)
160188
161- # Test protocol version negotiation
189+ # Test GET without SSE Accept header
162190curl -H " Authorization: Bearer <token>" \
163191 -H " Origin: http://localhost" \
164- -H " MCP-Protocol-Version: 2025-06-18 " \
192+ -H " MCP-Protocol-Version: 2025-11-25 " \
165193 -H " Accept: application/json" \
166194 http://localhost:3000/mcp
167- # Expected: 200 OK with session info
195+ # Expected: 405 Method Not Allowed (per 2025-11-25 spec)
168196
169- # Test POST with JSON-RPC request
197+ # Test POST with JSON-RPC request (initialize)
170198curl -X POST http://localhost:3000/mcp \
171199 -H " Authorization: Bearer <token>" \
172200 -H " Origin: http://localhost" \
173- -H " MCP-Protocol-Version: 2025-06-18 " \
201+ -H " MCP-Protocol-Version: 2025-11-25 " \
174202 -H " Content-Type: application/json" \
175- -d ' {"jsonrpc":"2.0","method":"tools/list","id":"1"}'
203+ -d ' {"jsonrpc":"2.0","method":"initialize","params":{"protocolVersion":"2025-11-25","clientInfo":{"name":"test","version":"1.0"},"capabilities":{}},"id":"1"}'
204+ # Expected: JSON-RPC response with MCP-Session-Id header
205+
206+ # Test invalid protocol version (strict mode)
207+ curl -X POST http://localhost:3000/mcp \
208+ -H " Authorization: Bearer <token>" \
209+ -H " MCP-Protocol-Version: 2020-01-01" \
210+ -H " Content-Type: application/json" \
211+ -d ' {"jsonrpc":"2.0","method":"initialize","id":"1"}'
212+ # Expected: 400 Bad Request (unsupported protocol version)
213+
214+ # Test POST with JSON-RPC request (tools/list)
215+ curl -X POST http://localhost:3000/mcp \
216+ -H " Authorization: Bearer <token>" \
217+ -H " Origin: http://localhost" \
218+ -H " MCP-Protocol-Version: 2025-11-25" \
219+ -H " MCP-Session-Id: <session-id>" \
220+ -H " Content-Type: application/json" \
221+ -d ' {"jsonrpc":"2.0","method":"tools/list","id":"2"}'
176222# Expected: JSON-RPC response with 29 tools
177223
178- # Test GET with SSE
224+ # Test GET with SSE (requires Accept header)
179225curl -H " Authorization: Bearer <token>" \
180226 -H " Origin: http://localhost" \
181- -H " MCP-Protocol-Version: 2025-06-18" \
227+ -H " MCP-Protocol-Version: 2025-11-25" \
228+ -H " MCP-Session-Id: <session-id>" \
182229 -H " Accept: text/event-stream" \
183230 http://localhost:3000/mcp
184- # Expected: 200 OK with SSE stream
231+ # Expected: 200 OK with SSE stream (priming event first)
185232
186233# Test session termination
187234curl -X DELETE http://localhost:3000/mcp \
188235 -H " Authorization: Bearer <token>" \
189- -H " Mcp -Session-Id: <session-id>"
236+ -H " MCP -Session-Id: <session-id>"
190237# Expected: 204 No Content
238+
239+ # Test 404 for invalid session
240+ curl -X POST http://localhost:3000/mcp \
241+ -H " Authorization: Bearer <token>" \
242+ -H " MCP-Session-Id: invalid-session-id" \
243+ -H " Content-Type: application/json" \
244+ -d ' {"jsonrpc":"2.0","method":"tools/list","id":"1"}'
245+ # Expected: 404 Not Found
191246```
192247
193248### ✅ ** Legacy SSE Tests**
@@ -245,34 +300,45 @@ curl -H "Authorization: Bearer invalid-token" \
245300
246301## 🏆 ** FINAL COMPLIANCE VERDICT**
247302
248- ### ** ✅ FULLY COMPLIANT WITH MCP 2025-06-18 SPECIFICATION**
303+ ### ** ✅ FULLY COMPLIANT WITH MCP 2025-11-25 SPECIFICATION**
249304
250305The Wazuh MCP Remote Server implementation ** 100% complies** with the latest MCP standards:
251306
252- 🎯 ** Perfect Score: 33/33 Requirements Met**
307+ 🎯 ** Perfect Score: 45/45 Requirements Met**
253308
254309| Category | Score | Status |
255310| ----------| -------| --------|
256- | ** Streamable HTTP Transport** | 8/8 | ✅ COMPLIANT |
311+ | ** Streamable HTTP Transport** | 10/10 | ✅ COMPLIANT |
257312| ** Legacy SSE Support** | 3/3 | ✅ COMPLIANT |
258313| ** Authentication** | 5/5 | ✅ COMPLIANT |
259- | ** Protocol Versioning** | 4/4 | ✅ COMPLIANT |
260- | ** Security** | 6/6 | ✅ COMPLIANT |
261- | ** Protocol Compliance** | 5/5 | ✅ COMPLIANT |
314+ | ** Protocol Versioning** | 5/5 | ✅ COMPLIANT |
315+ | ** Security (2025-11-25)** | 7/7 | ✅ COMPLIANT |
316+ | ** MCP Methods** | 11/11 | ✅ COMPLIANT |
317+ | ** MCP Notifications** | 2/2 | ✅ COMPLIANT |
262318| ** Production Readiness** | 6/6 | ✅ COMPLIANT |
263319
264320### ** Transport Status**
265321
266- - ✅ ** Streamable HTTP (2025-06-18 )** : Primary transport, fully implemented
322+ - ✅ ** Streamable HTTP (2025-11-25 )** : Primary transport, fully implemented
267323- ✅ ** Legacy SSE (2024-11-05)** : Maintained for backwards compatibility
268324- ✅ ** Dual Transport Support** : Seamless migration path for clients
269325
326+ ### ** New in 2025-11-25 Compliance**
327+
328+ - ✅ ** GET returns 405 without SSE Accept header** (per spec)
329+ - ✅ ** Strict protocol version validation** (400 for invalid versions)
330+ - ✅ ** SSE priming event** (empty data event sent first)
331+ - ✅ ** Origin validation only when present** (no validation if header absent)
332+ - ✅ ** MCP-Session-Id header** (proper casing)
333+ - ✅ ** 404 for invalid session ID** (per spec)
334+ - ✅ ** Full MCP method support** (prompts, resources, logging, completion)
335+
270336### ** Ready for Production Deployment**
271337
272338This implementation is ** immediately ready** for production use and supports:
273339
274- - ✅ ** Latest MCP Clients** (2025-06-18 protocol)
275- - ✅ ** Legacy MCP Clients** (backwards compatible)
340+ - ✅ ** Latest MCP Clients** (2025-11-25 protocol)
341+ - ✅ ** Legacy MCP Clients** (backwards compatible with 2025-03-26, 2024-11-05 )
276342- ✅ ** Enterprise Security Standards**
277343- ✅ ** Scalable Architecture**
278344- ✅ ** Modern Cloud Deployments**
@@ -287,4 +353,4 @@ This implementation is **immediately ready** for production use and supports:
287353- ** Documentation** : ` README.md ` , ` INSTALLATION.md `
288354- ** Deployment** : ` compose.yml ` , ` Dockerfile `
289355
290- ** This implementation represents the gold standard for MCP remote server development and is fully up-to-date with the latest 2025-06-18 specification.**
356+ ** This implementation represents the gold standard for MCP remote server development and is fully up-to-date with the latest 2025-11-25 specification.**
0 commit comments