配置-1mcp
基于Docker的部署 1MCP,统一的MCP服务器代理。与其将每个AI工具(Claude Desktop、Cursor、VS Code等)单独连接到六个MCP服务器,不如将它们全部指向一个端点,让1MCP处理路由。
一个连接。你所有的工具。
盒子里有什么
此仓库仅用于配置。没有要构建的应用程序代码。它运行官方 ghcr.io/1mcp-app/agent nginx反向代理后面的Docker镜像。身份验证现在由1MCP的OAuth流处理(不需要代理承载令牌 /mcp).
当前配置的MCP服务器:
| 服务器 | 传输 | 它的作用 |
|---|---|---|
| 信号量 | HTTP | CI/CD管道和构建管理 |
| 果酱 | HTTP | 前端错误报告和会话回放 |
| 哨兵 | stdio | 错误监控和可观察性 |
| 捷径 | stdio | 项目管理(故事、史诗、迭代) |
| 新遗迹 | stdio | APM、NRQL查询、警报 |
| 对讲机 | stdio | 客户对话和联系人查找 |
| 文件系统 | stdio | 本地文件访问(仅限于 /tmp) |
| 记忆 | stdio | 记事本/笔记 |
| 概念 | HTTP | 概念MCP(OAuth) |
| stdio | 通过GitHub MCP进行回购访问 | |
| Trigger.dev | stdio | 后台作业和任务编排 |
| PostgreSQL副本 | stdio | 只读数据库查询 |
这是通过单个经过身份验证的端点可访问的100多个工具。
快速开始
1.克隆和配置
git clone https://github.com/HarderBetterFasterStronger/config-1mcp.git
cd config-1mcp
cp .env.example .env编辑 .env 并填写您的API令牌。每个标记为 ?Set in .env 在compose文件中,需要相应的服务器才能连接。
2.启动它
docker compose up -d这会拉取1MCP代理映像和nginx:alpine映像,然后启动这两个容器。代理将并行连接到所有配置的MCP服务器,并通过健康检查报告准备就绪情况。
3.连接OAuth服务(通知、快捷方式等)
有些MCP服务器不通过配置获取API密钥,而是使用OAuth。要配置它们,请访问http://localhost:9494/oauth登录他们。
4.连接您的AI工具
看 客户端配置 或将您的MCP客户端指向:
URL: http://127.0.0.1:9494/mcp在第一次连接时,您的MCP客户端将对1MCP运行OAuth握手。完成浏览器流程,如果客户端没有自动重新连接,请重新启动。
建筑
AI Assistant (Claude, Cursor, etc.)
|
v
nginx proxy (:9494) -- forwards OAuth + MCP endpoints
|
v
1MCP agent (:3050) -- routing, tool aggregation, config reload
| | | | |
v v v v v
Semaphore Jam Shortcut New Relic Intercom ...代理公开这些路径:
/mcp-主MCP端点(由1MCP认证的OAuth)/oauth-OAuth管理仪表板/.well-known/*-OAuth发现端点/authorize,/token,/revoke,/register-OAuth端点/health-健康检查(未经验证)
所有流量都保留在本地主机上。代理绑定到 127.0.0.1 只有。
配置
添加新的MCP服务器
编辑 mcp.json.HTTP服务器看起来像这样:
"my-server": {
"type": "http",
"url": "https://mcp.example.com/mcp",
"headers": {
"Authorization": "Bearer ${MY_SERVER_TOKEN}"
},
"tags": ["category"]
}Stdio服务器(通过npx运行)看起来像这样:
"my-server": {
"command": "npx",
"args": ["-y", "some-mcp-package"],
"env": {
"API_KEY": "${MY_SERVER_API_KEY}"
},
"tags": ["category"]
}将相应的秘密添加到您的 .env 文件和 environment 部分 1mcp 服务中 docker-compose.yml.
如果启用了config reload(默认情况下),则代理将获取对以下内容的更改 mcp.json 无需重新启动。
环境变量
所需的秘密 (每个MCP服务器一个):
| 变量 | 服务器 |
|---|---|
SENTRY_AUTH_TOKEN | 哨兵 |
SENTRY_HOST | 哨兵(你的组织,例如。 your-org.sentry.io) |
SEMAPHORE_MCP_TOKEN | 信号CI |
SHORTCUT_API_TOKEN | 快捷方式 |
NEW_RELIC_API_KEY | 新遗迹 |
NEW_RELIC_ACCOUNT_ID | 新遗迹 |
JAM_MCP_TOKEN | 果酱 |
INTERCOM_API_TOKEN | 对讲机 |
GITHUB_PERSONAL_ACCESS_TOKEN | GitHub MCP |
TRIGGER_ACCESS_TOKEN | Trigger.dev |
REPLICA_DATABASE_URL | PostgreSQL副本(完整连接字符串) |
MCP_PROXY_TOKEN | nginx代理认证 |
可选调谐 (默认情况下):
| 变量 | 默认值 | 描述 |
|---|---|---|
ONE_MCP_PORT | 3050 | 内部代理端口 |
ONE_MCP_EXTERNAL_PORT | 9494 | 面向主机的代理端口 |
ONE_MCP_EXTERNAL_URL | http://127.0.0.1:9494 | OAuth回调的公共URL |
ONE_MCP_LOG_LEVEL | info | 日志详细程度(调试、信息、警告、错误) |
ONE_MCP_ENABLE_ENV_SUBSTITUTION | true | 允许 ${VAR} 在mcp.json中 |
ONE_MCP_ENABLE_CONFIG_RELOAD | true | 查看mcp.json以了解更改 |
ONE_MCP_ENABLE_ASYNC_LOADING | true | 并行加载服务器 |
ONE_MCP_ENABLE_AUTH | true | 启用1MCP OAuth身份验证 |
ONE_MCP_TRUST_PROXY | uniquelocal | X-Forwarded的信任代理-\* |
OAuth与传统令牌绕过
以前,此设置依赖于代理承载令牌(MCP_PROXY_TOKEN)到大门 /mcp该模式完全绕过了1MCP身份验证。
现在:
/mcp是 不 受代理令牌保护。- 1MCP OAuth已启用(
ONE_MCP_ENABLE_AUTH=true). - 客户端完成一次OAuth握手,然后重用发出的会话。
- 1MCP状态通过以下方式持久化
./data/1mcp:/root/.config/1mcp在docker-compose.yml为了在重启后幸存下来。
如果你仍然想使用代理令牌门,你需要禁用1MCP OAuth,并在 /mcp这不是当前的配置。
切换回代理令牌认证(旁路模式)
您可以通过简单的配置交换恢复到旧的代理令牌门。
1.更新 .env
ONE_MCP_ENABLE_AUTH=false
MCP_PROXY_TOKEN=your-proxy-bearer-token2.交换nginx模板
编辑 docker-compose.yml 并更改代理模板装载:
发件人:
./proxy/nginx.conf.template:/etc/nginx/templates/default.conf.template:ro致:
./proxy/nginx.conf.token.template:/etc/nginx/templates/default.conf.template:ro3.重新启动
docker compose up -d --force-recreate proxy 1mcp这将恢复原始流:
- 客户端必须发送
Authorization: Bearer ${MCP_PROXY_TOKEN}到/mcp - 1MCP OAuth已禁用
/oauth不使用OAuth端点
要切换回OAuth模式,请将模板还原为 proxy/nginx.conf.oauth.template (或 proxy/nginx.conf.template)并设置 ONE_MCP_ENABLE_AUTH=true.
客户端配置
令牌绕过
克劳德代码:
{
"type": "http",
"url": "http://127.0.0.1:9494/mcp",
"headers": {
"Authorization": "Bearer ${MCP_PROXY_TOKEN}"
}
}CLI:
claude mcp add --transport http 1mcp http://127.0.0.1:9494/mcp --header "Authorization: Bearer ${MCP_PROXY_TOKEN}"食品法典委员会(~/.codex/config.toml):
[mcp_servers.1mcp]
url = "http://127.0.0.1:9494/mcp"
headers = { Authorization = "Bearer ${MCP_PROXY_TOKEN}" }CLI:
codex mcp add 1mcp http://127.0.0.1:9494/mcp --header "Authorization: Bearer ${MCP_PROXY_TOKEN}"克劳德代码(OAuth)
- 使用这个JSON对象:
{
"type": "http",
"url": "http://127.0.0.1:9494/mcp"
}- 不要 设定一个
Authorization此服务器的标头。 - 首次连接时,在浏览器中完成OAuth流程(通过
http://127.0.0.1:9494/oauth). - 如果身份验证后未自动重新连接,请重新启动Claude Code。
您还可以通过CLI添加它:
claude mcp add --transport http 1mcp http://127.0.0.1:9494/mcpCodex(OAuth)
将Codex指向同一MCP URL并完成OAuth流程一次:
- 服务器URL:
http://127.0.0.1:9494/mcp - 没有承载令牌标头。
- 在以下位置完成OAuth
http://127.0.0.1:9494/oauth.
如果你使用 ~/.codex/config.toml,添加这个确切的块:
[mcp_servers.1mcp]
url = "http://127.0.0.1:9494/mcp"您还可以通过CLI添加它:
codex mcp add 1mcp http://127.0.0.1:9494/mcp确切的文件或UI取决于您使用的Codex客户端;关键要求是使用OAuth,而不是静态承载令牌。
守护程序管理(macOS)
控制脚本(ctl.sh)launchd监视器在重启时保持堆栈运行,并自动从崩溃中恢复。
开始一切
./ctl.sh start这运行 docker compose up -d 并安装每5分钟检查一次堆栈的launchd代理。如果代理容器不健康或已停止,监视器将重新启动它。
其他命令
./ctl.sh stop # tear down stack and unload watchdog
./ctl.sh restart # stop + start
./ctl.sh status # show container and watchdog state
./ctl.sh logs # tail docker compose logs (default: last 100 lines)
./ctl.sh logs 500 # tail last 500 lines
./ctl.sh watchdog-load # load watchdog without touching containers
./ctl.sh watchdog-unload # unload watchdog without touching containers看门狗是如何工作的
plist模板(com.1mcp.watchdog.plist)用途 __COMPOSE_DIR__ 占位符。当 ctl.sh start 或 ctl.sh watchdog-load 运行时,它会替换实际的repo路径,并将plist安装到 ~/Library/LaunchAgents/看门狗脚本(watchdog.sh)等待Docker可用,然后检查代理容器的健康状况。日志转到 logs/watchdog.log 以1MB的速度自动旋转。
日志和故障排除
日志被写入 ./logs/ (安装在容器中)。你也可以实时追踪它们:
docker compose logs -f健康端点可用于快速检查:
curl http://localhost:9494/healthSentry使用带有用户身份令牌的本地stdio进程进行无人值守访问,不需要OAuth浏览器流。
项目结构
.
├── docker-compose.yml # 1MCP agent + nginx proxy
├── mcp.json # MCP server definitions
├── .env.example # Template for secrets
├── .env # Your secrets (gitignored)
├── ctl.sh # Control script (start/stop/restart/status)
├── watchdog.sh # Launchd watchdog (auto-restarts unhealthy stack)
├── com.1mcp.watchdog.plist # Launchd plist template
├── proxy/
│ └── nginx.conf.*.template # Reverse proxy configs (oauth / token modes)
└── logs/ # Runtime logs (gitignored)