状态:暂缓实现。 当前阶段只对上层提供 API。本文保留设计,供以后接入时使用;其中 MCP Gateway 本身会在 M2 先上线,承载内置工具
web_fetch和kb_*(§5)。
让 Agent 能查询(必要时操作)你的内部平台数据,同时做到:
claude CLI ──┐ MCP (Streamable HTTP) ┌─► 平台 A API (LAN)
├──► /mcp (AgentServer 进程内) ───┼─► 平台 B API (LAN)
codex ──────┘ Authorization: Bearer <run-token> └─► 本地资料索引 / web_fetch
一个内部平台对应一个连接器,以 TS 模块的形式放在 apps/server/src/connectors/<name>/:
export default defineConnector({
id: 'finance',
name: '家庭账本',
config: z.object({ baseUrl: z.string().url(), token: z.string() }), // 后台填写,token 加密存储
tools: [
defineTool({
name: 'query_transactions',
description: '按日期范围、分类查询收支流水,返回 JSON 行',
input: z.object({ from: z.string(), to: z.string(), category: z.string().optional() }),
access: 'read', // read: 自动放行;write: 必须审批
async run(input, { config, user, fetch }) { /* 调平台 API */ },
}),
defineTool({
name: 'create_budget',
access: 'write',
approvalTitle: i => `创建预算:${i.name} ¥${i.amount}`,
/* ... */
}),
],
})
工具命名规则:<connectorId>__<toolName>;在引擎侧显示为 mcp__gateway__finance__query_transactions。
workspace/.agent/data/<toolcall>.json|csv,返回摘要、行数和文件路径,再由 Agent 用 pandas 分析。这一点对数据分析场景很重要。access: 'write' 的工具被调用时,Gateway 自己调用 Interaction Service 发起 interaction.required,挂起 MCP 请求直到人工回复,再执行或返回拒绝。
这样不依赖引擎侧的审批机制,两个引擎行为一致。引擎侧(Claude 的 canUseTool)会把 mcp__gateway__* 加入自动放行,避免重复审批。
需要注意 MCP 请求的超时:引擎侧的 MCP 工具调用超时要调大(至少不低于交互超时),具体配置项在实现时核对。
| 工具 | 说明 | 期次 |
|---|---|---|
web_fetch |
抓取 URL → 清洗为 Markdown;拦截私网地址;遵守域名黑名单 | M2 |
kb_search |
本地资料库全文检索(见 07 §4.1) | M3 |
kb_list_roots |
列出当前 Profile 可用的资料库及说明 | M2 |
ask_user |
给 Codex 用的结构化提问(对齐 Claude 的 AskUserQuestion) | M2 |
ping())、最近调用情况config schema 自动生成,敏感字段只写不读