che-mcp服务器
Eclipse Che的MCP服务器——将DevWorkspace操作和基于tmux的编码代理会话控制作为MCP工具公开。任何与MCP兼容的AI代理都可以创建、启动、停止和检查工作区,在其中启动编码代理,监视输出和中继输入。
代理快速入门
在集群上(代理作为DevWorkspace运行)
MCP服务器作为服务部署在用户命名空间中。直接连接到它:
# Claude Code
claude mcp add --transport sse che http://che-mcp-server:8080/mcp
# ZeroClaw — add to zeroclaw.toml
[[mcp.servers]]
name = "che"
transport = "http"
url = "http://che-mcp-server:8080/mcp"本地(来自git repo)
git clone git@github.com:akurinnoy/che-mcp-server.git
cd che-mcp-server
npm ci && npm run build
# Claude Code
claude mcp add che-mcp-server -- node dist/index.js
# Or run directly
node dist/index.js来自npm(一旦发布)
# One-off
npx che-mcp-server
# Global install
npm install -g che-mcp-server
# Claude Code
claude mcp add che-mcp-server -- npx che-mcp-server先决条件
- 运行时间: Node.js 18+
- 库贝内特斯: 用户的kubeconfig被注入(Eclipse Che中的标准配置)
- 目标工作区: tmux 3.1+安装在工作区映像中(大多数Ubuntu 22.04+和UBI 9+映像都包含tmux 3.2+)
配置
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
CHE_MCP_TRANSPORT | 运输方式: stdio 或 http | stdio |
CHE_MCP_PORT | HTTP传输端口 | 8080 |
CHE_MCP_NAMESPACE | 覆盖命名空间检测 | (来自kubeconfig) |
CLI标志
CLI标志覆盖环境变量:
--transport以(权力)否决CHE_MCP_TRANSPORT--port以(权力)否决CHE_MCP_PORT
命名空间检测
服务器按以下顺序解析命名空间:
- Kubeconfig上下文命名空间
CHE_MCP_NAMESPACE环境变量- ServiceAccount命名空间文件(
/var/run/secrets/kubernetes.io/serviceaccount/namespace) oc whoami+Eclipse Che/DevSpaces后缀检测(-che,-devspaces)
工具参考
工作空间生命周期
| 工具 | 说明 | 参数 |
|---|---|---|
list_workspaces | 列出用户命名空间中的所有DevWorkspaces | 无 |
create_workspace | 从默认的空模板创建一个新的DevWorkspace并启动它 | name (可选--如果省略,则自动生成) |
start_workspace | 启动已停止的DevWorkspace | workspace (必填) |
stop_workspace | 停止正在运行的DevWorkspace | workspace (必填) |
delete_workspace | 删除开发工作区(无论状态如何) | workspace (必填) |
工作区状态
| 工具 | 说明 | 参数 |
|---|---|---|
get_workspace_status | 获取详细状态(阶段、条件、URL、时间戳) | workspace (必填) |
get_workspace_pod | 获取pod详细信息(pod名称、阶段、容器状态) | workspace (必填) |
代理会话
| 工具 | 说明 | 参数 |
|---|---|---|
start_agent_session | 在工作区中使用编码代理启动tmux会话 | workspace, command (必填); session_name, container (可选) |
read_agent_output | 从tmux会话中捕获最近的终端输出 | workspace (必填); session_name, lines, container (可选) |
send_agent_input | 向tmux会话发送文本 | workspace, text (必填); session_name, enter, container (可选) |
get_agent_state | 检查tmux会话和进程是否处于活动状态 | workspace (必填); session_name, container (可选) |
stop_agent_session | 终止tmux会话 | workspace (必填); session_name, container (可选) |
使用示例
1. list_workspaces → find available workspaces
2. create_workspace { name: "test-ws" } → create a new workspace
3. get_workspace_status { workspace: "test-ws" } → wait until phase is Running
4. start_agent_session { workspace: "test-ws", command: "claude -p 'Add tests'" }
5. read_agent_output { workspace: "test-ws" } → monitor progress
6. send_agent_input { workspace: "test-ws", text: "Yes" } → respond to prompts
7. get_agent_state { workspace: "test-ws" } → check if agent finished
8. stop_agent_session { workspace: "test-ws" } → cleanup
9. stop_workspace { workspace: "test-ws" } → stop when done容器部署
构建并推动
make build && make image
make image-push
# Custom image and tag
IMAGE=myrepo/myimage TAG=v1 make image image-push部署到Kubernetes
kubectl apply -k deploy/ -n 服务器在端口8080上以HTTP模式启动,健康端点位于 /healthz.
运作原理
服务器是MCP客户端和Kubernetes API之间的无状态桥梁。
代理会话
编码代理会话在目标工作区Pod中使用tmux。每次工具调用都会创建一个一次性exec连接,运行一个tmux命令,然后关闭。tmux会话独立持续。
- 开始:
tmux new-session -d -s agent 'command' - 阅读:
tmux capture-pane -t agent -p - 发送:
tmux send-keys -t agent -l 'text'(文字模式防止注射) - 检查:
tmux list-panes -t agent -F '#{pane_pid} #{pane_dead} #{pane_dead_status}' - 停止:
tmux kill-session -t agent
会话使用 remain-on-exit on 5000行滚动。
安全
- 服务器仅从用户的kubeconfig上下文访问其命名空间
- 无跨命名空间操作
- 用户的OAuth令牌将操作限制在Che Dashboard中可以执行的操作范围内
- 所有exec操作都针对第一个非-
che-gateway容器(可覆盖container参数)
许可证
阿帕奇-2.0
