# A2aAgentServer

## `autogen.a2a.A2aAgentServer`

```
A2aAgentServer(agent, *, url='http://localhost:8000', agent_card=None, card_modifier=None, extended_agent_card=None, extended_card_modifier=None)
```

A server wrapper for running an AG2 agent via the A2A protocol.

This class provides functionality to wrap an AG2 ConversableAgent into an A2A server that can be used to interact with the agent through A2A requests.

Initialize the A2aAgentServer.

| PARAMETER              | DESCRIPTION |
|------------------------|-------------|
| `agent`                | The Autogen ConversableAgent to serve.<br>**TYPE:**`ConversableAgent` |
| `url`                  | The base URL for the A2A server.<br>**TYPE:**`str | None`**DEFAULT:**`'http://localhost:8000'` |
| `agent_card`           | Configuration for the base agent card.<br>**TYPE:**`CardSettings | None`**DEFAULT:**`None` |
| `card_modifier`        | Function to modify the base agent card.<br>**TYPE:**`Callable[[AgentCard], AgentCard] | None`**DEFAULT:**`None` |
| `extended_agent_card`  | Configuration for the extended agent card.<br>**TYPE:**`CardSettings | None`**DEFAULT:**`None` |
| `extended_card_modifier`| Function to modify the extended agent card.<br>**TYPE:**`Callable[[AgentCard, ServerCallContext], AgentCard] | None`**DEFAULT:**`None` |

Source code in `autogen/a2a/server.py`

|     |     |
| --- | --- |
| ```<br> 89<br> 90<br> 91<br> 92<br> 93<br> 94<br> 95<br> 96<br> 97<br> 98<br> 99<br>100<br>101<br>102<br>103<br>104<br>105<br>106<br>107<br>108<br>109<br>110<br>111<br>112<br>113<br>114<br>115<br>116<br>117<br>118<br>119<br>120<br>121<br>122<br>123<br>124<br>125<br>126<br>127<br>128<br>129<br>130<br>131<br>132<br>133<br>134<br>135<br>136<br>137<br>138<br>139<br>140<br>141<br>142<br>143<br>144<br>145<br>146<br>147<br>148<br>149<br>150<br>151<br>152<br>153<br>154<br>``` | ```<br>def __init__(<br>    self,<br>    agent: "ConversableAgent",<br>    *,<br>    url: str | None = "http://localhost:8000",<br>    agent_card: CardSettings | None = None,<br>    card_modifier: Callable[["AgentCard"], "AgentCard"] | None = None,<br>    extended_agent_card: CardSettings | None = None,<br>    extended_card_modifier: Callable[["AgentCard", "ServerCallContext"], "AgentCard"] | None = None,<br>) -> None:<br>    """Initialize the A2aAgentServer.<br>    Args:<br>        agent: The Autogen ConversableAgent to serve.<br>        url: The base URL for the A2A server.<br>        agent_card: Configuration for the base agent card.<br>        card_modifier: Function to modify the base agent card.<br>        extended_agent_card: Configuration for the extended agent card.<br>        extended_card_modifier: Function to modify the extended agent card.<br>    """<br>    self.agent = agent<br>    if not agent_card:<br>        agent_card = CardSettings()<br>    if agent_card.url and url != "http://localhost:8000":<br>        warnings.warn(<br>            (<br>                "You can't use `agent_card.url` and `url` options in the same time. "<br>                f"`agent_card.url` has a higher priority, so {{agent_card.url}} will be used."<br>            ),<br>            RuntimeWarning,<br>            stacklevel=2,<br>        )<br>    self.card = AgentCard.model_validate({<br>        # use agent options by default<br>        "name": agent.name,<br>        "description": agent.description,<br>        "url": url,<br>        "supports_authenticated_extended_card": extended_agent_card is not None,<br>        # exclude name and description if not provided<br>        **agent_card.model_dump(exclude_none=True),<br>    })<br>    self.extended_agent_card: AgentCard | None = None<br>    if extended_agent_card:<br>        if extended_agent_card.url and url != "http://localhost:8000":<br>            warnings.warn(<br>                (<br>                    "You can't use `extended_agent_card.url` and `url` options in the same time. "<br>                    f"`agent_card.url` has a higher priority, so {{extended_agent_card.url}} will be used."<br>                ),<br>                RuntimeWarning,<br>                stacklevel=2,<br>            )<br>        self.extended_agent_card = AgentCard.model_validate({<br>            "name": agent.name,<br>            "description": agent.description,<br>            "url": url,<br>            **extended_agent_card.model_dump(exclude_none=True),<br>        })<br>    self.card_modifier = card_modifier<br>    self.extended_card_modifier = extended_card_modifier<br>``` |

### `agent` instance-attribute

```
agents = agent
```

### `card` instance-attribute

```
card = model_validate({'name': name, 'description': description, 'url': url, 'supports_authenticated_extended_card': extended_agent_card is not None, None: model_dump(exclude_none=True)})
```

### `extended_agent_card` instance-attribute

```
extended_agent_card = None
```

### `card_modifier` instance-attribute

```
card_modifier = card_modifier
```

### `extended_card_modifier` instance-attribute

```
extended_card_modifier = extended_card_modifier
```

### `executor` property

```
executor
```

Get the A2A agent executor.

### `build` class-attribute instance-attribute

```
build = build_starlette_app
```

### `build_request_handler`

```
build_request_handler(*, task_store=None, queue_manager=None, push_config_store=None, push_sender=None, request_context_builder=None)
```

Build a request handler for A2A application.

| PARAMETER              | DESCRIPTION |
|------------------------|-------------|
| `task_store`           | The task store to use.<br>**TYPE:**`TaskStore | None`**DEFAULT:**`None` |
| `queue_manager`        | The queue manager to use.<br>**TYPE:**`QueueManager | None`**DEFAULT:**`None` |
| `push_config_store`    | The push notification config store to use.<br>**TYPE:**`PushNotificationConfigStore | None`**DEFAULT:**`None` |
| `push_sender`          | The push notification sender to use.<br>**TYPE:**`PushNotificationSender | None`**DEFAULT:**`None` |
| `request_context_builder` | The request context builder to use.<br>**TYPE:**`RequestContextBuilder | None`**DEFAULT:**`None` |

| RETURNS               | DESCRIPTION |
|-----------------------|-------------|
| `RequestHandler`      | A configured RequestHandler instance. |

Source code in `autogen/a2a/server.py`

|     |     |
| --- | --- |
| ```<br>161<br>162<br>163<br>164<br>165<br>166<br>167<br>168<br>169<br>170<br>171<br>172<br>173<br>174<br>175<br>176<br>177<br>178<br>179<br>180<br>181<br>182<br>183<br>184<br>185<br>186<br>187<br>188<br>189<br>``` | ```<br>def build_request_handler(<br>    self,<br>    *,<br>    task_store: "TaskStore | None" = None,<br>    queue_manager: "QueueManager | None" = None,<br>    push_config_store: "PushNotificationConfigStore | None" = None,<br>    push_sender: "PushNotificationSender | None" = None,<br>    request_context_builder: "RequestContextBuilder | None" = None,<br>) -> "RequestHandler":<br>    """Build a request handler for A2A application.<br>    Args:<br>        task_store: The task store to use.<br>        queue_manager: The queue manager to use.<br>        push_config_store: The push notification config store to use.<br>        push_sender: The push notification sender to use.<br>        request_context_builder: The request context builder to use.<br>    Returns:<br>        A configured RequestHandler instance.<br>    """<br>    return DefaultRequestHandler(<br>        agent_executor=self.executor,<br>        task_store=task_store or InMemoryTaskStore(),<br>        queue_manager=queue_manager,<br>        push_config_store=push_config_store,<br>        push_sender=push_sender,<br>        request_context_builder=request_context_builder,<br>    )<br>``` |

### `build_starlette_app`

```
build_starlette_app(*, request_handler=None, context_builder=None)
```

Build a Starlette A2A application for ASGI server.

| PARAMETER              | DESCRIPTION |
|------------------------|-------------|
| `request_handler`      | The request handler to use.<br>**TYPE:**`RequestHandler | None`**DEFAULT:**`None` |
| `context_builder`      | The context builder to use.<br>**TYPE:**`CallContextBuilder | None`**DEFAULT:**`None` |

| RETURNS                | DESCRIPTION |
|------------------------|-------------|
| `Starlette`           | A configured Starlette application instance. |

Source code in `autogen/a2a/server.py`

|     |     |
| --- | --- |
| ```<br>191<br>192<br>193<br>194<br>195<br>196<br>197<br>198<br>199<br>200<br>201<br>202<br>203<br>204<br>205<br>206<br>207<br>208<br>209<br>210<br>211<br>212<br>213<br>214<br>215<br>216<br>217<br>218<br>219<br>``` | ```<br>def build_starlette_app(<br>    self,<br>    *,<br>    request_handler: "RequestHandler | None" = None,<br>    context_builder: "CallContextBuilder | None" = None,<br>) -> "Starlette":<br>    """Build a Starlette A2A application for ASGI server.<br>    Args:<br>        request_handler: The request handler to use.<br>        context_builder: The context builder to use.<br>    Returns:<br>        A configured Starlette application instance.<br>    """<br>    from a2a.server.apps import A2AStarletteApplication<br>    return A2AStarletteApplication(<br>        agent_card=self.card,<br>        extended_agent_card=self.extended_agent_card,<br>        http_handler=request_handler<br>        or DefaultRequestHandler(<br>            agent_executor=self.executor,<br>            task_store=InMemoryTaskStore(),<br>        ),<br>        context_builder=context_builder,<br>        card_modifier=self.card_modifier,<br>        extended_card_modifier=self.extended_card_modifier,<br>    ).build()<br>``` |
