cb-analytics-admin
Use this skill when the user wants to inspect or manage the Analytics service's runtime — checking ingestion health, killing runaway queries, restarting nodes,…
Use this skill when the user wants to manage Couchbase users, groups, roles, or check permissions on the cluster — creating service accounts, rotating passwords, granting analytics privileges, or auditing who can do what. Trigger when they mention "user", "group", "role",
$ npx -y skills add celticht32/Couchbase-Skills-for-Claude.ai --skill cb-analytics-security --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/cb-analytics-securityContext preview
The summary Claude sees to decide when to auto-load this skill.
Use this skill when the user wants to manage Couchbase users, groups, roles, or check permissions on the cluster — creating service accounts, rotating passwords, granting analytics privileges, or auditing who can do what. Trigger when they mention "user", "group", "role",
name: cb-analytics-security description: | Use this skill when the user wants to manage Couchbase users, groups, roles, or check permissions on the cluster — creating service accounts, rotating passwords, granting analytics privileges, or auditing who can do what. Trigger when they mention "user", "group", "role", "RBAC", "permission", "upsert_user", "check_permissions", "local domain", "external domain", or "analytics_reader" / "analytics_admin". license: MIT
You have 9 RBAC tools: list/get/upsert/delete user, list/upsert/delete group, list roles, and check permissions.
Couchbase users live in one of two domains:
role bindings.
Every user-related tool takes a `domain` argument. If you list users without a domain you get both.
`roles` is a single comma-separated string, never a list. Each role can be unscoped or scoped:
analytics_reader[*] # all buckets analytics_select[bucket1] # one bucket analytics_select[bucket1:scope1] # one scope analytics_admin[*],query_select[bucket1] # multiple roles
Use `list_roles()` first if you don't know what's available — it returns every role the cluster supports, with descriptions.
For Claude itself, or any automation, create a least-privileged user:
upsert_user(
domain="local",
username="cb-mcp",
roles="analytics_reader[*],analytics_select[*]",
password="<generated>",
full_name="cb-analytics-mcp service account"
)**Never** use `analytics_admin` or `cluster_admin` for the MCP server's cluster credentials in production. Grant only what the workflow needs.
The password is passed as a plain string into the tool and immediately wrapped in `SecretStr` inside the impl, then unwrapped only at the HTTP boundary. The audit log redacts it. That said:
`check_permissions(permissions="cluster.analytics!read,cluster.admin!write")` returns a dict mapping each permission to `true`/`false` for the currently authenticated user (the one in `CB_ANALYTICS_USERNAME`). Use this when:
is the cause.
Groups bundle role assignments and apply them to multiple users. Workflow:
1. `upsert_group("analytics-readers", roles="analytics_reader[*]", description="Read-only analytics users")` 2. `upsert_user(..., roles="local:analytics-readers")` to assign by group reference (Couchbase 7.2+).
active requests).
a secrets manager instead.
side channel (1Password, vault, etc.) and ask the user to confirm it's stored.
Security/RBAC tools split across two categories:
`list_roles`, `check_permissions`.
`upsert_group`, `delete_group`.
The 1/sec write limit is deliberate — RBAC changes are durable cluster state and the typical error mode is "did something irreversible quickly". Bulk-provisioning users from a roster? Sequence them, accept the ~1 second per user.
If `RateLimitExceeded` comes back on an `upsert_user` or `delete_user`, honour `retry_after_sec`. Don't retry-storm.
Reads (`list_users`, `check_permissions`, etc.) share the global `read` bucket. If you're auditing a permissions matrix, batch — one `list_users` then targeted `check_permissions` calls is friendlier than calling `get_user` per user-per-role combination.
Worth noting: rate limits are per **API key**, not per cluster. If a single bearer token is doing both heavy RBAC bulk-load AND read-heavy inspection at the same time, they contend for separate buckets, but the bulk-load can starve other writes on the same key. Use distinct API keys per workload if this matters.
Claude skill files for working with Couchbase — covering every major service and deployment pattern from application integration through AI applications, Kubernetes operations, mobile sync, security hardening, and analytics.
Repo: celticht32/Couchbase-Skills-for-Claude.ai
Use this skill when the user wants to inspect or manage the Analytics service's runtime — checking ingestion health, killing runaway queries, restarting nodes,…
Use this skill when the user wants to manage Couchbase Capella resources through the Cloud Management API — listing organisations and clusters, provisioning or…
Use this skill when the user wants to inspect or configure the Couchbase cluster itself — node membership, memory quotas, rebalance, auto-failover, system…
Use this skill when the user is managing Analytics data-source links — S3, Azure Blob, GCS, or remote Couchbase links — including creating, updating, listing,…
Use this skill when the user is setting up cb-analytics-mcp from scratch or troubleshooting an existing install — generating secrets, configuring .env, running…
Use this skill when the user wants to write or improve SQL++ queries against Couchbase Analytics through cb-analytics-mcp. Trigger when they mention "SQL++",…