目录不变量Registry 回答“有哪些可考虑的能力以及治理状态”,Policy 与 Executor 回答“当前主体此刻能否调用并如何执行”。把发现结果当授权,会让缓存、语义检索和过期元数据变成越权通道。

统一目录,不强行统一所有能力形态

Model、Tool/MCP、Skill 与 Agent 可以共享身份、版本、Owner、风险和生命周期外壳,但消费契约不同。Model 关注模态、上下文、区域、价格和评测;Tool/MCP 关注输入输出 Schema、副作用、授权和幂等;Skill 关注触发、步骤、依赖和产物;Agent 关注任务能力、协议、异步状态与 SLO。统一目录不等于让四者共用一套稀疏字段。

能力类型的公共外壳与专有契约
类型选择时必须知道调用前仍需确认
Model模态、上下文、区域、版本、质量证据、成本租户授权、实时容量、数据政策
Tool / MCP动作、Schema、副作用、幂等、权限需求主体权限、目标资源、参数风险
Skill触发、步骤、依赖、预期产物、兼容 Runtime依赖能力与当次上下文是否合法
Agent任务能力、协议、输入输出、状态、SLO委托范围、远端身份、会话政策

MCP 2025-06-18 Tools 规范定义了工具发现、调用和列表变化通知;A2A 规范通过 Agent Card 描述 Agent 能力与安全方案。两者是互操作事实来源,但企业 Registry 还要叠加 Owner、租户准入、风险、成本和内部生命周期,不能直接把远端声明当批准记录。

Registry 保存控制面快照;实时延迟、错误率和熔断状态由运行系统产生,以引用或短 TTL 投影进入发现结果。Backstage 官方也明确提醒 Catalog 更适合作为汇聚和缓存层,而非所有动态关系的最终真源。这个边界能避免一次健康采集故障改写治理元数据。

每项能力的最小治理元数据

稳定 ID 不随名称、Owner 或部署地址变化;版本标识契约,而环境和 Endpoint 是部署实例。每项能力至少包含类型、语义描述、版本与兼容范围、环境和状态、Owner 与支持渠道、SLO 与成本、权限需求、数据分类、风险、地域、依赖、健康引用和替代能力。

// 教学用 TypeScript 契约,省略各类型的完整专有字段
interface CapabilityRecord {
  id: string;
  kind: 'model' | 'tool' | 'mcp-server' | 'skill' | 'agent';
  contractVersion: string;
  lifecycle: 'draft' | 'review' | 'approved' | 'limited' |
    'general' | 'deprecated' | 'retired';
  owner: { teamId: string; support: string };
  governance: {
    risk: 'low' | 'medium' | 'high';
    dataClasses: string[];
    regions: string[];
    requiredScopes: string[];
  };
  dependencies: Array<{ id: string; versionRange: string }>;
  healthRef: string;
  evidenceRefs: string[];
}

元数据字段必须标明权威来源和新鲜度。例如 Owner 来自组织目录,价格来自 Gateway/成本系统,SLO 来自服务契约,健康来自监控,评测来自发布流水线。允许 Owner 在 Git 流程中维护描述,不代表其可以自我批准高风险状态。

字段约束与失效策略
字段权威来源失效时处理
Owner / 支持组织目录与团队声明阻止升级到 general,触发认领
权限 / 风险 / 数据分类安全评审与 Policy 配置fail closed,不使用默认低风险
健康 / SLOTelemetry 与事故系统标记过期,路由侧按保守规则处理
成本Gateway 与财务价格版本显示时间戳,不用旧价格做预算承诺

从申请到退役的状态机

生命周期既控制可发现范围,也控制谁可以调用。draft 仅 Owner 可见;review 进入契约、安全和评测检查;approved 表示治理准入通过但未承诺规模;limited 面向白名单和受限容量;general 面向目标用户群并承担 SLO;deprecated 只允许存量和迁移;retired 从发现结果移除并拒绝新调用。

能力生命周期:任何推广都需要证据,退役必须完成消费方迁移
draft / review补齐契约、Owner、风险和测试证据。
approved / limited小范围调用,观察质量、SLO 与支持负担。
general公开服务契约、容量和变更政策。
deprecated / retired通知、替代、双版本窗口、阻断新消费。

状态变化由可验证条件驱动。Tool Schema 破坏性变化、权限扩大、数据分类提高、Owner 变化或供应链来源变化,都应回到相应审查。无人 Owner、长期不健康、依赖已退役或没有活跃消费方的能力进入治理队列,但自动化不应在没有影响分析时直接删除。

版本策略围绕契约兼容,而不是围绕部署次数。非破坏性元数据更新可以复用版本;输入输出、权限、副作用或完成语义变化需要新契约版本。运行 Trace 固定能力 ID 与版本,避免“同名最新版本”使历史不可复现。

发现到能力不等于可以信任

准入要验证来源与运行身份、代码或服务供应链、Schema、权限、副作用、数据边界、最低可靠性、Trace 和支持责任。第三方能力声明只能作为输入;平台需要验证签名、域名控制、发布者、依赖与实际 Endpoint 身份,并按租户、场景和权限限制。

能力准入证据与拒绝信号
门禁合格证据拒绝或降级信号
契约Schema、错误、版本与兼容测试自由文本参数、未声明破坏性变化
安全服务身份、最小权限、数据流与威胁审查共享长期密钥、权限范围不可解释
副作用readOnly/写入分类、幂等与回执用名称猜风险、写入无稳定资源 ID
运行SLO、Trace、容量、Runbook 与支持 Owner无监控、无人接警、健康来源过期
供应链来源、签名、制品摘要、依赖与变更记录来源不明、运行制品与审查版本不一致

A2A Agent Card 可以声明安全方案,MCP Tool 可以暴露注解,但声明不是执行授权。Registry 记录“该能力要求哪些凭据和范围”;运行时 Policy 根据当前用户、租户、资源、参数和环境作决定;Executor 在目标入口执行。三者分离后,即使目录缓存过期,也不会自动扩大权限。

高风险反模式根据 Tool 名称、描述或模型生成的摘要推断 read-only。副作用与权限必须来自经审查的机器可读元数据,并在执行端验证;描述文本可以被供应链攻击或 Prompt Injection 操纵。

同时服务人、Agent 与平台

发现分两步:先用租户、身份、环境、生命周期、数据地域和能力类型做确定性过滤,再在允许集合内做语义匹配与排序。这样能避免向模型泄露无权知道的能力描述,也避免向量检索把“近义但受限”的 Tool 排到前面。

列表接口返回稳定 ID、版本、短描述、风险摘要和获取完整契约的引用。只有进入候选集的少量能力才加载完整 Schema,减少 Context 成本。响应包含 Registry 修订号、能力版本、政策适用范围和过期时间;客户端缓存必须按租户与身份边界分区。

发现 API 的三类消费者
消费者需要的视图成功证据
开发者Owner、示例、版本、SLO、成本、支持能选中合适能力并完成接入
Agent Runtime允许集合、短描述、契约引用、风险低误选、低无结果、Context 可控
平台控制面依赖、状态、政策、健康与替代能做发布、阻断、迁移和影响分析

MCP 的列表变化通知提供了“能力集合已变化”的协议信号,但客户端仍需重新拉取并检查版本,不能把通知本身当完整变更。大规模目录采用修订号加增量变更流,同时保留周期性全量校准,以修复漏通知和消费者离线。

能力图支持变更影响分析

依赖边要说明来源能力、目标能力、版本范围、用途、是否运行时必需,以及最后一次观测。声明依赖用于发布前分析,运行 Trace 用于确认真实消费;两者不能互相替代。仅有 Trace 会漏掉低频和备用路径,仅有声明会保留已经消失的关系。

变更到消费方的影响闭环
变更分析迁移与验证
Tool Schema 破坏性变化找出固定旧版和使用变更字段的 Agent/Skill双版本窗口、契约回归、旧版调用归零
模型退役按任务、质量门槛、区域与预算找消费者离线 Eval、影子流量、Fallback 演练
政策收紧识别新增授权或数据约束的调用链通知 Owner、修复用途与权限、阻断例外
事故禁用定位直接与传递依赖、活跃 Run 和替代路径kill switch、在途处置、恢复后灰度

退役计划必须给出替代能力、兼容差异、迁移截止、支持 Owner 和阻断日期。到期前同时观察声明依赖、实际调用和未完成 Run;只有消费归零或例外获批,才进入 retired。事故中的紧急禁用要与正常退役分离,它优先止损,但仍需保留决定、影响面和恢复条件。

目录自身也需要运营指标

Registry 的产品目标是缩短可信能力的发现与变更时间,而不是最大化条目数。目录质量看无 Owner、重复/近义、过期健康、缺失风险、版本漂移和已退役仍被调用;发现质量看成功率、误选率、无结果率、完整契约加载量和从发现到首次成功调用的 Lead Time。

目录运营指标与行动
指标解释触发行动
无 Owner / 失联 Owner事故与变更无人负责限制推广、认领或退役
误选率 / 无结果率描述、过滤、同义词或能力供给有缺口修元数据、检索评测或建设能力
准入与变更 Lead Time门禁可能过重或证据自动化不足自动收集,不降低风险底线
私接能力比例Golden Path 缺能力、太慢或限制不合理访谈逃逸原因并调整产品边界
废弃完成率依赖图与迁移治理是否有效补齐 Owner、通知和阻断机制

分类实践应选一个 Model、一个有副作用 Tool、一个 Skill 和一个远程 Agent,完成元数据登记、准入、发现、调用授权、破坏性变更和紧急禁用演练。证据包括 Schema、审查决定、发现响应、Trace、依赖影响清单、迁移记录和最终消费归零,而不是四张目录截图。

主动提取:为什么确定性过滤必须先于语义检索?
过滤先移除当前租户、身份、环境和生命周期下不可见的能力,语义检索只在允许集合内排序。反过来会泄露受限描述,并可能让近义但未授权能力成为候选。
迁移判断:Registry 显示 Tool 为 approved,Runtime 能直接调用吗?
不能。approved 只说明治理准入;Runtime 仍要按当前用户、租户、资源、参数、用途与环境取得授权,并由执行入口落实。
运营判断:目录条目持续增长为什么可能是坏信号?
条目增长可能来自重复、无人维护和退役失败。应结合发现成功、误选、Owner 完整、私接比例、准入 Lead Time 与废弃完成率判断价值。

资料与事实边界

以下以官方文档、标准、论文和原始工程资料为主。厂商 API、价格、限额与模型能力会变化,落地时仍需按目标版本做能力探测和回归。

  1. Model Context Protocol 2025-06-18:Tools — Tool 发现、调用、注解与列表变化通知
  2. A2A Protocol:Specification — Agent Card、Skill、接口与安全方案声明
  3. Backstage:Software Catalog — Owner、元数据、发现和 Git 管理模式
  4. Backstage:Creating the Catalog Graph — Catalog 作为汇聚/缓存层而非全部动态事实真源
  5. SLSA:Specification — 制品来源、构建证明与供应链完整性框架