文件信号同步服务

为OpenCode多代理工作流提供基于文件的信号同步服务,实现代理间的协调与通信。

  • by ultism
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 ultranationalism/mcp-filegate

使用说明

mcp文件门

提供基于文件的信号同步的MCP服务器 开源代码 / 哦,我的开放代码 多代理工作流。

后台子代理没有本机同步原语。此服务器允许一个子代理挂起并等待另一个子代理发出完成信号。

运作原理

信号文件存储在 /tmp/opencode-signals/ 作为 {signal_id}.signal等候代理轮询并查看目录;发送代理以原子方式写入文件。等待代理读取、删除并返回内容(消费语义)。

安装

需要 包子 ≥ 1.0.

git clone <this-repo> mcp-filegate
cd mcp-filegate
bun install
bun link        # installs `mcp-filegate` command globally (~/.bun/bin/)

验证:

echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | mcp-filegate

MCP配置

因为 bun link 将二进制文件放在您的 PATH,不需要绝对路径:

{
  "mcpServers": {
    "filegate": {
      "command": "mcp-filegate"
    }
  }
}

如果您更喜欢直接引用源代码而不安装:

{
  "mcpServers": {
    "filegate": {
      "command": "bun",
      "args": ["/path/to/mcp-filegate/src/index.ts"]
    }
  }
}

工具

wait_signal

阻塞,直到出现指定的信号文件,然后读取、删除并返回其内容。

参数 类型 默认值 说明
signal_id string -- 唯一信号标识符
timeout_ms number 300000 最大等待时间(毫秒)

以文本形式返回文件内容,或在超时时返回错误消息。

send_signal

原子性地写入信号文件以通知正在等待的子代理。

参数 类型 说明
signal_id string 唯一信号标识符
data string 要传递的内容(推荐JSON字符串)

list_signals

列出所有未使用的信号文件及其创建时间戳。可用于调试卡住的工作流。

cancel_signal

删除未使用的信号文件。

参数 类型 说明
signal_id string 取消信号

使用模式

代理人A (制片人)完成工作并通知代理人B:

send_signal({ signal_id: "build-complete", data: JSON.stringify({ status: "ok", artifact: "dist/app.js" }) })

代理人B (消费者)暂停,直到信号到达:

wait_signal({ signal_id: "build-complete", timeout_ms: 120000 })

实现注意事项

  • wait_signal 用途 fs.watch 用于低延迟通知和2秒轮询回退处理 fs.watch 某些Linux文件系统上的事件丢失。
  • send_signal 写信给a .tmp 首先是文件,然后以原子方式重命名,因此观察者永远不会读取部分写入的文件。