Agent Card#
An Agent Card is a JSON document that describes a registered AI agent: its identity, capabilities, service endpoints, and on-chain coordinates. It is hosted at a public URL (the agent’s agent_uri) and its integrity is protected by a SHA-256 hash anchored on-chain in the CIS-8004 contract.
Any consumer — another agent, an AI development tool, or a human — can verify a card by fetching agent_uri, computing the SHA-256 hash of the raw response body, and comparing it to the metadata_hash stored on-chain. The MCP tool verify_agent_card performs this check automatically.
Concordium’s Agent Card format is compatible with the A2A (Agent-to-Agent) protocol card format and adds a concordium extension block that carries the on-chain identifiers needed for cross-chain discovery.
Top-level fields#
Field |
Type |
Description |
|---|---|---|
|
string |
Display name of the agent. Maximum 128 characters. |
|
string |
Human-readable description of what the agent does. Maximum 2048 characters. |
|
string |
Semantic version of the agent (e.g. |
|
URI |
Canonical URL where this card is hosted. Must match the |
|
object (optional) |
The organisation that operates the agent. Has |
|
array |
Capabilities the agent exposes. Each entry has |
|
URI (optional) |
Link to extended documentation. |
|
object |
Concordium-specific extension block. See below. |
Concordium extension block#
The concordium object is injected automatically by the MCP tool build_agent_card. It carries every on-chain identifier that a consuming system needs to locate and verify the agent without prior Concordium knowledge.
Field |
Description |
|---|---|
|
CAIP-2 chain identifier for the network the agent is registered on. For mainnet: |
|
Base58Check CIS-2 token address derived from |
|
JSON object |
|
JSON object |
|
Base58 Concordium account address of the agent’s current owner. |
|
Optional key-value map of named service endpoints. For example, |
Example card#
{
"name": "Market Data Agent",
"description": "Fetches and summarises real-time CCD/EUR market data on demand.",
"version": "1.0.0",
"url": "https://agents.example.com/market-data/card.json",
"provider": {
"organization": "Example Labs",
"url": "https://example.com"
},
"skills": [
{
"id": "fetch-price",
"name": "Fetch price",
"description": "Returns the current CCD/EUR mid-market price.",
"tags": ["market", "price", "ccd"]
},
{
"id": "summarise-day",
"name": "Summarise day",
"description": "Returns a one-paragraph summary of today's CCD price action.",
"tags": ["market", "summary", "ccd"]
}
],
"concordium": {
"chain_id": "concordium:mainnet",
"token_address": "TKN1A2B3C4...",
"cis8004_contract": {"index": 10082, "subindex": 0},
"cis8_contract": {"index": 10081, "subindex": 0},
"owner": "3z9dkoTnLi2HEZvjnmKrMec2Gk2NKcEhdi4PugDWzP4GQtZiFa",
"services": {
"tippingMcp": "https://agents.example.com/market-data/mcp"
}
}
}
Building and hosting a card#
Use the MCP tool build_agent_card to generate a valid card JSON. The tool accepts human-readable inputs (name, description, skills, owner account, and an optional token_id if the agent is already registered) and injects all Concordium-specific fields automatically. It returns the canonical JSON and its SHA-256 hash.
After receiving the JSON:
Host the file at a stable public URL (
agent_uri).Pass the SHA-256 hash to
build_set_agent_uri(for an existing agent) orbuild_register(when registering a new agent) so the hash is anchored on-chain.
Whenever you update the card content you must update agent_uri and metadata_hash on-chain via build_set_agent_uri to keep the integrity anchor current.
Card verification#
The MCP tool verify_agent_card performs the full verification cycle for a given token_id:
Reads
agent_uriandmetadata_hashfrom the chain.Fetches the URL and computes the SHA-256 of the response body.
Returns
match: truewhen both hashes are present and equal,match: falseon mismatch, andmatch: nullwhen either side is absent (e.g. the agent has not yet set anagent_uri).