这个示例演示已有远程 MCP 服务时,如何通过 AgentRun MCP proxy 添加 Hook。
运行后会创建一个 MCP_REMOTE 工具,并配置:
proxyEnabled=truemcpProxyConfiguration.hooks[0].event=POST_CALL_TOOL- Hook URL 指向示例的
services/userhook服务
客户端仍然访问 AgentRun 数据面地址。AgentRun 会把 tools/call 的上游响应发给 Hook 服务,Hook 服务改写响应后再返回给客户端。
客户端
-> AgentRun 数据面 /tools/<tool>/mcp
-> AgentRun MCP proxy
-> 远程订单查询 MCP 服务 services/orderdesk
-> AgentRun 调用 Hook 服务 services/userhook
-> AgentRun 返回脱敏后的订单结果
需要本机已安装 Go,并准备有权限调用 AgentRun 和 FC 的阿里云账号凭证。
创建 .env:
cp .env.example .env填写:
ALIBABA_CLOUD_UID=你的阿里云账号 UID
ALIBABA_CLOUD_ACCESS_KEY_ID=你的 AccessKey ID
ALIBABA_CLOUD_ACCESS_KEY_SECRET=你的 AccessKey Secretgo run .示例会自动:
- 构建
services/orderdesk,部署为远程 MCP 服务。 - 构建
services/userhook,部署为 Hook 服务。 - 创建
MCP_REMOTEAgentRun 工具,并写入 Hook 配置。 - 等待工具和 proxy 函数就绪。
- 访问 AgentRun 数据面验证 Hook 效果。
成功后会输出类似信息:
tool=hook-quickstart-remote-...
tool_id=...
remote_mcp=https://...
hook=https://.../hook
data_plane=https://.../tools/<tool>/mcp
tools=get_order
order={"audit_id":"audit_...","phone":"138****5678",...}
示例不会自动清理测试资源。创建的 AgentRun Tool、远程 MCP FC 函数和 Hook FC 函数会保留,便于继续调试;不再需要时请到控制台手动删除。
示例会验证三件事:
tools/list能看到get_order。get_order能查询ORDER-1001。POST_CALL_TOOLHook 已把手机号、邮箱、收货地址脱敏,并注入audit_id。
按这个顺序改:
- 把
services/orderdesk换成你的 MCP 服务,继续暴露/mcp。 - 在
services/userhook中实现自己的 Hook 逻辑。 - 在
internal/demo/tool.go的buildHooks中调整 Hook 事件、描述、超时和认证 headers。 - 重新运行
go run .,通过data_plane地址验证最终效果。
创建远程 MCP 工具时,写入控制面的 protocolSpec 使用 mcpServers.default.transportType=streamable-http,并将 mcpServers.default.url 指向远程服务的 /mcp 端点;访问数据面时使用 AgentRun 生成的 .../tools/<tool>/mcp。
更完整的 Hook 协议和配置字段见 ../docs/users/hook.md。