Skip to content

spec.card

Optional protocol-card metadata. Surfaces information consumers need to talk to the deployed agent - protocol version, endpoint URL, supported input/output modes, and documentation links.

These fields populate the A2A AgentCard the generator serves at /.well-known/agent-card.json. See A2A & the Agent Card for the full ADL → AgentCard mapping.

yaml
spec:
  card:
    protocolVersion: "1.0"
    url: https://agents.acme.example/customer-support
    preferredTransport: http+sse
    defaultInputModes:
      - text/plain
      - application/json
    defaultOutputModes:
      - text/plain
    documentationUrl: https://acme.example/docs/customer-support
    iconUrl: https://acme.example/agents/customer-support.png
    supportsExtendedAgentCard: true
    securitySchemes:
      apiKey:
        type: apiKey
        name: X-API-Key
        in: header
      bearer:
        type: http
        scheme: Bearer
        bearerFormat: JWT
    security:
      - apiKey: []
      - bearer: []

Fields

FieldTypeDescription
protocolVersionstringThe agent-protocol version the deployed instance speaks.
urlstringWhere the deployed agent lives.
preferredTransportstringThe transport the agent prefers (e.g. http+sse, grpc).
defaultInputModesstring[]Media types the agent accepts by default.
defaultOutputModesstring[]Media types the agent returns by default.
documentationUrlstringHuman-readable documentation for the agent.
iconUrlstringDisplay icon for registries and UIs.
supportsExtendedAgentCardbooleanServe a richer card via A2A GetExtendedAgentCard (GET /extendedAgentCard, section 7).
securitySchemesobjectStatically declared security schemes, keyed by name.
securityobject[]Security requirements referencing securitySchemes.

All fields are optional. If you don't surface a public card, omit the block entirely - it's purely declarative.

Card-driven authentication (A2A section 7)

supportsExtendedAgentCard, securitySchemes, and security express A2A authentication on the AgentCard.

securitySchemes is authored in a flat, OpenAPI-3.0-style form (a type discriminator with sibling fields). Consumers (e.g. adl-cli) map it onto the ADK's A2A v1.0 AgentCard SecurityScheme wrapper (type -> the wrapper key, in -> location). Only statically declarable schemes belong here - schemes that cannot be derived from runtime config:

typeFields
apiKeyname (param name), in (header/query/cookie)
httpscheme (e.g. Bearer, Basic), bearerFormat
mutualTLS(client-certificate auth; description only)

security is a list of requirement objects mapping a scheme name to its required scopes (empty for scopeless schemes). Keys within one entry are ANDed; separate entries are ORed. Like securitySchemes, this flat form is what you author; consumers map it onto the ADK's AgentCard security shape ({ schemes: { <name>: { list: [scopes] } } }).

OIDC/OAuth2 schemes are not declared here: they are runtime concerns (AUTH_ISSUER_URL / AUTH_CLIENT_ID / AUTH_CLIENT_SECRET), and the ADK derives their scheme declaration at startup - baking an issuer into the manifest would be wrong per environment.