> For the complete documentation index, see [llms.txt](/docs/llms.txt). Markdown versions of all docs pages are available by appending .md to any docs URL.

# Connect to an agent

With agentgateway, you can route to agent-to-agent (A2A) servers and expose their tools securely.

## Before you begin

[Install and set up an agentgateway proxy](https://agentgateway.dev/docs/kubernetes/latest/quickstart/install).

## Step 1: Deploy an A2A server

Deploy an A2A server that you want agentgateway to proxy traffic to. Notice that the Service uses the `appProtocol: kgateway.dev/a2a` setting. This way, agentgateway configures the agentgateway proxy to use the A2A protocol.

```yaml
kubectl apply -f- <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: a2a-agent
  labels:
    app: a2a-agent
spec:
  selector:
    matchLabels:
      app: a2a-agent
  template:
    metadata:
      labels:
        app: a2a-agent
    spec:
      containers:
        - name: a2a-agent
          image: gcr.io/solo-public/docs/test-a2a-agent:latest
          ports:
            - containerPort: 9090
---
apiVersion: v1
kind: Service
metadata:
  name: a2a-agent
spec:
  selector:
    app: a2a-agent
  type: ClusterIP
  ports:
    - protocol: TCP
      port: 9090
      targetPort: 9090
      appProtocol: kgateway.dev/a2a
EOF
```

## Step 2: Route with agentgateway

Create an HTTPRoute resource that routes incoming traffic to the A2A server.

```yaml
kubectl apply -f- <<EOF
apiVersion: gateway.networking.k8s.io/v1
kind: HTTPRoute
metadata:
  name: a2a
spec:
  parentRefs:
  - name: agentgateway-proxy
    namespace: agentgateway-system
  rules:
  - backendRefs:
      - name: a2a-agent
        port: 9090
EOF
```

## Step 3: Verify the connection

1. Get the agentgateway address.
   
   **Option: tabs-tab-tabs-10-0**
   
   ```sh
   export INGRESS_GW_ADDRESS=$(kubectl get gateway agentgateway-proxy -n agentgateway-system -o=jsonpath="{.status.addresses[0].value}")
   echo $INGRESS_GW_ADDRESS
   ```
   
   **Option: tabs-tab-tabs-10-1**
   
   ```sh
   kubectl port-forward deployment/agentgateway-proxy -n agentgateway-system 8080:80
   ```

<!--THE END-->

2. As a user, send a request to the A2A server. As an assistant, the agent echoes back the message that you sent.
   
   **Option: tabs-tab-tabs-12-0**
   
   ```sh
   curl -X POST http://$INGRESS_GW_ADDRESS/ \
     -H "Content-Type: application/json" \
       -v \
       -d '{
     "jsonrpc": "2.0",
     "id": "1",
     "method": "tasks/send",
     "params": {
       "id": "1",
       "message": {
         "role": "user",
         "parts": [
           {
             "type": "text",
             "text": "hello gateway!"
           }
         ]
       }
     }
     }' | jq
   ```
   
   **Option: tabs-tab-tabs-12-1**
   
   ```sh
   curl -X POST http://localhost:8080/ \
     -H "Content-Type: application/json" \
       -v \
       -d '{
     "jsonrpc": "2.0",
     "id": "1",
     "method": "tasks/send",
     "params": {
       "id": "1",
       "message": {
         "role": "user",
         "parts": [
           {
             "type": "text",
             "text": "hello gateway!"
           }
         ]
       }
     }
     }' | jq
   ```
   
   Example output:
   
   ```json
   {
     "jsonrpc": "2.0",
     "id": "1",
     "result": {
       "id": "1",
       "message": {
         "role": "assistant",
         "parts": [
           {
             "type": "text",
             "text": "hello gateway!"
           }
         ]
       }
     }
   }
   ```

## Cleanup

You can remove the resources that you created in this guide.

```sh
kubectl delete Deployment a2a-agent --ignore-not-found
kubectl delete Service a2a-agent --ignore-not-found
kubectl delete HTTPRoute a2a --ignore-not-found
```
