Skip to main content

Discovery domain

The Agent Card an A2A agent publishes about itself: identity, interfaces, capabilities, skills and security schemes (A2A v1.0.1 section 4.4, proto messages AgentCard and below).

a2a.discovery is one of a2a's bounded contexts. Back to the index.

Types​

APIKeySecurityScheme​

a2a.discovery.APIKeySecurityScheme is a record of three fields:

  • description — Optional<String>, which may be absent
  • location — String
  • name — String

AgentCapabilities​

a2a.discovery.AgentCapabilities is a record of four fields:

  • streaming — Optional<Boolean>, which may be absent
  • push_notifications — Optional<Boolean>, which may be absent, called pushNotifications on the wire
  • extensions — Optional<List<a2a.discovery.AgentExtension>>, which may be absent
  • extended_agent_card — Optional<Boolean>, which may be absent, called extendedAgentCard on the wire

AgentCard​

a2a.discovery.AgentCard is a record of 14 fields:

  • name — String
  • description — String
  • supported_interfaces — List<a2a.discovery.AgentInterface>, called supportedInterfaces on the wire
  • provider — Optional<a2a.discovery.AgentProvider>, which may be absent
  • version — String
  • documentation_url — Optional<String>, which may be absent, called documentationUrl on the wire
  • capabilities — a2a.discovery.AgentCapabilities
  • security_schemes — Optional<Map<String, a2a.discovery.SecurityScheme>>, which may be absent, called securitySchemes on the wire
  • security_requirements — Optional<List<a2a.discovery.SecurityRequirement>>, which may be absent, called securityRequirements on the wire
  • default_input_modes — List<String>, called defaultInputModes on the wire
  • default_output_modes — List<String>, called defaultOutputModes on the wire
  • skills — List<a2a.discovery.AgentSkill>
  • signatures — Optional<List<a2a.discovery.AgentCardSignature>>, which may be absent
  • icon_url — Optional<String>, which may be absent, called iconUrl on the wire

AgentCardSignature​

a2a.discovery.AgentCardSignature is a record of three fields:

  • protected — String
  • signature — String
  • header — Optional<Json>, which may be absent

AgentExtension​

a2a.discovery.AgentExtension is a record of four fields:

  • uri — Optional<String>, which may be absent
  • description — Optional<String>, which may be absent
  • required — Optional<Boolean>, which may be absent
  • params — Optional<Json>, which may be absent

AgentInterface​

a2a.discovery.AgentInterface is a record of four fields:

  • url — String
  • protocol_binding — String, called protocolBinding on the wire
  • tenant — Optional<String>, which may be absent
  • protocol_version — String, called protocolVersion on the wire

AgentProvider​

a2a.discovery.AgentProvider is a record of two fields:

  • url — String
  • organization — String

AgentSkill​

a2a.discovery.AgentSkill is a record of eight fields:

  • id — String
  • name — String
  • description — String
  • tags — List<String>
  • examples — Optional<List<String>>, which may be absent
  • input_modes — Optional<List<String>>, which may be absent, called inputModes on the wire
  • output_modes — Optional<List<String>>, which may be absent, called outputModes on the wire
  • security_requirements — Optional<List<a2a.discovery.SecurityRequirement>>, which may be absent, called securityRequirements on the wire

AuthorizationCodeOAuthFlow​

a2a.discovery.AuthorizationCodeOAuthFlow is a record of five fields:

  • authorization_url — String, called authorizationUrl on the wire
  • token_url — String, called tokenUrl on the wire
  • refresh_url — Optional<String>, which may be absent, called refreshUrl on the wire
  • scopes — Map<String, String>
  • pkce_required — Optional<Boolean>, which may be absent, called pkceRequired on the wire

ClientCredentialsOAuthFlow​

a2a.discovery.ClientCredentialsOAuthFlow is a record of three fields:

  • token_url — String, called tokenUrl on the wire
  • refresh_url — Optional<String>, which may be absent, called refreshUrl on the wire
  • scopes — Map<String, String>

DeviceCodeOAuthFlow​

a2a.discovery.DeviceCodeOAuthFlow is a record of four fields:

  • device_authorization_url — String, called deviceAuthorizationUrl on the wire
  • token_url — String, called tokenUrl on the wire
  • refresh_url — Optional<String>, which may be absent, called refreshUrl on the wire
  • scopes — Map<String, String>

HTTPAuthSecurityScheme​

a2a.discovery.HTTPAuthSecurityScheme is a record of three fields:

  • description — Optional<String>, which may be absent
  • scheme — String
  • bearer_format — Optional<String>, which may be absent, called bearerFormat on the wire

ImplicitOAuthFlow​

a2a.discovery.ImplicitOAuthFlow is a record of three fields:

  • authorization_url — Optional<String>, which may be absent, called authorizationUrl on the wire
  • refresh_url — Optional<String>, which may be absent, called refreshUrl on the wire
  • scopes — Optional<Map<String, String>>, which may be absent

MutualTlsSecurityScheme​

a2a.discovery.MutualTlsSecurityScheme is a record of one field:

  • description — Optional<String>, which may be absent

OAuth2SecurityScheme​

a2a.discovery.OAuth2SecurityScheme is a record of three fields:

  • description — Optional<String>, which may be absent
  • flows — a2a.discovery.OAuthFlows
  • oauth2_metadata_url — Optional<String>, which may be absent, called oauth2MetadataUrl on the wire

OAuthFlows​

a2a.discovery.OAuthFlows is a record of five fields:

  • authorization_code — Optional<a2a.discovery.AuthorizationCodeOAuthFlow>, which may be absent, called authorizationCode on the wire
  • client_credentials — Optional<a2a.discovery.ClientCredentialsOAuthFlow>, which may be absent, called clientCredentials on the wire
  • implicit — Optional<a2a.discovery.ImplicitOAuthFlow>, which may be absent
  • password — Optional<a2a.discovery.PasswordOAuthFlow>, which may be absent
  • device_code — Optional<a2a.discovery.DeviceCodeOAuthFlow>, which may be absent, called deviceCode on the wire

OpenIdConnectSecurityScheme​

a2a.discovery.OpenIdConnectSecurityScheme is a record of two fields:

  • description — Optional<String>, which may be absent
  • open_id_connect_url — String, called openIdConnectUrl on the wire

PasswordOAuthFlow​

a2a.discovery.PasswordOAuthFlow is a record of three fields:

  • token_url — Optional<String>, which may be absent, called tokenUrl on the wire
  • refresh_url — Optional<String>, which may be absent, called refreshUrl on the wire
  • scopes — Optional<Map<String, String>>, which may be absent

SecurityRequirement​

a2a.discovery.SecurityRequirement is a record of one field:

  • schemes — Map<String, a2a.discovery.StringList>

SecurityScheme​

a2a.discovery.SecurityScheme is a record of five fields:

  • api_key_security_scheme — Optional<a2a.discovery.APIKeySecurityScheme>, which may be absent, called apiKeySecurityScheme on the wire
  • http_auth_security_scheme — Optional<a2a.discovery.HTTPAuthSecurityScheme>, which may be absent, called httpAuthSecurityScheme on the wire
  • oauth2_security_scheme — Optional<a2a.discovery.OAuth2SecurityScheme>, which may be absent, called oauth2SecurityScheme on the wire
  • open_id_connect_security_scheme — Optional<a2a.discovery.OpenIdConnectSecurityScheme>, which may be absent, called openIdConnectSecurityScheme on the wire
  • mtls_security_scheme — Optional<a2a.discovery.MutualTlsSecurityScheme>, which may be absent, called mtlsSecurityScheme on the wire

StringList​

a2a.discovery.StringList is a record of one field:

  • list — List<String>

One of the types above is reached by nothing else in this system: a2a.discovery.AgentCard. No entity, view, command, event, error or crossing names it, so it is either vocabulary something outside this specification uses or a leftover — and only a person can tell which.

Commands​

GetExtendedAgentCard​

a2a.discovery.GetExtendedAgentCard, shown to a person as "Get extended agent card" and called extendedAgentCard on the wire.

It takes:

  • tenant — Optional<String>, which may be absent

It has five outcomes.

not-supported — Decided outside the input: the public agent card does not declare capabilities.extendedAgentCard. No predicate over the input reaches this branch, and saying when: false instead would have claimed it is unreachable, which is a different and false statement. No entity in this specification changes. It reports a2a.discovery.UnsupportedOperation. It emits nothing. A test reaches it by injecting the declared fault, because no input can.

not-configured — Decided outside the input: the agent declares the capability but has no extended card configured. No predicate over the input reaches this branch, and saying when: false instead would have claimed it is unreachable, which is a different and false statement. No entity in this specification changes. It reports a2a.discovery.ExtendedAgentCardNotConfigured. It emits nothing. A test reaches it by injecting the declared fault, because no input can.

returned — The extended Agent Card. The default branch, taken when no other outcome's condition matched. No entity in this specification changes. It emits nothing. A test reaches it by constructing an input that satisfies no other outcome's condition.

version-not-supported — Decided outside the input: the A2A-Version service parameter names a version the agent does not support. No predicate over the input reaches this branch, and saying when: false instead would have claimed it is unreachable, which is a different and false statement. No entity in this specification changes. It reports a2a.discovery.VersionNotSupported. It emits nothing. A test reaches it by injecting the declared fault, because no input can.

extension-required — Decided outside the input: the agent card marks an extension required and the request does not declare it. No predicate over the input reaches this branch, and saying when: false instead would have claimed it is unreachable, which is a different and false statement. No entity in this specification changes. It reports a2a.discovery.ExtensionSupportRequired. It emits nothing. A test reaches it by injecting the declared fault, because no input can.

Errors​

ExtendedAgentCardNotConfigured​

ExtendedAgentCardNotConfiguredError (JSON-RPC -32007, gRPC FAILED_PRECONDITION, HTTP 400): the agent declares the capability but has no extended card configured.

It carries nothing beyond its name, so a caller can tell what went wrong and not which value caused it.

Reported by a2a.discovery.GetExtendedAgentCard on its not-configured outcome.

ExtensionSupportRequired​

ExtensionSupportRequiredError (JSON-RPC -32008, gRPC FAILED_PRECONDITION, HTTP 400): the agent card marks an extension required and the request does not declare it.

It carries nothing beyond its name, so a caller can tell what went wrong and not which value caused it.

Reported by a2a.discovery.GetExtendedAgentCard on its extension-required outcome.

UnsupportedOperation​

UnsupportedOperationError (JSON-RPC -32004, gRPC FAILED_PRECONDITION, HTTP 400): the agent card does not declare capabilities.extendedAgentCard.

It carries nothing beyond its name, so a caller can tell what went wrong and not which value caused it.

Reported by a2a.discovery.GetExtendedAgentCard on its not-supported outcome.

VersionNotSupported​

VersionNotSupportedError (JSON-RPC -32009, gRPC FAILED_PRECONDITION, HTTP 400): the A2A-Version the request names is not supported by the agent.

It carries nothing beyond its name, so a caller can tell what went wrong and not which value caused it.

Reported by a2a.discovery.GetExtendedAgentCard on its version-not-supported outcome.

Actors​

An actor is who may ask this context for something. Every grant below points at a command this specification declares — a grant is a resolved reference, so "may invoke" something nobody wrote is not a permission this model can express, and an authorisation that authorises nothing cannot ship quietly.

Client​

a2a.discovery.Client, shown to a person as "A2A client".

It may invoke GetExtendedAgentCard.


Generated from a2a v1 · model digest 911794dff39b27311ddc6db22aa294d7c70c823fd2310684ad996b6eab4c5cdf · contract digest slice-sha256/2:2af66dcfe0f70ad1a2ee938e58a3af722c41ea672b67051d17c1993b1bdf54a7. Do not edit this file; change the specification and regenerate it with task docs-generate.