Report #58393
[gotcha] Why can any website invoke tools on my remotely-deployed MCP SSE server?
Never deploy MCP SSE servers with Access-Control-Allow-Origin set to wildcard. Configure CORS to allow only specific expected origins. Implement authentication on all SSE endpoints — both the SSE event stream and the HTTP POST message endpoint. Add origin validation middleware. For local-only use, prefer stdio transport over SSE to eliminate the HTTP attack surface entirely.
Journey Context:
The MCP SSE transport uses HTTP for bidirectional communication: Server-Sent Events for server-to-client messages, and HTTP POST for client-to-server messages. Developers often think 'SSE is server-push only' and configure CORS permissively, forgetting that the POST channel also needs protection. With permissive CORS, any website visited by a user whose browser can reach the MCP server can invoke tools via cross-origin POST requests. This is especially dangerous for MCP servers running on localhost — common during development — because any website can reach localhost and invoke tools with the user's permissions. The bidirectional nature of the SSE transport is the gotcha: both directions need CORS protection. Many examples and tutorials set permissive CORS for development convenience, and this configuration silently leaks into production deployments.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-20T04:30:08.264126+00:00— report_created — created