> For a complete index of all SignalWire documentation pages, fetch https://signalwire.com/docs/llms.txt

# AgentServer

> Host multiple AI agents on a single Hono HTTP server with shared routing and health checks.

[agentbase]: /docs/server-sdks/reference/typescript/agents/agent-base

[agentbase-serve]: /docs/server-sdks/reference/typescript/agents/agent-base/serve

[agentbase-run]: /docs/server-sdks/reference/typescript/agents/agent-base/run

[getagent]: /docs/server-sdks/reference/typescript/agents/agent-server/get-agent

[getagents]: /docs/server-sdks/reference/typescript/agents/agent-server/get-agents

[register]: /docs/server-sdks/reference/typescript/agents/agent-server/register

[registerglobalroutingcallback]: /docs/server-sdks/reference/typescript/agents/agent-server/routing-callback

[run]: /docs/server-sdks/reference/typescript/agents/agent-server/run

[servestaticfiles]: /docs/server-sdks/reference/typescript/agents/agent-server/static-files

[setupsiprouting]: /docs/server-sdks/reference/typescript/agents/agent-server/sip-routing

[unregister]: /docs/server-sdks/reference/typescript/agents/agent-server/unregister

`AgentServer` hosts multiple [`AgentBase`][agentbase] instances
on a single Hono HTTP server. 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.

For a single agent, use [`AgentBase.serve()`][agentbase-serve]
or [`AgentBase.run()`][agentbase-run] instead.

## **Constructor**

```typescript {3}
import { AgentServer } from '@signalwire/sdk';

const server = new AgentServer({ host: '0.0.0.0', port: 3000 });
```

### Constructor Parameters

**`opts`** `object`

Optional server configuration.

---

**`opts.host`** `string` — default: 0.0.0.0

Hostname the server binds to.

---

**`opts.port`** `number` — default: 3000

Port the server listens on. Also reads from the `PORT` environment variable.

---

**`opts.logLevel`** `string` — default: info

Logging level: `'debug'`, `'info'`, `'warn'`, or `'error'`. Lowercased and applied globally via `setGlobalLogLevel`.

---

## **Properties**

**`host`** `string`

The hostname the server binds to.

---

**`port`** `number`

The port the server listens on.

---

**`logLevel`** `string`

The logging level for the server (read-only).

---

## **Methods**

#### [getAgent](/docs/server-sdks/reference/typescript/agents/agent-server/get-agent)

Retrieve a specific registered agent by its route.

#### [getAgents](/docs/server-sdks/reference/typescript/agents/agent-server/get-agents)

Return all registered agents as a Map.

#### [getApp](/docs/server-sdks/reference/typescript/agents/agent-server/get-app)

Get the fully configured Hono application.

#### [register](/docs/server-sdks/reference/typescript/agents/agent-server/register)

Register an agent at a URL route on the server.

#### [registerGlobalRoutingCallback](/docs/server-sdks/reference/typescript/agents/agent-server/routing-callback)

Register a routing callback across all agents for custom request routing.

#### [run](/docs/server-sdks/reference/typescript/agents/agent-server/run)

Start the multi-agent HTTP server.

#### [serveStaticFiles](/docs/server-sdks/reference/typescript/agents/agent-server/static-files)

Serve static files from a directory alongside agent routes.

#### [setupSipRouting](/docs/server-sdks/reference/typescript/agents/agent-server/sip-routing)

Configure SIP-based routing to direct calls to specific agents by username.

#### [unregister](/docs/server-sdks/reference/typescript/agents/agent-server/unregister)

Remove an agent from the server's registry by route.

## **Example**

```typescript {11-14}
import { AgentBase, AgentServer } from '@signalwire/sdk';

const salesAgent = new AgentBase({ name: 'sales-agent', route: '/sales' });
salesAgent.addLanguage({ name: 'English', code: 'en-US', voice: 'rime.spore' });
salesAgent.promptAddSection('Role', { body: 'You are a sales representative.' });

const supportAgent = new AgentBase({ name: 'support-agent', route: '/support' });
supportAgent.addLanguage({ name: 'English', code: 'en-US', voice: 'rime.spore' });
supportAgent.promptAddSection('Role', { body: 'You are a support specialist.' });

const server = new AgentServer({ host: '0.0.0.0', port: 3000 });
server.register(salesAgent, '/sales');
server.register(supportAgent, '/support');
await 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 |