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.
Create a standards-compliant A2A Agent Card that advertises an agent's identity, skills, authentication requirements, and capabilities for discovery by other agents.
none, oauth2, oidc, api-key)text/plain (e.g., image/png, application/json)1.1. Choose the agent 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 a clear, actionable description that answers:
1.3. Set the canonical URL where the Agent Card will be served at /.well-known/agent.json.
Expected: A complete identity block with name, description, URL, provider, and version.
On failure: If the agent serves multiple domains, consider whether it should be one agent with many skills or multiple agents with focused scopes. A2A favors focused agents with clear boundaries.
2.1. Define each skill the agent can perform:
{
"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. For each skill, provide:
2.3. Ensure skill boundaries are clear and non-overlapping. Each task should map to exactly one skill.
Expected: A skills array where each entry has id, name, description, tags, examples, and I/O modes.
On failure: If skills overlap significantly, merge them into a single broader skill with more examples. If a skill is too broad, split it into focused sub-skills.
3.1. Define the authentication scheme based on deployment context:
No authentication (local/trusted network):
{
"authentication": {
"schemes": []
}
}
OAuth 2.0 (recommended for production):
{
"authentication": {
"schemes": ["oauth2"],
"credentials": {
"oauth2": {
"authorizationUrl": "https://auth.example.com/authorize",
"tokenUrl": "https://auth.example.com/token",
"scopes": {
"agent:invoke": "Invoke agent skills",
"agent:read": "Read task status"
}
}
}
}
}
API Key (simple shared-secret):
{
"authentication": {
"schemes": ["apiKey"],
"credentials": {
"apiKey": {
"headerName": "X-API-Key"
}
}
}
}
3.2. Choose the minimum viable authentication for the deployment environment:
noneapiKeyoauth2 or oidc3.3. Document the token/key provisioning process in the Agent Card's provider section or external documentation.
Expected: An authentication block matching the deployment security requirements.
On failure: If OAuth 2.0 infrastructure is not available, start with API key authentication and plan migration. Never deploy a public agent with none authentication.
4.1. Declare what protocol features the agent supports:
{
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": true
}
}
4.2. Set each capability flag based on implementation readiness:
true if the agent supports SSE streaming via tasks/sendSubscribe. Enables real-time progress updates for long-running tasks.true if the agent can send webhook callbacks when task state changes. Requires the agent to store and call back webhook URLs.true if the agent maintains a full history of task state transitions (submitted, working, completed, etc.). Useful for audit trails.4.3. Only set capabilities to true if the implementation fully supports them. Advertising unsupported capabilities breaks interoperability.
Expected: A capabilities object with boolean flags matching actual implementation.
On failure: If unsure whether a capability will be implemented, set it to false. Capabilities can be added in future versions. Removing a capability is a breaking change.
5.1. Assemble the complete Agent Card:
{
"name": "data-analysis-agent",
"description": "Performs statistical analysis and visualization on tabular datasets.",
"url": "https://agent.example.com",
"version": "1.0.0",
"provider": {
"organization": "Example Corp",
"url": "https://example.com"
},
"authentication": {
"schemes": ["oauth2"],
"credentials": { ... }
},
"capabilities": {
"streaming": true,
"pushNotifications": false,
"stateTransitionHistory": true
},
"skills": [ ... ],
"defaultInputModes": ["text/plain"],
"defaultOutputModes": ["text/plain"]
}
5.2. Validate the Agent Card:
/.well-known/agent.json5.3. Publish the Agent Card:
https://<agent-url>/.well-known/agent.jsonContent-Type: application/json5.4. Test discovery by fetching the card:
curl -s https://agent.example.com/.well-known/agent.json | python3 -m json.tool
Expected: A valid JSON Agent Card served at the well-known URL, parseable by any A2A client.
On failure: If JSON validation fails, use a JSON linter to identify syntax errors. If the URL is not reachable, check DNS, SSL certificates, and web server configuration. If CORS is needed, add Access-Control-Allow-Origin headers.
/.well-known/agent.json with correct Content-Typestreaming: true or pushNotifications: true without implementation causes client failures when those features are used. Be conservative.defaultInputModes and defaultOutputModes are omitted, clients may not know what content types to send.implement-a2a-server - implement the server behind the Agent Cardtest-a2a-interop - validate Agent Card conformance and interoperabilitybuild-custom-mcp-server - MCP server as alternative/complement to A2Aconfigure-mcp-server - MCP configuration patterns applicable to A2A setupSearch for places (restaurants, cafes, etc.) via Google Places API proxy on localhost.
Interact with GitHub using the `gh` CLI. Use `gh issue`, `gh pr`, `gh run`, and `gh api` for issues, PRs, CI runs, and advanced queries.
Create or update AgentSkills. Use when designing, structuring, or packaging skills with scripts, references, and assets.
Start voice calls via the OpenClaw voice-call plugin.
Notion API for creating and managing pages, databases, and blocks.
Gemini CLI for one-shot Q&A, summaries, and generation.
Category:developer