> Fetch clean Markdown by appending `.md` to any page URL under https://signalwire.com/docs or requesting it with the HTTP header `Accept: text/markdown`. The root index at https://signalwire.com/docs/llms.txt lists the available documentation indexes. # AgentServer > Host multiple AI agents on a single FastAPI server with shared routing and health checks. [agentbase]: /docs/server-sdks/reference/python/agents/agent-base [agentbase-serve]: /docs/server-sdks/reference/python/agents/agent-base/serve [agentbase-run]: /docs/server-sdks/reference/python/agents/agent-base/run [getagent]: /docs/server-sdks/reference/python/agents/agent-server/get-agent [getagents]: /docs/server-sdks/reference/python/agents/agent-server/get-agents [register]: /docs/server-sdks/reference/python/agents/agent-server/register [registerglobalroutingcallback]: /docs/server-sdks/reference/python/agents/agent-server/routing-callback [run]: /docs/server-sdks/reference/python/agents/agent-server/run [servestaticfiles]: /docs/server-sdks/reference/python/agents/agent-server/static-files [setupsiprouting]: /docs/server-sdks/reference/python/agents/agent-server/sip-routing [unregister]: /docs/server-sdks/reference/python/agents/agent-server/unregister AgentServer hosts multiple [`AgentBase`][agentbase] instances on a single FastAPI process. Each agent registers at its own URL route, and the server provides unified health monitoring, SIP-based routing, and static file serving. Use AgentServer when you have several related agents (sales, support, billing) that share the same deployment environment. For a single agent, use [`AgentBase.serve()`][agentbase-serve] or [`AgentBase.run()`][agentbase-run] instead. ## **Properties** **`app`** `FastAPI` The underlying FastAPI application. Use this to add custom routes, middleware, or to run the server with an external ASGI server like gunicorn. --- **`agents`** `dict[str, AgentBase]` Dictionary mapping route strings to registered [`AgentBase`][agentbase] instances. --- **`host`** `str` The host address the server binds to. --- **`port`** `int` The port the server listens on. --- **`log_level`** `str` The logging level for the server. --- ## **Methods** #### [get\_agent](/docs/server-sdks/reference/python/agents/agent-server/get-agent) Retrieve a specific registered agent by its route. #### [get\_agents](/docs/server-sdks/reference/python/agents/agent-server/get-agents) Return all registered agents as a list of route/agent tuples. #### [register](/docs/server-sdks/reference/python/agents/agent-server/register) Register an agent at a URL route on the server. #### [register\_global\_routing\_callback](/docs/server-sdks/reference/python/agents/agent-server/routing-callback) Register a routing callback across all agents for custom request routing. #### [run](/docs/server-sdks/reference/python/agents/agent-server/run) Start the multi-agent server with automatic environment detection. #### [serve\_static\_files](/docs/server-sdks/reference/python/agents/agent-server/static-files) Serve static files from a directory alongside agent routes. #### [setup\_sip\_routing](/docs/server-sdks/reference/python/agents/agent-server/sip-routing) Configure SIP-based routing to direct calls to specific agents by username. #### [unregister](/docs/server-sdks/reference/python/agents/agent-server/unregister) Remove an agent from the server's registry by route. ## **Example** ```python {17} from signalwire import AgentServer from signalwire import AgentBase class SalesAgent(AgentBase): def __init__(self): super().__init__(name="sales-agent", route="/sales") self.add_language("English", "en-US", "rime.spore") self.prompt_add_section("Role", "You are a sales representative.") class SupportAgent(AgentBase): def __init__(self): super().__init__(name="support-agent", route="/support") self.add_language("English", "en-US", "rime.spore") self.prompt_add_section("Role", "You are a support specialist.") if __name__ == "__main__": server = AgentServer(host="0.0.0.0", port=3000) server.register(SalesAgent(), "/sales") server.register(SupportAgent(), "/support") server.run() ``` After starting, agents are available at: | Endpoint | Description | | ------------------------------- | --------------- | | `http://localhost:3000/sales` | Sales agent | | `http://localhost:3000/support` | Support agent | | `http://localhost:3000/health` | Health check | | `http://localhost:3000/ready` | Readiness check | > Host multiple AI agents on a single FastAPI server with shared routing and health checks. ## Docs - [get_agent](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/get-agent.md): Retrieve a specific registered agent by its route. - [get_agents](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/get-agents.md): Return all registered agents as a list of route/agent tuples. - [register](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/register.md): Register an agent at a URL route on the server. - [register_global_routing_callback](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/routing-callback.md): Register a routing callback across all agents for custom request routing. - [run](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/run.md): Start the multi-agent server with automatic environment detection. - [serve_static_files](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/static-files.md): Serve static files from a directory alongside agent routes. - [setup_sip_routing](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/sip-routing.md): Configure SIP-based routing to direct calls to specific agents by username. - [unregister](https://signalwire.com/docs/server-sdks/reference/python/agents/agent-server/unregister.md): Remove an agent from the server's registry by route.