Loading skill
Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Configure HTTP/SSE transport for web-based MCP servers with proper endpoints, authentication, and CORS.
| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-03 | ✗→✓ | ▲ Improved | 62% | 0% |
| case-10 | ✗→✓ | ▲ Improved | 39% | 0% |
| case-13 | ✗→✓ | ▲ Improved | 25% | 0% |
| case-14 | ✗→✓ | ▲ Improved | 47% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 16% | 0% |
Configure HTTP/SSE transport for web-based MCP servers.
Invoke this skill when you need to:
| Parameter | Type | Required | Description | |-----------|------|----------|-------------| | language | string | Yes | Target language (typescript, python) | | framework | string | No | Web framework (express, fastify, fastapi) | | auth | object | No | Authentication configuration | | cors | object | No | CORS configuration |
typescriptimport express from 'express'; import cors from 'cors'; import { Server } from '@modelcontextprotocol/sdk/server/index.js'; import { SSEServerTransport } from '@modelcontextprotocol/sdk/server/sse.js'; const app = express(); // CORS configuration app.use(cors({ origin: process.env.ALLOWED_ORIGINS?.split(',') || '*', credentials: true, })); app.use(express.json()); // Store active connections const connections = new Map<string, SSEServerTransport>(); // SSE endpoint app.get('/sse', async (req, res) => { const connectionId = req.query.connectionId as string || crypto.randomUUID(); // Set SSE headers res.setHeader('Content-Type', 'text/event-stream'); res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Connection', 'keep-alive'); res.setHeader('X-Accel-Buffering', 'no'); // Create transport const transport = new SSEServerTransport('/message', res); connections.set(connectionId, transport); // Create server instance for this connection const server = new Server( { name: 'my-mcp-server', version: '1.0.0' }, { capabilities: { tools: {}, resources: {} } } ); // Register handlers... registerToolHandlers(server); // Handle connection close req.on('close', () => { connections.delete(connectionId); transport.close(); }); // Connect transport await server.connect(transport); }); // Message endpoint app.post('/message', async (req, res) => { const connectionId = req.query.connectionId as string; const transport = connections.get(connectionId); if (!transport) { res.status(404).json({ error: 'Connection not found' }); return; } try { await transport.handlePostMessage(req, res); } catch (error) { res.status(500).json({ error: 'Failed to process message' }); } }); // Health check app.get('/health', (req, res) => { res.json({ status: 'healthy', connections: connections.size, timestamp: new Date().toISOString(), }); }); const PORT = process.env.PORT || 3000; app.listen(PORT, () => { console.log(`MCP Server listening on port ${PORT}`); });
pythonfrom fastapi import FastAPI, Request, Response from fastapi.middleware.cors import CORSMiddleware from sse_starlette.sse import EventSourceResponse from mcp.server import Server from mcp.server.sse import SseServerTransport import uuid import asyncio app = FastAPI() # CORS app.add_middleware( CORSMiddleware, allow_origins=["*"], allow_credentials=True, allow_methods=["*"], allow_headers=["*"], ) # Store connections connections: dict[str, SseServerTransport] = {} @app.get("/sse") async def sse_endpoint(request: Request): connection_id = request.query_params.get("connectionId") or str(uuid.uuid4()) async def event_generator(): transport = SseServerTransport("/message") connections[connection_id] = transport server = Server("my-mcp-server") register_handlers(server) try: async for event in transport.events(): yield event finally: connections.pop(connection_id, None) return EventSourceResponse(event_generator()) @app.post("/message") async def message_endpoint(request: Request): connection_id = request.query_params.get("connectionId") transport = connections.get(connection_id) if not transport: return Response(status_code=404, content="Connection not found") body = await request.json() await transport.handle_message(body) return Response(status_code=200) @app.get("/health") async def health(): return { "status": "healthy", "connections": len(connections), }
Other measured skills in the registry, with their headline benchmark lift.