All 55 MCP tools, organised by group. Each tool's signature is given as it
appears to Claude. Most tools accept an optional cluster parameter; if you
omit it the default (first-configured) cluster is used.
Every result follows the same shape:
{ "ok": true, "data": ..., "cluster": "prod" }or, on failure:
{ "ok": false, "error": "AnalyticsAuthError", "message": "HTTP 401: ..." }Rate-limit failures use a structured error including retry_after_sec so
clients can back off:
{ "ok": false, "error": "RateLimitExceeded",
"message": "Rate limit exceeded for category 'write' (limit 1/sec). Retry in 0.82s.",
"category": "write", "rate_per_sec": 1, "retry_after_sec": 0.82 }See docs/security.md for the rate-limit categories and defaults.
Return the configured cluster names, the default, and whether Capella is enabled.
Return name, version, and the available tool groups.
List every dataverse in the cluster's Analytics metadata.
List datasets, optionally filtered by dataverse.
Sample sample_size documents and report observed top-level fields with
presence counts and value types. Dataset names are whitelisted by a strict
regex before interpolation to prevent SQL++ injection.
execute_query(statement, named_args=None, positional_args=None, scan_consistency=None, timeout="120s", cluster=None)
Run any SQL++ statement, including DDL and DML. scan_consistency may be
not_bounded, request_plus, or at_plus.
Responses include truncated: true and full_row_count when more rows
were available than the MAX_QUERY_ROWS cap (default 1000). Use
execute_query_paginated to walk the full result.
Run a read-only SELECT. The service can apply extra optimisations and the
client adds readonly=true to the payload. Results are cached for ~60 seconds
keyed by (cluster, statement, scan_consistency); the response includes a
cached boolean so Claude can see whether a query hit the cache.
execute_query_paginated(statement, page_size=100, named_args=None, positional_args=None, scan_consistency=None, timeout="120s", cluster=None)
Run a SELECT and return the first page (default 100 rows) plus a pagination
handle. Use fetch_next_page(handle) to retrieve subsequent pages. The handle
expires after 30 minutes of inactivity. Prefer this for any SELECT that might
return more than a few thousand rows — sending the full result through the
MCP boundary is expensive and the LLM rarely benefits from seeing more than
the first few hundred. Pagination is implemented as server-side LIMIT/OFFSET
rewriting; a trailing LIMIT/OFFSET on your statement will be stripped so the
pagination is applied cleanly.
Response includes pagination_handle, page_size, page_offset,
rows_returned, and has_more.
Fetch the next page of a previously paginated query. Returns rows plus a new
has_more flag and updated page_offset / total_seen counts. When
has_more is false the handle is automatically dropped.
Return the Couchbase Analytics query plan (EXPLAIN output) for a SQL++
statement. Use this to investigate slow queries: the plan shows scan/filter/
join order and confirms whether an index is being used. Either pass a plain
SELECT (Claude will prepend EXPLAIN) or a statement already starting with
EXPLAIN.
| tool | summary |
|---|---|
get_service_status(cluster=None) |
Analytics service state, replica lag, authorised nodes. |
get_ingestion_status(cluster=None) |
Per-link ingestion status with pending operations. |
get_active_requests(cluster=None) |
Currently-running queries. |
get_completed_requests(client_context_id=None, cluster=None) |
Recently-completed queries (history slice). |
cancel_request(client_context_id, cluster=None) |
Cancel an in-flight query. |
restart_service(cluster=None) |
Cluster-wide Analytics restart. Destructive. |
restart_node(cluster=None) |
Restart only the local Analytics node. |
| tool | summary |
|---|---|
get_service_config(cluster=None) |
Service-level config (resultTtl, compilerParallelism, …). |
update_service_config(settings, cluster=None) |
Update specific keys. |
get_analytics_settings(cluster=None) |
Cluster-wide settings (numReplicas). |
update_analytics_settings(num_replicas, cluster=None) |
Change replica count. |
| tool | summary |
|---|---|
list_links(dataverse=None, link_type=None, cluster=None) |
List Analytics data-source links. |
get_link(name, cluster=None) |
Get a single link. |
create_link(name, dataverse, config, cluster=None) |
Create a link. config is a typed dict matching the link kind (S3, Azure, GCS, Couchbase). |
update_link(name, config, cluster=None) |
Update an existing link's config. |
delete_link(name, cluster=None) |
Delete a link. |
Link credentials in config are redacted automatically by the audit logger.
| tool | summary |
|---|---|
list_libraries(cluster=None) |
List installed UDF libraries with their functions. |
delete_library(scope, library_name, cluster=None) |
Delete a library. |
| tool | summary |
|---|---|
list_users(domain=None, cluster=None) |
List users (optionally filtered to local / external). |
get_user(domain, username, cluster=None) |
Get a single user. |
upsert_user(domain, username, roles, password=None, full_name=None, cluster=None) |
Create or update a user. roles is a comma-separated role list. |
delete_user(domain, username, cluster=None) |
Delete a user. |
list_groups(cluster=None) |
List all groups. |
upsert_group(groupname, roles, description=None, cluster=None) |
Create or update a group. |
delete_group(groupname, cluster=None) |
Delete a group. |
list_roles(cluster=None) |
Enumerate all available roles. |
check_permissions(permissions, cluster=None) |
Test the current user against a comma-separated permission list. |
| tool | summary |
|---|---|
ping_cluster(cluster=None) |
Liveness check. |
get_cluster_info(cluster=None) |
UUID + version. |
get_cluster_details(cluster=None) |
Nodes, memory quotas, rebalance status. |
get_cluster_tasks(cluster=None) |
In-flight cluster tasks. |
get_rebalance_progress(cluster=None) |
Current rebalance progress (or none). |
get_auto_failover_settings(cluster=None) |
Read auto-failover config. |
configure_auto_failover(enabled, timeout=120, max_count=1, cluster=None) |
Update auto-failover config. |
get_system_events(since_time=None, cluster=None) |
Recent system events. |
who_am_i(cluster=None) |
The authenticated user as seen by the cluster. |
These require CB_CAPELLA_API_KEY_SECRET to be set; otherwise the tools
return a clear RuntimeError.
| tool | summary |
|---|---|
capella_list_organizations() |
List orgs visible to the API key. |
capella_list_clusters(org_id, project_id) |
List clusters in a project. |
capella_get_cluster(org_id, project_id, cluster_id) |
Get cluster details. |
capella_create_cluster(org_id, project_id, cluster_spec) |
Create a cluster. |
capella_delete_cluster(org_id, project_id, cluster_id) |
Delete a cluster. Destructive. |
capella_list_backups(org_id, project_id, cluster_id) |
List backups. |
capella_create_backup(org_id, project_id, cluster_id) |
Trigger a backup. |
capella_restore_backup(org_id, project_id, cluster_id, backup_id, target_cluster_id=None) |
Restore a backup. |
capella_list_api_keys(org_id) |
List API keys for an org. |