MCP Docker示例
使用Docker Compose配置文件的动态、按需模型上下文协议(MCP)服务器。这种方法通过仅启动当前任务所需的MCP服务器来解决“上下文吞噬”问题。
问题
当您将多个MCP服务器连接到AI编码助手时,每个服务器都会消耗上下文令牌来维持连接:
Your context budget: 100,000 tokens
Connected MCP servers:
├── GitHub MCP: ~5,000 tokens
├── Slack MCP: ~8,000 tokens
├── Database MCP: ~3,000 tokens
├── Google Drive MCP: ~4,000 tokens
└── Jira MCP: ~6,000 tokens
Total overhead: 26,000 tokens (26% of your budget!)解决方案
使用Docker Compose配置文件仅启动您需要的MCP服务器:
# Working on code? Start just GitHub
./mcp.sh frontend
# Need database access? Switch contexts
./mcp.sh backend
# Planning sprint? Different set of tools
./mcp.sh planning
# Done? Clean up
./mcp.sh stop快速开始
- 克隆此存储库:
git clone https://github.com/kekzl/mcp-docker-examples.git
cd mcp-docker-examples- 复制环境模板:
cp .env.example .env- 将您的API令牌添加到
.env
- 为您的任务启动MCP服务器:
./mcp.sh frontend # GitHub only
./mcp.sh backend # GitHub + Database
./mcp.sh planning # Jira + Slack
./mcp.sh full # All servers (use sparingly!)
./mcp.sh stop # Stop all
./mcp.sh status # Show running servers可用配置文件
| 配置文件 | MCP服务器 | 用例 |
|---|---|---|
github | GitHub | 代码浏览、PR、问题 |
database | PostgreSQL | 数据库查询、模式检查 |
slack | Slack | 团队沟通、渠道历史 |
jira | Jira | Sprint计划、票务管理 |
filesystem | 文件系统 | 本地文件访问(沙盒) |
预定义任务配置文件
这 mcp.sh 脚本提供了方便的快捷方式:
- 前端:仅限GitHub
- 后端:GitHub+数据库
- 规划:Jira+Slack
- 调试:GitHub+数据库+文件系统
- 满的:所有服务器(警告:上下文使用率高)
自定义组合
您还可以直接启动特定的配置文件:
# Start specific profiles
docker compose --profile github --profile slack up -d
# Stop specific profiles
docker compose --profile github down配置
环境变量
创建一个 .env 使用您的凭据文件:
# GitHub
GITHUB_TOKEN=ghp_xxxxxxxxxxxx
# Database
DATABASE_URL=postgresql://user:pass@host:5432/db
# Slack
SLACK_BOT_TOKEN=xoxb-xxxxxxxxxxxx
SLACK_APP_TOKEN=xapp-xxxxxxxxxxxx
# Jira
JIRA_URL=https://your-org.atlassian.net
JIRA_EMAIL=your-email@example.com
JIRA_API_TOKEN=xxxxxxxxxxxx
# Filesystem (sandboxed directory)
ALLOWED_PATHS=/home/user/projectsClaude桌面集成
添加到您的Claude桌面配置(~/.config/claude/claude_desktop_config.json):
{
"mcpServers": {
"github": {
"command": "docker",
"args": ["compose", "-f", "/path/to/docker-compose.yml", "--profile", "github", "run", "--rm", "github-mcp"]
}
}
}安全注意事项
- 永不承诺
.env文件 -它们包含敏感令牌 - 使用最小权限 -只启动您需要的服务器
- 沙盒文件系统访问 -限制
ALLOWED_PATHS - 定期旋转令牌 -尤其是在测试之后
建筑
┌─────────────────────────────────────────┐
│ AI Session (Claude Code, etc.) │
│ └── MCP Client │
│ ├── "I need GitHub" → profile up │
│ ├── "Done with GitHub" → down │
│ └── Only active MCP uses context │
└─────────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────┐
│ Docker Compose │
│ ├── [github] GitHub MCP Server │
│ ├── [database] PostgreSQL MCP Server │
│ ├── [slack] Slack MCP Server │
│ ├── [jira] Jira MCP Server │
│ └── [filesystem] Filesystem MCP Server │
└─────────────────────────────────────────┘相关资源
许可证
MIT许可证-请参阅 许可证 了解详情。
