mcp文件门
后台子代理没有本机同步原语。此服务器允许一个子代理挂起并等待另一个子代理发出完成信号。
运作原理
信号文件存储在 /tmp/opencode-signals/ 作为 {signal_id}.signal等候代理轮询并查看目录;发送代理以原子方式写入文件。等待代理读取、删除并返回内容(消费语义)。
安装
需要 包子 ≥ 1.0.
git clone 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-filegateMCP配置
因为 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首先是文件,然后以原子方式重命名,因此观察者永远不会读取部分写入的文件。
