Skip to main content

A2A Agent Card

LiteLLM can proxy A2A-compatible agents, exposing them to your clients through LiteLLM with virtual keys, team scoping, observability, and a unified agent card.

This page documents which A2A agent card fields LiteLLM supports today, how invocation works, and what to expect from the proxied agent card served at /a2a/{agent_id}/.well-known/agent.json.

For provider-specific setup, see:

Agent card supportโ€‹

The fields below mirror the A2A v1.0 specification (ยง4.4 Agent Discovery Objects). A โœ… means the field is present in the agent card LiteLLM serves to clients; a โŒ means the field is not.

AgentCard (ยง4.4.1)โ€‹

FieldSupported
nameโœ…
descriptionโœ…
supportedInterfacesโœ…
providerโœ…
versionโœ…
documentationUrlโœ…
capabilitiesโœ…
securitySchemesโœ…
securityRequirementsโœ…
defaultInputModesโœ…
defaultOutputModesโœ…
skillsโœ…
signaturesโŒ
iconUrlโœ…

AgentProvider (ยง4.4.2)โ€‹

FieldSupported
urlโœ…
organizationโœ…

AgentCapabilities (ยง4.4.3)โ€‹

FieldSupported
streamingโœ…
pushNotificationsโŒ
extensionsโŒ
extendedAgentCardโŒ

AgentExtension (ยง4.4.4)โ€‹

FieldSupported
uriโŒ
descriptionโŒ
requiredโŒ
paramsโŒ

AgentSkill (ยง4.4.5)โ€‹

FieldSupported
idโœ…
nameโœ…
descriptionโœ…
tagsโœ…
examplesโœ…
inputModesโœ…
outputModesโœ…
securityRequirementsโŒ

AgentInterface (ยง4.4.6)โ€‹

FieldSupported
urlโœ…
protocolBindingโœ…
tenantโŒ
protocolVersionโœ…

AgentCardSignature (ยง4.4.7)โ€‹

FieldSupported
protectedโŒ
signatureโŒ
headerโŒ

How A2A on LiteLLM worksโ€‹

When you register an A2A agent in LiteLLM:

  1. You provide a base URL (and, for some providers, an assistant identifier).

  2. LiteLLM fetches the upstream agent card from the agent's /.well-known/agent-card.json (or the provider-specific equivalent).

  3. You review the parsed card in the LiteLLM UI and choose which skills and fields to expose.

  4. LiteLLM saves the curated card and serves it at:

    GET /a2a/{agent_id}/.well-known/agent.json
  5. Clients invoke the agent at:

    POST /a2a/{agent_id}

    using standard A2A JSON-RPC (message/send, message/stream).

Supported A2A methodsโ€‹

MethodSupported
message/sendโœ…
message/streamโœ…
tasks/getโŒ
tasks/cancelโŒ
tasks/listโŒ
tasks/resubscribeโŒ
tasks/pushNotificationConfig/setโŒ
tasks/pushNotificationConfig/getโŒ
tasks/pushNotificationConfig/listโŒ
tasks/pushNotificationConfig/deleteโŒ
agent/getAuthenticatedExtendedCardโŒ

Skill routingโ€‹

Clients invoke a specific skill by including skillId in the message metadata:

{
"jsonrpc": "2.0",
"id": "req-1",
"method": "message/send",
"params": {
"message": {
"messageId": "msg-001",
"role": "user",
"parts": [{"kind": "text", "text": "..."}],
"metadata": {"skillId": "triage_ticket"}
}
}
}

LiteLLM forwards the entire message envelope, including metadata, to the upstream agent unchanged. The upstream agent is responsible for reading skillId and routing internally.

Editing the agent cardโ€‹

You can edit supported fields from the agent detail page in the LiteLLM UI. Use the Re-sync from upstream button to pick up new skills or capabilities the upstream agent has added since registration; it shows a diff and lets you accept changes selectively.