Design an A2A Agent Card (.well-known/agent.json) manifest describing agent capabilities, skills, authentication requirements, and supported content types. Use when building an agent that must be discoverable by other A2A-compliant agents, exposing capabilities for multi-agent orchestration, migrating an existing agent to the A2A protocol, defining the publ…
Independent GitHub snapshot · Automated classification · Original documentation governs
name: design-a2a-agent-card
locale: caveman
source_locale: en
source_commit: 82c77053
fence_basis_commit: 82c77053
translator: "Julius Brussee homage — caveman"
translation_date: "2026-04-24"
description: >
Design an A2A Agent Card (.well-known/agent.json) manifest describing agent
capabilities, skills, authentication requirements, and supported content types.
Use when building an agent that must be discoverable by other A2A-compliant
agents, exposing capabilities for multi-agent orchestration, migrating an
existing agent to the A2A protocol, defining the public contract for an agent
before implementation, or integrating with agent registries that consume Agent
Cards.
license: MIT
allowed-tools: Read Write Edit Grep Glob
metadata:
author: Philipp Thoss
version: "1.0"
domain: a2a-protocol
complexity: intermediate
language: multi
tags: a2a, agent-card, manifest, capabilities, interoperability
Design A2A Agent Card
Make A2A Agent Card. Advertises agent identity, skills, auth, capabilities. Other agents find it.
When Use
Build agent others must discover via A2A
Expose agent capabilities for multi-agent orchestration
Migrate existing agent to A2A (Agent-to-Agent) protocol
Define public contract before implementation
Integrate with agent registries that read Agent Cards
Inputs
Required: Agent name + description
Required: Skill list (name, description, input/output schemas)
Optional: Capability flags (streaming, push notifications, state history)
Optional: Provider org name + URL
Steps
Step 1: Set Agent Identity + Description
1.1. Pick identity fields:
{
"name": "data-analysis-agent",
"description": "Performs statistical analysis, data visualization, and report generation on tabular datasets.",
"url": "https://agent.example.com",
"provider": {
"organization": "Example Corp",
"url": "https://example.com"
},
"version": "1.0.0"
}
1.2. Write clear, actionable description. Answer:
What domains agent covers?
What tasks handles?
What limits?
1.3. Set canonical URL where Agent Card served at /.well-known/agent.json.
Got: Full identity block: name, description, URL, provider, version.
If fail: Agent covers many domains? Decide: one agent, many skills? Or many agents, focused scope? A2A prefers focused agents, clear boundaries.
Step 2: List Skills with I/O Schemas
2.1. Define each skill:
{
"skills": [
{
"id": "analyze-dataset",
"name": "Analyze Dataset",
"description": "Run descriptive statistics, correlation analysis, or hypothesis tests on a CSV dataset.",
"tags": ["statistics", "data-analysis", "csv"],
"examples": [
"Analyze the correlation between columns A and B in my dataset",
"Run a t-test comparing group 1 and group 2"
],
"inputModes": ["text/plain", "application/json"],
"outputModes": ["text/plain", "application/json", "image/png"]
},
{
"id": "generate-chart",
"name": "Generate Chart",
"description": "Create bar, line, scatter, or histogram charts from tabular data.",
"tags": ["visualization", "charts"],
"examples": [
"Create a scatter plot of height vs weight",
"Generate a histogram of the age column"
],
"inputModes": ["text/plain", "application/json"],
"outputModes": ["image/png", "image/svg+xml"]
}
]
}
2.2. Each skill needs:
id: Unique ID (kebab-case)
name: Human-readable name
description: What skill does, 1-2 sentences
tags: Keywords for discovery
examples: Natural-language task examples that trigger skill
inputModes: MIME types skill takes
outputModes: MIME types skill produces
2.3. Skill boundaries must be clear, no overlap. Each task → one skill.
Got: Valid JSON Agent Card at well-known URL. Any A2A client can parse.
If fail: JSON invalid? Use linter to find syntax err. URL unreachable? Check DNS, SSL cert, web server config. CORS needed? Add Access-Control-Allow-Origin headers.