Agent contract specification
This page specifies the structure of the agent contract: the object an agent publishes so the orchestrator can discover and route to it.
The contract is the standard A2A AgentCard, version 0.3.
It describes an agent’s identity, how to reach it, and what it can do.
Agent Console does not extend or replace this schema, so the authoritative definition is the A2A specification.
This page summarises the fields most relevant to building an agent for Agent Console.
For a conceptual overview of how the contract is used, see Understanding agent registration.
The card does not describe the tools an agent may call or the permissions it holds. Tool access is governed separately, through the agent’s LiteLLM virtual key, and is not part of the contract. Do not expect fields for tools, permissions, or model selection in the card.
Serving the contract
Each agent serves its own card as JSON at /.well-known/agent-card.json.
The route is implemented by the agent itself.
|
The well-known path changed between A2A versions.
In v0.2 the card was served at |
AgentCard object
The top-level object published by every agent. Fields are listed in specification order.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
The A2A protocol version the agent supports, for example |
|
string |
Yes |
A human-readable name for the agent, for example |
|
string |
Yes |
A human-readable description of the agent’s purpose. |
|
string |
Yes |
The preferred endpoint URL at which the agent is served.
The transport at this URL is given by |
|
string |
No |
The transport protocol used at |
|
array of AgentInterface |
No |
Further transport and URL combinations the agent supports, beyond the preferred one. |
|
string |
No |
A URL to an icon for the agent. |
|
No |
Information about the organisation that provides the agent. |
|
|
string |
Yes |
The agent’s own version number, in a format the provider defines. |
|
string |
No |
A URL to human-readable documentation for the agent. |
|
Yes |
The optional protocol features the agent supports, such as streaming. |
|
|
map of string to SecurityScheme |
No |
The security schemes a caller can use to authenticate to the agent, keyed by a scheme name. Omit if the agent requires no authentication. |
|
array of maps of string to array of string |
No |
The security requirements for calling the agent.
Each entry references scheme names declared in |
|
array of string |
Yes |
The input MIME types the agent accepts by default, for example |
|
array of string |
Yes |
The output MIME types the agent produces by default. Individual skills can override this. |
|
array of AgentSkill |
Yes |
The distinct units of work the agent can perform. |
|
boolean |
No |
Whether the agent offers a fuller card to authenticated callers.
Defaults to |
|
array of AgentCardSignature |
No |
JSON Web Signatures over the card, for callers that need to verify its authenticity. |
AgentProvider object
Identifies the organisation behind an agent.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
The provider’s organisation name. |
|
string |
Yes |
A reference URL for the provider, such as a website or documentation. |
AgentCapabilities object
Declares the optional protocol features an agent supports. All fields are optional; an omitted field means the capability is not supported.
| Field | Type | Required | Description |
|---|---|---|---|
|
boolean |
No |
Whether the agent supports streaming responses over Server-Sent Events. |
|
boolean |
No |
Whether the agent can send push notifications to a caller’s webhook for asynchronous updates. |
|
boolean |
No |
Whether the agent exposes a history of task state transitions. |
|
array of AgentExtension |
No |
The protocol extensions the agent supports. |
AgentExtension object
Declares a single protocol extension supported by the agent.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
The URI that uniquely identifies the extension. |
|
string |
No |
How this agent uses the extension. |
|
boolean |
No |
Whether a caller must comply with the extension’s requirements to interact with the agent. |
|
object |
No |
Extension-specific configuration parameters. |
AgentSkill object
Describes one unit of work an agent can perform.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
A unique identifier for the skill within the agent. |
|
string |
Yes |
A human-readable name for the skill. |
|
string |
Yes |
A description of what the skill does, suitable for a human or an LLM to read. |
|
array of string |
Yes |
Keywords that categorise the skill and aid selection. |
|
array of string |
No |
Example prompts or scenarios the skill is designed to handle. |
|
array of string |
No |
Input MIME types for this skill, overriding |
|
array of string |
No |
Output MIME types for this skill, overriding |
|
array of maps of string to array of string |
No |
Security requirements specific to this skill, in the same form as the top-level |
AgentInterface object
Declares one transport and URL combination at which the agent is available.
Used in additionalInterfaces.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
The URL at which this interface is available. In production this should be an absolute HTTPS URL. |
|
string |
Yes |
The transport protocol available at this URL. See Transport protocols. |
Security schemes
securitySchemes is a map from a scheme name to a security scheme object.
The scheme objects follow the OpenAPI 3.0 security scheme model.
A scheme is one of the following types.
| Scheme | Purpose |
|---|---|
|
An API key passed in a header, query parameter, or cookie. |
|
An HTTP authentication scheme as defined by RFC 7235, such as Basic or Bearer. |
|
OAuth 2.0, configured with one or more flows (authorization code, client credentials, implicit, or password). |
|
OpenID Connect Discovery, configured with a discovery URL. |
|
Mutual TLS client authentication. |
For the full field set of each scheme type, see the A2A specification and the underlying OpenAPI 3.0 security scheme definitions.
AgentCardSignature object
A JSON Web Signature over the card, following RFC 7515.
| Field | Type | Required | Description |
|---|---|---|---|
|
string |
Yes |
The Base64url-encoded protected JWS header. |
|
string |
Yes |
The computed signature, Base64url-encoded. |
|
object |
No |
Unprotected JWS header values. |
Transport protocols
Used by preferredTransport and by the transport field of an AgentInterface.
| Value | Description |
|---|---|
|
JSON-RPC 2.0 over HTTP. Mandatory baseline transport. |
|
gRPC over HTTP/2. Optional. |
|
REST-style HTTP with JSON. Optional. |
Complete example
The following is a synthetic but complete contract, illustrating the required fields together with a provider, capabilities, a security scheme, and a single skill.
{
"protocolVersion": "0.3.0",
"name": "Copywriter Agent",
"description": "Generates marketing copy from a structured brief.",
"url": "https://copywriter.agents.example.com/",
"preferredTransport": "JSONRPC",
"version": "1.2.0",
"provider": {
"organization": "Storyteq",
"url": "https://storyteq.com"
},
"documentationUrl": "https://docs.example.com/agents/copywriter",
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"securitySchemes": {
"apiKey": {
"type": "apiKey",
"in": "header",
"name": "X-API-Key"
}
},
"security": [
{ "apiKey": [] }
],
"defaultInputModes": ["text/plain", "application/json"],
"defaultOutputModes": ["text/plain"],
"skills": [
{
"id": "generate-copy",
"name": "Generate copy",
"description": "Produces marketing copy from a structured brief.",
"tags": ["copywriting", "marketing"],
"examples": [
"Write three subject lines for a spring sale email."
]
}
]
}