智能体的人类可读名称。
会显示在市场列表和客户端界面中。保持简短且具体——客户端会将其作为比较候选智能体时的主要标签。
常见错误: 使用像“AI Assistant”这样的通用名称,让路由系统无从区分。
"name": "地理空间路径规划智能体"
Schema 参考 · 14 fieldsA2A v1.0
Agent Card 是标准化的 JSON 文档,用于告知 A2A 客户端:这个智能体是谁、去哪里联系它、它能做什么,以及访问如何被保护。本参考涵盖每一个 v1.0 字段的类型、必填要求、示例,以及校验器最常捕获的错误。
发现机制是如何工作的
A2A 客户端从 well-known URI 获取 Agent Card,对照自己的任务评估技能、能力与安全要求,然后调用首选接口——即 supportedInterfaces 中的第一项。如果 capabilities.extendedAgentCard 为 true,经过身份验证的客户端可以通过 GetExtendedAgentCard 操作请求更丰富的 Agent Card。
规范将 /.well-known/agent-card.json 注册为标准位置。较旧的 v0.x 部署使用 /.well-known/agent.json,这也是我们的校验器会同时检查两者的原因。
# Fetch a public Agent Card
GET /.well-known/agent-card.json HTTP/1.1
Host: agent.example.com
HTTP/1.1 200 OK
Content-Type: application/a2a+json
{
"name": "GeoSpatial Route Planner Agent",
"supportedInterfaces": [
{ "url": "https://georoute-agent.example.com/a2a/v1",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0" }
],
...
}字段参考
必填标记遵循官方规范中的 v1.0 protobuf 定义。锚点链接让每个字段都可以在 issue、评审和 CI 输出中被引用。
智能体的人类可读名称。
会显示在市场列表和客户端界面中。保持简短且具体——客户端会将其作为比较候选智能体时的主要标签。
常见错误: 使用像“AI Assistant”这样的通用名称,让路由系统无从区分。
"name": "地理空间路径规划智能体"
智能体做什么,以及其他智能体何时应该调用它。
这是人类集成者和基于 LLM 的路由系统判断你的智能体是否适合某项任务的主要自由文本信号。请说明任务领域、关键能力和边界。
常见错误: 少于 20 个字符的一行式描述。路由系统无法匹配你没有描述的内容。
"description": "提供高级路线规划、交通分析和自定义地图生成服务。"
端点与协议绑定的有序列表。第一项为首选。
v1.0 新增:取代了旧版顶层的 url、preferredTransport 和 additionalInterfaces 字段。每一项都声明自己的 url、protocolBinding(JSONRPC、GRPC、HTTP+JSON,或自定义绑定 URI)、protocolVersion,以及可选的租户路由键——因此一个智能体可以同时服务多个协议版本和传输方式。
常见错误: 声明了服务器实际上并未在该 URL 上提供的绑定——规范要求每一项都必须准确。
"supportedInterfaces": [
{ "url": "https://api.example.com/a2a/v1",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0" }
]谁在运营这个智能体:组织与网站。
面向市场和企业审计的信任信号。v1.0 将 name 字段重命名为 organization;当该对象存在时,其内部的 url 是必填的。
常见错误: 仍在使用 provider.name(v1.0 之前的字段)。读取 v1.0 Agent Card 的校验器将无法识别它。
"provider": {
"organization": "示例地理服务公司",
"url": "https://www.examplegeoservices.com"
}智能体自身的版本,而不是协议版本。
让客户端能够检测到 Agent Card 何时发生了实质性变化,并重新评估兼容性。遵循你自己的发布方案,通常是 semver。
常见错误: 把它和 A2A 协议版本混淆——协议版本现在位于每个 supportedInterfaces 条目中。
"version": "1.2.0"
指向智能体人类可读文档的链接。
为集成者提供一个阅读完整 API 契约、速率限制以及不属于发现文档内容的条款的地方。
常见错误: 指向营销首页,而不是技术文档。
"documentationUrl": "https://docs.example.com/agent"
协议功能标志:streaming、pushNotifications、extensions、extendedAgentCard。
客户端不得调用你未声明的功能——对未声明的流式调用会返回错误。extendedAgentCard: true 表示可通过 GetExtendedAgentCard 操作获取更丰富的经身份验证 Agent Card。v1.0 移除了 stateTransitionHistory。
常见错误: 在服务器没有流式端点的情况下声明 streaming: true。客户端会调用它并失败。
"capabilities": {
"streaming": true,
"pushNotifications": true,
"extendedAgentCard": false
}命名的身份验证方案:API 密钥、HTTP 认证、OAuth 2.0、OpenID Connect,或双向 TLS。
每个命名方案包裹一个具体的方案对象(apiKeySecurityScheme、httpAuthSecurityScheme、oauth2SecurityScheme、openIdConnectSecurityScheme、mtlsSecurityScheme)。客户端由此了解如何进行身份验证——凭据本身总是通过带外方式获取。
常见错误: 在 Agent Card 中嵌入实际的 API 密钥或令牌。Agent Card 是一份公开文档。
"securitySchemes": {
"google": {
"openIdConnectSecurityScheme": {
"openIdConnectUrl": "https://accounts.google.com/.well-known/openid-configuration"
}
}
}调用该智能体需要哪些已声明的方案(及作用域)。
每一项都将 securitySchemes 中的一个方案名映射到它所需的作用域,与 OpenAPI 的安全要求模式类似。对于刻意公开的智能体,可以完全省略这两个字段。
常见错误: 声明了 securitySchemes 却没有 security 要求,让客户端只能猜测是否强制执行身份验证。
"security": [{ "google": ["openid", "profile", "email"] }]智能体在所有技能中接受的媒体类型。
标准 MIME 类型,如 text/plain、application/json 或 image/png。各个技能可以用自己的 inputModes 进行覆盖。
常见错误: 省略该字段。它在 v1.0 中是必填的——客户端需要它来构造请求。
"defaultInputModes": ["application/json", "text/plain"]
智能体在所有技能中返回的媒体类型。
告诉调用方应该期待文本、结构化 JSON、图片还是文件。技能可以用 outputModes 按技能级别覆盖。
常见错误: 在智能体实际返回结构化产物时,却只列出 text/plain。
"defaultOutputModes": ["application/json", "image/png"]
该智能体很可能成功完成的具体能力。
每个技能都需要 id、name、description 和 tags;examples、按技能的模式以及按技能的安全设置都是可选的。技能是发现的基本单元——路由系统会将任务与它们匹配,因此每个技能都应限定在单一的任务边界内。
常见错误: 没有标签的技能。标签在 v1.0 中成为必填项,并驱动技能级别的匹配。
"skills": [{
"id": "route-optimizer-traffic",
"name": "感知交通的路线优化器",
"description": "使用实时交通信息计算最优驾车路线……",
"tags": ["maps", "routing", "traffic"],
"examples": ["规划一条从 A 到 B 且避开收费站的路线。"]
}]证明该 Agent Card 由提供方签发的 JSON Web 签名。
每个签名都带有一个 base64url 编码的受保护 JWS 头和签名值,计算基于经 RFC 8785(JCS)规范化后的 Agent Card。客户端在信任从公开网络获取的 Agent Card 之前,应当验证至少一个签名。
常见错误: 签名之后又编辑了任意字段——即便是空白字符层面无关紧要的值变更也会使 JWS 失效。
"signatures": [{
"protected": "eyJhbGciOiJFUzI1NiIs...",
"signature": "QFdkNLNszlGj3z3u0YQ..."
}]代表该智能体的图标 URL。
供目录和客户端界面使用。请通过 HTTPS 从一个稳定的位置提供它。
常见错误: 链接到另一个不受信任的域名上的图标,该图标可能在你的列表背后被悄悄更改。
"iconUrl": "https://agent.example.com/icon.png"
版本迁移
如果你的 Agent Card 仍然带有顶层的 url 或 preferredTransport,说明它早于 v1.0。校验器会自动标记这两者。
| v0.x 字段 | v1.0 替代方案 | 变更原因 |
|---|---|---|
| url | supportedInterfaces[0].url | 首选端点现在就是第一个接口条目。 |
| preferredTransport | supportedInterfaces[] ordering | 偏好通过数组顺序表达,而不再是单独的字段。 |
| additionalInterfaces | supportedInterfaces[] | 所有接口都存放在一个有序数组中。 |
| protocolVersion (top level) | supportedInterfaces[].protocolVersion | 每个接口声明自己的协议版本,从而支持多版本共存。 |
| supportsAuthenticatedExtendedCard | capabilities.extendedAgentCard | 移入了 capabilities 对象;对应的 RPC 被重命名为 GetExtendedAgentCard。 |
| provider.name | provider.organization | 为了更清晰而重命名。 |
| capabilities.stateTransitionHistory | — removed | 不属于 v1.0;如有需要,可将等效行为建模为扩展。 |
样板代码
把这些接口放进客户端、服务端或 CI 检查中,即可以类型安全的方式解析和生成 Agent Card。它们与官方规范仓库中的 protobuf 定义一致,采用 Agent Card 实际发布时的 camelCase JSON 形式。
更想手写 Agent Card?生成器产出的正是这种确切结构。
// A2A v1.0 Agent Card — TypeScript definitions
export interface AgentCard {
name: string
description: string
supportedInterfaces: AgentInterface[]
provider?: AgentProvider
version: string
documentationUrl?: string
capabilities: AgentCapabilities
securitySchemes?: Record<string, SecurityScheme>
security?: Record<string, string[]>[]
defaultInputModes: string[]
defaultOutputModes: string[]
skills: AgentSkill[]
signatures?: AgentCardSignature[]
iconUrl?: string
}
export interface AgentInterface {
url: string
protocolBinding: 'JSONRPC' | 'GRPC' | 'HTTP+JSON' | (string & {})
protocolVersion: string
tenant?: string
}
export interface AgentProvider {
organization: string
url: string
}
export interface AgentCapabilities {
streaming?: boolean
pushNotifications?: boolean
extensions?: AgentExtension[]
extendedAgentCard?: boolean
}
export interface AgentExtension {
uri: string
description?: string
required?: boolean
params?: Record<string, unknown>
}
export interface AgentSkill {
id: string
name: string
description: string
tags: string[]
examples?: string[]
inputModes?: string[]
outputModes?: string[]
}
export interface AgentCardSignature {
protected: string
signature: string
header?: Record<string, unknown>
}
export type SecurityScheme =
| { apiKeySecurityScheme: { location: 'header' | 'query' | 'cookie'; name: string; description?: string } }
| { httpAuthSecurityScheme: { scheme: string; bearerFormat?: string; description?: string } }
| { oauth2SecurityScheme: { flows: Record<string, unknown>; oauth2MetadataUrl?: string; description?: string } }
| { openIdConnectSecurityScheme: { openIdConnectUrl: string; description?: string } }
| { mtlsSecurityScheme: Record<string, never> }完整性
由于 Agent Card 是从公开网络上获取的,v1.0 将签名机制正式化:Agent Card(去除 signatures 字段和默认值后)先按 RFC 8785 JSON 规范化处理,再以 JWS 形式签名。客户端在依据 Agent Card 采取行动之前,应当通过 kid/jku 头部或受信任的密钥库验证至少一个签名。多重签名支持密钥轮换。
通过 HTTPS 在 /.well-known/agent-card.json 提供该 Agent Card。
每一个 supportedInterfaces 条目都可访问,并且确实使用了所声明的绑定方式。
技能带有必填标签以及边界清晰的描述。
声明的能力与服务器实际情况相符——未声明的功能必须返回错误,已声明的功能必须真正可用。
securitySchemes 描述了如何进行身份验证;Agent Card 中任何地方都不出现凭据。
每当 Agent Card 内容发生变化时,都提升 version。
一个带有 OAuth 2.0、流式传输和推送通知的客服智能体——所有必填字段一应俱全。更多模式可以在示例库中找到。
{
"name": "客服智能体",
"description": "回答客户支持问题、获取订单上下文,并将未解决的问题升级给人工团队。",
"supportedInterfaces": [
{
"url": "https://api.example.com/a2a/customer-support",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"provider": {
"organization": "示例公司",
"url": "https://example.com"
},
"version": "1.0.0",
"capabilities": {
"streaming": true,
"pushNotifications": true,
"extendedAgentCard": false
},
"defaultInputModes": [
"text/plain",
"application/json"
],
"defaultOutputModes": [
"text/plain",
"application/json"
],
"skills": [
{
"id": "resolve-customer-support-request",
"name": "处理客户支持请求",
"description": "对客户支持请求进行分类、收集所需上下文、提出解决方案,并在置信度较低时升级处理。",
"tags": [
"support",
"orders",
"returns"
],
"examples": [
"帮我退掉这个订单。"
]
}
],
"securitySchemes": {
"oauth2": {
"oauth2SecurityScheme": {
"flows": {
"clientCredentials": {
"tokenUrl": "https://api.example.com/a2a/customer-support/oauth/token",
"scopes": {
"agent.invoke": "Invoke agent skills"
}
}
}
}
}
},
"security": [
{
"oauth2": [
"agent.invoke"
]
}
]
}常见问题
决定 Agent Card 能否通过评审的版本变更、发现字段和发布细节。
v1.0 将 url、preferredTransport 和 additionalInterfaces 合并为一个有序的 supportedInterfaces 数组,其中每一项都声明自己的 url、protocolBinding 和 protocolVersion。supportsAuthenticatedExtendedCard 迁移到了 capabilities.extendedAgentCard,provider.name 变成了 provider.organization,技能标签成为必填项,并且通过 RFC 8785 规范化正式确立了 JWS Agent Card 签名机制。
不是。Agent Card 是智能体的发现文档。它概述了身份、接口、能力、技能、模式、提供方和安全元数据,而完整的 API schema 描述的是详细的请求和响应结构。它对一个服务所扮演的角色,相当于 README 或 OpenAPI 概览:足以判断是否要调用它、以及如何调用。
name、description、supportedInterfaces、skills(带标签)、defaultInputModes、defaultOutputModes、capabilities、provider,以及安全元数据。路由系统会将任务与你的描述和技能标签进行匹配,然后使用接口和能力信息来规划实际调用。
只发布那些对未经身份验证的发现来说是安全的技能。如果需要更丰富的私有 Agent Card,将 capabilities.extendedAgentCard 设为 true,并通过经过身份验证的 GetExtendedAgentCard 操作暴露敏感技能。
发布在 well-known URI https://your-domain/.well-known/agent-card.json,内容类型为 application/a2a+json(实践中 application/json 同样可行)。早期实现使用 /.well-known/agent.json,因此在过渡期间同时发布两者是务实的选择。
让 schema 派上用场
根据你的服务详情生成一份符合 v1.0 结构的 Agent Card,或者把已有的 Agent Card 粘贴到校验器中,精确查看哪些字段需要注意。
来自博客
Compare A2A vs MCP: what each protocol connects, where they overlap, and why production AI agent systems often use both for tools and agent collaboration.
9 min read阅读指南How-toLearn how to create an agent.json file for A2A v1.0, including required Agent Card fields, the well-known URL, response headers, and common mistakes.
11 min read阅读指南IntegrationLearn how to publish an A2A Agent Card from Google ADK, LangGraph, CrewAI, or Semantic Kernel by mapping framework concepts to standard discovery fields.
10 min read阅读指南文章以英文发布。