Skip to content

Commit d976689

Browse files
authored
Merge branch 'main' into feat-streamable-http
2 parents c3dfba2 + 3ffa395 commit d976689

116 files changed

Lines changed: 5392 additions & 458 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/e2e-desktop.yml

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,14 @@ jobs:
115115
- name: Run desktop E2E tests (Linux)
116116
if: matrix.os == 'ubuntu-latest'
117117
run: |
118-
# Start dbus session and unlock gnome-keyring with a dummy password for CI
118+
# Start dbus session and unlock gnome-keyring with a dummy password for CI.
119+
# Two-step process: unlock creates the login keyring, start exports env vars.
120+
# Use eval to robustly export GNOME_KEYRING_CONTROL so the keyring stays
121+
# accessible across all test specs (avoids "unlock prompt was dismissed").
119122
dbus-run-session -- bash -c '
120123
echo "test" | gnome-keyring-daemon --unlock --components=secrets
121-
export $(gnome-keyring-daemon --start --components=secrets)
124+
eval "$(gnome-keyring-daemon --start --components=secrets)"
125+
echo "GNOME_KEYRING_CONTROL=$GNOME_KEYRING_CONTROL"
122126
sleep 1
123127
xvfb-run --auto-servernum pnpm test:e2e
124128
'

.release-please-manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
{
2-
".": "0.0.7"
2+
".": "0.0.10"
33
}

CHANGELOG.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,37 @@
11
# Changelog
22

3+
## [0.0.10](https://github.com/MCP-Mux/mcp-mux/compare/v0.0.9...v0.0.10) (2026-02-10)
4+
5+
6+
### Bug Fixes
7+
8+
* suppress console window for stdio MCP servers on Windows ([#59](https://github.com/MCP-Mux/mcp-mux/issues/59)) ([98f862c](https://github.com/MCP-Mux/mcp-mux/commit/98f862cae83f24c4397fe8e6204215c68b0baf92))
9+
10+
## [0.0.9](https://github.com/MCP-Mux/mcp-mux/compare/v0.0.8...v0.0.9) (2026-02-09)
11+
12+
13+
### Bug Fixes
14+
15+
* render server icon URLs as images instead of raw text ([#57](https://github.com/MCP-Mux/mcp-mux/issues/57)) ([5a94708](https://github.com/MCP-Mux/mcp-mux/commit/5a94708dcddd47c26183bd18c6abd348c91f976c))
16+
17+
## [0.0.8](https://github.com/MCP-Mux/mcp-mux/compare/v0.0.7...v0.0.8) (2026-02-09)
18+
19+
20+
### Features
21+
22+
* Add custom server configuration fields (env vars, args, headers) ([#54](https://github.com/MCP-Mux/mcp-mux/issues/54)) ([37ce0f5](https://github.com/MCP-Mux/mcp-mux/commit/37ce0f575883680e2ee12354e3bfea48e7a9337e))
23+
24+
25+
### Bug Fixes
26+
27+
* Update screenshots and Logo ([#56](https://github.com/MCP-Mux/mcp-mux/issues/56)) ([e6fb736](https://github.com/MCP-Mux/mcp-mux/commit/e6fb736ca7a79c13f227cdb470e735df447ea7cd))
28+
29+
30+
### Documentation
31+
32+
* add comprehensive light-theme screenshots for all features ([#47](https://github.com/MCP-Mux/mcp-mux/issues/47)) ([cefa644](https://github.com/MCP-Mux/mcp-mux/commit/cefa644daad6c23640db6bc767eb1dd0e43199f0))
33+
* comprehensive README rewrite with features, security, and archi… ([#44](https://github.com/MCP-Mux/mcp-mux/issues/44)) ([243d3a3](https://github.com/MCP-Mux/mcp-mux/commit/243d3a369f34cfb02c5e82085e90c68e5bed963d))
34+
335
## [0.0.7](https://github.com/MCP-Mux/mcp-mux/compare/v0.0.6...v0.0.7) (2026-02-07)
436

537

Cargo.lock

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ members = [
1010
]
1111

1212
[workspace.package]
13-
version = "0.0.7"
13+
version = "0.0.10"
1414
edition = "2021"
1515
license = "GPL-3.0-or-later"
1616
repository = "https://github.com/mcpmux/mcpmux"
@@ -25,7 +25,7 @@ futures = "0.3"
2525

2626
# Serialization
2727
serde = { version = "1.0", features = ["derive"] }
28-
serde_json = "1.0"
28+
serde_json = { version = "1.0", features = ["preserve_order"] }
2929

3030
# Error handling
3131
anyhow = "1.0"

README.md

Lines changed: 140 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -1,98 +1,169 @@
1-
# McpMux - Centralized MCP Server Management
1+
# McpMux
22

33
[![License: GPL v3](https://img.shields.io/badge/License-GPLv3-blue.svg)](LICENSE)
4+
[![GitHub release](https://img.shields.io/github/v/release/MCP-Mux/mcp-mux)](https://github.com/MCP-Mux/mcp-mux/releases)
45

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.
67

7-
## Features
8+
![McpMux Dashboard](docs/screenshots/dashboard.png)
89

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+
---
1411

15-
## Quick Start
12+
## The Problem
1613

17-
### Prerequisites
14+
Every AI client has its own MCP config file. Same servers, same credentials — duplicated everywhere.
1815

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+
```
2222

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.**
2524

26-
### Development
25+
And all those credentials? Sitting in **plain-text JSON files** on disk.
2726

28-
```bash
29-
# First time setup (installs deps, Playwright browsers, etc.)
30-
pnpm setup
27+
## The Fix
3128

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.
3430

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
3736
```
3837

39-
### Build
38+
Add a server in McpMux and every client has it instantly. No files to edit.
4039

41-
```bash
42-
# Build for production
43-
pnpm build
44-
```
40+
---
4541

46-
## Project Structure
42+
## How It Works
4743

44+
**1.** Install servers from the built-in registry (or add manually)
45+
46+
**2.** Paste one config into your AI clients:
47+
48+
```json
49+
{
50+
"mcpServers": {
51+
"mcpmux": {
52+
"type": "http",
53+
"url": "http://localhost:45818/mcp"
54+
}
55+
}
56+
}
4857
```
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
58+
59+
**3.** Done. All tools from all servers are available in every client.
60+
61+
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.
62+
63+
---
64+
65+
## Features
66+
67+
### Server Management
68+
69+
Add, remove, and monitor all your MCP servers in one place. See connection status, auth type, and transport at a glance.
70+
71+
![My Servers](docs/screenshots/servers.png)
72+
73+
### Server Registry
74+
75+
Browse and one-click install from a curated registry of MCP servers. Filter by category, auth type, or hosting. Cached for offline use.
76+
77+
![Discover Servers](docs/screenshots/discover.png)
78+
79+
### Spaces
80+
81+
Isolated workspaces with their own servers and credentials. Switch between "Work" and "Personal" in one click — your AI clients follow automatically.
82+
83+
![Workspaces](docs/screenshots/spaces.png)
84+
85+
### Feature Sets
86+
87+
Control exactly which tools, prompts, and resources are available. Create custom permission bundles like "Read Only" or "Dev Tools" and assign them to clients.
88+
89+
![Feature Sets](docs/screenshots/featuresets.png)
90+
91+
### Connected Clients
92+
93+
See every AI client connected to your gateway. Manage OAuth registrations and control which space each client can access.
94+
95+
![Connected Clients](docs/screenshots/clients.png)
96+
97+
### Settings
98+
99+
Auto-updates, launch at startup, system tray, and appearance preferences.
100+
101+
![Settings](docs/screenshots/settings.png)
102+
103+
---
104+
105+
## Security
106+
107+
MCP defaults to plain-text config files with raw API keys. McpMux replaces that with:
108+
109+
- **OS Keychain** — secrets in platform-native secure storage, not on disk
110+
- **AES-256-GCM** — field-level database encryption
111+
- **OAuth 2.1 + PKCE** — standard auth with automatic token refresh
112+
- **Local-only gateway** — binds to `127.0.0.1`, nothing exposed to the network
113+
- **Per-client access keys** — granular permissions per AI client
114+
- **Sanitized logs** — tokens never appear in log files
115+
- **Memory zeroization** — secrets wiped from memory after use
116+
117+
All MCP traffic stays on your machine. Cloud sync (optional) only covers config metadata — never credentials or payloads.
118+
119+
---
120+
121+
## Getting Started
122+
123+
**1. [Download McpMux](https://github.com/MCP-Mux/mcp-mux/releases)** — Windows (MSI), macOS (DMG), Linux (DEB/RPM/AppImage)
124+
125+
**2. Add servers** — Discover tab to browse the registry, or add manually
126+
127+
**3. Paste config** — Copy the snippet from the Dashboard into your AI clients
128+
129+
That's the last config file you'll need to touch.
130+
131+
---
132+
133+
## Development
134+
135+
```bash
136+
pnpm setup # First-time: install dependencies
137+
pnpm dev # Start development
138+
pnpm build # Production build
139+
pnpm test # Run all tests
60140
```
61141

62-
## Architecture
142+
**Prerequisites:** Rust 1.75+, Node.js 18+, pnpm 9+. Linux also needs `gnome-keyring libsecret-1-dev librsvg2-dev pkg-config`.
63143

64-
McpMux acts as a local gateway that:
144+
Built with **Tauri 2** (Rust + React 19), **Axum** for the gateway, **ring** for encryption, **rmcp** for MCP.
65145

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
146+
<details>
147+
<summary>Project structure</summary>
70148

71149
```
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-
└─────────┘ └─────────┘ └─────────┘
150+
mcp-mux/
151+
├── apps/desktop/ # Tauri desktop app (React + Rust)
152+
├── crates/
153+
│ ├── mcpmux-core/ # Domain logic
154+
│ ├── mcpmux-gateway/ # HTTP gateway, OAuth, routing
155+
│ ├── mcpmux-storage/ # SQLite + encryption + OS keychain
156+
│ └── mcpmux-mcp/ # MCP protocol
157+
├── packages/ui/ # Shared UI components
158+
└── tests/ # Unit, integration, E2E tests
93159
```
94160

95-
## License
161+
</details>
96162

97-
[GNU General Public License v3.0](LICENSE) - Free software, copyleft license.
163+
## Contributing
164+
165+
See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
166+
167+
## License
98168

169+
[GNU General Public License v3.0](LICENSE)

apps/desktop/.env.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,4 @@ RUST_LOG="debug"
44
# Registry API URL
55
# For production: https://api.mcpmux.com
66
# For local dev: http://localhost:8787
7-
MCPMUX_REGISTRY_URL="http://localhost:8787"
7+
MCPMUX_REGISTRY_URL="https://api.mcpmux.com"
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading
Lines changed: 1 addition & 0 deletions
Loading

0 commit comments

Comments
 (0)