Skip to main content

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.

SettingDefaultDescription
server.port8080The port Core listens on.
server.acceptBacklog4096The backlog of pending connections.
server.idleTimeout300000Time before an idle connection is closed, in the unit set by server.idleTimeoutUnit (MILLISECONDS).
server.compressionSupportedtrueWhether responses can be compressed.
server.instances1How 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.port must not be 0. Use a fixed port, or -1 for 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. Set analytics.maxPendingBodyHeapPercent in that case, or keep 1. 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.

SettingDefaultDescription
client.connectTimeout10000Connect timeout in milliseconds.
client.idleTimeout300000Time before an idle connection is closed, in the unit set by client.idleTimeoutUnit (MILLISECONDS).
client.keepAlivetrueWhether connections are reused.
client.maxPoolSize4096Maximum connections in the pool.
client.maxWaitQueueSize0Maximum requests waiting for a free connection.
client.proxyOptions.*DisabledAn 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.nonProxyHostsEmptyA JSON array of host patterns that bypass client.proxyOptions. * is a wildcard.
webSocketClient.*—Any Vert.x WebSocket client option, for outbound WebSocket connections.
mcpHttpClient.connectTimeout10000Connect timeout in milliseconds of the client Core uses to call MCP servers: listing and calling toolset tools, and validating API key sign-in.

Proxying​

SettingDefaultDescription
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​

SettingDefaultDescription
vertx.*See belowAny Vert.x option.
asyncTaskExecutor.useVirtualThreadstrueWhether 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​