Moor 是 Mac 的本地 MCP 控制平面,它为每个编码代理提供了一个安全、可观察、可配置的网关,可连接到您的 MCP 服务器。
Moor
Local MCP Gateway Manager for AI Agents
Aggregate multiple MCP servers into a single endpoint, filter tools by Profile, and manage everything from a beautiful native UI.
Install · Quickstart · Features · Architecture · Development · API
AI Agents need tools, but managing dozens of MCP servers across different clients is a mess. I wanted a single gateway that aggregates everything, filters by context, and keeps running in the background — all controllable from a beautiful native UI.
Moor exposes one endpoint (
http://127.0.0.1:/mcp) that dynamically serves only the tools you want, based on your active Profile. Switch profiles without disconnecting your Agent, and every tool call is audited. That's why I built it.
Dashboard — Overview of active Profile, server status, and audit stats.
Servers — Manage MCP servers, import configs, monitor health.
Profiles — Create profiles, toggle servers, enable/disable tools.
Audit — Inspect every tool call with full context and filters.
Download the .dmg from Releases, drag to Applications, done. The app bundles the HTTP server as an in-process Rust binary — no pre-installed Node.js runtime required.
Download the Windows installer from Releases and run it. The app bundles the HTTP server as an in-process Rust binary — no pre-installed Node.js runtime required.
Download the .deb, .rpm, or .AppImage from Releases (x86_64 and aarch64 builds are produced by CI). The app bundles the HTTP server as an in-process Rust binary — no pre-installed Node.js runtime required. macOS remains the primary target; Linux builds are produced by CI but less extensively tested.
Requires macOS (Apple Silicon / Intel), Windows x64, or Linux (x86_64 / aarch64), Node.js >= 22 (CI uses 24), pnpm >= 10, and Rust >= 1.77.
git clone https://github.com/varandrew/moor.git
cd moor
pnpm installSee Development for build instructions.
Open Moor.app. The Dashboard shows your active Profile, server status, and recent audit logs at a glance.
Moor can automatically detect MCP servers you've already configured for Claude Code, Claude Desktop, Codex, OpenCode, Cursor, Kimi Code, dsh, Grok Build, and Pi:
~/.claude.json, ~/.codex/config.toml, ~/.config/opencode/opencode.json / .jsonc, ~/.cursor/mcp.json, ~/.kimi-code/mcp.json, ~/.dsh/cordis.patch.yml, ~/Library/Application Support/Claude/claude_desktop_config.json, ~/.grok/config.toml, and ~/.pi/agent/mcp.json (Pi needs the community adapter: pi install npm:pi-mcp-adapter)You can also paste a JSON MCP configuration with Import JSON. Moor imports stdio and HTTP/SSE servers, and reports unsupported entries such as OpenAPI configs without saving them.
Profiles let you group servers and control which tools are exposed to Agents:
Point any MCP-compatible client to Moor's single endpoint:
http://127.0.0.1:9223/mcp9223 is the default gateway port. If it is already in use, Moor picks the next available port and shows the actual endpoint in the Dashboard and Client Config pages.
By default the /mcp endpoint is loopback-only and does not require X-Moor-Token (see LAN access below). Moor uses X-Moor-Token only for local management APIs between the WebView and gateway, so you do not need to paste it into agent configs.
To connect from WSL2 (NAT mode) or another LAN device, enable Settings → Advanced → Allow LAN MCP Access and restart Moor. The gateway then binds to all interfaces and /mcp additionally accepts private-network hosts (10.x.x.x, 172.16.x.x–172.31.x.x, 192.168.x.x); /api/* stays loopback-only and token-protected. Windows may prompt to allow Moor through the firewall.
Moor handles the rest — aggregating tools/list, routing tools/call, and filtering based on your active Profile.
A single HTTP endpoint (/mcp) proxies all backend MCP servers. Agents see a unified tool catalog — no need to configure multiple endpoints.
Connect to both stdio (subprocess) and HTTP/SSE MCP servers. Moor manages connection lifecycles, restarts, and health checks automatically.
Create unlimited Profiles for different workflows. Each Profile stores:
Switch Profiles with hot-swap — connected Agents stay connected, and the next tools/list reflects the new configuration immediately.
Beyond server-level on/off, drill into any server to disable specific tools. Disabled tools disappear from the Agent's tool catalog in real time.
One-click import from:
~/.claude.json~/.codex/config.toml~/.config/opencode/opencode.json / .jsonc~/.cursor/mcp.json~/.kimi-code/mcp.json~/.dsh/cordis.patch.yml~/Library/Application Support/Claude/claude_desktop_config.json~/.grok/config.toml~/.pi/agent/mcp.json (requires pi install npm:pi-mcp-adapter)Manual entry and pasted JSON batch import are also supported for stdio and HTTP/SSE servers.
Generate ready-to-copy configuration snippets for Claude Code, Claude Desktop, Codex, OpenCode, Cursor, Kimi Code, dsh, Grok Build, and Pi. The snippets contain only the /mcp endpoint; Moor's X-Moor-Token is reserved for internal management API calls.
Every tools/call is recorded with:
Filter by time range, server, or tool. View aggregate statistics on the Dashboard.
Close the window — Moor keeps running in the macOS menu bar or Windows system tray. The gateway stays alive, so your Agents never lose connection.
Server status changes and Profile switches are pushed to the UI via SSE. No refresh needed.
Architecture Diagram
…AI Agent ──HTTP──▶ POST /mcp ──▶ Moor Gateway ──stdio/HTTP──▶ MCP Servers
│
WebView ──IPC──▶ get_sidecar_info ─┐
WebView ──env──▶ VITE_MOOR_API_URL/TOKEN ─┤ (fallback in browser dev mode)
WebView ──fetch──▶ /api/* ─────────┘
WebView ◀──SSE──── /api/eventsget_sidecar_info) → Rust (port, token); in browser dev mode (pnpm dev) falls back to the VITE_MOOR_API_URL / VITE_MOOR_API_TOKEN env vars — see src/lib/api/runtime.ts (GET /api/runtime exists but is token-protected)fetch() → In-process Axum server (Rust)pnpm installStart the full desktop app (Tauri, with the in-process Rust gateway):
pnpm tauri devpnpm tauri buildOutputs:
src-tauri/target/release/bundle/macos/Moor.appsrc-tauri/target/release/bundle/dmg/Moor__aarch64.dmgsrc-tauri/target/release/bundle/nsis/Moor__x64-setup.exe.deb / .rpm / .AppImage under src-tauri/target/release/bundle/ (x86_64 + aarch64, built by CI)vp check # format + lint + type check
vp lint # lint only
vp lint --fix # auto-fix
vp fmt # format# Rust gateway tests
cargo test --manifest-path src-tauri/Cargo.toml
# Frontend + scripts tests
vp test| Method | Path | Description |
|---|---|---|
ALL |
/mcp |
MCP protocol endpoint (Streamable HTTP) |
| Method | Path | Description |
|---|---|---|
GET |
/api/servers |
List all servers |
POST |
/api/servers |
Add server |
GET |
/api/servers/:id |
Server detail |
PUT |
/api/servers/:id |
Update server config |
DELETE |
/api/servers/:id |
Remove server |
POST |
/api/servers/:id/start |
Start server |
POST |
/api/servers/:id/stop |
Stop server |
GET |
/api/servers/:id/tools |
Get discovered tools (optionally filter by ?profile_id=) |
PUT |
/api/servers/order |
Reorder servers |
| Method | Path | Description |
|---|---|---|
GET |
/api/profiles |
List all profiles |
POST |
/api/profiles |
Create profile |
GET |
/api/profiles/:id |
Get profile detail (with servers) |
PUT |
/api/profiles/:id |
Update profile |
DELETE |
/api/profiles/:id |
Delete profile |
PUT |
/api/profiles/:id/activate |
Set as active profile |
POST |
/api/profiles/:id/clone |
Clone a profile |
GET |
/api/profiles/:id/servers/:serverId |
Get server toggle + disabled tools |
PUT |
/api/profiles/:id/servers/:serverId |
Update server toggle + disabled tools |
PUT |
/api/profiles/:id/servers-state |
Bulk upsert server toggles |
GET |
/api/profiles/:id/tools |
Tools exposed by the profile |
| Method | Path | Description |
|---|---|---|
GET |
/api/logs |
Query logs (with filters) |
GET |
/api/logs/stats |
Aggregate statistics |
GET |
/api/logs/insights |
Tool-call governance insights |
| Method | Path | Description |
|---|
暂无开放 Issues,或尚未同步最近议题。