Server and client
These static settings control how DIAL Core accepts client connections and how it opens its own outbound connections to adapters, applications, MCP servers, and identity providers. Core runs on Eclipse Vert.x, and most groups pass straight through to Vert.x options. This reference is for platform engineers who size and harden Core; it assumes you know the static settings precedence.
Server
server.* takes any Vert.x HTTP server option for incoming requests.
| Setting | Default | Description |
|---|---|---|
server.port | 8080 | The port Core listens on. |
server.acceptBacklog | 4096 | The backlog of pending connections. |
server.idleTimeout | 300000 | Time before an idle connection is closed, in the unit set by server.idleTimeoutUnit (MILLISECONDS). |
server.compressionSupported | true | Whether responses can be compressed. |
server.instances | 1 | How many HTTP servers Core starts on server.port. Each new client connection goes to the next one, so connections spread over that many event loops; vertx.eventLoopPoolSize is the useful maximum. See the note below. |
A server.instances value above 1 lets a pod serve more requests per second, with two conditions:
server.portmust not be0. Use a fixed port, or-1for one shared random port.- Where analytics rows carry request and response bodies (API keys without
secured), the analytics writer can fall behind and fill the heap. Setanalytics.maxPendingBodyHeapPercentin that case, or keep1. See Analytics and tracing.
Outbound client
client.* takes any Vert.x HTTP client option for the requests Core sends: to upstreams, for MCP and OAuth discovery, and to fetch application schemas.
| Setting | Default | Description |
|---|---|---|
client.connectTimeout | 10000 | Connect timeout in milliseconds. |
client.idleTimeout | 300000 | Time before an idle connection is closed, in the unit set by client.idleTimeoutUnit (MILLISECONDS). |
client.keepAlive | true | Whether connections are reused. |
client.maxPoolSize | 4096 | Maximum connections in the pool. |
client.maxWaitQueueSize | 0 | Maximum requests waiting for a free connection. |
client.proxyOptions.* | Disabled | An outbound HTTP proxy for Core's own calls to external services, with host, port, username, password, and type (HTTP, SOCKS4, or SOCKS5). It applies to the shared client and, per identity provider, to fetching JWKS. See ProxyOptions. |
client.nonProxyHosts | Empty | A JSON array of host patterns that bypass client.proxyOptions. * is a wildcard. |
webSocketClient.* | — | Any Vert.x WebSocket client option, for outbound WebSocket connections. |
mcpHttpClient.connectTimeout | 10000 | Connect timeout in milliseconds of the client Core uses to call MCP servers: listing and calling toolset tools, and validating API key sign-in. |
Proxying
| Setting | Default | Description |
|---|---|---|
proxy.additionalHopByHopHeaders | [] | A JSON array of extra header names to strip from forwarded requests and responses, on top of the built-in hop-by-hop headers (Connection, Keep-Alive, Host, and others). Names match case-insensitively; blank entries are ignored. |
Vert.x and threads
| Setting | Default | Description |
|---|---|---|
vertx.* | See below | Any Vert.x option. |
asyncTaskExecutor.useVirtualThreads | true | Whether blocking tasks run on virtual threads rather than platform threads. |
The bundled defaults set vertx.workerPoolSize to 64, and turn on Vert.x metrics with JVM metrics and a Prometheus endpoint on an embedded server at port 9464. See Configure metrics.
Example
{
"server": {
"port": 8080,
"instances": 1
},
"client": {
"connectTimeout": 10000,
"proxyOptions": {
"type": "HTTP",
"host": "proxy.internal",
"port": 3128
},
"nonProxyHosts": ["*.svc.cluster.local", "dial-*"]
}
}
Further reading
- Storage — the blob store behind Core
- Analytics and tracing — the request log and OpenTelemetry enrichment
- Scaling — size Core for production load
- Configure metrics — expose DIAL metrics to Prometheus or an OpenTelemetry collector