MCP Station: Building a Unified MCP Server Management Platform
Overview
MCP Station is a platform for centrally managing MCP (Model Context Protocol) servers. It handles multiple MCP servers as discrete sessions, communicates via the JSON-RPC protocol, and is deployable with Docker.
Background
As the LLM ecosystem expanded, running multiple MCP servers simultaneously (GitHub, Slack, DB, etc.) became increasingly common. Managing each server independently was inefficient, and a centralized session manager was the obvious solution.
Architecture
┌─────────────┐ ┌──────────────────────────────────┐
│ 클라이언트 │────▶│ MCP Station │
│ (LLM Agent) │ │ ┌────────────┐ ┌────────────┐ │
└─────────────┘ │ │ Session │ │ Process │ │
│ │ Manager │ │ Manager │ │
│ └────────────┘ └────────────┘ │
│ ┌────────────┐ ┌────────────┐ │
│ │ JSON-RPC │ │ Config │ │
│ │ Router │ │ Manager │ │
│ └────────────┘ └────────────┘ │
└──────────────────────────────────┘
│ │ │
┌────────┴─┐ ┌───┴───┐ ┌──┴──────┐
│ MCP │ │ MCP │ │ MCP │
│ GitHub │ │ Slack │ │ Custom │
└──────────┘ └───────┘ └─────────┘
Core Components
Session Manager: Manages the lifecycle of each MCP server session. Sessions are identified by session_name, with operations for creation, deletion, and lookup.
class SessionManager:
def create_session(self, session_name: str, config: dict) -> SessionInfo:
"""새 MCP 세션 생성"""
process = MCPProcess(session_name=session_name, config=config)
process.start()
return SessionInfo(session_name=session_name, status="running")
def get_session(self, session_name: str) -> SessionInfo:
"""세션 상태 조회"""
...
Process Manager: Handles starting, stopping, and monitoring of the actual MCP server processes. Includes automatic restart logic on abnormal termination.
JSON-RPC Router: The MCP protocol is built on JSON-RPC 2.0. This component routes incoming client requests to the appropriate MCP server.
Commit Timeline
| Date | Description |
|---|---|
| 2025-09-30 | Project initialization, FastAPI-based architecture design |
| 2025-10-06 | Session Manager implementation, JSON-RPC router added |
| 2025-10-09 | Process Manager implementation, Docker Compose configuration |
| 2025-10-13 | Added session_name field, session management improvements |
Tech Stack
- FastAPI: REST API server
- JSON-RPC 2.0: MCP protocol communication
- Docker Compose: Multi-service orchestration
- Python asyncio: Asynchronous process management
Retrospective
It was a short project — just five commits — but it became the foundation for the MCP auto-loading feature in the subsequent Claude Control project. It gave me a much deeper understanding of the MCP protocol, and the JSON-RPC-based session management pattern in particular has been reused across several other projects.