这个示例演示 MCP 服务需要托管在 AgentRun 代码包中时,如何同时开启 MCP proxy 并配置 Hook。
运行后会创建一个 CODE_PACKAGE 工具,并配置:
proxyEnabled=truemcpProxyConfiguration.hooks[0].event=POST_CALL_TOOL- Hook URL 指向示例的
services/userhook服务 - 代码包来自
services/orderdesk编译后的可执行文件
客户端仍然访问 AgentRun 数据面地址。AgentRun 会先调用代码包 MCP 服务,再把 tools/call 的上游响应交给 Hook 服务改写。
客户端
-> AgentRun 数据面 /tools/<tool>/mcp
-> AgentRun MCP proxy
-> AgentRun 托管的代码包 MCP 服务 services/orderdesk
-> AgentRun 调用 Hook 服务 services/userhook
-> AgentRun 返回脱敏后的订单结果
需要本机已安装 Go,并准备有权限调用 AgentRun、FC 和 FC TempBucket 的阿里云账号凭证。
创建 .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。 - 将
orderdesk打包为代码包并上传到 FC TempBucket。 - 构建并部署
services/userhook作为 Hook 服务。 - 创建
CODE_PACKAGEAgentRun 工具,并写入 Hook 配置。 - 等待主函数和 proxy 函数就绪。
- 访问 AgentRun 数据面验证 Hook 效果。
成功后会输出类似信息:
tool=hook-quickstart-code-...
tool_id=...
hook=https://.../hook
data_plane=https://.../tools/<tool>/mcp
tools=get_order
order={"audit_id":"audit_...","phone":"138****5678",...}
示例不会自动清理测试资源。创建的 AgentRun Tool、FC 函数和 FC TempBucket 代码包会保留,便于继续调试;不再需要时请到控制台手动删除。
示例会验证三件事:
tools/list能看到get_order。get_order能查询ORDER-1001。POST_CALL_TOOLHook 已把手机号、邮箱、收货地址脱敏,并注入audit_id。
按这个顺序改:
- 把
services/orderdesk换成你的 MCP 服务,保持监听9000并暴露/mcp。 - 在
services/userhook中实现自己的 Hook 逻辑。 - 在
internal/demo/tool.go的newCodeToolInput中确认代码包启动命令、运行端口和语言配置。 - 在
internal/demo/tool.go的buildHooks中调整 Hook 事件、描述、超时和认证 headers。 - 重新运行
go run .,通过data_plane地址验证最终效果。
更完整的 Hook 协议和配置字段见 ../docs/users/hook.md。