Skip to main content
Glama
systempromptio

SystemPrompt Coding Agent

Official
mcp-server.md6.85 kB
# MCP Server ## Overview The MCP (Model Context Protocol) Server is the core component that implements the protocol specification, handling client requests and managing sessions. It runs inside a Docker container and provides a standardized HTTP/SSE interface for AI assistants to interact with the system. ## Purpose The MCP Server serves several critical functions: 1. **Protocol Implementation**: Full implementation of the Model Context Protocol specification 2. **Session Management**: Handles multiple concurrent client sessions with isolation 3. **Request Routing**: Routes protocol requests to appropriate handlers 4. **State Management**: Maintains session state and task persistence 5. **Real-time Communication**: Supports Server-Sent Events (SSE) for streaming responses ## Architecture ``` Client (MCP) Docker Container Host Machine ┌─────────┐ ┌─────────────────┐ ┌─────────────┐ │ Claude │ HTTP/ │ MCP Server │ TCP │ Daemon │ │ Desktop │ ──SSE──> │ ┌─────────────┐ │ ──────> │ │ │ App │ │ │ Sessions │ │ :9876 │ AI Agents │ └─────────┘ │ │ Handlers │ │ └─────────────┘ │ │ Transport │ │ │ └─────────────┘ │ └─────────────────┘ ``` ## Core Components ### 1. Express Server (`server.ts`) The main HTTP server that: - Configures CORS for cross-origin requests - Sets up routing for MCP and utility endpoints - Handles graceful shutdowns - Initializes the MCP handler ```typescript // Key endpoints /mcp - Main MCP protocol endpoint /health - Health check endpoint / - Service metadata ``` ### 2. MCP Handler (`server/mcp.ts`) The protocol implementation that: - Creates per-session server instances - Manages session lifecycle - Routes requests to handlers - Implements session cleanup ### 3. Session Management Each client connection gets: - Unique session ID - Dedicated Server instance - Isolated StreamableHTTPServerTransport - Session timeout handling (1 hour) ## Protocol Features ### Supported Operations 1. **Tools** - `list_tools` - List available tools - `call_tool` - Execute a tool 2. **Prompts** - `list_prompts` - List prompt templates - `get_prompt` - Retrieve specific prompt 3. **Resources** - `list_resources` - List available resources - `read_resource` - Read resource content 4. **Resource Templates** - `list_resource_templates` - List dynamic resource templates 5. **Roots** - `list_roots` - List filesystem roots ### Server Capabilities ```typescript { experimental: { "mcp-send-sse": {}, // Server-sent events }, tools: {}, // Tool execution resources: {}, // Resource management prompts: {}, // Prompt templates roots: { // Root listing listChanged: true } } ``` ## Request Flow ### 1. Session Initialization ``` Client → POST /mcp (no session ID) ↓ Server creates new session ↓ Returns session ID in headers ↓ Client uses session ID for subsequent requests ``` ### 2. Request Processing ```typescript // Client sends request with session ID POST /mcp Headers: { "mcp-session-id": "session_123...", "Content-Type": "application/json" } // Server routes to session's transport sessionInfo.transport.handleRequest(req, res) // Response via JSON or SSE ``` ### 3. Streaming Responses For long-running operations: ``` Client → Request tool execution ↓ Server → SSE stream begins ↓ Multiple events streamed ↓ Final completion event ``` ## Middleware Stack The server applies several middleware layers: 1. **Rate Limiting**: 100 requests/minute per IP 2. **Protocol Validation**: Ensures correct MCP version 3. **Request Size Limit**: 10MB maximum 4. **CORS**: Allows cross-origin requests ## Error Handling Standard JSON-RPC error codes: - `-32600`: Invalid Request - `-32601`: Method not found - `-32602`: Invalid params - `-32603`: Internal error - `-32001`: Session not found (custom) ## Configuration Environment variables: - `PORT`: Server port (default: 3000) - `NODE_ENV`: Environment (development/production) - `LOG_LEVEL`: Logging verbosity ## Integration Points ### With Daemon The MCP server communicates with the daemon for tool execution: ```typescript // Tool execution request { tool: "claude", command: "Add authentication", workingDirectory: "/project" } ``` ### With Task Store Manages persistent task state: - Creates tasks on tool execution - Updates task status - Stores execution logs ### With Event System Emits events for: - Session lifecycle - Tool execution - Task updates - System notifications ## Security Considerations 1. **No Authentication**: Currently operates without auth 2. **Session Isolation**: Each session has separate state 3. **Input Validation**: All inputs validated via schemas 4. **Rate Limiting**: Prevents abuse ## Development Tips ### Testing MCP Endpoints ```bash # Initialize session curl -X POST http://localhost:3000/mcp \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"initialize","params":{},"id":1}' # List tools with session curl -X POST http://localhost:3000/mcp \ -H "mcp-session-id: session_123" \ -H "Content-Type: application/json" \ -d '{"jsonrpc":"2.0","method":"tools/list","params":{},"id":2}' ``` ### Debugging Sessions ```typescript // Get active session count mcpHandler.getActiveSessionCount() // Get specific session server mcpHandler.getServerForSession(sessionId) // Manual session cleanup mcpHandler.cleanupSession(sessionId) ``` ## Performance Optimization 1. **Session Cleanup**: Automatic cleanup every 5 minutes 2. **Connection Pooling**: Reuses TCP connections to daemon 3. **Streaming**: Uses SSE for efficient real-time updates 4. **Request Batching**: Supports multiple operations per request ## Troubleshooting ### Common Issues 1. **Session Not Found** - Session expired (>1 hour) - Server restarted - Invalid session ID 2. **Connection Refused** - Daemon not running - Port misconfiguration - Docker networking issue 3. **Timeout Errors** - Long-running tool execution - Network latency - Resource constraints ### Debug Logging Enable verbose logging: ```bash export LOG_LEVEL=debug npm start ``` This provides detailed information about: - Session creation/cleanup - Request routing - Handler execution - Error details

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/systempromptio/systemprompt-code-orchestrator'

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