2.1

AgentCard fields

An AgentCard has 14 fields, eight of them REQUIRED, and together they say what an agent offers, where to reach it, and what it demands.

The planner is about to delegate its first test run to test-runner, an agent it knows only as localhost:41241. Its first request is a GET for one JSON document.

When you finish this section, you can read any agent card field by field and say which fields a valid card must carry.

The card and its REQUIRED fields

Agent card: a JSON metadata document that an A2A server publishes. It describes the identity, capabilities, skills, service endpoint, and authentication requirements of the server. Every A2A server must make an Agent Card available.

The proto message AgentCard has 14 fields, and eight of them are REQUIRED: name, description, supportedInterfaces, version, capabilities, defaultInputModes, defaultOutputModes, and skills. A REQUIRED field must be present and set in every valid message.

Four of those fields are lists, and a required list must contain at least one element. The signing example in §8.4.1 keeps an empty skills list all the same (conflict D19, open as issue #2122), and real cards follow §5.7.

Figure 2.1 sorts the whole test-runner card into four groups: who it is, where to reach it, what it demands, and what it offers. Of the identity fields, version is the agent's own release, and extended cards and signatures covers signatures.

Fig. 2.1the test-runner agent card, field by fieldstructure
The test-runner agent card, field by field The agent card that test-runner serves at /.well-known/agent-card.json, drawn as rows under four headings that appear one after another. Who it is: name, description, provider and version, with documentationUrl, iconUrl and signatures not set. Where to reach it: two supportedInterfaces, JSON-RPC first and HTTP+JSON second. What it demands: capabilities with streaming and pushNotifications true, and no security fields. What it offers: text/plain and application/json modes and the run-tests skill. A dot marks each REQUIRED field. test-runner agent card GET http://localhost:41241/.well-known/agent-card.json WHO IT IS identity, plus proof of who published it name "test-runner" description "Checks out a commit, runs its test suite in a clean container, and streams the log." provider organization "Platform Team", url "https://ci.example.com" version "2.3.0" the agent release, not the protocol version documentationUrl not set iconUrl not set signatures not set deployer signs its card (section 2.3) WHERE TO REACH IT ordered, and the first entry is preferred supportedInterfaces [0] JSONRPC, "1.0", http://localhost:41241/a2a/jsonrpc [1] HTTP+JSON, "1.0", http://localhost:41241/a2a/rest WHAT IT DEMANDS an absent flag counts the same as false capabilities streaming true, pushNotifications true securitySchemes not set securityRequirements not set so calls need no credentials WHAT IT OFFERS media types, and skills that describe work defaultInputModes "text/plain", "application/json" defaultOutputModes "text/plain", "application/json" skills [0] id "run-tests", name "Run tests", tags "ci", "tests" plus a description and one example REQUIRED in proto AgentCard optional, and not set on this card
One GET returns what a client needs before its first message: who the agent is, where to reach it, what it demands, and what it offers. Each row is one field of the card, grouped by the question it answers. A dot marks a field the proto makes REQUIRED, and dashed rows are optional fields this card leaves out.

What it offers: skills and modes

Skill: one entry in skills, a unit of work the agent says it can do. Each skill needs an id, a name, a description, and at least one entry in tags. The optional examples hold sample prompts, and a skill can carry its own modes and securityRequirements.

the one skill on the test-runner cardjsonFull log
  "skills": [
    {
      "id": "run-tests",
      "name": "Run tests",
      "description": "Run the test suite of a repository at one commit and report each failure with its log.",
      "tags": [
        "ci",
        "tests"
      ],
      "examples": [
        "Run the unit tests for payments-api at commit 9f3c2e1"
      ]
    }
  ]
The skills array of the first card in the file, complete.

No field of SendMessageRequest or Message names a skill, and the proto treats the list as mostly descriptive.

Mode: a media type that names content an agent accepts or produces, such as text/plain. The REQUIRED lists defaultInputModes and defaultOutputModes apply across all skills, and a skill overrides them with its own inputModes and outputModes. The code-reviewer card narrows the input of its review-diff skill to text/x-diff and text/plain.

Where to reach it: supportedInterfaces

Interface: one entry in supportedInterfaces, a URL with the binding and the protocol version spoken there. Its fields url, protocolBinding, and protocolVersion are REQUIRED, and tenant is optional. The order matters: the list is ordered, and the first entry is the preferred one.

the two interfaces of test-runner, JSON-RPC firstjsonFull log
  "supportedInterfaces": [
    {
      "url": "http://localhost:41241/a2a/jsonrpc",
      "protocolBinding": "JSONRPC",
      "protocolVersion": "1.0"
    },
    {
      "url": "http://localhost:41241/a2a/rest",
      "protocolBinding": "HTTP+JSON",
      "protocolVersion": "1.0"
    }
  ],
The supportedInterfaces array of the first card in the file, complete.

The proto names three standard bindings: JSONRPC, GRPC, and HTTP+JSON. The field protocolVersion is the A2A version spoken at that URL, as Major.Minor, and the version and extension headers cover the matching A2A-Version header.

In production, each URL must be a valid absolute HTTPS URL, and the kit uses http://localhost on one machine. The spec does not say which form a GRPC entry takes, and the reference SDK's sample writes a plain host and port (conflict D34).

What it demands: capabilities and security

Capability: a flag in the REQUIRED capabilities object that switches on an optional part of the protocol: streaming, pushNotifications, or extendedAgentCard. An absent flag counts the same as false, and discovery lists the operations that each flag allows. The same object lists extensions by uri, and extensions covers that list.

The optional securitySchemes and securityRequirements say which credentials a call needs. The test-runner card sets neither, and security schemes reads the bearer scheme on the deployer card.

In 1.0, five top-level fields of the 0.3 card moved into supportedInterfaces and capabilities, and from 0.3 to 1.0 maps each one. The migration steps in §A.2.1 still use a card field protocolVersions, which the 1.0 proto lacks (conflict D8). PR #2165 fixed that on main after v1.0.1, not yet released. The sample card in §8.5 still uses security where the proto has securityRequirements (conflict D6). PR #2046 fixed that sample on main, not yet released.

A2A protocol 1.0.1 · 3303592 · 2026-05-28 · Edition 2026.10