agent_card_lint
Static lint of an A2A (Agent2Agent) Agent Card, the JSON an agent publishes at /.well-known/agent-card.json. Checks conformance with A2A v1.0.1 and the 0.3 field names (both dialects accepted): required fields present and typed, URLs absolute https (http allowed for localhost), input and output modes that look like MIME types, skills with id, name, description and tags, duplicate skill ids, and security requirements that reference declared schemes. Scores discoverability: skill descriptions too short (under 20 chars) or too long (over 1,024) to route on, near-duplicate skills, missing examples or provider. Flags prompt-injection phrasing aimed at the model reading the card and hidden zero-width, bidi or tag characters (reported as U+XXXX, never echoed raw). Optionally checks an x402 payment declaration: every accepts entry needs scheme, network, payTo, asset, resource (https) and a sane atomic amount; x402 findings are reported separately and do not affect the card score. 512 KB request; first 200 skills, 50 items per list, 100 x402 entries. URLs are parsed, never fetched, and card signatures are not verified. Deterministic, no LLM.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"agent_card": "<agent_card>"
},
"name": "agent_card_lint"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| x402 | No | Optional x402 payment declaration (object or JSON string), checked separately from the card. | |
| agent_card | Yes | The Agent Card as a JSON object, or a string containing that JSON. Missing fields are findings, not errors, so send it as published. |