A2A Services

Connect to external agent services

A2A (Agent-to-Agent) services let your formation communicate with external agent systems. Define connections to remote services that your agents can delegate tasks to.

Your First A2A Service

Create a2a/analytics.afs:

schema: "1.0.0"
id: analytics-engine
name: Analytics Engine
description: External analytics service for data processing

endpoint: "https://analytics.company.com"
auth:
  type: bearer
  token: "${{ secrets.ANALYTICS_TOKEN }}"

Configuration Fields

Required Fields

Field Type Description
schema string Schema version ("1.0.0")
id string Unique identifier
description string Service capabilities
endpoint string Service endpoint URL

Connection Settings

Field Type Default Description
name string - Human-readable name
protocol enum https http, https, or grpc
version string - Service API version
timeout_seconds int 30 Request timeout

Retry Configuration

retry_attempts: 3
retry_delay_seconds: 1
retry_backoff_multiplier: 2.0
Field Type Default Description
retry_attempts int 3 Number of retries (0-10)
retry_delay_seconds int 1 Initial delay between retries
retry_backoff_multiplier float 2.0 Exponential backoff multiplier

Authentication

Bearer Token

auth:
  type: bearer
  token: "${{ secrets.SERVICE_TOKEN }}"

Basic Auth

auth:
  type: basic
  username: "${{ secrets.SERVICE_USERNAME }}"
  password: "${{ secrets.SERVICE_PASSWORD }}"

API Key

auth:
  type: api_key
  header: "X-API-Key"
  key: "${{ secrets.SERVICE_API_KEY }}"

OAuth2

auth:
  type: oauth2
  oauth2:
    client_id: "your-client-id"
    client_secret: "${{ secrets.OAUTH_SECRET }}"
    token_url: "https://auth.example.com/oauth/token"
    scopes: ["read", "write"]

Health Checks

Monitor service availability:

health_check:
  enabled: true
  endpoint: "/health"
  interval_seconds: 60
  timeout_seconds: 5
  unhealthy_threshold: 3   # Failures before marking unhealthy
  healthy_threshold: 2     # Successes before marking healthy

Circuit Breaker

Prevent cascade failures:

circuit_breaker:
  enabled: true
  failure_threshold: 5     # Failures before opening circuit
  success_threshold: 2     # Successes before closing circuit
  timeout_seconds: 60      # Time in open state before retry

Rate Limiting

Control request rates:

rate_limiting:
  requests_per_second: 10
  requests_per_minute: 100
  requests_per_hour: 1000
  requests_per_day: 10000
  burst_limit: 20
  strategy: "sliding_window"  # sliding_window, fixed_window, token_bucket

Capabilities

Describe what the service offers:

capabilities:
  agents: ["analytics-agent", "reporting-agent"]
  features: ["data-analysis", "visualization"]
  streaming: true
  async: true
  webhooks: true

Service Discovery

Routing and load balancing:

discovery:
  registry_url: "https://registry.example.com"
  tags: ["analytics", "data", "reporting"]
  priority: 10      # Higher = higher priority
  weight: 100       # 0-100 for load balancing

Metadata

Additional service information:

metadata:
  owner: "Data Team"
  contact: "data-team@company.com"
  documentation: "https://docs.analytics.company.com"
  environment: "production"  # development, staging, production
  sla:
    uptime_percentage: 99.9
    response_time_ms: 500

Full Example

# a2a/analytics-engine.afs
schema: "1.0.0"
id: analytics-engine
name: Analytics Engine
description: External analytics for data processing and visualization

endpoint: "https://analytics.company.com"
protocol: https
version: "2.1.0"
timeout_seconds: 60

auth:
  type: bearer
  token: "${{ secrets.ANALYTICS_TOKEN }}"

retry_attempts: 3
retry_delay_seconds: 1
retry_backoff_multiplier: 2.0

health_check:
  enabled: true
  endpoint: "/health"
  interval_seconds: 60

circuit_breaker:
  enabled: true
  failure_threshold: 5
  timeout_seconds: 60

rate_limiting:
  requests_per_minute: 100
  burst_limit: 20

capabilities:
  agents: ["data-analyst", "report-generator"]
  features: ["analysis", "visualization", "export"]
  streaming: true
  async: true

metadata:
  owner: "Data Team"
  documentation: "https://docs.analytics.company.com"
  environment: "production"

Learn More