
1MCP
STDIOUnified MCP server aggregating multiple servers into one interface.
Unified MCP server aggregating multiple servers into one interface.
A unified Model Context Protocol server implementation that aggregates multiple MCP servers into one.
1MCP (One MCP) is designed to simplify the way you work with AI assistants. Instead of configuring multiple MCP servers for different clients (Claude Desktop, Cherry Studio, Cursor, Roo Code, Claude, etc.), 1MCP provides a single, unified server.
Get up and running with 1MCP in just a few steps:
Add the MCP servers you want to use. Here are some popular examples:
# Add Context7 for documentation and code examples npx -y @1mcp/agent mcp add context7 -- npx -y @upstash/context7-mcp # Add Sequential Thinking for complex analysis npx -y @1mcp/agent mcp add sequential -- npx -y @modelcontextprotocol/server-sequential-thinking # Add Filesystem for file operations npx -y @1mcp/agent mcp add filesystem -- npx -y @modelcontextprotocol/server-filesystem ~/Documents
npx -y @1mcp/agent
The server will start on http://127.0.0.1:3050
and show you which MCP servers are active.
For Cursor, add to ~/.cursor/mcp.json
or <project-root>/.cursor/mcp.json
:
{ "mcpServers": { "1mcp": { "url": "http://127.0.0.1:3050/mcp?app=cursor" } } }
For VSCode, add to settings.json
or <project-root>/.vscode/mcp.json
:
{ "servers": { "1mcp": { "url": "http://127.0.0.1:3050/mcp?app=vscode" } } }
For Claude Code, run:
claude mcp add -t http 1mcp "http://127.0.0.1:3050/mcp?app=claude-code"
Check server status and connected MCP servers:
npx -y @1mcp/agent mcp status
Visit the health endpoint to see system status: http://127.0.0.1:3050/health
That's it! All your MCP servers are now available through one unified endpoint. 🎉
1MCP provides several commands to manage your MCP server configuration:
npx -y @1mcp/agent [serve]
- Start the 1MCP server (default command)
--transport
- Choose transport type (stdio, http, sse)--config
- Use specific config file--port
- Change HTTP portnpx -y @1mcp/agent mcp add <name>
- Add a new MCP server to configurationnpx -y @1mcp/agent mcp remove <name>
- Remove an MCP servernpx -y @1mcp/agent mcp list
- List all configured MCP serversnpx -y @1mcp/agent mcp status [name]
- Show server status and detailsnpx -y @1mcp/agent mcp enable/disable <name>
- Enable or disable serversnpx -y @1mcp/agent mcp update <name>
- Update server configurationnpx -y @1mcp/agent mcp tokens
- Estimate MCP token usage for server capabilitiesnpx -y @1mcp/agent app consolidate
- Consolidate configurations from other MCP appsnpx -y @1mcp/agent app discover
- Discover MCP servers from installed applicationsnpx -y @1mcp/agent app list
- List discovered applicationsnpx -y @1mcp/agent app status
- Show consolidation statusFor detailed command usage, run: 1mcp <command> --help
Full documentation: Commands Reference
You can run the server directly using npx
:
# Basic usage (starts server with SSE transport) npx -y @1mcp/agent # Use existing Claude Desktop config npx -y @1mcp/agent --config ~/Library/Application\ Support/Claude/claude_desktop_config.json # Use stdio transport instead of SSE npx -y @1mcp/agent --transport stdio # Use external URL for reverse proxy setup (nginx, etc.) npx -y @1mcp/agent --external-url https://example.com # Configure trust proxy for reverse proxy setup npx -y @1mcp/agent --trust-proxy=192.168.1.1 # Show all available options npx -y @1mcp/agent --help
Available options:
Option (CLI) | Environment Variable | Description | Default |
---|---|---|---|
--transport , -t | ONE_MCP_TRANSPORT | Choose transport type ("stdio", "http", or "sse") | "http" |
--config , -c | ONE_MCP_CONFIG | Use a specific config file | |
--port , -P | ONE_MCP_PORT | Change HTTP port | 3050 |
--host , -H | ONE_MCP_HOST | Change HTTP host | localhost |
--external-url , -u | ONE_MCP_EXTERNAL_URL | External URL for OAuth callbacks and public URLs (e.g., https://example.com) | |
--trust-proxy | ONE_MCP_TRUST_PROXY | Trust proxy configuration for client IP detection (boolean, IP, CIDR, preset) | "loopback" |
--tags , -g | ONE_MCP_TAGS | Filter servers by tags (comma-separated, OR logic) ⚠️ Deprecated - use --tag-filter | |
--tag-filter , -f | ONE_MCP_TAG_FILTER | Advanced tag filter expression (and/or/not logic) | |
--pagination , -p | ONE_MCP_PAGINATION | Enable pagination for client/server lists (boolean) | false |
--enable-auth | ONE_MCP_ENABLE_AUTH | Enable authentication (OAuth 2.1) | false |
--enable-scope-validation | ONE_MCP_ENABLE_SCOPE_VALIDATION | Enable tag-based scope validation (boolean) | true |
--enable-enhanced-security | ONE_MCP_ENABLE_ENHANCED_SECURITY | Enable enhanced security middleware (boolean) | false |
--session-ttl | ONE_MCP_SESSION_TTL | Session expiry time in minutes (number) | 1440 |
--session-storage-path | ONE_MCP_SESSION_STORAGE_PATH | Custom session storage directory path (string) | |
--rate-limit-window | ONE_MCP_RATE_LIMIT_WINDOW | OAuth rate limit window in minutes (number) | 15 |
--rate-limit-max | ONE_MCP_RATE_LIMIT_MAX | Maximum requests per OAuth rate limit window (number) | 100 |
--enable-async-loading | ONE_MCP_ENABLE_ASYNC_LOADING | Enable asynchronous MCP server loading(boolean) | false |
--health-info-level | ONE_MCP_HEALTH_INFO_LEVEL | Health endpoint information detail level ("full", "basic", "minimal") | "minimal" |
--log-level | ONE_MCP_LOG_LEVEL | Set the log level ("debug", "info", "warn", "error") | "info" |
--log-file | ONE_MCP_LOG_FILE | Write logs to a file in addition to console (disables console logging only for stdio transport) | |
--help , -h | Show help |
You can also run 1MCP using Docker. We provide two image variants:
latest
: Full-featured image with extra tools (uv, bun) - defaultlite
: Lightweight image with basic Node.js package managers only (npm, pnpm, yarn)# Pull the latest full-featured image (default) docker pull ghcr.io/1mcp-app/agent:latest # Or pull the lightweight version docker pull ghcr.io/1mcp-app/agent:lite # Run with HTTP transport (default) - IMPORTANT: Set host to 0.0.0.0 for Docker networking docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ ghcr.io/1mcp-app/agent # Run the lite version with proper networking docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ ghcr.io/1mcp-app/agent:lite # Run with a custom config file docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ -v /path/to/config.json:/config.json \ ghcr.io/1mcp-app/agent --config /config.json # Run with stdio transport docker run -i ghcr.io/1mcp-app/agent --transport stdio
latest
: Latest stable release with extra toolsvX.Y.Z
: Specific version (e.g. v1.0.0
)vX.Y
: Major.minor version (e.g. v1.0
)vX
: Major version (e.g. v1
)sha-<commit>
: Specific commitlite
: Latest stable lite releasevX.Y.Z-lite
: Specific version lite (e.g. v1.0.0-lite
)vX.Y-lite
: Major.minor version lite (e.g. v1.0-lite
)vX-lite
: Major version lite (e.g. v1-lite
)sha-<commit>-lite
: Specific commit lite# Essential networking configuration docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ -e ONE_MCP_PORT=3050 \ -e ONE_MCP_EXTERNAL_URL=http://127.0.0.1:3050 \ ghcr.io/1mcp-app/agent # Custom port, tags, and logging (full image) docker run -p 3051:3051 \ -e ONE_MCP_HOST=0.0.0.0 \ -e ONE_MCP_PORT=3051 \ -e ONE_MCP_EXTERNAL_URL=http://127.0.0.1:3051 \ -e ONE_MCP_TAGS=network,filesystem \ -e ONE_MCP_LOG_LEVEL=debug \ ghcr.io/1mcp-app/agent # With external URL for reverse proxy (lite image) docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ -e ONE_MCP_EXTERNAL_URL=https://mcp.example.com \ -e ONE_MCP_TRUST_PROXY=true \ ghcr.io/1mcp-app/agent:lite # For users in China mainland - faster package installation docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ -e ONE_MCP_PORT=3050 \ -e ONE_MCP_EXTERNAL_URL=http://127.0.0.1:3050 \ -e npm_config_registry=https://registry.npmmirror.com \ -e UV_INDEX=http://mirrors.aliyun.com/pypi/simple \ -e UV_DEFAULT_INDEX=http://mirrors.aliyun.com/pypi/simple \ ghcr.io/1mcp-app/agent # Behind corporate proxy docker run -p 3050:3050 \ -e ONE_MCP_HOST=0.0.0.0 \ -e https_proxy=${https_proxy} \ -e http_proxy=${http_proxy} \ ghcr.io/1mcp-app/agent
Full Image (latest
):
.node-version
)Lite Image (lite
):
.node-version
)When running 1MCP behind a reverse proxy, configure trust proxy settings for proper client IP detection:
# Default (safe for local development) npx -y @1mcp/agent --trust-proxy=loopback # Behind reverse proxy npx -y @1mcp/agent --trust-proxy=192.168.1.1 # Behind CDN/Cloudflare npx -y @1mcp/agent --trust-proxy=true
See docs/TRUST_PROXY.md for detailed configuration options, security considerations, and reverse proxy setup examples.
Tags help you control which MCP servers are available to different clients. Think of tags as labels that describe what each server can do.
{ "mcpServers": { "web-server": { "command": "uvx", "args": ["mcp-server-fetch"], "tags": ["network", "web"], "disabled": false }, "file-server": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-filesystem", "~/Downloads"], "tags": ["filesystem"], "disabled": false } } }
Simple Tag Filtering (OR logic) - ⚠️ Deprecated:
# Only start servers with the "network" tag npx -y @1mcp/agent --transport stdio --tags "network" # Start servers with either "network" or "filesystem" tags npx -y @1mcp/agent --transport stdio --tags "network,filesystem"
Note: The
--tags
parameter is deprecated and will be removed in a future version. Use--tag-filter
instead for both simple and advanced filtering.
Advanced Tag Filtering (Boolean expressions):
# Servers with both "network" AND "api" tags npx -y @1mcp/agent --transport stdio --tag-filter "network+api" # Servers with "network" OR "filesystem" tags npx -y @1mcp/agent --transport stdio --tag-filter "network,filesystem" # Complex expression: (web OR api) AND production, but NOT test npx -y @1mcp/agent --transport stdio --tag-filter "(web,api)+production-test" # Natural language syntax also supported npx -y @1mcp/agent --transport stdio --tag-filter "web and api and not test"
Simple tag filtering:
{ "mcpServers": { "1mcp": { "type": "http", "url": "http://localhost:3050/sse?tags=network" // Only connect to network-capable servers } } }
Advanced tag filtering:
{ "mcpServers": { "1mcp": { "type": "http", "url": "http://localhost:3050/sse?tag-filter=network%2Bapi" // network AND api (URL-encoded) } } }
Example tags:
network
: For servers that make web requestsfilesystem
: For servers that handle file operationsmemory
: For servers that provide memory/storageshell
: For servers that run shell commandsdb
: For servers that handle database operationsThe server automatically manages configuration in a global location:
~/.config/1mcp/mcp.json
%APPDATA%/1mcp/mcp.json
{ "mcpServers": { "mcp-server-fetch": { "command": "uvx", "args": ["mcp-server-fetch"], "disabled": false }, "server-memory": { "command": "npx", "args": ["-y", "@modelcontextprotocol/server-memory"], "disabled": false } } }
1MCP supports OAuth 2.1 for secure authentication. To enable it, use the --enable-auth
flag. The --auth
flag is deprecated and will be removed in a future version.
When authentication is enabled, 1MCP acts as an OAuth 2.1 provider, allowing client applications to securely connect. This ensures that only authorized clients can access the MCP servers.
1MCP provides comprehensive health check endpoints for monitoring and observability:
GET /health
- Complete health status including system metrics, server status, and configurationGET /health/live
- Simple liveness probe (always returns 200 if server is running)GET /health/ready
- Readiness probe (returns 200 if configuration is loaded and ready)healthy
- All systems operational (HTTP 200)degraded
- Some issues but still functional (HTTP 200)unhealthy
- Critical issues affecting functionality (HTTP 503)Use these endpoints with:
1MCP acts as a proxy, managing and aggregating multiple MCP servers. It starts and stops these servers as subprocesses and forwards requests from AI assistants to the appropriate server. This architecture allows for a single point of entry for all MCP traffic, simplifying management and reducing overhead.
graph TB subgraph "AI Assistants" A1[Claude Desktop] A2[Cursor] A3[Cherry Studio] A4[Roo Code] end subgraph "1MCP Server" MCP[1MCP Agent] end subgraph "MCP Servers" S1[Server 1] S2[Server 2] S3[Server 3] end A1 -->|http| MCP A2 -->|http| MCP A3 -->|http| MCP A4 -->|http| MCP MCP --> |http| S1 MCP --> |stdio| S2 MCP --> |stdio| S3
sequenceDiagram participant Client as AI Assistant participant 1MCP as 1MCP Server participant MCP as MCP Servers Client->>1MCP: Send MCP Request activate 1MCP 1MCP->>1MCP: Validate Request 1MCP->>1MCP: Load Config 1MCP->>MCP: Forward Request activate MCP MCP-->>1MCP: Response deactivate MCP 1MCP-->>Client: Forward Response deactivate 1MCP
Install dependencies:
pnpm install
Build the server:
pnpm build
For development with auto-rebuild:
pnpm watch
Run the server:
# Copy the example environment file first cp .env.example .env # Then run the development server pnpm dev
Using the MCP Inspector, which is available as a package script:
pnpm inspector
The Inspector will provide a URL to access debugging tools in your browser.
This project uses source-map-support to enhance stack traces. When you run the server, stack traces will reference the original TypeScript source files instead of the compiled JavaScript. This makes debugging much easier, as error locations and line numbers will match your source code.
No extra setup is required—this is enabled by default. If you see a stack trace, it will point to .ts
files and the correct line numbers. 🗺️
Contributions are welcome! Please read our CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This project is licensed under the Apache License 2.0. See the LICENSE file for details.