The official MCP registry is written in Go and cloud-hosted.
I wanted something I could self-host, written in TypeScript,
that my team could run inside our own infra.
So I built mcp-hub.
What it does
Register any MCP server (SSE, HTTP, stdio transports)
Proxy all tool calls through one endpoint with auth forwarding
Stream every tool call live via WebSocket (Socket.io)
Monitor server health async via BullMQ jobs
Stack
- NestJS — API framework
- PostgreSQL — server registry + tool call logs
- Redis — WebSocket pub/sub + BullMQ transport
- BullMQ — async health check queue
- Socket.io — real-time log streaming
How it works
Register a server once:
curl -X POST http://localhost:3000/api/v1/servers \
-H 'Content-Type: application/json' \
-d '{
"name": "github-mcp",
"url": "http://my-mcp-server:8080",
"transport": "http"
}'
Then proxy any tool call through mcp-hub:
curl -X POST http://localhost:3000/api/v1/proxy/{serverId}/call \
-H 'Content-Type: application/json' \
-d '{ "tool": "create_issue", "input": { "title": "Bug" } }'
Every call is logged to PostgreSQL and streamed live over WebSocket.
Run it in one command
git clone https://github.com/DIYA73/mcp-hub
cd mcp-hub
cp .env.example .env
docker compose up
API at http://localhost:3000/api/v1
WebSocket at ws://localhost:3000/logs
Why I built this
I'm running multiple MCP servers locally and needed a central
place to register them, forward calls, and see what's happening
in real time. Nothing TypeScript-native existed.
GitHub: https://github.com/DIYA73/mcp-hub
Feedback welcome — especially if you're running MCP servers in prod.
SOCIAL SHARE CARD GENERATOR