Docker管理协议服务器

Komodo MCP Server是一个将Komodo容器管理系统暴露给AI助手的模型上下文协议服务器,提供35种工具支持读写操作和安全访问控制。

  • by nicolasestrem
  • TypeScript
  • 本地部署
  • 4 星标
  • 更新于
在 GitHub 查看 nicolasestrem/komodo-mcp

使用说明

Komodo MCP服务器

一个MCP(模型上下文协议)服务器,它公开 科莫多 --Docker/容器管理和部署系统——AI助手。

亮点

  • 35工具 跨读/执行/写类别
  • 可流式HTTP传输 (默认)符合最新的MCP规范,以及传统的SSE和stdio
  • 每节课 McpServer --并发客户端是隔离的
  • 官方 komodo_client 2.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证书

  1. 打开Komodo网络用户界面
  2. 首选 设置→ API密钥
  3. 点击 创建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。重新分发方案应接受单独的许可审查;本说明不是法律结论。

链接