Skip to content
Back to skills

Mongodb Atlas Cli

BSecurity

Comprehensive MongoDB Atlas + mongosh skill for performance auditing, all index types (b-tree/text/2dsphere/hashed/TTL/partial/wildcard/Atlas-Search/Vector-Search), Performance Advisor analysis, query explain, schema advice, backup status, alerts, week-over-week diffs, and additive index creation. Read-only by default; create-index ops gated behind explicit `--confirm`. Hard-blocks any destructive op (delete, drop, restore, pause, terminate, kill, dbuser write, network change). Works against ...

  • 28 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added May 27, 2026
data-aipythongobashdockergitapidatabasebackendperformance

Works with

  • cli
  • api
  • mcp

Security analysis

B88/100
  • criticalAccesses sensitive system or user directories

Pro scans all 20 files and shows the line behind each finding

Scanned May 27, 2026

npx -y skills add georgekhananaev/claude-skills-vault --skill mongodb-atlas-cli --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Mongodb Atlas Cli?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Mongodb Atlas Cli
[![Security: B — Skills Directory](https://www.skillsdirectory.com/api/skills/georgekhananaev-mongodb-atlas-cli/badge)](https://www.skillsdirectory.com/skills/georgekhananaev-mongodb-atlas-cli)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: mongodb-atlas-cli
description: Comprehensive MongoDB Atlas + mongosh skill for performance auditing, all index types (b-tree/text/2dsphere/hashed/TTL/partial/wildcard/Atlas-Search/Vector-Search), Performance Advisor analysis, query explain, schema advice, backup status, alerts, week-over-week diffs, and additive index creation. Read-only by default; create-index ops gated behind explicit `--confirm`. Hard-blocks any destructive op (delete, drop, restore, pause, terminate, kill, dbuser write, network change). Works against Atlas Cloud (full feature set) and self-hosted/local mongo (mongosh-based subset).
---

# MongoDB Atlas CLI Skill

Comprehensive coverage of MongoDB Atlas operations w/ strict safety guarantees. Optimized for the loop: **read Performance Advisor → review suggestions → create the right indexes safely**. Never destructive.

## When to Use

Invoke when the user wants to:

- Connect to Atlas, list clusters/processes/projects
- Pull Performance Advisor output (slow queries, suggested indexes, schema advice, drop hints)
- Read cluster/process/database metrics, alerts, backup status
- List existing indexes w/ live access counts (mongosh-based)
- Explain a query (find or aggregate)
- Create indexes — single, compound, TTL, sparse, partial, unique, geospatial, hashed, Atlas Search, Vector Search
- Diff two audits week-over-week
- Audit overall cluster performance
- Diagnose slow queries before code changes

**Do NOT use for** any destructive op. Direct CRUD against data is also out of scope (use `mongosh` directly or the official MongoDB MCP server — see [Integration](#complementary-tools)).

## Hard Safety Boundaries

| Category | Op | Action |
|----------|-----|--------|
| Read | clusters/processes/metrics/logs/projects | Allowed, no confirm |
| Read | performanceAdvisor (all subcmds) | Allowed, no confirm |
| Read | api performanceAdvisor list* | Allowed, no confirm |
| Read | alerts/events/backups list, dbusers list | Allowed, no confirm |
| Read | clusters search indexes list | Allowed, no confirm |
| Read | mongosh: getIndexes, $indexStats, .explain(), getProfilingStatus | Allowed, no confirm |
| Write (additive) | `clusters indexes create` | Requires `--confirm` + dry-run + duplicate pre-flight |
| Write (additive) | `clusters search indexes create` | Requires `--confirm` + dry-run |
| Destructive | `delete`, `drop`, `terminate`, `pause`, `restore`, `kill`, `force` | **REFUSE** — never run, even w/ user request |
| Destructive | `dbusers create/update/delete` | **REFUSE** — auth changes can lock prod |
| Destructive | `networking *` writes, `accessLists delete` | **REFUSE** — can sever connectivity |
| Destructive | `backups restore` / snapshot delete | **REFUSE** — overwrites data |
| Destructive | `clusters indexes delete` | **REFUSE** — even if advisor suggests dropping; only INFORM the user |

If user asks to drop an index based on `listDropIndexSuggestions`, surface the suggestion and tell them to do it manually in mongosh / Atlas UI. Never run it.

## Local Mongo vs. Atlas Cloud

This skill works against **both**, but coverage differs. Performance Advisor, metrics, backups, alerts, Atlas Search are cloud-only. mongosh-based scripts (list_indexes, explain_query, profiler_status) work everywhere. Full matrix in [`references/local-vs-atlas.md`](references/local-vs-atlas.md).

For local self-hosted mongo, `safe_index_create.py --print-mongosh` outputs the equivalent `createIndex()` snippet you can run directly in mongosh.

## Prerequisites

### Install

```bash
# macOS — both atlas CLI + mongosh
brew install mongodb-atlas

# Linux — see https://www.mongodb.com/docs/atlas/cli/current/install-atlas-cli/

# Docker fallback (any OS)
docker pull mongodb/atlas
alias atlas='docker run --rm -it -v ~/.config/atlas:/root/.config/atlas mongodb/atlas atlas'

# Verify
atlas --version && mongosh --version
```

`validate_env.py --install` auto-installs via brew on macOS.

### Authenticate (Atlas Admin API)

Pick one (priority order):

```bash
# 1. Env vars (recommended for automation)
export MONGODB_ATLAS_PUBLIC_API_KEY=<public_key>
export MONGODB_ATLAS_PRIVATE_API_KEY=<private_key>
export MONGODB_ATLAS_PROJECT_ID=<24-hex-project-id>

# 2. Profile config
atlas config init

# 3. Browser
atlas auth login
```

API key role: **Project Read Only** for reads, **Project Data Access Admin** for index creation. Get keys: Atlas UI → Project Settings → Access Manager → API Keys.

### Authenticate (mongosh-based scripts)

For `list_indexes.py`, `explain_query.py`, `profiler_status.py`, `safe_index_create.py` pre-flight:

```bash
export MONGODB_CONNECTION_STRING="mongodb+srv://<host>.mongodb.net/?authSource=admin"
export MONGODB_USERNAME="<atlas-db-user>"
export MONGODB_PASSWORD="<password>"
```

DB user is **separate** from API key — Atlas UI → Database Access → ADD NEW DATABASE USER. See [`references/mongosh-integration.md`](references/mongosh-integration.md).

### Validate

```bash
python3 .claude/skills/mongodb-atlas-cli/scripts/validate_env.py
```

## Script Index

### Atlas Admin API (read-only, no DB credentials needed)

| Script | Task |
|---|---|
| `validate_env.py` | Check CLI install + auth + project access |
| `performance_audit.py` | Full read-only audit (orchestrator) |
| `namespaces.py` | Performance Advisor → list hot namespaces (entry point) |
| `suggest_indexes.py` | Performance Advisor → suggested new indexes |
| `slow_queries.py` | Performance Advisor → slow query log lines |
| `schema_advice.py` | Performance Advisor → schema anti-pattern recommendations |
| `drop_index_hints.py` | Performance Advisor → redundant/hidden/unused indexes (advisory) |
| `cluster_health.py` | Process metrics (CPU/mem/conn/op counters/query targeting) — parallel fetches |
| `alerts.py` | Active Atlas alerts |
| `backup_status.py` | Snapshot list + freshness check |
| `events.py` | Project events / audit log |
| `atlas_search_list.py` | List Atlas Search & Vector Search indexes |
| `audit_diff.py` | Compare two audit JSON snapshots — week-over-week diff |

### Atlas Admin API (additive write — gated by `--confirm`)

| Script | Task |
|---|---|
| `safe_index_create.py` | Create normal index — single/compound/TTL/sparse/partial/unique/2dsphere/hashed |
| `atlas_search_create.py` | Create Atlas Search OR Vector Search index |

### mongosh-based (works on local + Atlas — needs DB user creds)

| Script | Task |
|---|---|
| `list_indexes.py` | List indexes per coll/db w/ live access counts & sizes — parallel per coll |
| `explain_query.py` | Run `.explain()` on find or aggregate query |
| `profiler_status.py` | DB profiler level + recent slow ops captured |
| `index_build_status.py` | Poll in-progress index builds via `db.currentOp()` |

All mongosh scripts validate db/collection identifiers before interpolating into JS to prevent injection. Passwords passed via stdin (not argv) to avoid `/proc/<pid>/cmdline` exposure on Linux.

### Pure local

| Script | Task |
|---|---|
| `audit_diff.py` | Compare audits week-over-week (no Atlas calls) |
| `safe_index_create.py --print-mongosh` | Print mongosh createIndex() snippet for local use |

All scripts default to **dry-run/read-only**. Mutations need explicit `--confirm`.

## Common Workflows

### 1. Optimize from advisor → index

```bash
# Full picture
python3 scripts/performance_audit.py --cluster <C> --hours 168

# Verify what's already there
python3 scripts/list_indexes.py --db <DB> --collection <COLL>

# Inspect a specific suggestion's query first
python3 scripts/explain_query.py --db <DB> --collection <COLL> --filter '{...}'

# Create (dry-run)
python3 scripts/safe_index_create.py --cluster <C> --db <DB> --collection <COLL> \
  --key field:1 --name idx_field

# Execute
python3 scripts/safe_index_create.py --cluster <C> --db <DB> --collection <COLL> \
  --key field:1 --name idx_field --confirm

# Re-audit after build completes
python3 scripts/performance_audit.py --cluster <C>
```

### 2. Atlas Search for case-insensitive regex queries

When schema advice flags `OPTIMIZE_CASE_INSENSITIVE_REGEX_QUERIES`:

```bash
# See existing search indexes
python3 scripts/atlas_search_list.py --cluster <C> --db <DB> --collection <COLL>

# Generate starter definition
python3 scripts/atlas_search_create.py --init-template search > search.json
# edit search.json

# Dry-run
python3 scripts/atlas_search_create.py --cluster <C> --db <DB> --collection <COLL> \
  --name <coll>_text --file search.json

# Execute
python3 scripts/atlas_search_create.py --cluster <C> --db <DB> --collection <COLL> \
  --name <coll>_text --file search.json --confirm
```

### 3. Vector Search for AI / RAG

```bash
python3 scripts/atlas_search_create.py --init-template vector > vec.json
# edit vec.json — set numDimensions matching your embedding model
python3 scripts/atlas_search_create.py --cluster <C> --db <DB> --collection <COLL> \
  --name <coll>_vec --file vec.json --type vectorSearch --confirm
```

### 4. Drop redundant indexes (manually — skill won't drop)

```bash
# Get advisory list
python3 scripts/drop_index_hints.py --cluster <C>

# Verify w/ live counters
python3 scripts/list_indexes.py --db <DB> --collection <COLL>

# Confirm covering index serves a real query
python3 scripts/explain_query.py --db <DB> --collection <COLL> \
  --filter '{<typical_filter>}'

# Hide first (24-48h soak), then drop manually in mongosh
mongosh ... --eval 'db.runCommand({collMod: "<COLL>", index: {name: "<NAME>", hidden: true}})'
```

### 5. Weekly automation

```bash
# Save snapshot
python3 scripts/performance_audit.py --cluster <C> --hours 168 --json > audits/$(date +%F).json

# Diff vs. last week
python3 scripts/audit_diff.py audits/<old>.json audits/<new>.json --markdown > diff.md
```

### 6. Health checks (read-only, run anytime)

```bash
python3 scripts/cluster_health.py --cluster <C>
python3 scripts/backup_status.py --cluster <C>
python3 scripts/alerts.py --status OPEN
```

## Index Types Supported

`safe_index_create.py` covers every standard MongoDB index type:

| Type | Flag combination | Atlas-only? |
|---|---|---|
| Single-field | `--key field:1` | no |
| Compound | `--key f1:1 --key f2:-1 ...` | no |
| TTL | `--key created_at:1 --ttl-seconds N` | no |
| Sparse | `--sparse` | no |
| Partial | `--partial-filter pf.json` | no |
| Unique | `--unique` | no |
| Combined (e.g. unique + partial) | `--unique --partial-filter pf.json` | no |
| Geospatial 2dsphere | `--key location:2dsphere` | no |
| Hashed (sharding) | `--key user_id:hashed` | no |
| Text (legacy) | `--key field:text` | no |
| Wildcard | `--file <json>` w/ `{"keys": [{"$**": 1}]}` | no |
| Atlas Search | `atlas_search_create.py --type search` | **yes** |
| Vector Search | `atlas_search_create.py --type vectorSearch` | **yes** |

Full reference: [`references/index-types.md`](references/index-types.md).

## Pre-flight Duplicate Detection

`safe_index_create.py` runs a pre-flight via mongosh (when creds are available) that checks if:
- An index w/ **identical keys** already exists → refuses to create duplicate
- An existing **larger compound** already covers the proposed keys as a prefix → refuses (your index would be redundant)

Override w/ `--skip-preflight` (not recommended). If mongosh creds aren't available, pre-flight is silently skipped.

## Output Format

Default: human-readable summary to stderr, JSON to stdout when `--json` flag set. Pipe through `jq`:

```bash
python3 scripts/suggest_indexes.py --cluster <C> --json | jq '.[] | .namespace'
```

## Error Handling

When scripts detect missing credentials or permission errors, they output:

```
MISSING: <ENV_VAR>
ASK_USER: <human prompt>
LOCATION: <where to find the value>
```

Claude should parse & use AskUserQuestion to prompt.

For permission errors:
```
PERMISSION_DENIED: requires <role>
ACTION: Ask user to grant role or use a different API key
```

## Refusal Pattern

Refused destructive ops produce:

```
REFUSED: `atlas <command>` is a destructive op blocked by this skill.
  Matched forbidden prefix: <prefix>
  Run it manually in Atlas UI or via `atlas` directly if you intend to.
```

Never bypass — even w/ "I'm sure", "force it", "yolo". Tell the user to run it manually.

## Complementary Tools

This skill focuses on **admin/audit/index-management**. For complementary capabilities:

| Need | Tool |
|---|---|
| AI-assisted CRUD against data, NL → query, schema introspection | [MongoDB MCP Server](https://www.mongodb.com/docs/mcp-server/get-started/) |
| Atlas Stream Processing pipelines | [jwongmongodb/atlas-streams-skills](https://github.com/jwongmongodb/atlas-streams-skills) |
| Connection pool / driver tuning | [MongoDB Agent Skills — Connection](https://github.com/mongodb/agent-skills) |
| Schema design from scratch | sibling `pydantic-model` skill in this repo |

## References

| Topic | File |
|---|---|
| Full Atlas CLI command map | [`references/cli-commands.md`](references/cli-commands.md) |
| Performance Advisor deep-dive | [`references/performance-advisor.md`](references/performance-advisor.md) |
| Index strategy (ESR, etc.) | [`references/index-strategy.md`](references/index-strategy.md) |
| **Every index type w/ examples** | [`references/index-types.md`](references/index-types.md) |
| **Atlas Search + Vector Search** | [`references/atlas-search.md`](references/atlas-search.md) |
| **Local vs. Atlas feature matrix** | [`references/local-vs-atlas.md`](references/local-vs-atlas.md) |
| **mongosh integration details** | [`references/mongosh-integration.md`](references/mongosh-integration.md) |
| **Quick recipes (copy-paste)** | [`references/quick-recipes.md`](references/quick-recipes.md) |
| Safety boundaries detail | [`references/safety-boundaries.md`](references/safety-boundaries.md) |
| Troubleshooting | [`references/troubleshooting.md`](references/troubleshooting.md) |

## Integration

Pairs w/:
- `senior-backend` — schema/query design before adding indexes
- `code-quality` — review query code that produces slow ops
- `pydantic-model` — model-level fixes that reduce doc bloat
- MongoDB MCP server — for direct data ops

Files in this skill

  • SKILL.md13.9 KB
  • references/atlas-search.md4.3 KB
  • references/cli-commands.md4.2 KB
  • references/index-strategy.md3.8 KB
  • references/index-types.md8.8 KB
  • references/local-vs-atlas.md6.2 KB
  • references/mongosh-integration.md4.4 KB
  • references/performance-advisor.md4.6 KB
  • references/quick-recipes.md6.6 KB
  • references/safety-boundaries.md4 KB
  • references/troubleshooting.md3.6 KB
  • scripts/_common.py11.2 KB
  • scripts/_mongo.py6.5 KB
  • scripts/alerts.py2.6 KB
  • scripts/atlas_search_create.py5.5 KB
  • scripts/atlas_search_list.py3.7 KB
  • scripts/audit_diff.py7.2 KB
  • scripts/backup_status.py4.5 KB
  • scripts/cluster_health.py4.7 KB
  • scripts/drop_index_hints.py4.3 KB

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.