@openport-mcp/proxy
v0.1.0
Published
OpenPort local proxy: bridge stdio/SSE/streamable-http MCP servers to SSE/WS/StreamableHTTP with process isolation, auto-restart, and health/latency endpoints
Downloads
35
Maintainers
Readme
@openport-mcp/proxy
OpenPort's local bridge: aggregate multiple MCP servers (stdio / SSE / StreamableHTTP) behind a single SSE, WebSocket, or StreamableHTTP endpoint with per-server process isolation, auto-restart with exponential backoff, and health / latency endpoints.
The OpenPort Chrome extension connects to this proxy, so one local proxy serves all of your MCP servers to the chat sites.
Quick start
npx @openport-mcp/proxy # uses ./config.json if present
npx @openport-mcp/proxy --config config.json --outputTransport sse --port 3006With no --config, the proxy resolves a default config from the current
directory: config.json → proxy.config.json → mcp.json →
proxy.config.example.json (Vite/npm convention).
Config file
{
"mcpServers": {
"filesystem": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/home/hypruser"]
},
"remote-sse": {
"type": "sse",
"url": "http://localhost:8090/sse"
}
}
}See proxy.config.example.json for a full example including restart tuning.
CLI
--config <path> Config file with mcpServers (default: auto-resolve)
--stdio <cmd> Single stdio server (no config file needed)
--sse <url> Single remote SSE server
--streamableHttp <url> Single remote StreamableHTTP server
--outputTransport sse | ws | streamableHttp (default sse)
--port <n> Default 3006
--host <h> Default localhost
--ssePath / --messagePath / --streamableHttpPath
--healthEndpoint Extra "ok" routes (repeatable)
--statusPath Path for the JSON status endpoint (default /status)
--logLevel debug | info | warn | errorEndpoints
| Route | Description |
| --------- | ------------------------------------------------------------------------ |
| / | Web dashboard (polls /status + /health every 5s) |
| /health | {status, serverCount, connectedCount, degradedCount, uptimeSeconds, …} |
| /status | Per-server {name, type, status, connected, toolCount, restartCount, …}. Add ?measureLatency=true to ping each connected server. |
Tools
All servers' tools are aggregated and prefixed with their server name:
<serverName>.<toolName>. tools/call with tools/call splits the name back.
Auto-restart
Each stdio server runs as its own child process. On disconnect the proxy restarts it with exponential backoff:
"restart": { "enabled": true, "maxAttempts": 5, "initialDelayMs": 500, "maxDelayMs": 10000, "factor": 2 }maxAttempts: 0= unlimited retries (default).restartCountresets to 0 on a successful reconnect.
Dashboard
Open http://localhost:<port>/ in a browser for a live view of server status,
tool counts, latency, restart counts, and errors. No extra build step — it is a
single static HTML file served by the proxy.
