octoport
A self-hosted MCP hub that unifies multiple MCP server configurations behind a single local endpoint, with a web dashboard for management, live tool-call logging, and per-person access tokens.
README
🐙 octoport
One local MCP endpoint for every AI coding tool. 8 arms, 1 port.
Your MCP servers are configured in four different places — Claude Code, Cursor, Claude Desktop, Windsurf — each with its own copy of the same JSON, the same API keys, the same drift. octoport is a tiny self-hosted hub that pulls them all behind one endpoint: run one command, and manage everything else from the web dashboard.
Claude Code ─┐
Cursor ─┼──▶ http://127.0.0.1:6286/mcp ──▶ all your MCP servers
Windsurf ─┘ (octoport)
Quickstart — one command, then it's all web
npx octoport up --open
The dashboard walks you through the rest:
- Import — octoport scans your Claude Code / Claude Desktop / Cursor / Windsurf / VS Code configs and shows every MCP server it found. Pick and import.
- Connect — copy one snippet per client (shown in the wizard).
- Clean up — remove the now-duplicate direct entries from your client configs. A timestamped backup of every file is written first, and the octoport connection itself is never touched. Restart running clients after.
From then on: add/edit/toggle servers, watch the live tool-call log, create
per-person access tokens, and export JSONL — all in the dashboard. New servers
propagate to every connected client live (tools/list_changed), no restarts.
Until the npm package is published, run from source:
git clone https://github.com/nullarch/octoport && cd octoport && npm install && npm run build && node dist/cli.js up --open
Start at login:
octoport autostart # launchd (macOS) / systemd --user (Linux)
octoport autostart --remove
Port 6286 is "OCTO" on a phone keypad. Change it with octoport up --port <n>.
What you get
- One endpoint — N clients × M servers becomes 1 × M.
- Live call log — exactly which tools your agents called, with what, how long it took, and which token (person/machine) made the call. SQLite under the hood, JSONL export.
- Named access tokens — one per person or machine. Revoking a token kills its live sessions on the spot.
- Process supervision — stdio servers run as child processes with crash isolation and backoff restart, plus a restart button in the dashboard.
- Local security by default —
127.0.0.1binding, Host/Origin validation (DNS-rebinding protection), and a per-install bearer token baked into every connection snippet. The MCP Inspector RCE (CVE-2025-49596) happened because a localhost tool skipped exactly these three.
Remote access (optional, explicit)
octoport never exposes itself beyond loopback unless you say so, twice.
Recommended: Tailscale. Keep the default loopback bind on the machine that runs octoport, or bind the tailnet address; either way nothing touches the public internet:
octoport up --host 100.x.y.z --allow-host hub.tailnet-name.ts.net --behind-proxy
Reverse proxy (Caddy) with a real domain. octoport does not terminate TLS — your proxy does:
# Caddyfile
hub.example.com {
reverse_proxy 127.0.0.1:6286
}
octoport up --allow-host hub.example.com --behind-proxy
Then connect clients with https://hub.example.com/mcp and a token from the
dashboard. Rules enforced at startup: a non-loopback bind refuses to start
without at least one --allow-host and --behind-proxy.
X-Forwarded-Host is deliberately ignored — the allowlist matches the real
Host header.
Small team setup: run octoport on a shared box behind Tailscale, create one named token per teammate in Settings, and the call log becomes a team-level "which agent did what" record.
Honest scope: every token is full-admin. Any token opens the dashboard, reads server configs (including env secrets), and can create or revoke other tokens. Token names exist for log attribution, not access control — hand one out exactly like you'd hand out SSH access to the box.
Commands
| Command | What it does |
|---|---|
octoport up [--open] [--port <n>] [--host <addr>] [--allow-host <h>] [--behind-proxy] |
Start the hub |
octoport autostart [--remove] |
Start at login (launchd/systemd) |
octoport import [--dry-run] |
CLI import (the wizard does this too) |
octoport connect [client] |
Print connection snippets |
octoport logs [--limit <n>] [--jsonl [file]] |
Inspect or export the call log |
octoport token [--rotate] |
List tokens / rotate the default token |
What octoport is not
- Not an enterprise governance product. No SSO, no SCIM, no compliance claims. It's a personal/small-team tool; the log is yours.
- Not a context optimizer for Claude Code. Claude Code ships native MCP tool search; octoport doesn't compete with it.
- Not magic. Tool names are namespaced
server__tool(capped at 48 chars with deterministic hashing) and routed through a mapping table — never string-parsed back.
Known limitations (v0.2)
- Tools only:
resourcesandpromptsare not yet aggregated. - Legacy bidirectional flows (old-spec
sampling/elicitationinitiated by a downstream server) fail with a clear error instead of being relayed. autostartrequires a permanent install (npm i -g octoportor a repo checkout) — refuses to point launchd at an ephemeral npx cache.- Windows: hub works,
autostartnot yet.
Maintenance firewall
MIT-licensed, provided as is. No support guarantees, no response-time promises, PRs may or may not be merged, and the project may be archived at any time. If it's useful, use it; if you need guarantees, fork it.
Development
npm install
npm test # 47 tests: unit + E2E (client → hub → fixture stdio server)
npm run build
node dist/cli.js up --open
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。