Paste an A2A agent card. The validator checks the structure a caller relies on: name, description, version, interfaces, capabilities, skills with ids, descriptions and tags, security schemes and the requirements that apply them, provider, and whether the card is signed.
Then it draws the permission map. Each skill becomes a scope, classed as read, write, spend or destructive, with the security scheme that covers it. A skill that writes or spends with no scheme in front of it shows in red.
A card is a discovery document, not an authorization decision. The map shows the gap. Everything runs in your browser. We store nothing from your input except an anonymised event: which tool ran and when.
›Sample input
{
"name": "Commercial Property Underwriting Agent",
"description": "Reads broker submissions for commercial property risks, prices them from the rating tables and prepares a quote for an underwriter.",
"version": "2.3.0",
"supportedInterfaces": [
{
"url": "https://agents.example.com/underwriting/a2a",
"protocolBinding": "JSONRPC",
"protocolVersion": "1.0"
}
],
"provider": {
"organization": "Example Mutual",
"url": "https://example.com"
},
"capabilities": {
"streaming": true,
"pushNotifications": false
},
"defaultInputModes": [
"application/json",
"application/pdf"
],
"defaultOutputModes": [
"application/json"
],
"securitySchemes": {
"badge": {
"type": "http",
"scheme": "bearer",
"bearerFormat": "JWT",
"description": "Credential session issued by the identity provider."
}
},
"skills": [
{
"id": "read_submission",
"name": "Read submission",
"description": "Reads the broker submission, statement of values and loss runs.",
"tags": [
"underwriting",
"submission"
],
"security": [
{
"badge": [
"submission:read"
]
}
]
},
{
"id": "quote_premium",
"name": "Quote premium",
"description": "Prices the risk from the rating tables and returns a premium with its workings.",
"tags": [
"pricing",
"underwriting"
],
"security": [
{
"badge": [
"rating:read"
]
}
]
},
{
"id": "bind_policy",
"name": "Bind policy",
"description": "Binds coverage and issues the policy number to the broker.",
"tags": [
"policy",
"binding"
]
},
{
"id": "refund_premium",
"name": "Refund premium",
"description": "Refunds unearned premium to the insured on cancellation.",
"tags": [
"payments",
"policy"
]
},
{
"id": "send_quote",
"name": "Send quote",
"description": "Sends",
"tags": [],
"security": [
{
"badge": [
"quote:send"
]
}
]
}
]
}