[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-2941":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":9,"language":10,"languages":9,"totalLinesOfCode":9,"stars":11,"forks":12,"watchers":13,"openIssues":13,"contributorsCount":14,"subscribersCount":14,"size":14,"stars1d":15,"stars7d":16,"stars30d":17,"stars90d":14,"forks30d":14,"starsTrendScore":18,"compositeScore":19,"rankGlobal":9,"rankLanguage":9,"license":20,"archived":21,"fork":21,"defaultBranch":22,"hasWiki":23,"hasPages":21,"topics":24,"createdAt":9,"pushedAt":9,"updatedAt":25,"readmeContent":26,"aiSummary":27,"trendingCount":14,"starSnapshotCount":14,"syncStatus":28,"lastSyncTime":29,"discoverSource":30},2941,"moor","varandrew\u002Fmoor","varandrew","Moor is a local MCP control plane for Mac. It gives every coding agent one safe, observable, configurable gateway to your MCP servers.",null,"Rust",251,14,1,0,5,12,150,15,69.53,"Apache License 2.0",false,"main",true,[],"2026-06-12 04:00:16","\u003Cp align=\"center\">\n  \u003Cimg src=\"src-tauri\u002Ficons\u002F128x128.png\" alt=\"Moor\" width=\"128\">\n\u003C\u002Fp>\n\n\u003Ch1 align=\"center\">Moor\u003C\u002Fh1>\n\n\u003Cp align=\"center\">\n  \u003Cb>Local MCP Gateway Manager for AI Agents\u003C\u002Fb>\u003Cbr>\n  Aggregate multiple MCP servers into a single endpoint, filter tools by Profile, and manage everything from a beautiful native UI.\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Flicense-MIT-blue\" alt=\"License\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FReact-19-61DAFB?logo=react\" alt=\"React 19\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FTauri-2-24C8D8?logo=tauri\" alt=\"Tauri 2\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNode.js-22+-339933?logo=nodedotjs\" alt=\"Node.js 22+\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-macOS-black?logo=apple\" alt=\"macOS\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fplatform-Windows-0078D4?logo=windows\" alt=\"Windows\">\n  \u003Cimg src=\"https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpnpm-10+-F69220?logo=pnpm\" alt=\"pnpm\">\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Ca href=\"#install\">Install\u003C\u002Fa> ·\n  \u003Ca href=\"#quickstart\">Quickstart\u003C\u002Fa> ·\n  \u003Ca href=\"#features\">Features\u003C\u002Fa> ·\n  \u003Ca href=\"#architecture\">Architecture\u003C\u002Fa> ·\n  \u003Ca href=\"#development\">Development\u003C\u002Fa> ·\n  \u003Ca href=\"#api\">API\u003C\u002Fa>\n\u003C\u002Fp>\n\n\u003C!-- README-I18N:START -->\n\n**English** | [汉语](.\u002FREADME.zh.md) | [日本語](.\u002FREADME.ja.md) | [Español](.\u002FREADME.es.md)\n\n\u003C!-- README-I18N:END -->\n\n---\n\n> _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._\n>\n> _Moor exposes one endpoint (`http:\u002F\u002F127.0.0.1:\u003Cport>\u002Fmcp`) 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._\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002FDashboard%20Page.png\" alt=\"Dashboard\" width=\"800\">\u003Cbr>\n  \u003Csub>Dashboard — Overview of active Profile, server status, and audit stats.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002FServers%20Page.png\" alt=\"Servers\" width=\"800\">\u003Cbr>\n  \u003Csub>Servers — Manage MCP servers, import configs, monitor health.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002FProfiles%20Page.png\" alt=\"Profiles\" width=\"800\">\u003Cbr>\n  \u003Csub>Profiles — Create profiles, toggle servers, enable\u002Fdisable tools.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n\u003Cp align=\"center\">\n  \u003Cimg src=\".\u002Fassets\u002FAudit%20Page.png\" alt=\"Audit\" width=\"800\">\u003Cbr>\n  \u003Csub>Audit — Inspect every tool call with full context and filters.\u003C\u002Fsub>\n\u003C\u002Fp>\n\n## Install\n\n### macOS App\n\nDownload the `.dmg` from [Releases](https:\u002F\u002Fgithub.com\u002Fvarandrew\u002Fmoor\u002Freleases), drag to Applications, done. The app bundles the HTTP server as an in-process Rust binary — no pre-installed Node.js runtime required.\n\n### Windows App\n\nDownload the Windows installer from [Releases](https:\u002F\u002Fgithub.com\u002Fvarandrew\u002Fmoor\u002Freleases) and run it. The app bundles the HTTP server as an in-process Rust binary — no pre-installed Node.js runtime required.\n\n### Build from Source\n\nRequires macOS (Apple Silicon \u002F Intel) or Windows x64, Node.js >= 22, pnpm >= 10, and Rust >= 1.77.\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fvarandrew\u002Fmoor.git\ncd moor\npnpm install\n```\n\nSee [Development](#development) for build instructions.\n\n## Quickstart\n\n### Launch the App\n\nOpen **Moor.app**. The Dashboard shows your active Profile, server status, and recent audit logs at a glance.\n\n### Scan Existing Configs\n\nMoor can automatically detect MCP servers you've already configured for Claude Code, Codex, OpenCode, and Cursor:\n\n1. Go to **Servers** → **Import**\n2. Click **Scan** — Moor reads `~\u002F.claude\u002Fsettings.json`, `~\u002F.codex\u002Fconfig.toml`, `~\u002F.config\u002Fopencode\u002Fopencode.json` \u002F `.jsonc`, and `~\u002F.cursor\u002Fmcp.json`\n3. Select the servers you want to import\n\nYou can also paste a JSON MCP configuration with **Import JSON**. Moor imports stdio and HTTP\u002FSSE servers, and reports unsupported entries such as OpenAPI configs without saving them.\n\n### Create a Profile\n\nProfiles let you group servers and control which tools are exposed to Agents:\n\n1. Go to **Profiles** → **New Profile**\n2. Name it (e.g., \"Coding\", \"Research\")\n3. Toggle servers on\u002Foff\n4. Expand a server to enable\u002Fdisable individual tools\n5. Click **Activate** — the change is instant\n\n### Connect Your Agent\n\nPoint any MCP-compatible client to Moor's single endpoint:\n\n```\nhttp:\u002F\u002F127.0.0.1:9223\u002Fmcp\n```\n\n`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.\n\nThe `\u002Fmcp` 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.\n\nMoor handles the rest — aggregating `tools\u002Flist`, routing `tools\u002Fcall`, and filtering based on your active Profile.\n\n## Features\n\n### MCP Gateway Aggregation\n\nA single HTTP endpoint (`\u002Fmcp`) proxies all backend MCP servers. Agents see a unified tool catalog — no need to configure multiple endpoints.\n\n### Multi-Transport Support\n\nConnect to both **stdio** (subprocess) and **HTTP\u002FSSE** MCP servers. Moor manages connection lifecycles, restarts, and health checks automatically.\n\n### Profile Management\n\nCreate unlimited Profiles for different workflows. Each Profile stores:\n\n- Which servers are enabled\n- Which tools are disabled per server\n- A global active state\n\nSwitch Profiles with **hot-swap** — connected Agents stay connected, and the next `tools\u002Flist` reflects the new configuration immediately.\n\n### Tool-Level Toggles\n\nBeyond server-level on\u002Foff, drill into any server to disable specific tools. Disabled tools disappear from the Agent's tool catalog in real time.\n\n### Config Import\n\nOne-click import from:\n\n- **Claude Code**: `~\u002F.claude\u002Fsettings.json`\n- **Codex**: `~\u002F.codex\u002Fconfig.toml`\n- **OpenCode**: `~\u002F.config\u002Fopencode\u002Fopencode.json` \u002F `.jsonc`\n- **Cursor**: `~\u002F.cursor\u002Fmcp.json`\n\nManual entry and pasted JSON batch import are also supported for stdio and HTTP\u002FSSE servers.\n\n### Client Configuration\n\nGenerate ready-to-copy configuration snippets for Claude Code, Codex, OpenCode, and Cursor. The snippets contain only the `\u002Fmcp` endpoint; Moor's `X-Moor-Token` is reserved for internal management API calls.\n\n### Audit Logs\n\nEvery `tools\u002Fcall` is recorded with:\n\n- Timestamp, Profile, Server, Tool name\n- Arguments (with sensitive data redaction)\n- Result or error\n- Duration and Agent info\n\nFilter by time range, server, or tool. View aggregate statistics on the Dashboard.\n\n### System Tray\n\nClose the window — Moor keeps running in the macOS menu bar or Windows system tray. The gateway stays alive, so your Agents never lose connection.\n\n### Real-Time Status\n\nServer status changes and Profile switches are pushed to the UI via SSE. No refresh needed.\n\n## Architecture\n\n\u003Cdetails>\n\u003Csummary>Architecture Diagram\u003C\u002Fsummary>\n\n```\nMoor.app\n├── UI Layer          React + Vite + TypeScript + Tailwind CSS v4 + shadcn\u002Fui\n├── Desktop Layer     Tauri 2 \u002F Rust\n│   ├── Window management + tray icon\n│   └── In-process HTTP server (Axum)\n│       ├── MCP protocol gateway   POST \u002Fmcp — init, tools\u002Flist, tools\u002Fcall\n│       ├── Server management      stdio spawn + HTTP\u002FSSE client\n│       ├── Profile routing        Global active Profile, hot-swap\n│       ├── Audit logging          Tool call recording\n│       └── SSE push               Real-time status sync to WebView\n├── Dev Sidecar      Node.js \u002F TypeScript (Hono — dev mode & SEA standalone)\n└── Storage           SQLite (rusqlite \u002F node:sqlite)\n    ├── servers (configs, status)\n    ├── profiles (server groups + tool toggles)\n    └── audit_logs (tool calls, params, results, errors)\n```\n\n\u003C\u002Fdetails>\n\n### Communication Flow\n\n```\nAI Agent ──HTTP──▶ POST \u002Fmcp ──▶ Moor Gateway ──stdio\u002FHTTP──▶ MCP Servers\n                              │\nWebView ──IPC──▶ get_sidecar_info ─┐\nWebView ──fetch──▶ \u002Fapi\u002F* ────────┘\nWebView ◀──SSE──── \u002Fapi\u002Fevents\n```\n\n- **Runtime discovery**: WebView → Tauri IPC (`get_sidecar_info`) → Rust (port, token); falls back to `\u002Fapi\u002Fruntime` in browser dev mode\n- **Business operations**: WebView → HTTP `fetch()` → In-process Axum server (Rust)\n- **System operations**: WebView → Tauri IPC → Rust (tray, window, auto-start)\n\n## Development\n\n### Prerequisites\n\n- macOS (Apple Silicon \u002F Intel) or Windows x64\n- [Node.js](https:\u002F\u002Fnodejs.org) >= 22\n- [pnpm](https:\u002F\u002Fpnpm.io) >= 10\n- [Rust](https:\u002F\u002Frustup.rs) >= 1.77\n- [Xcode Command Line Tools](https:\u002F\u002Fdeveloper.apple.com\u002Fxcode\u002Fresources\u002F) on macOS\n\n### Install Dependencies\n\n```bash\npnpm install\n```\n\n### Development Mode\n\nStart both frontend and sidecar:\n\n```bash\npnpm dev:all\n```\n\n- Frontend: http:\u002F\u002Flocalhost:1420\n- Sidecar API: http:\u002F\u002Flocalhost:9223\n\nStart the full desktop app (Tauri):\n\n```bash\npnpm tauri dev\n```\n\n### Production Build\n\n```bash\npnpm tauri build\n```\n\nOutputs:\n\n- macOS: `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002Fmacos\u002FMoor.app`\n- macOS DMG: `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002Fdmg\u002FMoor_\u003Cversion>_aarch64.dmg`\n- Windows: `src-tauri\u002Ftarget\u002Frelease\u002Fbundle\u002Fnsis\u002FMoor_\u003Cversion>_x64-setup.exe`\n\n### Code Quality\n\n```bash\nvp check       # format + lint + type check\nvp lint        # lint only\nvp lint --fix  # auto-fix\nvp fmt         # format\n```\n\n### Testing\n\n```bash\n# Sidecar tests\ncd sidecar && vp test run\n\n# Frontend tests\nvp test\n```\n\n## API\n\n### MCP Gateway\n\n| Method | Path   | Description                             |\n| ------ | ------ | --------------------------------------- |\n| `ALL`  | `\u002Fmcp` | MCP protocol endpoint (Streamable HTTP) |\n\n### Server Management\n\n| Method   | Path                     | Description                                                |\n| -------- | ------------------------ | ---------------------------------------------------------- |\n| `GET`    | `\u002Fapi\u002Fservers`           | List all servers                                           |\n| `POST`   | `\u002Fapi\u002Fservers`           | Add server                                                 |\n| `GET`    | `\u002Fapi\u002Fservers\u002F:id`       | Server detail                                              |\n| `PUT`    | `\u002Fapi\u002Fservers\u002F:id`       | Update server config                                       |\n| `DELETE` | `\u002Fapi\u002Fservers\u002F:id`       | Remove server                                              |\n| `POST`   | `\u002Fapi\u002Fservers\u002F:id\u002Fstart` | Start server                                               |\n| `POST`   | `\u002Fapi\u002Fservers\u002F:id\u002Fstop`  | Stop server                                                |\n| `GET`    | `\u002Fapi\u002Fservers\u002F:id\u002Ftools` | Get discovered tools (optionally filter by `?profile_id=`) |\n| `PUT`    | `\u002Fapi\u002Fservers\u002Forder`     | Reorder servers                                            |\n\n### Profile Management\n\n| Method   | Path                             | Description                           |\n| -------- | -------------------------------- | ------------------------------------- |\n| `GET`    | `\u002Fapi\u002Fprofiles`                  | List all profiles                     |\n| `POST`   | `\u002Fapi\u002Fprofiles`                  | Create profile                        |\n| `PUT`    | `\u002Fapi\u002Fprofiles\u002F:id`              | Update profile                        |\n| `DELETE` | `\u002Fapi\u002Fprofiles\u002F:id`              | Delete profile                        |\n| `PUT`    | `\u002Fapi\u002Fprofiles\u002F:id\u002Factivate`     | Set as active profile                 |\n| `PUT`    | `\u002Fapi\u002Fprofiles\u002F:id\u002Fservers\u002F:sid` | Update server toggle + disabled tools |\n\n### Audit Logs\n\n| Method | Path              | Description               |\n| ------ | ----------------- | ------------------------- |\n| `GET`  | `\u002Fapi\u002Flogs`       | Query logs (with filters) |\n| `GET`  | `\u002Fapi\u002Flogs\u002Fstats` | Aggregate statistics      |\n\n### Settings Management\n\n| Method  | Path                  | Description       |\n| ------- | --------------------- | ----------------- |\n| `GET`   | `\u002Fapi\u002Fsettings`       | Get settings      |\n| `PATCH` | `\u002Fapi\u002Fsettings`       | Update settings   |\n| `POST`  | `\u002Fapi\u002Fsettings\u002Freset` | Reset to defaults |\n\n### Other\n\n| Method | Path                   | Description                     |\n| ------ | ---------------------- | ------------------------------- |\n| `GET`  | `\u002Fapi\u002Fhealth`          | Health check                    |\n| `GET`  | `\u002Fapi\u002Fruntime`         | Runtime info (port, URL)        |\n| `GET`  | `\u002Fapi\u002Fevents`          | SSE real-time event stream      |\n| `POST` | `\u002Fapi\u002Fimport\u002Fscan`     | Scan local client configs       |\n| `POST` | `\u002Fapi\u002Fimport\u002Fparse`    | Preview pasted JSON import      |\n| `POST` | `\u002Fapi\u002Fimport\u002Fexecute`  | Execute import                  |\n| `GET`  | `\u002Fapi\u002Fimport\u002Fsnippets` | Generate client config snippets |\n| `POST` | `\u002Fapi\u002Fimport\u002Fconvert`  | Convert configs between clients |\n\n## Tech Stack\n\n| Layer         | Technology                                              |\n| ------------- | ------------------------------------------------------- |\n| Frontend      | React 19, vite-plus, TypeScript 5.7, Tailwind CSS v4    |\n| UI Primitives | Radix UI                                                |\n| UI Components | shadcn\u002Fui (New York style)                              |\n| Desktop       | Tauri 2 (Rust)                                          |\n| Gateway       | Rust, Axum, Tokio, rusqlite (in-process)                |\n| Dev Sidecar   | Node.js, TypeScript, Hono, @hono\u002Fnode-server, @hono\u002Fmcp |\n| Database      | SQLite (rusqlite \u002F node:sqlite)                         |\n| MCP Protocol  | @modelcontextprotocol\u002Fsdk (stdio + HTTP\u002FSSE)            |\n| Icons         | Lucide React                                            |\n| Tooling       | vite-plus (vp CLI), Oxlint, Oxfmt, Vitest               |\n\n## Acknowledgements\n\nThanks to the [linuxdo](https:\u002F\u002Flinux.do\u002F) community for discussion, sharing, and feedback.\n\n## ❤️ Sponsor\n\n[![ko-fi](https:\u002F\u002Fko-fi.com\u002Fimg\u002Fgithubbutton_sm.svg)](https:\u002F\u002Fko-fi.com\u002Fvarandrew)\n\n## 🌟 Star History\n\n[![Star History Chart](https:\u002F\u002Fapi.star-history.com\u002Fsvg?repos=varandrew\u002Fmoor&type=Date)](https:\u002F\u002Fwww.star-history.com\u002F#varandrew\u002Fmoor&Date)\n\n## License\n\n[MIT](LICENSE)\n","Moor 是一个为Mac设计的本地MCP控制平面，它为每个编码代理提供了一个安全、可观察且可配置的网关来访问MCP服务器。该项目使用TypeScript编写，并结合了React和Tauri框架构建美观且功能强大的原生用户界面。其核心功能包括将多个MCP服务器聚合到单一端点，通过Profile筛选工具，并支持从UI中管理所有设置与状态。适用于需要集中管理和监控AI代理工具集的场景，尤其是在开发过程中涉及多客户端环境时。此外，Moor还提供了详细的审计日志，便于追踪每个工具调用的情况。",2,"2026-06-11 02:51:51","CREATED_QUERY"]