A lightweight, minimal desktop application for managing, monitoring, and exposing MCP (Model Context Protocol) servers. Built with Tauri 2 + Vue 3 + Rust β small footprint, fast startup, clean UI.
MCP is an open protocol that standardizes how applications provide context to LLMs. MCPDock gives you a visual, desktop-native way to:
- Manage all your MCP servers in one place
- Run a local HTTP gateway that aggregates multiple servers into group endpoints
- Discover tools, prompts, and resources automatically
- Import, export, and organize server configurations
Instead of editing JSON files manually, you get a clean, clutter-free UI with system-tray integration, dark mode, and full bilingual support. Designed to stay out of your way.
MCP Server Management
Register STDIO and Streamable HTTP servers, connect/disconnect individually, and monitor status in real time.
Group & Gateway Management
Create groups, assign servers, and expose them through dedicated Streamable HTTP endpoints with optional Bearer authentication.
Settings
Configure the gateway port, language, tool-name separator, auth token, proxy, timeout, and keep-alive.
MCP Server Management on Windows
- πͺΆ Lightweight β Native desktop app with a tiny footprint thanks to Tauri 2 and Rust
- β‘ Fast β Near-instant cold start and smooth real-time status updates
- π§Ή Clean UI β No distractions, no bloat. Everything is one click away
- π Bilingual β Full Chinese and English support with auto-detection
- Add & Configure β Register MCP servers via two transport types:
- STDIO β Launch a local child process (e.g.,
npx,python,uvx). Supports command arguments and environment variables. - Streamable HTTP β Connect to a remote MCP server over HTTP. Supports custom request headers.
- STDIO β Launch a local child process (e.g.,
- Connect / Disconnect / Toggle β Start, stop, or enable/disable servers individually. Enabled servers auto-connect on application launch.
- Capability Discovery β After connecting, the app automatically discovers and stores each server's capabilities:
- Tools β invoke from the built-in tool runner
- Prompts β view and call with arguments
- Resources & Resource Templates β static URIs and parameterized URI templates
- Import / Export β Batch import servers from JSON, or export your server list for backup and sharing.
- Search & Filter β Search servers by name with real-time filtering.
- Direct Tool Invocation β Call any discovered tool directly inside the app with a structured input form.
- Group-based endpoint routing β Each MCP group is exposed as a dedicated Streamable HTTP endpoint at
http://localhost:{port}/mcp/{group_name}. - Optional Bearer Token authentication β Protect all gateway endpoints with a configurable auth token.
- Tool name prefixing β Tools from different servers within a group are prefixed with the server name + configurable separator to avoid naming collisions (e.g.,
server__tool_name). - Configurable port β Choose any available port. Live reloads when settings change or groups are modified.
- CORS support β Built-in cross-origin headers for browser-based clients.
- Multi-server aggregation β Create groups, assign member MCP servers, and all member tools/prompts/resources are available through the group endpoint.
- Live reload β Gateway automatically restarts when groups are created, updated, or deleted.
- Member toggle β Quickly add or remove servers from a group without re-creating it.
| Setting | Description | Default |
|---|---|---|
| Language | UI language (Chinese / English / System) | System |
| Theme | Light / Dark / System | System |
| Gateway Port | HTTP listen port for the gateway | 3100 |
| Separator | Prefix separator for group tool names | __ |
| Auth Token | Bearer token for gateway endpoints | β |
| Request Timeout | Connection / tool-call timeout | 60 s |
| Keep-alive Interval | Periodic ping to keep connections alive | Disabled |
| HTTP Proxy | Proxy for Streamable HTTP servers | β |
| Auto Start | Launch app on system boot | Off |
| Show Window on Start | Show or hide window after auto launch | Off |
- Close the window to hide to the system tray rather than exiting.
- Left-click the tray icon or use the tray menu to restore the window.
- macOS: Dock icon hides when window is hidden (Accessory mode).
- Windows: Supports both light and dark tray menu themes.
- Only one application instance runs at a time. Launching again brings the existing window to the foreground.
- Full Chinese (zh-CN) and English (en) UI support via
vue-i18n. - Language auto-detects from the OS or can be switched manually.
- Light / Dark / System theme support with Tailwind CSS 4.
- Native title bar on macOS; custom title-less frame on Windows for a cleaner look.
| Layer | Technology |
|---|---|
| Desktop Framework | Tauri 2 |
| Backend | Rust, axum, tokio, rmcp |
| Database | SQLite (rusqlite, bundled) |
| Frontend | Vue 3, TypeScript |
| UI Components | naive-ui |
| Styling | Tailwind CSS 4 |
| State Management | Pinia |
| Linting / Formatting | Biome |
| Package Manager | pnpm |
- Rust (latest stable)
- Node.js β₯ 18
- pnpm β₯ 8
- Platform-specific Tauri prerequisites:
- macOS β Xcode Command Line Tools
- Windows β Visual Studio Build Tools or C++ Build Tools
# Clone and enter the project
git clone <repo-url> && cd mcpdock
# Install dependencies
pnpm install
# Run in development mode (with hot-reload)
pnpm tauri dev
# Build for production
pnpm tauri build
# Format / lint
pnpm format
pnpm lintbrew install --cask hsingjui/tap/mcpdockmacOS Note: MCPDock is not currently signed with an Apple Developer certificate. After downloading and moving
MCPDock.appto/Applications, run the following command in Terminal to remove the quarantine attribute:xattr -rd com.apple.quarantine /Applications/MCPDock.app
mcpdock
βββ src/ # Vue 3 frontend
β βββ components/ # Page & layout components
β β βββ AppSidebar.vue # Navigation sidebar
β β βββ PageHeader.vue # Page header with title & description
β β βββ GatewayStatus.vue # Gateway status indicator
β β βββ McpManagement.vue # Main MCP server list & management
β β βββ GroupManagement.vue # MCP group management
β β βββ SettingsPage.vue # Application settings
β β βββ mcp/ # MCP-related sub-components
β β β βββ McpServerList.vue # Server list with status dots
β β β βββ McpServerForm.vue # Add/edit server form
β β β βββ McpImportView.vue # JSON import/export
β β β βββ McpToolRunner.vue # Direct tool invocation UI
β β βββ group/ # Group-related sub-components
β βββ stores/ # Pinia stores
β β βββ mcp.ts # MCP server state & IPC calls
β β βββ group.ts # Group state & IPC calls
β β βββ settings.ts # Settings state & IPC calls
β βββ types/ # TypeScript type definitions
β βββ i18n/ # i18n setup
β βββ locales/ # Language packs (zh-CN, en)
βββ src-tauri/ # Rust backend
β βββ src/
β β βββ main.rs # Entry point
β β βββ lib.rs # Tauri builder: setup, tray, single-instance, gateway & MCP initialization
β β βββ state.rs # Global application state (DB, runtimes, clients, settings, gateway)
β β βββ commands/ # Tauri IPC command handlers
β β β βββ mcp.rs # Server CRUD, connect/disconnect, tool call
β β β βββ group.rs # Group CRUD + gateway restart
β β β βββ settings.rs # Settings read/write + gateway restart
β β β βββ gateway.rs # Gateway status query & restart
β β β βββ capability.rs # Capability listing
β β βββ mcp/ # MCP client management
β β β βββ runtime.rs # Runtime state & client holder types
β β β βββ manager/ # Connection lifecycle, discovery, transport
β β β βββ mod.rs # connect, disconnect, refresh, call_tool
β β β βββ transport.rs # STDIO and Streamable HTTP client creation
β β β βββ discovery.rs # Tool/prompt/resource discovery
β β β βββ runtime_state.rs # Runtime state helpers & event emission
β β βββ gateway/ # Streamable HTTP gateway
β β β βββ server.rs # Axum server: routes per group, auth middleware, CORS
β β β βββ handler/ # GroupHandler: tools, prompts, resources dispatch
β β βββ db/ # SQLite database layer
β β βββ mod.rs # Schema initialization
β β βββ mcp_server.rs # MCP server CRUD
β β βββ mcp_group.rs # MCP group CRUD
β β βββ mcp_capability.rs # Discovered capabilities storage
β β βββ app_settings.rs # Settings key-value store
β βββ icons/ # App icons (macOS, Windows, tray)
β βββ tauri.conf.json # Tauri configuration
βββ biome.json # Biome linter & formatter config
βββ package.json # Node.js project manifest
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Frontend (Vue 3) β
β McpManagement βββ Pinia stores βββ Tauri IPC invoke() β
ββββββββββββββββββββββββββββ¬ββββββββββββββββββββββββββββββββ
β ipc
ββββββββββββββββββββββββββββΌββββββββββββββββββββββββββββββββ
β Backend (Rust / Tauri) β
β commands/*.rs βββ mcp/manager βββ rmcp client β
β βββ gateway/server (axum) β
β βββ db/* (rusqlite) β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Client β POST http://localhost:3100/mcp/my-group (Streamable HTTP)
β Axum router
β Auth middleware (Bearer token check)
β GroupHandler::call_tool
β Parse prefixed tool name β resolve server
β Get or connect upstream MCP client
β Forward call β return result
MIT




