|
1 | | -# McpMux - Centralized MCP Server Management |
| 1 | +# McpMux |
2 | 2 |
|
3 | 3 | [](LICENSE) |
| 4 | +[](https://github.com/MCP-Mux/mcp-mux/releases) |
4 | 5 |
|
5 | | -> A desktop application for managing Model Context Protocol (MCP) servers with spaces, credentials, and cloud sync. |
| 6 | +### Configure your MCP servers once. Connect every AI client. |
6 | 7 |
|
7 | | -## Features |
| 8 | + |
8 | 9 |
|
9 | | -- 🔐 **Secure Credentials** - OS keychain + encrypted database storage |
10 | | -- 🌐 **Spaces** - Isolated environments for different projects |
11 | | -- ⚡ **Local Gateway** - All MCP traffic stays on your machine |
12 | | -- ☁️ **Cloud Sync** - Configuration sync across devices (optional) |
13 | | -- 🔌 **Multi-Transport** - Supports stdio, HTTP, and SSE MCP servers |
| 10 | +--- |
14 | 11 |
|
15 | | -## Quick Start |
| 12 | +## The Problem |
16 | 13 |
|
17 | | -### Prerequisites |
| 14 | +Every AI client has its own MCP config file. Same servers, same credentials — duplicated everywhere. |
18 | 15 |
|
19 | | -- [Rust](https://rustup.rs/) 1.75+ |
20 | | -- [Node.js](https://nodejs.org/) 18+ |
21 | | -- [pnpm](https://pnpm.io/) 9+ |
| 16 | +``` |
| 17 | +Cursor → config.json → github, slack, db + API keys |
| 18 | +Claude Desktop → config.json → github, slack, db + API keys (again) |
| 19 | +VS Code → settings.json → github, slack, db + API keys (again) |
| 20 | +Windsurf → config.json → github, slack, db + API keys (again) |
| 21 | +``` |
22 | 22 |
|
23 | | -**Linux system dependencies** (for credential storage via Secret Service): |
24 | | -- `gnome-keyring` (or another `org.freedesktop.secrets` implementation like KWallet on KDE) |
| 23 | +Add a server? **Update every client.** Rotate an API key? **Update every client.** New project? **Reconfigure everything.** |
25 | 24 |
|
26 | | -### Development |
| 25 | +And all those credentials? Sitting in **plain-text JSON files** on disk. |
27 | 26 |
|
28 | | -```bash |
29 | | -# First time setup (installs deps, Playwright browsers, etc.) |
30 | | -pnpm setup |
| 27 | +## The Fix |
31 | 28 |
|
32 | | -# Or manually: |
33 | | -pnpm install |
| 29 | +McpMux is a desktop app that runs a local gateway. Configure your servers once, point all clients to one URL. |
34 | 30 |
|
35 | | -# Start development |
36 | | -pnpm dev |
| 31 | +``` |
| 32 | +Cursor ─┐ |
| 33 | +Claude Desktop ─┤──→ McpMux (localhost) ──→ all your MCP servers |
| 34 | +VS Code ─┤ encrypted credentials |
| 35 | +Windsurf ─┘ one config, one place |
37 | 36 | ``` |
38 | 37 |
|
39 | | -### Build |
| 38 | +Add a server in McpMux and every client has it instantly. No files to edit. |
40 | 39 |
|
41 | | -```bash |
42 | | -# Build for production |
43 | | -pnpm build |
44 | | -``` |
| 40 | +--- |
| 41 | + |
| 42 | +## How It Works |
| 43 | + |
| 44 | +**1.** Install servers from the built-in registry (or add manually) |
45 | 45 |
|
46 | | -## Project Structure |
| 46 | +**2.** Paste one config into your AI clients: |
47 | 47 |
|
| 48 | +```json |
| 49 | +{ |
| 50 | + "mcpServers": { |
| 51 | + "mcpmux": { |
| 52 | + "url": "http://localhost:9315/mcp" |
| 53 | + } |
| 54 | + } |
| 55 | +} |
48 | 56 | ``` |
49 | | -mcpmux/ |
50 | | -├── apps/ |
51 | | -│ └── desktop/ # Tauri desktop application |
52 | | -│ ├── src/ # React frontend |
53 | | -│ └── src-tauri/ # Rust backend |
54 | | -├── crates/ |
55 | | -│ ├── mcpmux-core/ # Domain logic and entities |
56 | | -│ ├── mcpmux-mcp/ # MCP protocol handling |
57 | | -│ └── mcpmux-storage/ # Persistence layer |
58 | | -└── packages/ |
59 | | - └── ui/ # Shared React components |
| 57 | + |
| 58 | +**3.** Done. All tools from all servers are available in every client. |
| 59 | + |
| 60 | +McpMux routes calls to the right server, refreshes OAuth tokens automatically, and keeps credentials encrypted in your OS keychain. You don't think about it. |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## Features |
| 65 | + |
| 66 | +**Spaces** — Isolated workspaces with their own servers and credentials. Switch between "Work" and "Personal" in one click. |
| 67 | + |
| 68 | + |
| 69 | + |
| 70 | +**Encrypted Credentials** — Stored in your OS keychain (macOS Keychain, Windows Credential Manager, Linux Secret Service) with AES-256-GCM encryption. Not in plain-text JSON files. |
| 71 | + |
| 72 | +**OAuth That Just Works** — Handles the full OAuth 2.1 + PKCE flow for remote servers. Automatic token refresh. Authenticate once and forget about it. |
| 73 | + |
| 74 | +**Server Registry** — Browse, search, and one-click install MCP servers. Cached for offline use. |
| 75 | + |
| 76 | +**Per-Client Permissions** — Control which tools each AI client can access with Feature Sets. |
| 77 | + |
| 78 | +**System Tray** — Runs in the background, starts with your OS. Always available. |
| 79 | + |
| 80 | + |
| 81 | + |
| 82 | +**Auto-Updates** — Signed updates delivered automatically. |
| 83 | + |
| 84 | +--- |
| 85 | + |
| 86 | +## Security |
| 87 | + |
| 88 | +MCP defaults to plain-text config files with raw API keys. McpMux replaces that with: |
| 89 | + |
| 90 | +- **OS Keychain** — secrets in platform-native secure storage, not on disk |
| 91 | +- **AES-256-GCM** — field-level database encryption |
| 92 | +- **OAuth 2.1 + PKCE** — standard auth with automatic token refresh |
| 93 | +- **Local-only gateway** — binds to `127.0.0.1`, nothing exposed to the network |
| 94 | +- **Per-client access keys** — granular permissions per AI client |
| 95 | +- **Sanitized logs** — tokens never appear in log files |
| 96 | +- **Memory zeroization** — secrets wiped from memory after use |
| 97 | + |
| 98 | +All MCP traffic stays on your machine. Cloud sync (optional) only covers config metadata — never credentials or payloads. |
| 99 | + |
| 100 | +--- |
| 101 | + |
| 102 | +## Getting Started |
| 103 | + |
| 104 | +**1. [Download McpMux](https://github.com/MCP-Mux/mcp-mux/releases)** — Windows (MSI), macOS (DMG), Linux (DEB/RPM/AppImage) |
| 105 | + |
| 106 | +**2. Add servers** — Discover tab to browse the registry, or add manually |
| 107 | + |
| 108 | +**3. Paste config** — Copy the snippet from the Dashboard into your AI clients |
| 109 | + |
| 110 | +That's the last config file you'll need to touch. |
| 111 | + |
| 112 | +--- |
| 113 | + |
| 114 | +## Development |
| 115 | + |
| 116 | +```bash |
| 117 | +pnpm setup # First-time: install dependencies |
| 118 | +pnpm dev # Start development |
| 119 | +pnpm build # Production build |
| 120 | +pnpm test # Run all tests |
60 | 121 | ``` |
61 | 122 |
|
62 | | -## Architecture |
| 123 | +**Prerequisites:** Rust 1.75+, Node.js 18+, pnpm 9+. Linux also needs `gnome-keyring libsecret-1-dev librsvg2-dev pkg-config`. |
63 | 124 |
|
64 | | -McpMux acts as a local gateway that: |
| 125 | +Built with **Tauri 2** (Rust + React 19), **Axum** for the gateway, **ring** for encryption, **rmcp** for MCP. |
65 | 126 |
|
66 | | -1. **Aggregates** multiple MCP servers into a single endpoint |
67 | | -2. **Manages** credentials securely per space |
68 | | -3. **Routes** tool calls to the appropriate backend |
69 | | -4. **Syncs** configuration (not MCP traffic) to the cloud |
| 127 | +<details> |
| 128 | +<summary>Project structure</summary> |
70 | 129 |
|
71 | 130 | ``` |
72 | | -┌─────────────────────────────────────────────────────────┐ |
73 | | -│ AI Clients │ |
74 | | -│ (Cursor, Claude, etc.) │ |
75 | | -└─────────────────────┬───────────────────────────────────┘ |
76 | | - │ OAuth 2.1 + PKCE |
77 | | - ▼ |
78 | | -┌─────────────────────────────────────────────────────────┐ |
79 | | -│ McpMux Gateway │ |
80 | | -│ localhost:9315 │ |
81 | | -├─────────────────────────────────────────────────────────┤ |
82 | | -│ ┌─────────┐ ┌─────────┐ ┌─────────────┐ │ |
83 | | -│ │ Space A │ │ Space B │ │ FeatureSets │ │ |
84 | | -│ └─────────┘ └─────────┘ └─────────────┘ │ |
85 | | -└─────────────────────┬───────────────────────────────────┘ |
86 | | - │ |
87 | | - ┌─────────────┼─────────────┐ |
88 | | - ▼ ▼ ▼ |
89 | | - ┌─────────┐ ┌─────────┐ ┌─────────┐ |
90 | | - │ Backend │ │ Backend │ │ Backend │ |
91 | | - │ (stdio) │ │ (HTTP) │ │ (SSE) │ |
92 | | - └─────────┘ └─────────┘ └─────────┘ |
| 131 | +mcp-mux/ |
| 132 | +├── apps/desktop/ # Tauri desktop app (React + Rust) |
| 133 | +├── crates/ |
| 134 | +│ ├── mcpmux-core/ # Domain logic |
| 135 | +│ ├── mcpmux-gateway/ # HTTP gateway, OAuth, routing |
| 136 | +│ ├── mcpmux-storage/ # SQLite + encryption + OS keychain |
| 137 | +│ └── mcpmux-mcp/ # MCP protocol |
| 138 | +├── packages/ui/ # Shared UI components |
| 139 | +└── tests/ # Unit, integration, E2E tests |
93 | 140 | ``` |
94 | 141 |
|
95 | | -## License |
| 142 | +</details> |
| 143 | + |
| 144 | +## Contributing |
96 | 145 |
|
97 | | -[GNU General Public License v3.0](LICENSE) - Free software, copyleft license. |
| 146 | +See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. |
| 147 | + |
| 148 | +## License |
98 | 149 |
|
| 150 | +[GNU General Public License v3.0](LICENSE) |
0 commit comments