Moor
Moor is a local MCP control plane for Mac. It gives every coding agent one safe, observable, configurable gateway to your MCP servers.
Ask AI about Moor
Powered by Claude Β· Grounded in docs
I know everything about Moor. Ask me about installation, configuration, usage, or troubleshooting.
0/500
Reviews
Documentation
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
English | ζ±θ― | ζ₯ζ¬θͺ | EspaΓ±ol
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:<port>/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.
Install
macOS App
Download the .dmg from Releases, drag to Applications, done. The app bundles the Node.js sidecar as a standalone binary β no pre-installed runtime required.
Build from Source
Requires macOS (Apple Silicon / Intel), Node.js >= 22, pnpm >= 10, and Rust >= 1.77.
git clone https://github.com/yourusername/moor.git
cd moor
vp install
See Development for build instructions.
Quickstart
Launch the App
Open Moor.app. The Dashboard shows your active Profile, server status, and recent audit logs at a glance.
Scan Existing Configs
Moor can automatically detect MCP servers you've already configured for Claude Code, Codex, OpenCode, and Cursor:
- Go to Servers β Import
- Click Scan β Moor reads
~/.claude/settings.json,~/.codex/config.toml,~/.config/opencode/opencode.json/.jsonc, and~/.cursor/mcp.json - Select the servers you want to import
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.
Create a Profile
Profiles let you group servers and control which tools are exposed to Agents:
- Go to Profiles β New Profile
- Name it (e.g., "Coding", "Research")
- Toggle servers on/off
- Expand a server to enable/disable individual tools
- Click Activate β the change is instant
Connect Your Agent
Point any MCP-compatible client to Moor's single endpoint:
http://127.0.0.1:9223/mcp
9223 is the default sidecar 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.
The /mcp endpoint is loopback-only and does not require X-Moor-Token. Moor uses X-Moor-Token only for local management APIs between the WebView and sidecar, so you do not need to paste it into agent configs.
Moor handles the rest β aggregating tools/list, routing tools/call, and filtering based on your active Profile.
Features
MCP Gateway Aggregation
A single HTTP endpoint (/mcp) proxies all backend MCP servers. Agents see a unified tool catalog β no need to configure multiple endpoints.
Multi-Transport Support
Connect to both stdio (subprocess) and HTTP/SSE MCP servers. Moor manages connection lifecycles, restarts, and health checks automatically.
Profile Management
Create unlimited Profiles for different workflows. Each Profile stores:
- Which servers are enabled
- Which tools are disabled per server
- A global active state
Switch Profiles with hot-swap β connected Agents stay connected, and the next tools/list reflects the new configuration immediately.
Tool-Level Toggles
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.
Config Import
One-click import from:
- Claude Code:
~/.claude/settings.json - Codex:
~/.codex/config.toml - OpenCode:
~/.config/opencode/opencode.json/.jsonc - Cursor:
~/.cursor/mcp.json
Manual entry and pasted JSON batch import are also supported for stdio and HTTP/SSE servers.
Client Configuration
Generate ready-to-copy configuration snippets for Claude Code, Codex, OpenCode, and Cursor. The snippets contain only the /mcp endpoint; Moor's X-Moor-Token is reserved for internal management API calls.
Audit Logs
Every tools/call is recorded with:
- Timestamp, Profile, Server, Tool name
- Arguments (with sensitive data redaction)
- Result or error
- Duration and Agent info
Filter by time range, server, or tool. View aggregate statistics on the Dashboard.
System Tray
Close the window β Moor keeps running in the macOS menu bar. The gateway stays alive, so your Agents never lose connection.
Real-Time Status
Server status changes and Profile switches are pushed to the UI via SSE. No refresh needed.
Architecture
Architecture Diagram
Moor.app
βββ UI Layer React + Vite + TypeScript + Tailwind CSS v4 + shadcn/ui
βββ Desktop Layer Tauri 2 / Rust
β βββ Window management + tray icon
β βββ macOS Keychain access
β βββ Sidecar process lifecycle management
βββ Gateway Daemon Node.js / TypeScript Sidecar (bundled as SEA standalone binary)
β βββ MCP protocol gateway POST /mcp β init, tools/list, tools/call
β βββ Server management stdio spawn + HTTP/SSE client
β βββ Profile routing Global active Profile, hot-swap
β βββ Audit logging Async batch write (500ms / 50 entries)
β βββ SSE push Real-time status sync to WebView
βββ Storage SQLite (node:sqlite)
βββ servers (configs, status)
βββ profiles (server groups + tool toggles)
βββ audit_logs (tool calls, params, results, errors)
Communication Flow
AI Agent ββHTTPβββΆ POST /mcp βββΆ Moor Gateway ββstdio/HTTPβββΆ MCP Servers
β
WebView ββfetchβββΆ /api/* βββββ
WebView βββSSEββββ /api/events
- Business operations: WebView β HTTP
fetch()β Sidecar (Node.js) - System operations: WebView β Tauri IPC β Rust (macOS Keychain, tray, window)
Development
Prerequisites
- macOS (Apple Silicon / Intel)
- Node.js >= 22
- pnpm >= 10
- Rust >= 1.77
- Xcode Command Line Tools
Install Dependencies
vp install
Development Mode
Start both frontend and sidecar:
pnpm dev:all
- Frontend: http://localhost:1420
- Sidecar API: http://localhost:9223
Start the full desktop app (Tauri):
pnpm tauri dev
Production Build
pnpm tauri build
Outputs:
src-tauri/target/release/bundle/macos/Moor.appsrc-tauri/target/release/bundle/dmg/Moor_<version>_aarch64.dmg
Code Quality
vp check # format + lint + type check
vp lint # lint only
vp lint --fix # auto-fix
vp fmt # format
Testing
# Sidecar tests
pnpm --filter moor-sidecar test
# Frontend tests
vp test
API
MCP Gateway
| Method | Path | Description |
|---|---|---|
ALL | /mcp | MCP protocol endpoint (Streamable HTTP) |
Server Management
| 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 |
Profile Management
| Method | Path | Description |
|---|---|---|
GET | /api/profiles | List all profiles |
POST | /api/profiles | Create profile |
PUT | /api/profiles/:id | Update profile |
DELETE | /api/profiles/:id | Delete profile |
PUT | /api/profiles/:id/activate | Set as active profile |
PUT | /api/profiles/:id/servers/:sid | Update server toggle + disabled tools |
Audit Logs
| Method | Path | Description |
|---|---|---|
GET | /api/logs | Query logs (with filters) |
GET | /api/logs/stats | Aggregate statistics |
Other
| Method | Path | Description |
|---|---|---|
GET | /api/health | Health check |
GET | /api/runtime | Runtime info (port, URL) |
GET | /api/events | SSE real-time event stream |
POST | /api/import/scan | Scan local client configs |
POST | /api/import/parse | Preview pasted JSON import |
POST | /api/import/execute | Execute import |
POST | /api/import/convert | Convert configs between clients |
Tech Stack
| Layer | Technology |
|---|---|
| Frontend | React 19, Vite 6, TypeScript 5.7, Tailwind CSS v4 |
| UI Primitives | Radix UI |
| UI Components | shadcn/ui (New York style) |
| Desktop | Tauri 2 (Rust) |
| Sidecar | Node.js, TypeScript, Hono, @hono/node-server |
| Database | SQLite (node:sqlite) |
| MCP Protocol | @modelcontextprotocol/sdk (stdio + HTTP/SSE) |
| Icons | Lucide React |
| Tooling | Vite+ (vp CLI), Oxlint, Oxfmt, Vitest |
Acknowledgements
Thanks to the linuxdo community for discussion, sharing, and feedback.
