@dougbots/ avenor-mcp (英语)
说明: 从v. 0.x,
avenor mcp是安装在avenor二进制本身——需要Node/Bun. 见docs/mcp.md用于初级MCP设置和工具参考。 这个Node.js包是基于OpenCode的设置或者在您喜欢基于npm的工具时的替代品.
制作的 MCP 服务器 报务员 代理在任何 MCP 兼容客户端( Claude Code, Claude Desktop, Cursor等) 内作为工具运行 .
当你需要这个的时候
你有过 avenor 安装,您希望克劳德(或另一个 MCP 主机) 来产出和管理代理运行—— 踢出一个 Codex 或 双子座会话, 检查它的状态, 回答权限提示, 跟踪事件日志, 并恢复已完成的运行 .
这个包是MCP层. 这取决于 @dougbots/avenor-core 用于所有实际接线(监督员生命周期、二进制发现、套接字协议)。 何须知内道取用.
先决条件
- 节点20+ (或 Bun —— 服务器运行在 Bun 上但作为 无害环境管理 )
avenor二进制 在你身边PATH,或设置AVENOR_BIN=/path/to/avenor
如果启动时找不到二进制, MCP 服务器将无法连接.
安装
npm install @dougbots/avenor-mcp
或者随叫随到 npx (见下文配置).
配置
stdio 传输( 默认)
添加到您的 MCP 主机配置 。 对于 克劳德代码编辑 ~/.claude/mcp.json数字 :
{
"mcpServers": {
"avenor": {
"command": "npx",
"args": ["@dougbots/avenor-mcp"],
"env": {
"AVENOR_BIN": "/opt/homebrew/bin/avenor"
}
}
}
}
对于 克劳德桌面,使用时 ~/.config/Claude/claude_desktop_config.json 形状一样.
跳过 AVENOR_BIN 若为 avenor 已经在你的 PATH在新的会话中,主管自动启动 avenor 守护进程是您第一次调用工具 .
SSE 运输
当需要以长寿HTTP服务运行的MCP服务器(多客户端,通过地道等远程访问)时,使用SSE模式. 设定 MCP_TRANSPORT=sse 并提供一种证明
MCP_TRANSPORT=sse \
MCP_AUTH_TOKEN="my-secret" \
MCP_PORT=3748 \
npx @dougbots/avenor-mcp
然后在您的 MCP 主机配置中 :
{
"mcpServers": {
"avenor": {
"url": "http://127.0.0.1:3748/mcp",
"headers": {
"Authorization": "Bearer my-secret"
}
}
}
}
SSE 模式限制收到的请求 localhost 编号 : 127.0.0.1 编号 : [::1] 来源。 需要认证令牌——服务器返回 401 没有它.
| 信封变量 | 默认 | 页:1 |
|---|---|---|
MCP_TRANSPORT | (日语) | 设定为 sse 用于 HTTP |
MCP_PORT | 3748 | 仅用于 SSE 模式 |
MCP_AUTH_TOKEN | —— 说 | 需求 在 SSE 模式下 |
AVENOR_BIN | —— 说 | 路径 avenor 二进制( 返回到 PATH(中文(简体) ) |
工具
此表面登记工具名称 无 页:1 avenor_ 前缀 - spawn, (中文(简体) ), status, (中文(简体) ), result, (中文(简体) ), answer_permission, (中文(简体) ), message, (中文(简体) ), peers, (中文(简体) ), events, (中文(简体) ), kill, (中文(简体) ), shutdown,以及 workflow. MCP 客户端命名空间自己的服务器(Claude Code将其显示为 mcp__avenor__spawn,例如),所以前缀只会重复自己. 这个 avenor 二进制自有的MCP服务器使用同名名.
spawn
启动新代理运行 .
| 参数 | 需求 | 说明 |
|---|---|---|
agent | 没有 | 代理个人运行。 后端将名称解析为即时, 工具集和权限政策 。 直接身份域:独立于 model 财务报告和审定财务报表 backend。当 roster_entry 设定 |
dir | 对 | 运行的工作目录 |
prompt | 没有 | 提示文本( 互为专属文本 ) prompt_file(中文(简体) ) |
prompt_file | 没有 | 快速文件路径 |
label | 没有 | 此运行的可读标签 |
timeout | 没有 | 持续时间字符串( E)5m, (中文(简体) ), 1h, (中文(简体) ), 90s(中文(简体) ) |
model | 没有 | 模型覆盖。 独立 agent 财务报告和审定财务报表 backend,因此一个模型可以单独命名 agent 它运行的人 在这个模型。 被拒绝时 roster_entry 设定 |
thinking | 没有 | 运行级推理控制; 不支持的有效后端拒绝显式值 |
backend | 没有 | 运行时后端( R)opencode-acp, (中文(简体) ), codex-app-server, (中文(简体) ), agy, (中文(简体) ), pi, (中文(简体) ), claude, (中文(简体) ), poo页:1 独立 agent 财务报告和审定财务报表 model;命名一个可以避免依赖运行时的默认值. 被拒绝时 roster_entry 设定 |
roster_file | 没有 | 高级名册地图的路径; 配对 roster_entry |
roster_entry | 没有 | 内键 roster_file。输入提供后端、代理和模式作为单一身份及其可选 thinking 只是默认。 名册模式拒绝 agent, (中文(简体) ), model,以及 backend |
server_url | 没有 | 后端服务器 URL,由 opencode-http 除非由环境配置 |
supervisor_id | 没有 | 多监管者设置的主管ID |
回返 { run_id, label, supervisor_id }编辑 run_id 这是你传递给其他工具.
直接模式和名册模式
使用两者 roster_file 财务报告和审定财务报表 roster_entry 用于名册模式。 名册文件中的每个条目都必须声明 backend 其中至少一个 agent 或者说 model。在名册模式下拨打电话也不能直接通过 agent, (中文(简体) ), model,或 backend 字段,因为条目提供了全部三个字段;拒绝的字段命名为下放字段。 直接模式允许所有三个身份字段独立省略,包括仅后端请求;省略了值使用运行时间默认.
{
"dir": "/repo",
"prompt": "Analyze the repository",
"roster_file": "/repo/roster.json",
"roster_entry": "planner"
}
名册地图很严格: system 和未知的条目域被拒绝。 一个入口 thinking 是默认的,所以是运行级别 thinking 仍然赢了。 无论适用哪一个值,都通过直接模式或名册条目选择的有效后端验证。 续会无法切换到不同的后端.
status
获取一个运行状态, 或者列出所有运行 。 使用紧凑 lifecycle 查看进度和等待检查的许可; full 仍然是兼容默认值.
| 参数 | 需求 | 说明 |
|---|---|---|
run_id | 没有 | 运行ID或标签查询 。 Omit 列出所有运行 . |
view | 没有 | 详细反应: lifecycle 或者说 full (默认) |
supervisor_id | 没有 | 多监管者设置的主管ID |
返回状态对象(或数组) status 作为其中之一 running, (中文(简体) ), waiting, (中文(简体) ), done, (中文(简体) ), failed, (中文(简体) ), timeout, (中文(简体) ), killed,或 unknown (未报告任何状况,或不承认的状况). done, (中文(简体) ), failed, (中文(简体) ), timeout 财务报告和审定财务报表 killed 终端; unknown 没有。 当一次运行因许可请求而受阻时,答复包括: pending_permission 选项.
result
等待运行完成并返回其完整的最终输出,没有记录或事件细节.
| 参数 | 需求 | 说明 |
|---|---|---|
run_id | 对 | 运行ID或标签等待 |
wait | 没有 | 等待终端结果( 默认) true(中文(简体) ) |
timeout | 没有 | 最多等待时间( 例如 30s 或者说 5m(中文(简体) ) |
supervisor_id | 没有 | 多监管者设置的主管ID |
终端响应包括: ready: true 财务报告和审定财务报表 output 当后端曝光时。 等待许可立即返回。 如果结果本身等待期满,则答复 ready: false 财务报告和审定财务报表 timed_out: true 没有改变运行.
answer_permission
响应暂停运行的许可提示 .
| 参数 | 需求 | 说明 |
|---|---|---|
run_id | 对 | 运行ID或标签 |
option_id | 对 | 选择( 从 pending_permission 显示于 status(中文(简体) ) |
request_id | 没有 | 特定许可请求ID. 如果省略, 从待决请求中自动发现 . |
message | 没有 | 写入回复文本, 仅在选定选项宣布时需要 requiresMessage: true |
supervisor_id | 没有 | 多监管者设置的主管ID |
回返 { ok: true } 在成功方面。 如果给定运行未等待许可请求, 则丢弃 .
message
向另一个运行发送消息,撤回一个待决请求,恢复一个已完成的运行,或者发送控制回复. 交叉变量的参数规则由共享路由器执行,所以在所选动作的字段集外的参数是一个错误而不是沉默的"不".
action | 所需字段 | 它会做什么 |
|---|---|---|
tell | target, (中文(简体) ), message | 在不创建询问边缘的情况下发送消息 |
ask | target, (中文(简体) ), message选项 timeout_ms | 传递信息等待回复 |
reply | reply_to, (中文(简体) ), message | 答一入道传. 从其索赔中答复了这一表面的询问;经纪人将这一消息传送回寄件人。 没有路由报告的信件 ID edge-absent |
resume | target, (中文(简体) ), message选项 label, (中文(简体) ), idempotency_key | 恢复其持续届会的完成运行 |
withdraw | message_id | 撤回待决请求 |
control_reply | target选项 payload | 在供应商支持的情况下发送控制回复 |
target 是一个运行的id,一个对等标签,或者 "self"。 。 。 . timeout_ms 必须是不超过共享询问盖的整数。 此工具不使用 supervisor_id;它与默认的主管有关。 路由器工具出错作为带有合同句子的 MCP 出错结果返回 code。 。 。 .
每个成功的结果都是蛇案中的共享契约对象(action, (中文(简体) ), outcome, (中文(简体) ), text,以及 message_id, (中文(简体) ), run_id, (中文(简体) ), label, (中文(简体) ), reply, (中文(简体) ), sentinel_file, (中文(简体) ), on_event 如果结果带有,则返回为结构化内容,合同句为文本内容,与Go MCP主机完全相同.
peers
列出可见代理会话,重命名运行,或读取运行中最后一个代理消息.
action | 字段 | 它会做什么 |
|---|---|---|
list (默认) | —— 说 | 列出可见的对等点 |
rename | name选项 session_id | 默认更改显示名称 |
last | target | 读取目标最后一个代理消息及其停止原因 |
last 只读。 这个地表从不发表自己的转折,所以 last 返回共享空结果。 此工具不使用 supervisor_id;它与默认的主管有关。 结构化的结果是 {peers}, (中文(简体) ), {renamed} 或者说 {last} 中,Go MCP主机返回的同一对象.
events
为运行获取事件日志 。 用来检查特工的行为.
| 参数 | 需求 | 说明 |
|---|---|---|
run_id | 对 | 运行ID或标签 |
types | 没有 | 按事件类型过滤(字符串阵列) |
limit | 没有 | 要返回的最大事件( 默认) 50最大点 1000(中文(简体) ) |
supervisor_id | 没有 | 多监管者设置的主管ID |
返回事件对象数组( R){ type, ts, ... }),按时间顺序排列.
kill
停止运行而不关闭主管。 其他运行和主管自己持续运行.
| 参数 | 需求 | 说明 |
|---|---|---|
run_id | 对 | 运行运行的ID或标签以终止 |
supervisor_id | 没有 | 多监管者设置的主管ID |
shutdown
停止检查,清理监控文件.
| 参数 | 需求 | 说明 |
|---|---|---|
supervisor_id | 没有 | 多监管者设置的主管ID |
force | 没有 | 强制关闭而不是优雅的(false (默认) |
回返 { ok: true, cleaned_up: [...] }。当您在会话中完成向导,或者当主管崩溃并需要重新启动时,使用此功能.
workflow
驱动一个持久的工作流程实例 。 一个 action 选择动词; 每个动作都有一个可选 supervisor_id 为多监督设置. 只读动作不需要允许; gate, (中文(简体) ), complete 财务报告和审定财务报表 cancel 保持他们的权力检查.
| 行动 | 参数 | 目的 |
|---|---|---|
status | workflow_id | 轻量级实例状态 |
inspect | workflow_id | 完整实例细节 |
events | workflow_id, (中文(简体) ), after_seq, (中文(简体) ), limit | 这个案例的日志事件 |
wait | workflow_id, (中文(简体) ), timeout | 等待终端状态或超时 |
ready | controller_id, (中文(简体) ), limit | 申请自动派送的候选人;不给予租约 |
controller_status | controller_id | 一个控制器的状态, 或者一个汇总列表没有它 |
gate | workflow_id, (中文(简体) ), node_id, (中文(简体) ), gate_id, (中文(简体) ), activation_id, (中文(简体) ), operation字段 | 记录停放的门的决定 awaiting_gate 激活 |
complete | workflow_id, (中文(简体) ), node_id, (中文(简体) ), activation_id, (中文(简体) ), attempt_id, (中文(简体) ), lease_id, (中文(简体) ), owner_token, (中文(简体) ), outcome, (中文(简体) ), outputs, (中文(简体) ), artifacts | 完成一台机器/外部交接激活 |
cancel | workflow_id, (中文(简体) ), actor, (中文(简体) ), reason | 取消整个实例( 最终) canceled(中文(简体) ) |
基本控制方法为 docs/control-protocol.md。 。 。 .
典型的工作流程
- 喷出一跑:
spawn(agent: "codex", dir: "/path/to/project", prompt: "audit the API routes for auth gaps") - 需要时检查生命周期:
status(run_id: "<id>", view: "lifecycle")用于进度或待决权限. - 如果请求许可: 运行
answer_permission与提供的选择. - 获取结果 :
result(run_id: "<id>")等待并返回完整的最终输出. - 必要时检查历史:
events(run_id: "<id>")返回最近发生的原始事件. - 斜率 :
message(action: "resume", target: "<id>", message: "now write tests for that") - 清理:
shutdown()当你完成.
软件包结构
@dougbots/avenor-mcp
├── @dougbots/avenor-core (workspace dep — supervisor, tool implementations)
├── @modelcontextprotocol/sdk (MCP server + transports)
└── hono (HTTP framework for SSE transport)
服务器是一个单一文件( N)src/mcp.ts,编译为 dist/index.js {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}通过Tsdown 这个 avenor-mcp bin 条目直接运行.