使用说明
Komodo MCP服务器
一个MCP(模型上下文协议)服务器,它公开 科莫多 --Docker/容器管理和部署系统——AI助手。
亮点
- 35工具 跨读/执行/写类别
- 可流式HTTP传输 (默认)符合最新的MCP规范,以及传统的SSE和stdio
- 每节课
McpServer--并发客户端是隔离的 - 官方
komodo_client2.1.1 上游API合同 - 承载令牌身份验证 具有恒定时间比较;未配置令牌时,仅进行环回回退
- DNS重新绑定防御 通过默认设置
Host允许列表和可选Origin允许列表 - 头盔 安全标头; 跨域资源共享 允许列表
- 皮诺 结构化日志
Authorization/X-Api-Secret/X-Api-Key修订 - 平滑关闭 上
SIGTERM/SIGINT - 严格的输入模式:有界
tail,terms,compose_contents,以及contents;更新配置拒绝以API-key、API-secret、密码、secret、webhook-secret或令牌变体开头的密钥 - 共享上游适配器 使用Undici池、绝对超时、16 MiB响应上限,
p-limit并发控制和秘密编辑;不重试请求
快速开始
使用Docker Compose进行本地(环回)
git clone https://github.com/nicolasestrem/komodo-mcp.git
cd komodo-mcp
export KOMODO_ADDRESS=http://host.docker.internal:9120
export KOMODO_API_KEY='YOUR_KEY'
export KOMODO_API_SECRET='YOUR_SECRET'
export MCP_AUTH_TOKEN="$(openssl rand -hex 32)"
docker compose up -d
平原 docker compose 自动加载本地开发覆盖并将这些环境变量传递到容器中。容器卡住了 0.0.0.0:3113 内部,但 docker-compose.yml 仅将端口发布到主机环回(127.0.0.1:3113:3113).Docker请求仍然跨越容器网络边界,因此使用生成的承载令牌。当您需要网络访问时,使用反向代理来提供服务。
添加到克劳德代码(.mcp.json)
本地npm进程/环回 (以下情况不需要令牌 MCP_AUTH_TOKEN 未设置):
{
"mcpServers": {
"komodo": {
"type": "http",
"url": "http://127.0.0.1:3113/mcp"
}
}
}
码头工人 (需要令牌):
{
"mcpServers": {
"komodo": {
"type": "http",
"url": "http://127.0.0.1:3113/mcp",
"headers": { "Authorization": "Bearer ${MCP_AUTH_TOKEN}" }
}
}
}
对于网络部署,请将URL替换为反向代理公开的TLS端点。
本地开发(npm)
npm install
npm run build
npm start # default streamable HTTP on 127.0.0.1:3113
npm run dev:sse # legacy SSE transport with a dev token
配置
科莫多上游
| 变量 | 描述 | 默认值 |
|---|---|---|
KOMODO_ADDRESS |
Komodo核心URL(仅限http;尾随斜线标准化);也读自 KOMODO_ADDRESS_FILE |
必填项 |
KOMODO_API_KEY |
API密钥-也从 KOMODO_API_KEY_FILE Docker机密 |
必填 |
KOMODO_API_SECRET |
API机密-也从 KOMODO_API_SECRET_FILE |
必填项 |
KOMODO_TIMEOUT_MS |
每个请求的绝对超时 | 30000 |
KOMODO_MAX_CONCURRENCY |
飞行中请求信号 | 8 |
KOMODO_MAX_RESPONSE_BYTES |
最大上游响应体尺寸 | 16777216 (1600万字节) |
MCP服务器
| 变量 | 描述 | 默认值 |
|---|---|---|
MCP_TRANSPORT |
streamable (默认), sse (遗产),或 stdio |
streamable |
MCP_PORT |
HTTP侦听器端口 | 3113 |
MCP_BIND_HOST |
要绑定的主机 | 127.0.0.1 (使用 0.0.0.0 Docker内部) |
MCP_AUTH_TOKEN |
不记名代币(也 MCP_AUTH_TOKEN_FILE).当 取消设置,只允许环回呼叫者。 |
未设置 |
MCP_ALLOWED_ORIGINS |
逗号分隔 Origin 允许列表(浏览器CSRF防御)。空=否 Origin 执行。 |
未设置 |
MCP_ALLOWED_HOSTS |
逗号分隔 Host-标头允许列表(DNS重新绑定防御)。 |
127.0.0.1,localhost |
MCP_MAX_SESSIONS |
最大并发HTTP会话数;无效值将恢复为默认值 | 100 |
MCP_SESSION_IDLE_TIMEOUT_MS |
清理前HTTP会话的空闲生存期 | 1800000 (30分钟) |
LOG_LEVEL |
Pino日志级别 | info |
获取Komodo API证书
- 打开Komodo网络用户界面
- 首选 设置→ API密钥
- 点击 创建API密钥,复制密钥和秘密
安全模型
此服务器持有Komodo管理员凭据。成功的工具调用可以在每个Komodo托管主机上部署代码、修剪系统或销毁堆栈。把它当作特权。
默认值旨在“意外安全”:
- 绑定是
127.0.0.1除非明确打开。 MCP_AUTH_TOKEN对于任何非环回呼叫者都是必需的。- 默认值
Host即使浏览器被诱骗到环回端口,allow-list也会阻止DNS重新绑定;MCP_ALLOWED_ORIGINS添加可选的浏览器Origin强制。 - 所有请求,包括环回,都通过Helmet+CORS。
- 向MCP客户端发出的错误已从上游主体中清除API密钥/机密。
对于非环回部署,使用终止TLS的反向代理,设置随机 MCP_AUTH_TOKEN (openssl rand -hex 32),并配置 MCP_ALLOWED_HOSTS/MCP_ALLOWED_ORIGINS 为您的域名。看 docs/DEPLOYMENT.md 和 docs/RUNBOOK.md.
可用工具
从中的单个声明表中注册了35个工具 src/tools/registry.ts.阅读工具携带 readOnlyHint 和 idempotentHint;启动/停止/重启和拉动操作进行 idempotentHint;修剪/销毁/删除和 komodo_write_stack_contents 携带 destructiveHint。精确的操作映射和模式在 docs/API.md.
阅读(15)
| 工具 | 说明 |
|---|---|
komodo_list_servers |
列出所有连接的服务器 |
komodo_list_stacks |
列出带有状态的堆栈 |
komodo_list_deployments |
列出部署 |
komodo_get_stack |
堆栈详细信息 |
komodo_get_stack_log |
堆栈部署日志 |
komodo_get_container_log |
集装箱日志(tail 1–5000,默认值100) |
komodo_list_containers |
服务器上的容器 |
komodo_inspect_container |
检查集装箱 |
komodo_get_system_stats |
服务器的CPU/内存/磁盘 |
komodo_list_images |
Docker镜像 |
komodo_list_networks |
Docker网络 |
komodo_list_volumes |
Docker卷 |
komodo_get_alerts |
科莫多警报 |
komodo_search_logs |
搜索容器日志(1-20个术语,每个最多256个字符) |
komodo_get_stack_services |
堆栈服务摘要(必填 stack) |
执行(12)
| 工具 | 提示 | 描述 |
|---|---|---|
komodo_deploy_stack |
非幂等 | 部署/重新部署堆栈 |
komodo_start_stack |
幂等 | 启动已停止的堆栈 |
komodo_stop_stack |
幂等 | 停止正在运行的堆栈 |
komodo_restart_stack |
幂等 | 重新启动堆栈 |
komodo_destroy_stack |
破坏性的 | 停止并删除 |
komodo_pull_stack |
幂等 | 提取最新图像 |
komodo_start_container |
幂等 | 启动容器 |
komodo_stop_container |
幂等 | 停止容器 |
komodo_restart_container |
幂等 | 重新启动容器 |
komodo_prune_images |
破坏性的 | 修剪未使用的图像 |
komodo_prune_networks |
破坏性的 | 修剪未使用的网络 |
komodo_prune_system |
破坏性的 | 完整的Docker系统修剪 |
写作(8)
| 工具 | 提示 | 描述 |
|---|---|---|
komodo_create_stack |
非幂等 | 创建堆栈 |
komodo_update_stack |
非幂等 | 更新堆栈配置(拒绝类似密钥的密钥) |
komodo_delete_stack |
破坏性的 | 删除堆栈 |
komodo_write_stack_contents |
破坏性的 | 覆盖撰写内容;需要 stack, file_path,以及 contents (最大字符串长度256000) |
komodo_create_server |
非幂等 | 添加服务器 |
komodo_update_server |
非幂等 | 更新服务器配置(拒绝类似密钥的密钥) |
komodo_delete_server |
破坏性的 | 删除服务器 |
komodo_rename_stack |
非幂等 | 重命名堆栈 |
示例提示
- “列出我的所有Komodo堆栈”
- “显示nginx堆栈的日志”
- “重新启动wordpress堆栈”
- “我的服务器上正在运行哪些容器?”
- “部署临时堆栈”
发展
npm install
npm run lint # biome
npm run build # tsc
npm test # node:test suites (auth/secret/tool/format/smoke)
npm run dev # tsc --watch
建筑学
src/
├── index.ts # Express factory, transports, auth/Origin/Host gates, SIGTERM
├── server.ts # createServer({ client? }) — DI-friendly factory
├── komodo-client.ts # Official client adapter: shared Undici pool, timeout/size/concurrency guards
└── tools/
├── registry.ts # Declarative TOOLS table + registerAll(server, client)
└── utils.ts # formatResult + toolHandler (errors → MCP isError)
看 docs/ARCHITECTURE.md 查看图表和请求流。
api参考
服务器使用官方 komodo_client 2.1.1包装 科莫多核心API。它将JSON POST请求发送到 /read/<Operation>, /write/<Operation>,或 /execute/<Operation>,以操作参数作为请求主体和API-key头:
curl -X POST http://your-komodo:9120/read/ListStacks \
-H "Content-Type: application/json" \
-H "X-Api-Key: YOUR_KEY" \
-H "X-Api-Secret: YOUR_SECRET" \
-d '{}'
流式HTTP和传统SSE各自创建了一个单独的 McpServer 每个会话共享一个上游适配器。空闲会话在以下时间后关闭 MCP_SESSION_IDLE_TIMEOUT_MS;携带未知会话ID的请求接收HTTP 404。CORS暴露了 mcp-session-id 允许的浏览器客户端的响应标头。
许可证
麻省理工学院——见 许可证.
依赖性说明:官方 komodo_client 该包声明GPL-3.0。重新分发方案应接受单独的许可审查;本说明不是法律结论。