Lattice Hub 文档
最佳实践

Agent 能力发现

把 MCP Server 与 A2A Agent 作为控制面资源注册、缓存、鉴权与发现的完整实践。

Agent 能力发现不是把服务列表塞进提示词,而是把 MCP Server、Tool、A2A Agent 和 Skill 当作与服务、规则同级的控制面资源。这样发现能力时可以复用注册、缓存、权限和审计链路。

目标架构

  1. 平台在 Console / API 注册 MCP Server 或 A2A Agent Card。
  2. 数据进入 store,并由 CacheManager 增量刷新。
  3. Agent 运行时或 Pole Agent 通过 Registry / MCP 接口查询能力目录。
  4. 鉴权策略限制谁可以读哪些 Server、Tool 或 Agent。
  5. 变更可审计;目录具备稳定 revision / 版本语义。

注册 MCP Server

在 Console 的 MCP Registry:

  1. 选择正确的 Namespace(运行环境)。
  2. 创建 MCP Server,填写名称、协议与业务元数据。
  3. 维护 Tool 列表与后端绑定。
  4. 确认缓存已刷新,列表查询可见。
  5. 给调用方主体授予最小读权限。

控制面 HTTP 装配会打开 MCP 缓存,并暴露 SSE 入口(实现路径以 /ai/mcp/v1/sse 为基线)。Pole Agent 只允许调用白名单工具,例如:

  • list_namespaces
  • list_mcp_servers
  • list_mcp_server_tools
  • get_config_file
  • search_config_files

未在白名单中的工具不会被 Agent 使用。

注册 A2A Agent

A2A Registry 当前只承担:

  • Agent Card
  • 技能(Skill)
  • 协议接口
  • 能力元数据

不承担任务代理、会话编排或 Agent Runtime。实践中把它当作“可发现的能力名片”,而不是执行引擎。

操作建议:

  1. 先定义 Agent 对外技能边界。
  2. 在 Registry 登记 Card 与 skills。
  3. 与后端服务、MCP Server 的关系写清楚,避免双份目录。
  4. 权限上区分“登记者”和“发现者”。

Pole Agent 使用边界

Pole Agent 是 Console 的一等对话入口,适合:

  • 查询 Namespace、MCP、配置等只读问题
  • 生成配置修改提案并预览差异
  • 在人工确认后保存草稿

不适合也不被允许:

  • 自动发布配置或治理规则
  • 直接删除生产资源
  • 绕过鉴权访问未授权资源

配置写路径:读取 → 提案 → 预览 → 哈希/并发检查 → 用户确认 → 仅保存草稿 → 用户在配置中心发布。

实际配置是什么

社区 e2e 载荷(pole-control-plane/test/e2e/internal/e2e/fixtures.go):

MCP Server

{
  "name": "demo-mcp",
  "namespace": "default",
  "protocol": "MCP_PROTOCOL_SSE",
  "backend_type": "service",
  "backend_service": { "namespace": "default", "name": "gateway" },
  "tools": [{
    "name": "orders.query",
    "description": "query orders",
    "input_schema": {
      "type": "object",
      "properties": { "id": { "type": "string" } }
    }
  }]
}

A2A Agent(Registry 名片,不执行任务)

{
  "name": "demo-a2a",
  "namespace": "default",
  "source_type": "custom",
  "backend": { "type": "service", "namespace": "default", "service": "gateway" },
  "agent_card": {
    "name": "demo-a2a",
    "description": "demo card",
    "version": "1.0.0",
    "url": "http://127.0.0.1/a2a",
    "skills": [{ "id": "order-query", "name": "Order Query", "description": "query orders" }]
  },
  "skills": [{ "id": "order-query", "name": "Order Query", "description": "query orders" }]
}

主要 API:/ai/mcp/v1/servers/ai/a2a/v1/agents/ai/a2a/v1/agents/{id}/card/ai/mcp/v1/server/tools。SSE 基线:/ai/mcp/v1/sse

社区 Demo

入口说明
e2epole-control-plane/test/e2e/console_api:MCP/A2A CRUD + card/skills
Agent 烟测console/web/scripts/smoke-agent-workbench.mjs:提案→确认只改草稿
授权契约console/web/scripts/verify-ai-resource-authorization.mjs
ConsoleMCPA2APole Agent
# 控制面仓库
CGO_ENABLED=0 go test -tags=e2e ./test/e2e/console_api/... -count=1 -run MCP
POLE_BASE_URL=http://127.0.0.1:8080 node console/web/scripts/smoke-agent-workbench.mjs

怎么触发验证

# 登录后(Authorization)
curl -sS -X POST "$BASE/ai/mcp/v1/servers" -H 'Content-Type: application/json' \
  -H "Authorization: $TOKEN" \
  -d @mcp-server.json | jq '{code,info}'

curl -sS "$BASE/ai/mcp/v1/servers?namespace=default&offset=0&limit=20" \
  -H "Authorization: $TOKEN" \
  | jq '.data[]? | {name,namespace,protocol}'

curl -sS -X POST "$BASE/ai/a2a/v1/agents" -H 'Content-Type: application/json' \
  -H "Authorization: $TOKEN" \
  -d @a2a-agent.json | jq '{code,info}'

Console:/ai/mcps/ai/a2a 新建 → 详情核对 tools / skills / card。
Pole Agent:对话改配置 → 确认后到配置中心看草稿,active release 不应自动变化。

效果是什么

步骤预期效果
创建 MCP列表出现 Server;/server/tools 能列出 orders.query
创建 A2A列表出现 Agent;/agents/{id}/card 返回 skills
鉴权收紧无权限主体读目录失败(资源类型 MCPServerResources / A2AAgentResources
Agent 确认写配置仅保存草稿;须人工在配置中心发布才对客户端可见
删除资源目录与缓存不再返回该 Server/Agent

与服务治理对齐

实践原因
MCP/A2A 进入统一 API / store / cache避免第二套目录漂移
发现请求走鉴权Agent 也是主体,不是超级用户
目录带 revision客户端可判断是否需要刷新
与 Service 绑定清晰Tool/Agent 最终仍落到可治理的后端

检查清单

  • MCP/A2A 资源落在正确 Namespace
  • Tool / Skill 描述足够让调用方理解边界
  • 缓存与 Console 列表一致
  • 读权限已收敛
  • Pole Agent 白名单与 LLM 配置按需启用
  • 文档与演示未声称 A2A 可执行任务编排

深入阅读

On this page