Skip to content

Admin MCP server

@severalnines/ccx-admin-mcp is an MCP (Model Context Protocol) server for the CCX admin API. It lets operators and SREs use an AI assistant (Claude Code, Claude Desktop, Cursor, ...) to look across all users and datastores of a CCX installation, for example:

  • "Which datastores are degraded or have a failed last job?"
  • "Show the nodes and the audit log of datastore 936a84de-... for the last 24 hours"
  • "Who owns the datastore called fancy-breeze?"
  • "How many users do we have, and which are suspended?"
  • "Total instance hours per customer for September"

It covers the same endpoints as the admin panel and the billing report API. For the end-user API (a customer's own datastores) use the user MCP server instead.

Credentials

The admin API accepts two kinds of credentials. Both live in Kubernetes secrets in the CCX namespace, the same ones used for the admin panel and the admin API:

Secret Keys Environment variables Covers
admin-users ADMIN_USERS = email:password CCX_ADMIN_USERNAME, CCX_ADMIN_PASSWORD datastores, nodes, audit log, users, billing, cmon version
admin-basic-auth ADMIN_AUTH_USERNAME, ADMIN_AUTH_PASSWORD CCX_ADMIN_BASIC_USERNAME, CCX_ADMIN_BASIC_PASSWORD health check, datastore/user counters, VPC listing, billing

The admin user login is the one you need. Basic auth is optional for everything except ccx_admin_list_vpcs, which has no fallback: the counter tools count the full lists instead, and billing accepts either credential set.

kubectl -n <ccx-namespace> get secret admin-users -o jsonpath='{.data.ADMIN_USERS}' | base64 -d
kubectl -n <ccx-namespace> get secret admin-basic-auth -o jsonpath='{.data.ADMIN_AUTH_USERNAME}' | base64 -d
kubectl -n <ccx-namespace> get secret admin-basic-auth -o jsonpath='{.data.ADMIN_AUTH_PASSWORD}' | base64 -d

Installation

Node.js 18 or newer is required.

Claude Code

claude mcp add ccx-admin \
  -e CCX_BASE_URL=https://ccx.example.com \
  -e CCX_ADMIN_USERNAME=[email protected] \
  -e CCX_ADMIN_PASSWORD='...' \
  -- npx -y @severalnines/ccx-admin-mcp@latest

The -e flags store the values as environment variables of the registered server, so the password is not part of the server's command line every time it starts. It is still visible in the argument list of this one claude mcp add invocation and in your shell history; on a shared machine prefer the JSON configuration below or a .env file.

Other MCP clients

{
  "mcpServers": {
    "ccx-admin": {
      "command": "npx",
      "args": ["-y", "@severalnines/ccx-admin-mcp@latest"],
      "env": {
        "CCX_BASE_URL": "https://ccx.example.com",
        "CCX_ADMIN_USERNAME": "[email protected]",
        "CCX_ADMIN_PASSWORD": "..."
      }
    }
  }
}

From source with a .env file

git clone https://github.com/severalnines/ccx-admin-mcp.git
cd ccx-admin-mcp
npm install             # also builds
cp .env.example .env    # fill in CCX_BASE_URL and the credentials
claude mcp add ccx-admin -- node "$PWD/build/index.js"

Only the .env next to package.json (or one given with --dotenv) is read, never one in the working directory, and only CCX_* keys are imported from it.

Protection mode

Destructive tools are blocked until you opt out with --protect false or CCX_PROTECT=false:

  • ccx_admin_delete_datastore (force-deletes any user's datastore)
  • ccx_admin_delete_user
  • ccx_admin_suspend_user

The delete tools additionally require confirm: true in the tool call. That is a signal for the assistant to check with you before proceeding, not a technical guarantee: protection mode is the only hard guard.

Available tools

Tool Description
ccx_admin_check Verify connectivity and whichever credential sets are configured; shows the admin identity when a session is used
ccx_admin_cmon_version Version of the ClusterControl controller (cmon)
ccx_admin_list_datastores All datastores across all users with owner, status and latest job; filter by status, cloud, type, owner, name or job status
ccx_admin_get_datastore One datastore with its latest job and database nodes
ccx_admin_list_nodes Database and load-balancer nodes: hostname, IP, role, cmon host status, instance type, availability zone
ccx_admin_get_datastore_audit Audit log of a datastore (jobs, resource changes) with time bounds and type filter
ccx_admin_delete_datastore Force-delete a datastore (protected)
ccx_admin_count_datastores Total number of datastores
ccx_admin_list_users All users with suspended/deleted flags; filter by login, name, suspended, deleted
ccx_admin_count_users Customer count plus an internal/external/suspended/deleted breakdown
ccx_admin_suspend_user / ccx_admin_unsuspend_user Suspend a user with a reason, or lift the suspension
ccx_admin_delete_user Delete a user (protected)
ccx_admin_billing_usage Per-datastore usage for a date range: instance hours, volume GiB-hours, egress, backups (see Billing)
ccx_admin_list_vpcs VPC ids known to CCX for an AWS region. The only tool that requires the basic-auth credentials (CCX_ADMIN_BASIC_USERNAME and CCX_ADMIN_BASIC_PASSWORD); the backend does not query the cloud, so an empty result means "unknown" rather than "none"

Security notes

  • The server runs on the operator's machine and connects directly to the CCX API over HTTPS. CCX_BASE_URL must be https:// (plain http:// is only accepted for localhost) and redirects are never followed, so the admin password and session cookie cannot be replayed to another host.
  • Credentials are never written to logs or returned in tool output.
  • Everything the assistant sees comes from the admin API responses; treat the assistant session with the same care as the admin panel.

See the project README for the full reference.