关于 omp-worker-mcp
omp-worker-mcp 是一款 MCP 服务,让监督型 Agent 将编码工作交给本机 Oh My Pi worker。它支持单项任务和依赖批次,并持久保存任务记录,提供结构化结果供审查。
主要功能
- 01委派单项编码任务
- 02运行依赖式任务批次
- 03校验声明的写入范围
- 04在同一会话中继续任务
- 05持久保存任务记录和日志
适用场景
- 01移交功能实现或错误修复
- 02并行处理互不冲突的仓库任务
- 03审查 worker 的改动和验证证据
MCP 相关
它向 MCP 客户端提供委派、等待、检查、继续和取消 Oh My Pi worker 任务的工具。MCP 客户端充当监督者,Oh My Pi 在本机执行任务。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y omp-worker-mcpOMP_WORKER_OMP_COMMANDPath or executable name for the local OMP CLI binary.OMP_WORKER_ALLOWED_ROOTSOptional JSON array of absolute directory paths that delegated job cwd values must resolve inside.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
9收录的工具列表 · 更新于 5 天前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| cwd | string | 是 | OMP 可检查和修改的绝对工作目录 |
| tasks | array | 是 | 根据依赖 DAG 和所有权安全规则并发执行的拆分任务数组 |
| max_parallel | integer | 否 | 最大并发活动 OMP 运行器数量(1-10,默认 4) |
| wait_seconds | integer | 否 | 此调用中等待批次完成的最长秒数(0-240,默认 60) |
| supervisor_brief | string | 否 | 供任务组共享的、只读且便于决策的发现、假设和约束 |
| default_max_attempts | integer | 否 | 如果任务中未指定,则使用每个任务的默认尝试次数上限(1-5,默认 3) |
| group_timeout_minutes | integer | 否 | 组的整体硬性截止时间(分钟)(1-120,默认 60) |
| default_timeout_minutes | integer | 否 | 如果任务中未指定,则使用每个任务的默认超时时间(分钟)(1-120,默认 30) |
详细介绍
omp-worker-mcp
让你的主 AI Agent 负责规划和审查,并将实际编码工作交给本地 Oh My Pi 工作器。
一个 MCP 服务,可将 ChatGPT、Codex、Claude Code、Cursor 和其他 MCP 客户端变成 监督者,
并将你自己机器上的 Oh My Pi(OMP)变成后台 工作团队。
功能介绍
大多数编码 Agent 都在同一处完成所有工作:读取代码、规划、编辑、运行测试、修复——全部发生在同一段对话中,并消耗同一个模型的预算。omp-worker-mcp 将这些工作拆分为两个角色:
| 角色 | 参与者 | 职责 |
|---|---|---|
| 监督者 | 你交谈的 Agent:ChatGPT、Codex、Claude Code、Cursor…… | 理解请求、拆分工作、编写验收标准、审查结果 |
| 工作器 | 你机器上的 OMP CLI,使用你在 omp setup 中选择的模型 | 读取文件、编辑代码、运行 shell 命令和测试,并汇报结果 |
omp-worker-mcp 是两者之间的桥梁。它为监督者提供一小组 MCP 工具,在后台启动 OMP,将每项任务保存在磁盘上,并返回简短的结构化报告,而不是一大堆日志。
亮点
- 单项任务或完整计划——
omp_run_compact可委派单项任务;omp_run_batch_compact可将最多 50 项任务作为依赖关系图(DAG)运行,每次最多运行 10 项。 - 声明式写入范围校验——批处理中的并行写入任务必须声明其负责的路径;在任何工作器启动前,系统会拒绝声明范围重叠和依赖循环(这是调度检查和提示词约束,并非操作系统文件系统锁)。
- 结果便于审查——每个工作器完成后都会生成一个
OMP_WORKER_RESULT信封,其中包含状态、摘要、已更改文件、验证证据和待处理事项。 - 修正而非重启——
omp_continue会向同一个 OMP 会话发送反馈,因此工作器会保留上下文。 - 持久化任务——任务记录、日志和结果都保存在磁盘上,即使 MCP 服务重启后仍可读取。
- 支持从网页版 ChatGPT 使用——通过 OpenAI 的 Secure MCP Tunnel 实现:无需开放入站端口,并提供允许列表(
OMP_WORKER_ALLOWED_ROOTS,从0.2.0开始提供;npm0.1.1不包含此功能),用于限制任务可运行的目录。
适用场景
适合以下情况
- 你希望由能力更强的模型做决策,同时由更快或更便宜的模型负责输入;
- 任务规模足以交接:一个功能、带测试的错误修复、多模块重构,或耗时较长的只读调查;
- 你希望并行处理仓库中的多个部分,同时避免 Agent 互相覆盖;
- 你习惯用 ChatGPT 思考,并希望它能操作你自己机器上的文件。
以下情况可能不值得使用
- 变更只有一行,或问题很简单——主管自身的工具更快;
- 你需要真正的操作系统级沙箱。此项目控制任务从哪里开始,以及告知任务可以触及什么内容,而不是 OMP 在技术上能够做什么(参见安全模型)。
快速开始
你需要: Node.js ≥ 22 · 已安装 Oh My Pi · 一个 MCP 客户端(Codex、Claude Code、Cursor、ChatGPT 等)。
1. 安装并设置 OMP
按照官方说明安装 OMP,然后:
omp --version # confirm the CLI is on your PATH
omp setup # sign in and choose the default model
你在此处选择的默认模型将用于所有工作者。(高级设置:在 ~/.omp/agent/config.yml 中设置 modelRoles.default: <provider>/<model>。)
如果
omp不在你的PATH中,请在下方的 MCP 配置中将OMP_WORKER_OMP_COMMAND设置为可执行文件的完整路径。
2. 在客户端中注册 MCP 服务
无需全局安装——客户端会通过 npx -y omp-worker-mcp 运行已发布的软件包。选择你的客户端:
Codex — 作者日常使用的配置
编辑 ~/.codex/config.toml(Windows:C:\Users\<you>\.codex\config.toml):
[mcp_servers.omp-worker]
command = "npx"
args = ["-y", "omp-worker-mcp"]
[mcp_servers.omp-worker.env]
OMP_WORKER_OMP_COMMAND = "omp"
# Optional (Codex Code Mode only): let Codex call omp-worker tools directly
# without code-mode wrapping. Per the current Codex config reference, merge into
# your existing [features.code_mode] table (do not create a duplicate table header)
# and append "mcp__omp_worker" while preserving any other list entries:
[features.code_mode]
direct_only_tool_namespaces = ["mcp__omp_worker"]
(如果 [features.code_mode] 已存在于你的 config.toml 中,请合并到该表,并将 "mcp__omp_worker" 追加到 direct_only_tool_namespaces,不要重复创建表或覆盖已有条目。旧版 Codex 在任何 [table] 标头之前使用顶层键 direct_only_tool_namespaces = ["mcp__omp_worker"]。这两项设置都不是注册 MCP 服务所必需的;请参阅 Codex 直接命名空间设置和官方 Codex 配置参考。)
ChatGPT(网页) — 通过 Secure MCP Tunnel
版本要求(
>= 0.2.0):OMP_WORKER_ALLOWED_ROOTS自omp-worker-mcp0.2.0起可用(历史版本 npm0.1.1不具备此功能,也不会执行OMP_WORKER_ALLOWED_ROOTS限制)。在远程开放本地执行能力之前,请确认npx -y omp-worker-mcp@latest --version显示0.2.0或更高版本。
在本地运行服务,并通过 OpenAI 的 tunnel-client 接入;你的机器只会发起出站连接。
export OMP_WORKER_OMP_COMMAND=omp
export OMP_WORKER_ALLOWED_ROOTS='["/Users/you/Projects"]' # strongly recommended for remote access (available since 0.2.0; 0.1.1 lacks this feature)
export CONTROL_PLANE_API_KEY='<runtime-api-key>'
tunnel-client init \
--sample sample_mcp_stdio_local \
--profile omp-worker \
--tunnel-id <your-tunnel-id> \
--mcp-command "npx -y omp-worker-mcp"
tunnel-client doctor --profile omp-worker --explain
tunnel-client run --profile omp-worker
Windows PowerShell 命令、0.1.1 升级/本地构建说明、托管运行时替代方案(tunnel-client runtimes connect)、权限要求和完整信任边界:请参阅 ChatGPT Secure MCP Tunnel 指南。
Claude Code
claude mcp add omp-worker --scope user --env OMP_WORKER_OMP_COMMAND=omp -- npx -y omp-worker-mcp
使用 --scope project 仅为当前项目注册。如果在 Windows cmd.exe 中 npx 无法解析,请使用 cmd /c npx。
Cursor · VS Code / Copilot · Windsurf · Continue · 任意 JSON 配置客户端
{
"mcpServers": {
"omp-worker": {
"command": "npx",
"args": ["-y", "omp-worker-mcp"],
"env": {
"OMP_WORKER_OMP_COMMAND": "omp"
}
}
}
}
文件位置和客户端专属说明:请参阅客户端配置。
更改配置后,请重启客户端。
3. 告诉你的 Agent 何时委派
注册服务会让工具变为可用,但不会让 Agent 主动选择使用它们。请在项目的指令文件 AGENTS.md(Codex)、CLAUDE.md(Claude Code)、.cursorrules / .github/copilot-instructions.md(其他客户端)中添加一条简短策略,或添加到 ChatGPT 的项目指令中:
## Delegation policy (omp-worker-mcp)
- Quick questions, single-file edits, design discussion: do it yourself.
- Substantive single tasks (feature, bug fix, refactor, long investigation): inspect briefly,
then delegate with `omp_run_compact`, giving a clear `goal` and `acceptance` criteria.
- Multi-part work: use `omp_run_batch_compact`. Parallel write tasks need disjoint `ownership`;
tasks touching the same files must be ordered with `depends_on`.
- Review every result. If acceptance is not met, use `omp_continue` with specific feedback.
- Never delegate `git push`, publishing, deployments or secret changes — confirm those with the user.
更完整的模板:请参阅作者工作流 → 策略模板。
4. 运行你的第一个任务
先从只读任务开始:
Use omp-worker-mcp to do a read-only inspection of this workspace: summarize the
project structure and dependencies. Do not modify any files.
你应该看到: Agent 调用 omp_run_compact,OMP 在后台运行,并返回一段简短摘要,且没有文件发生更改。如果任务运行时间超过等待窗口(默认 60 s),调用会返回状态为 running 的 job_id,Agent 会继续调用 omp_wait——这是正常情况。
用法
设置好策略后,只需描述你想要的结果。以下示例展示了监督器在底层发送的内容。
单个任务
“在
src/net/中为 HTTP 客户端添加指数退避机制,编写单元测试,并确保npm test通过。”
// omp_run_compact
{
"cwd": "/path/to/repo",
"goal": "Add exponential backoff (max 5 retries) to src/net/client.ts for 5xx and network errors.",
"acceptance": [
"Unit tests cover the retry and give-up paths",
"npm test passes"
],
"timeout_minutes": 30
}
返回的内容很简洁(删节示例):
{
"job_id": "job-…",
"status": "completed",
"attempt": 1,
"max_attempts": 3,
"session_id": "sess-…",
"summary": "Added retry with exponential backoff to the HTTP client.",
"artifacts": [
{ "path": "src/net/client.ts", "description": "retry loop + backoff helper" },
{ "path": "test/net/client.test.ts", "description": "retry / give-up tests" }
],
"verification": ["npm test: all tests passed"],
"remaining": [],
"details_path": "…/jobs/job-…/job.json"
}
将多个任务作为 DAG 执行
“并行地为 API 添加
/health端点,并为 UI 添加状态徽章,然后添加一个涵盖两者的集成测试。”
graph LR
api["api · write src/api/"] --> tests["tests · write tests/"]
ui["ui · write src/ui/"] --> tests
// omp_run_batch_compact
{
"cwd": "/path/to/repo",
"max_parallel": 2,
"tasks": [
{ "id": "api", "goal": "Add GET /health returning build info.", "access": "write", "ownership": ["src/api/"] },
{ "id": "ui", "goal": "Show a status badge fed by /health.", "access": "write", "ownership": ["src/ui/"] },
{ "id": "tests", "goal": "Add an integration test for /health and the badge.",
"depends_on": ["api", "ui"], "access": "write", "ownership": ["tests/"],
"acceptance": ["npm test passes"] }
]
}
值得了解的规则:
write任务必须在ownership中列出其负责的路径(相对于cwd);read_only任务不列出路径。- 两个可能同时运行的任务不能负责重叠路径——应使用
depends_on为它们排序。 max_parallel的取值范围为 1–10(默认值为 4);整个任务组都有截止时间(group_timeout_minutes,默认值为 60)。- 如果等待窗口结束时任务组仍在运行,你会获得一个
group_id;请使用omp_wait_group继续等待。
监督任务
| 情况 | 工具 |
|---|---|
| 仍在运行 | omp_wait / omp_wait_group |
| 需要日志、尝试记录或完整的最终回答 | omp_result |
| 结果未达到验收要求 | 使用具体反馈调用 omp_continue(计入 max_attempts,默认值为 3) |
| 方向有误,需要停止 | omp_cancel / omp_cancel_group |
工具
| 工具 | 类型 | 功能 |
|---|---|---|
omp_run_compact | 推荐 | 启动一个任务,并等待最多 wait_seconds(≤ 60)以获取简洁结果 |
omp_run_batch_compact | 推荐 | 验证并运行最多包含 50 个任务的 DAG;等待最多 wait_seconds(≤ 240) |
omp_delegate | 低级 | 启动一个任务并立即返回 job_id |
omp_wait | 低级 | 等待任务完成 |
omp_wait_group | 低级 | 等待批次任务组完成 |
omp_result | 检查 | 完整状态、尝试记录、attempt-NN.stdout.jsonl / attempt-NN.stderr.log 路径及最终响应 |
omp_continue | 监督 | 向同一 OMP 会话发送反馈,以继续尝试 |
omp_cancel | 控制 | 停止任务及其进程树 |
omp_cancel_group | 控制 | 停止任务组中所有待处理和正在运行的任务 |
完整参数和限制:工具参考。
配置
所有配置均通过环境变量完成,可在客户端的 MCP 配置(env)中设置,也可在启动服务的 Shell 中设置。
| 变量 | 默认值 | 用途 |
|---|---|---|
OMP_WORKER_OMP_COMMAND | omp | OMP 可执行文件名称或完整路径 |
OMP_WORKER_ALLOWED_ROOTS | (未设置 = 不限制) | 绝对目录的 JSON 数组;任务必须在这些目录内运行。任何远程使用场景都应设置此项。 (自 0.2.0 起可用;npm 0.1.1 不具备此功能。) |
OMP_WORKER_STATE_DIR | ~/.codex/state/omp-worker | 存储任务状态、提示词和日志的位置(即使不使用 Codex,也会使用默认路径) |
OMP_WORKER_RETENTION_TTL_SECONDS | (未设置 = 永久保留) | 删除超过 N 秒的已完成记录 |
OMP_WORKER_RETENTION_MAX_BYTES | (未设置 = 不限大小) | 存储空间超过 N 字节时,删除最早的已完成记录 |
所有变量、磁盘布局和重启行为:运维 · .env.example。
安全模型
omp-worker-mcp 强制执行的约束
- 设置
OMP_WORKER_ALLOWED_ROOTS后 (自0.2.0起可用;npm0.1.1不具备此功能),作业的cwd必须通过realpath解析到获准根目录内。相邻目录前缀技巧和符号链接/junction 越界都会在 OMP 启动前被拒绝;如果设置了该值但值无效,则会默认拒绝。 - 在批处理中,并行
write任务的ownership必须互不重叠,且依赖图必须无环;这些检查会在启动任何工作进程前完成。 ownership和只读意图会作为明确约束传递给每个工作进程。
它不会做什么
- 它不是沙箱。OMP 及其运行的任何程序都拥有启动服务的用户账户的相同权限。
ownership是一项调度检查和对工作进程的指令,并非文件系统锁。 - 它不会判断运行什么才安全。请自行处理
git push、发布、部署和机密变更,并由主管 Agent 负责监督。
对于远程访问(例如,通过 Secure MCP Tunnel 使用 ChatGPT),请务必设置 OMP_WORKER_ALLOWED_ROOTS,并考虑使用专用的低权限账户、容器或 VM。如需报告漏洞,请参阅 SECURITY.md。
平台支持
| 平台 | 状态 |
|---|---|
| Windows | ✅ 已使用真实 OMP CLI 在端到端测试中验证,并在 CI 中测试(windows-latest) |
| macOS | 🟡 完整测试套件已在 CI 中运行(macos-latest,使用虚拟 OMP);尚未使用真实 OMP CLI 完成端到端验证 |
| Linux | 🟡 完整测试套件已在 CI 中运行(ubuntu-latest,使用虚拟 OMP);尚未使用真实 OMP CLI 完成端到端验证 |
| 客户端 | 状态 |
|---|---|
| Codex | ✅ 作者每天都在使用 |
| ChatGPT web(Secure MCP Tunnel) | 📄 已记录工作流 — 请参阅指南 |
| Claude Code、Cursor、VS Code / Copilot、Windsurf、Continue | 📄 已记录配置,但未在 CI 中进行集成测试 |
| 云端/远程 Agent 主机 | ⚠️ 仅限提供 Node.js ≥ 22、PATH 中有 OMP、可写工作区且支持启动进程的主机 |
非常欢迎提交 Linux 报告和你已验证的客户端配置 — 请参阅贡献指南。
常见问题
Agent 忽略工具,什么都自己做。
工具可用并不意味着它们一定会被选用。添加第 3 步中的委派策略,或在提示词中明确指定服务(“使用 omp-worker-mcp 来……”)。在启用了 Code Mode 的 Codex 上,你也可以选择配置 features.code_mode.direct_only_tool_namespaces。
任务立即失败,并显示“command not found” / ENOENT。
MCP 服务找不到 OMP。将 OMP_WORKER_OMP_COMMAND 设置为可执行文件的完整路径——图形界面客户端启动时的 PATH 通常比终端中的更短。
我得到的 job_id 状态是 running,而不是结果。
对于较长的任务,这是预期行为:调用最多只等待 wait_seconds 指定的时间。任务会在后台继续运行;调用 omp_wait(或 omp_wait_group)即可继续等待。
工作器使用什么模型?
OMP 的默认模型——也就是在 omp setup 中选择的模型(或 ~/.omp/agent/config.yml 中的 modelRoles.default)。主管所用的模型取决于你的客户端。这正是设计目的:两者可以不同。
“outside OMP_WORKER_ALLOWED_ROOTS”错误。
任务的 cwd 不在任何已批准的根目录中。这说明允许列表正在生效;如果应当允许该目录,请将其添加到 OMP_WORKER_ALLOWED_ROOTS(注意:OMP_WORKER_ALLOWED_ROOTS 从 0.2.0 开始提供;npm 0.1.1 不具备此功能)。
“Concurrent write ownership conflict”错误。
两个可能同时运行的任务拥有重叠的路径。为它们设置不同的 ownership 范围,或添加 depends_on,让其中一个在另一个之后运行。
这与客户端内置的子 Agent 有何不同?
工作器是一个独立的 Agent(OMP),拥有自己的模型和提供商,可跨对话轮次在后台运行,并将状态保存在磁盘上;任何 MCP 客户端都可以驱动它,包括网页版 ChatGPT。批处理还增加了依赖排序和写入范围检查。
文档
| 指南 | 适合在何时阅读…… |
|---|---|
| 编写工作流 | 设置委派策略,并了解监督 → 审查 → 修正的循环 |
| 客户端配置 | 配置 Codex、Claude Code、Cursor、VS Code、Windsurf 或 Continue |
| ChatGPT 安全 MCP 隧道 | 通过网页版 ChatGPT 驱动本地 OMP |
| 工具参考 | 查看所有工具、参数和结果封装 |
| 运维 | 调整环境变量、存储、保留策略和重启设置 |
| 基准测试协议 | 比较直接执行与主管—工作器委派 |
| Registry 发布 | 发布到 npm 和 Official MCP Registry(维护者) |
COMPATIBILITY.md 定义了公开契约和版本策略;CHANGELOG.md 列出各个版本。
参与贡献
欢迎提交问题和拉取请求,尤其欢迎 Linux 验证和经过测试的客户端配置。请从 CONTRIBUTING.md 开始。要从源代码构建:
git clone https://github.com/divenire990/omp-worker-mcp.git
cd omp-worker-mcp
npm ci
npm test # builds, then runs the test suite against a fake OMP
致谢
本项目基于 Model Context Protocol TypeScript SDK 构建,并围绕 Oh My Pi(MIT)设计。OMP 不包含在本项目中,必须单独安装。本项目独立开发,与 OMP、OpenAI 或 Anthropic 均无关联。
许可证
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。