phacility/phabricator · error · PhutilArgumentUsageException

Configuration file does not specify any administrative serve

Error message

Configuration file does not specify any administrative servers. This service will be unable to receive messages. You must specify at least one server with type "%s".

What it means

Thrown when the Aphlict config's servers list has no entry with type "admin". The admin listener is where the Phabricator web tier POSTS notification messages (e.g. via PhabricatorNotificationServerRef); without it the service can never receive messages, so config validation fails.

Source

Thrown at src/applications/aphlict/management/PhabricatorAphlictManagementWorkflow.php:190

          'will not be able to interact with the outside world if it does '.
          'not listen on any ports. You must specify at least one "%s" '.
          'server and at least one "%s" server.',
          'admin',
          'client'));
    }

    if (!$has_client) {
      throw new PhutilArgumentUsageException(
        pht(
          'Configuration file does not specify any client servers. This '.
          'service will be unable to transmit any notifications without a '.
          'client server. You must specify at least one server with '.
          'type "%s".',
          'client'));
    }

    if (!$has_admin) {
      throw new PhutilArgumentUsageException(
        pht(
          'Configuration file does not specify any administrative '.
          'servers. This service will be unable to receive messages. '.
          'You must specify at least one server with type "%s".',
          'admin'));
    }

    $logs = idx($data, 'logs', array());
    foreach ($logs as $index => $log) {
      PhutilTypeSpec::checkMap(
        $log,
        array(
          'path' => 'string',
        ));

      $path = $log['path'];

      try {

View on GitHub (pinned to 5720a38cfe)

Solutions

  1. Add {"type": "admin", "port": 22281} (bind it to 127.0.0.1 with "listen" if the web tier is on the same host)
  2. Confirm Phabricator's cluster notification config points at the same host:port you configure here

Example fix

// before
"servers": [{"type": "client", "port": 22280}]
// after
"servers": [
  {"type": "client", "port": 22280},
  {"type": "admin",  "port": 22281, "listen": "127.0.0.1"}
]
Defensive patterns

Strategy: validation

Validate before calling

$types = array();
foreach ($config['servers'] as $server) {
  $types[] = idx($server, 'type');
}
if (!in_array('admin', $types, true)) {
  throw new InvalidArgumentException('No admin server configured; Phabricator cannot post messages');
}

Prevention

When it happens

Trigger: "servers" contains only client entries; admin entry removed during a cleanup or its type was typo'd so $has_admin never becomes true.

Common situations: Minimal config copied from a browser-only websocket example; security tightening that dropped the admin listener without wiring an alternative.

Related errors


AI-assisted analysis of phacility/phabricator@5720a38cfe (2026-08-21). Data as JSON: /api/errors/d323fc19ae48e370. Report an issue: GitHub.