使用说明
MCP服务器设置
Docker Compose设置用于托管多个MCP服务器,以将您的AI助手连接到各种服务。
公共事业
| 服务 | MCP服务器 | 端口 | 传输 | URL |
|---|---|---|---|---|
| OpenCode命令行界面 | MCP客户端 | - | 交互式 | docker compose exec opencode bash |
| 雅虎邮箱 | 自定义Node.js SSE包装器→ 云飞珠/mcp邮件服务器 | 3101 | SSE | http://localhost:3101/mcp/sse |
| 警报管理器 | ntk148v/警报管理器mcp服务器 | 8001 | SSE | http://localhost:8001/sse |
| Tado | 自定义Java MCP(本地) | 3102 | SSE | http://localhost:3102/sse |
| 信号 | 自定义Python MCP+信号cli-rest api | 3107 | SSE | http://localhost:3107/sse |
| Slack | 自定义Python MCP(本地) | 3108 | SSE | http://localhost:3108/sse |
| 谷歌工作区 | 自定义Node.js MCP(本地) | 3103 | SSE | http://localhost:3103/sse |
| Todoist | koki开发/Todoist mcp服务器 | 3104 | SSE | http://localhost:3104/sse |
| 华硕路由器 | 自定义Node.js MCP(本地) | 3105 | SSE | http://localhost:3105/sse |
| 剧作家 | 微软剧作家MCP | 3106 | SSE | http://localhost:3106/sse |
| GitHub | GitHub mcp服务器 | - | stdio | 仅限克劳德桌面 |
| Jenkins | 自定义Python MCP(本地) | 3117 | SSE | http://localhost:3117/sse |
| Portainer(6台服务器) | 自定义FastMCP包装器(本地) | 3111-3116 | SSE | http://localhost:3111/sse(1号楼) |
| 净空代理 | 上下文压缩代理 | 8787 | HTTP | http://localhost:8787/v1 |
注: 标记为“仅限Claude Desktop”的服务器使用stdio传输,必须通过以下方式运行 docker compose run --rm.
快速开始
# Start all servers
docker compose up -d
# Start OpenCode CLI (interactive MCP client)
docker compose exec opencode bash
# Or start specific servers
docker compose up -d yahoo-mail-mcp alertmanager-mcp
仅限华硕MCP路由器
如果您只需要华硕路由器MCP服务器,请使用专用的编写文件:
开始之前,在中设置一个明确的ASUS主机 .env:
ROUTER_HOST=192.168.1.2
# optional profile map when switching targets
ROUTER_HOSTS=build1=192.168.1.2,build2=192.168.1.18
ROUTER_PROFILE=build1
192.168.1.1 通常是上游网关,不应假设为华硕UI。
# Build and run only ASUS Router MCP
docker compose -f docker-compose.asus.yml up -d --build
# Verify it's running
curl http://localhost:3105/sse
# Stop it
docker compose -f docker-compose.asus.yml down
要并行运行两个ASUS MCP实例(主+次):
ROUTER_HOST=192.168.1.2
ROUTER_HOST_SECONDARY=192.168.1.18
docker compose -f docker-compose.asus.yml --profile multi-asus up -d --build
净空代理
净空 是位于LLM客户端和提供程序之间的上下文压缩代理。它在工具输出、日志、文件和对话历史到达LLM之前对其进行压缩-- 令牌减少60-95%,答案相同.
运作原理
Your LLM client → http://headroom-proxy:8787/v1 → Headroom compresses → Upstream provider API
代理是一个与OpenAI兼容的端点。指向任何客户 http://headroom-proxy:8787/v1 它在转发给您的提供商之前透明地压缩请求。
与Claude Code一起使用(在opencode内部)
# Inside the opencode container, wrap claude to use the proxy automatically
headroom wrap claude
# Or configure the proxy directly
export ANTHROPIC_BASE_URL=http://headroom-proxy:8787/v1
与任何兼容OpenAI的客户端一起使用
export OPENAI_BASE_URL=http://headroom-proxy:8787/v1
配置上游
默认情况下,代理会转发到OpenAI。要通过其他提供商路由,请执行以下操作:
# In .env:
HEADROOM_TARGET_API_URL=https://api.anthropic.com
# Or set directly on the service (uncomment in docker-compose.yml):
# - OPENAI_TARGET_API_URL=${HEADROOM_TARGET_API_URL:-}
验证它是否正在运行
curl http://localhost:8787/readyz
curl http://localhost:8787/v1/models
MCP集成
Headroom还提供用于压缩/检索/统计的MCP工具。在任何MCP客户端中安装:
# Inside a container with headroom installed:
headroom mcp install
这暴露了 headroom_compress, headroom_retrieve,以及 headroom_stats 工具。
OpenCode命令行界面
这 opencode 该服务为使用MCP工具提供了一个交互式CLI。
# Start opencode (use --profile to include)
docker compose --profile opencode up -d opencode
# Connect to the running container
docker compose exec opencode bash
# Inside bash, start opencode
opencode
MCP配置
MCP服务器已在中预先配置 opencode/config/opencode.json:
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"yahoo-mail": {
"type": "remote",
"url": "http://yahoo-mail-mcp:3101/mcp/sse",
"enabled": true
},
"alertmanager": {
"type": "remote",
"url": "http://alertmanager-mcp:8001/sse",
"enabled": true
},
"github": {
"type": "local",
"command": ["docker", "run", "--rm", "-i", "-e", "GITHUB_PERSONAL_ACCESS_TOKEN", "ghcr.io/github/github-mcp-server"],
"environment": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_TOKEN}"
},
"enabled": true
}
}
}
编辑此文件以添加/删除MCP服务器。
使用MCP工具
# Check MCP servers are connected
docker compose exec opencode opencode mcp list
# Start interactive session
docker compose exec opencode opencode
# Inside opencode, use MCP tools
/opencode Show me my emails from Yahoo/
/opencode Show me current alerts from Alertmanager/
/opencode Show me my GitHub repositories/
Open WebUI的服务器URL
直接SSE服务器
http://localhost:3101/mcp/sse # Yahoo Mail
http://localhost:8001/sse # Alertmanager
http://localhost:3102/sse # Tado
http://localhost:3107/sse # Signal
http://localhost:3108/sse # Slack
http://localhost:3103/sse # Google Workspace
http://localhost:3104/sse # Todoist
http://localhost:3105/sse # ASUS Router
http://localhost:3106/sse # Playwright
部署在build1上
http://build1:3101/mcp/sse # Yahoo Mail
http://build1:8001/sse # Alertmanager
http://build1:3102/sse # Tado
http://build1:3107/sse # Signal
http://build1:3108/sse # Slack
http://build1:3103/sse # Google Workspace
http://build1:3104/sse # Todoist
http://build1:3105/sse # ASUS Router
http://build1:3106/sse # Playwright
克劳德桌面(stdio服务器)
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"todoist": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "todoist-mcp"]
},
"google-workspace": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "google-workspace-mcp"]
},
"github": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "github-mcp"]
},
"jenkins": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "jenkins-mcp"]
},
"tado": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "tado-mcp"]
}
}
}
设置
-
复制
.env.example到.env:cp .env.example .env -
请填写您的凭据
.env华硕MCP所需:
ROUTER_HOST(或ROUTER_HOSTS+ROUTER_PROFILE)ROUTER_PASSWORD
Slack MCP所需:
SLACK_BOT_TOKEN
Slack MCP的可选配置:
SLACK_DEFAULT_REPLY_TIMEOUT_SECONDSSLACK_REPLY_POLL_INTERVAL_SECONDS
-
在中配置SSH服务器
ssh/config:Host webserver HostName 192.168.1.10 User admin IdentityFile ~/.ssh/id_rsa -
启动服务:
docker compose up -d
Jenkins部署秘密
Jenkins管道将Jenkins凭据绑定到 withCredentials(...),将它们映射到部署时间环境变量 withEnv([...]),确保Docker Swarm处于活动状态,并使用以下方式进行部署:
docker stack deploy --with-registry-auth --prune -c docker-stack.yml -c docker-stack.build1.yml mcp-servers- Swarm滚动更新(
parallelism: 1,order: start-first,失败时回滚) - 所有服务的放置限制
node.hostname == build1 - 使用外部群集覆盖网络
sentinel_sentinel-swarm-network
这使得部署无中断,并在构建群上运行MCP服务,同时将工作负载固定到构建1节点。
以这种方式导出的任何变量都可以用于 docker stack deploy,然后解决 ${...} 表达式在 docker-stack.yml 从这个环境。
在运行管道之前创建这些Jenkins凭据:
- 机密文本:
mcp-google-client-id - 机密文本:
mcp-google-client-secret - 机密文本:
mcp-jenkins-url - 机密文本:
mcp-jenkins-username - 机密文本:
mcp-jenkins-api-token - 机密文本:
slack-bot-token - 机密文本:
mcp-todoist-api-token - 机密文本:
mcp-yahoo-email - 机密文本:
mcp-yahoo-app-password - 机密文本:
mcp-alertmanager-url - 机密文本:
mcp-router-password - 机密文本:
mcp-portainer-build1-token - 机密文本:
mcp-portainer-build2-token - 机密文本:
mcp-portainer-monitor-token - 机密文本:
mcp-portainer-observability1-token - 机密文本:
mcp-portainer-tools1-token - 机密文本:
mcp-portainer-production1-token - 机密文件:
mcp-google-gauth-json - 机密文件:
mcp-google-accounts-json - 机密文件:
mcp-google-oauth2-seed-json - 机密文件:
mcp-tado-tokens-json
管道默认将信号基URL设置为 http://signal-proxy:8080.
信号消息的接收是由以下因素驱动的 signal-mcp 容器轮询 signal-proxy.
SIGNAL_POLL_ENABLED(默认值true)启用后台轮询。SIGNAL_POLL_INTERVAL_SECONDS(默认值10)控制轮询节奏。SIGNAL_POLL_TIMEOUT_SECONDS(默认值5)控件每次轮询都会接收超时。SENTINEL_WEBHOOK_URL(可选)将每个接收到的消息有效载荷转发给Sentinel。
mcp-google-oauth2-seed-json 必须包含由Google OAuth凭据文件名键入的JSON对象:
{
".oauth2.user@example.com.json": {
"access_token": "initial-access-token",
"refresh_token": "initial-refresh-token",
"expiry_date": 1767225600000
}
}
持久OAuth状态
data/google-workspace/.gauth.json和data/google-workspace/.accounts.json每次部署时都会从Jenkins刷新。data/google-workspace/credentials/.oauth2.*.json只有在缺失时才播种。data/tado/tokens.json只有在缺失时才播种。- Google和Tado可以在运行时刷新和持久化令牌文件;重新部署会保留那些刷新的文件。
ALERTMANAGER_USERNAME和ALERTMANAGER_PASSWORD是可选的,默认为空。
MCP客户端配置
打开WebUI(环境变量)
通过添加MCP服务器 TOOL_SERVER_CONNECTIONS 环境变量:
# In your Open WebUI docker-compose
services:
open-webui:
environment:
- MCP_ENABLE=true
- TOOL_SERVER_CONNECTIONS=[
{"url":"http://host.docker.internal:3101/mcp/sse","name":"yahoo-mail","type":"sse"},
{"url":"http://host.docker.internal:8001/sse","name":"alertmanager","type":"sse"},
{"url":"http://host.docker.internal:3102/sse","name":"tado","type":"sse"},
{"url":"http://host.docker.internal:3107/sse","name":"signal","type":"sse"},
{"url":"http://host.docker.internal:3103/sse","name":"google-workspace","type":"sse"},
{"url":"http://host.docker.internal:3104/sse","name":"todoist","type":"sse"},
{"url":"http://host.docker.internal:3105/sse","name":"asus-router","type":"sse"},
{"url":"http://host.docker.internal:3106/sse","name":"playwright","type":"sse"}
]
extra_hosts:
- "host.docker.internal:host-gateway"
networks:
- mcp-network
打开WebUI(管理UI)
通过设置添加MCP服务器→ 连接→ 添加MCP服务器。
Claude桌面(JSON配置)
添加 ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"todoist": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "todoist-mcp"]
},
"google-workspace": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "google-workspace-mcp"]
},
"github": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "github-mcp"]
},
"jenkins": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "jenkins-mcp"]
},
"tado": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "run", "--rm", "tado-mcp"]
}
}
}
MCP检查员/直接测试
直接测试任何MCP服务器:
# Yahoo Mail (SSE via custom wrapper around mcp-mail-server)
curl http://localhost:3101/mcp/sse
# Alertmanager (SSE)
curl http://localhost:8001/sse
# Tado (SSE)
curl http://localhost:3102/sse
# Signal (SSE)
curl http://localhost:3107/sse
# Google Workspace (SSE)
curl http://localhost:3103/sse
# Todoist (SSE)
curl http://localhost:3104/sse
# ASUS Router (SSE)
curl http://localhost:3105/sse
# Playwright (SSE)
curl http://localhost:3106/sse
# Jenkins (SSE)
curl http://localhost:3117/sse
# Stdio servers
docker compose run --rm github-mcp
验证所有MCP服务器
使用存储库验证脚本验证端点和 tools/list 在一次运行中:
# local deployment on the current host
./scripts/verify-mcp-servers.sh --host localhost
# verify deployed stack on build1 from another machine
./scripts/verify-mcp-servers.sh --host build1 --skip-containers
Jenkins管道在阶段中自动运行此验证 Verify MCP servers 部署后。
Docker构建网络
要使Open WebUI访问MCP服务器,请确保它们位于同一网络上:
# All MCP servers are attached to the shared sentinel network
# Add open-webui to the same network:
networks:
mcp-network:
name: sentinel_sentinel-network
external: true
凭证设置
简洁日程
- 转到Todoist设置→ 集成
- 复制您的API令牌
邮件
- 启用两步验证
- 在以下位置生成应用程序密码https://login.yahoo.com/account/security
谷歌(Gmail/日历)
- 在以下位置创建项目https://console.cloud.google.com
- 启用Gmail API和Google日历API
- 创建OAuth 2.0凭据
GitHub
- 前往设置→ 开发者设置→ 个人访问令牌
- 生成具有适当作用域的新令牌
詹金斯
- 前往Jenkins→ User → 配置
- 添加新的API令牌
警报管理器
- 确保Alertmanager正在运行且可访问
- 可选配置基本身份验证
安全外壳协议
- 将服务器条目添加到
ssh/config - 确保SSH密钥配置为无密码访问
塔多
- 登录您的Tado帐户https://my.tado.com
- 前往设置→ 账户→ 个人设置
- 通过Tado开发者门户创建OAuth凭据(或使用现有的客户端ID/secrete)
- 注:截至2025年,Tado使用OAuth2设备流进行身份验证
剧作家
看 微软剧作家MCP服务器 文件。
波特纳
Portainer MCP服务使用本地FastMCP SSE包装器 servers/portainer-mcp 并通过CI构建/推送 registry:5000/offbeat-iot/portainer-mcp:latest.
每个服务所需的环境变量:
PORTAINER_BASE_URL(或PORTAINER_SERVER)对于Portainer主机PORTAINER_TOKEN用于API身份验证
可用的环境服务和SSE端点:
portainer-build1-Portainerhttp://build1.home:6500上海证券交易所http://localhost:3111/sseportainer-build2-Portainerhttp://build2.home:6500上海证券交易所http://localhost:3112/sseportainer-monitor-Portainerhttp://192.168.1.60:6500上海证券交易所http://localhost:3113/sseportainer-observability1-Portainerhttp://192.168.1.80:6500上海证券交易所http://localhost:3114/sseportainer-tools1-Portainerhttp://192.168.1.17:6500上海证券交易所http://localhost:3115/sseportainer-production1-Portainerhttp://192.168.1.85:6500上海证券交易所http://localhost:3116/sse
集 PORTAINER_{SERVER}_TOKEN 在 .env 文件。
