转向mcp网络
将单个代理请求转化为持久的人在环对话。
turn-mcp-web 是一个带有浏览器控制台的自托管MCP服务器。一位代理人打来电话 turn.wait,执行暂停,人类在web UI中回复,并且相同的运行继续进行而不重新开始。
 ](https://nodejs.org)
预览
为什么它存在
大多数代理集成将人工检查点视为死胡同:
- 模型问了一个问题
- 跑步停止了
- 下一条消息以部分上下文开始新的运行
turn-mcp-web 将该检查点保持在同一个执行循环内。
work -> turn.wait -> human reply -> work -> turn.wait -> human reply这使得它在审批、分支决策、操作员切换、审查队列和长时间运行的辅助工作流中非常有用。
所得
- MCP工具别名:
turn.wait,turn_wait,turn - 实时回复浏览器控制台
- IDE MCP客户端的流式HTTP传输
- 生成MCP服务器的桌面客户端的stdio入口点
- 用于Python和非MCP代理框架的REST长轮询API
- 持久历史记录和事件日志
- webhook和Telegram通知
- 操作员和查看者API角色
- 会话列表、快速回复、超时控制和实时SSE更新
- 单命令本地启动
快速开始
macOS
双击 start.command
视窗
双击 start.bat
Linux
bash start.sh源自
npm install
npm run build
npm startWeb控制台: http://127.0.0.1:3737/\ MCP端点: http://127.0.0.1:3737/mcp
核心工作流程
- 启动服务器。
- 将您的MCP客户端连接到
http://127.0.0.1:3737/mcp或者启动stdio入口点。 - 交给代理人
skills/turn-mcp-web/SKILL.md因此,它将面向用户的检查点路由通过turn.wait. - 当代理暂停时,在浏览器控制台中回答。
- 同一代理运行将随您的回复继续。
客户端设置
可流式传输的HTTP
将其用于支持远程HTTP服务器的Cursor、Windsurf、VS Code、Claude Code、Antigravity和其他MCP客户端。
{
"mcpServers": {
"turn-mcp-web": {
"url": "http://127.0.0.1:3737/mcp"
}
}
}风帆用途 serverUrl 而不是 url.
标准
当客户端将MCP服务器作为本地子进程启动时,请使用此选项。
{
"mcpServers": {
"turn-mcp-web": {
"command": "node",
"args": ["/absolute/path/to/dist/server-stdio.js"]
}
}
}stdio进程仍然在端口上打开相同的web控制台 3737.
python
当您的框架不直接使用MCP时,请使用捆绑的Python客户端。
pip install ./python-clientfrom turn_mcp_client import TurnMcpClient, TurnMcpCanceled, TurnMcpTimeout
client = TurnMcpClient("http://127.0.0.1:3737")
try:
reply = client.wait(
context="About to apply a production migration.",
question="Should I proceed?",
options=["Proceed", "Show SQL", "Cancel"],
agent_name="MigrationAgent",
)
print(reply)
except TurnMcpTimeout:
print("No reply before timeout.")
except TurnMcpCanceled:
print("Canceled by operator.")更多示例: python-client/README.md
代理合同
向代理提供以下文件之一:
这些文件告诉代理人使用 turn.wait 作为通信边界,而不是直接回复。
API
公共
GET /healthzGET /api/public-config
会话和等待控制
GET /api/waitsGET /api/waits/:idPOST /api/waits/:id/respondPOST /api/waits/:id/cancelPOST /api/waits/:id/extendPOST /api/waits/cancel-allPOST /api/waits/create-and-wait
历史与事件
GET /api/historyGET /api/history/timelineGET /api/eventsGET /api/stream
运行时管理
GET /api/auth-checkGET /api/sessionsPOST /api/settingsPOST /api/auto-configurePOST /api/auto-unconfigure
环境
| 变量 | 默认值 | 用途 |
|---|---|---|
TURN_MCP_HTTP_HOST | 127.0.0.1 | HTTP绑定主机 |
TURN_MCP_HTTP_PORT | 3737 | HTTP绑定端口 |
TURN_MCP_HTTP_PATH | /mcp | MCP端点路径 |
TURN_MCP_DEFAULT_TIMEOUT_SECONDS | 600 | 默认等待超时 |
TURN_MCP_API_KEY | unset | 操作员键 |
TURN_MCP_VIEWER_API_KEY | unset | 查看器键 |
TURN_MCP_REQUIRE_API_KEY | 自动 | 启用身份验证 |
TURN_MCP_EVENT_LOG_FILE | unset | JSONL事件日志路径 |
TURN_MCP_HISTORY_FILE | unset | JSONL历史路径 |
TURN_MCP_WEBHOOK_URL | 未设置 | 出站webhook目标 |
TURN_MCP_WEBHOOK_EVENTS | unset | 逗号分隔的webhook事件 |
TURN_MCP_WEBHOOK_SECRET | 未设置 | HMAC签名密钥 |
TURN_MCP_WEBHOOK_FORMAT | json | json, slack,或 discord |
TURN_MCP_TELEGRAM_BOT_TOKEN | unset | 电报机器人令牌 |
TURN_MCP_TELEGRAM_CHAT_ID | 未设置 | 电报目标聊天 |
TURN_MCP_TELEGRAM_EVENTS | wait_created | 电报事件过滤器 |
TURN_MCP_RATE_LIMIT_MAX | 120 | 每个IP的请求 |
TURN_MCP_RATE_LIMIT_WINDOW_SECONDS | 60 | 速率限制窗口 |
TURN_MCP_MAX_CONCURRENT_WAITS_PER_SESSION | 10 | 每会话并发上限 |
TURN_MCP_REINFORCEMENT_SUFFIX | 内置 | 附加提醒文本 |
认证
默认情况下,Auth处于关闭状态。启用后,发送以下任一标头:
x-turn-mcp-api-key:
Authorization: Bearer 角色:
operator:完全控制viewer:只读检查和上交所认购
码头工人
docker build -t turn-mcp-web .
docker run --rm -p 3737:3737 \
-e TURN_MCP_HTTP_HOST=0.0.0.0 \
-e TURN_MCP_API_KEY=your_key \
turn-mcp-web编写文件:
仓库的规划
src/ TypeScript server
public/ Browser console
python-client/ Python client package
assets/ README screenshots and demo video贡献
许可证
麻省理工学院
