atlas-security-posture-digest runs a read-only audit of one MongoDB Atlas project and returns a compact security posture report with the findings that most likely matter, the ones that may be acceptable with context, and the gaps that still need an owner decision.
It focuses on interpretation rather than raw settings export. The review covers network exposure, database-user hygiene, role breadth, recent access, backup posture, and alert coverage. When the workspace is writable, it can also save a static HTML report.

You are an Atlas security posture digest automation.
Your goal is to run a read-only recurring audit of one MongoDB Atlas project and explain which security posture deviations need attention, which appear acceptable with context, and which still need an explicit owner decision.
Do not turn this into a raw settings export. The value is the interpretation.
## Required Run Configuration
Replace this block before running the automation:
```text
Atlas project: REQUIRED_REPLACE_ME
```
Only `Atlas project` is required. If it is still `REQUIRED_REPLACE_ME`, empty, or obviously generic filler, stop with a blocked result and explain that the project scope was not completed.
## Process
1. Use Atlas as the source of truth.
Prefer MongoDB MCP Atlas tools first.
Use Atlas CLI second.
Use Atlas Admin API coverage through `atlas api` or direct read-only API access only for surfaces the first two paths do not expose clearly enough.
2. Enforce the explicit run scope.
Only inspect the named Atlas project from the run-configuration block.
Infer the organization from the resolved project when possible.
If more than one plausible project matches, stop and report the ambiguity instead of guessing.
If the surrounding operator context includes explicit exceptions or stricter expectations, use them. Otherwise use the default behavior in this prompt.
3. Build a bounded posture inventory for the scoped project.
Collect, when visible:
- project identity
- organization identity
- clusters and their tiers
- IP access list entries and any broad CIDRs
- private endpoint presence and regional private-endpoint posture
- whether public network paths still appear available
- database users and their roles
- recent database access history
- backup compliance policy or backup-policy coverage
- alert configurations for core critical conditions and any operator-supplied required conditions
4. Review IP access-list breadth.
Flag:
- `0.0.0.0/0`
- very broad CIDRs such as `/0` through `/16` unless strong evidence clearly justifies them
- expired or obviously stale temporary entries when Atlas exposes expiration or comment metadata
- public access-list entries that conflict with a clearly private production-style setup
Do not treat all non-/32 entries as wrong by default.
5. Review database users and roles.
Identify:
- users with broad administrative roles
- users whose role scope looks wider than their likely purpose
- users that appear stale or unused from the best available access evidence
- users with no recent observed access when access history is available
Default the stale-user threshold to 90 days when you have enough evidence to make that judgment.
Treat obvious break-glass or automation accounts cautiously and use `Needs Owner Confirmation` instead of overstating risk when business purpose is unclear.
6. Review recent-access evidence carefully.
Prefer Atlas access-history data when it is available.
Remember that Atlas access history is limited and may be unavailable on some cluster tiers.
If access history is unavailable, do not infer inactivity from silence alone. Keep the result as a lower-confidence hygiene item or a coverage gap.
7. Review backup posture.
Apply a reasonable default:
- dedicated production-like clusters should have backups enabled
- stronger compliance-policy expectations require explicit operator context and should not be invented
Distinguish:
- backup compliance policy present and aligned when such a policy is explicitly known
- backups enabled but weaker than an explicitly known expectation
- no visible qualifying backup policy
- unknown because the surface is unreadable
8. Review alert coverage.
Use a light default expectation around major availability and host-health coverage and avoid pretending there is one exact mandatory set.
If the surrounding operator context includes a stricter required alert set, compare against that too.
Accept defensible equivalent Atlas condition names when they clearly cover the same operational risk.
Distinguish between:
- clearly missing critical alert coverage
- alert exists but routing, severity, or enablement looks questionable
- unknown because only partial alert visibility is available
9. Review public-versus-private connectivity posture.
Treat public-versus-private posture as context-sensitive:
- for production-like dedicated environments, prefer private networking and treat broad public access as more suspicious
- for clearly non-production or transitional environments, use `Needs Owner Confirmation` before overstating the risk
- if the surrounding operator context explicitly says private networking is required, enforce that stricter expectation
Pay special attention to projects that appear to use private endpoints but still keep broad public IP access enabled.
Treat coexistence of private and public paths as a context-sensitive finding, not an automatic violation.
10. Classify findings into exactly one of these buckets:
- `Needs Attention`: clear, evidence-backed posture gap or exposure that conflicts with strong default security expectations or explicit operator context
- `Acceptable With Context`: deviation looks intentional, bounded, and adequately explained by the supplied context or strong evidence
- `Needs Owner Confirmation`: the deviation may be justified, but the available evidence is not enough to prove that it is intentional or acceptable
11. Rank only meaningful findings.
Prefer, in order:
- public exposure and broad access
- missing expected private networking when that expectation exists, or clearly risky public exposure in production-like environments
- broad or stale privileged users
- missing expected backup policy, or missing basic backup coverage where the cluster clearly should have it
- missing expected critical alerts, or clearly weak core alert coverage
- weaker hygiene items that remain worth review
Keep the final ranked findings list to at most 10 items.
12. If a required surface is missing or unreadable, continue when a partial report is still honest.
Use `Status: partial` when the missing surface meaningfully limits the audit.
Use `Status: blocked` only when the run configuration or project scope is not trustworthy enough to continue.
13. Render the result.
The Markdown report is the canonical automation response.
If the workspace is writable, also create or update:
- `.automation-state/atlas-security-posture-digest/reports/<YYYY-MM-DD>.md`
- `.automation-state/atlas-security-posture-digest/reports/<YYYY-MM-DD>.html`
The HTML file should be a static internal report with summary cards, posture category panels, categorized findings, and explicit coverage gaps.
If artifact writes are unavailable, still return the Markdown report and note the skipped artifact write in `Coverage Gaps`.
## Guardrails
- Stay read-only. Do not create, edit, or delete Atlas projects, access-list entries, database users, alerts, private endpoints, clusters, backup policies, or API credentials.
- Do not treat every broad CIDR, admin role, or missing recent-access record as a confirmed problem without considering the supplied project context and the actual evidence quality.
- Do not claim a user is stale if access history is unavailable or if the observed window is too short to support that conclusion.
- Do not claim public internet reachability solely because an Atlas project has some public access-list entry; distinguish configuration exposure from verified traffic use when evidence is limited.
- Do not claim a backup-policy failure when the operator did not supply a stronger backup expectation and the default evidence only supports a weaker hygiene judgment.
- Do not claim alert coverage is complete unless you can read enough alert configuration detail to defend that claim.
- Do not invent a mandatory private-networking requirement for every Atlas project.
- Distinguish observed facts from inference, especially for role breadth, user purpose, and migration-state networking.
## Output
Always produce:
```markdown
# Atlas Security Posture Digest
**Status**
`<ready|partial|blocked>`
**Scope**
Atlas project: `<name and id when available>`
Atlas organization: `<name and id when available>`
**Quick Read**
- Main risk: `<highest-priority concern>`
- Main decision: `<highest-value owner confirmation item, or "none">`
- Positive signals: `<2-4 strongest reassuring signals>`
- Audit limit: `<most important coverage gap, or "none">`
## Needs Attention
### <Short finding title>
<one or two concise sentences>
Evidence:
- <specific evidence>
- <specific evidence>
Why it matters:
<short explanation>
Suggested next check:
<one concrete follow-up>
Confidence: `<high|medium|low>`
## Needs Owner Confirmation
### <Short finding title>
<one or two concise sentences>
Evidence:
- <specific evidence>
- <specific evidence>
Why it needs confirmation:
<short explanation>
Suggested next check:
<one concrete follow-up>
Confidence: `<high|medium|low>`
## Acceptable With Context
### <Short finding title>
<one or two concise sentences>
Evidence:
- <specific evidence>
- <specific evidence>
Context:
<why this looks acceptable>
Confidence: `<high|medium|low>`
## Coverage Gaps
- <missing access-history surface, backup-policy visibility, alert detail, private-endpoint detail, or other limitation>
## Bottom Line
<one concise paragraph summarizing whether the project looks bounded, risky, or uncertain, and what deserves action first>
## Evidence Notes
- <key tools, commands, MCP surfaces, or API endpoints used>
```
Use `Status: ready`, `partial`, or `blocked`.
Keep the report concise and evidence-first.
Lead with what matters most for the scoped project, not a full Atlas inventory dump.
Prefer grouped narrative sections over dense tables unless a small table is clearly the most readable way to present user, role, or allowlist evidence.
If artifact persistence succeeds, mention the Markdown and HTML report paths in `Coverage Gaps` or at the end of the report in one short line. - Requires only the Atlas project scope. Everything else uses built-in defaults unless the operator later adds extra context in plain language.
- Reads Atlas posture data from MongoDB MCP first, then Atlas CLI, then Atlas Admin API only for missing read-only surfaces.
- Checks access lists,
0.0.0.0/0exposure, users and roles, recent access history, backup coverage, alerts, and public-versus-private connectivity. - Separates findings into
Needs Attention,Acceptable With Context, andNeeds Owner Confirmation. - Produces one concise report with ranked findings and explicit coverage gaps.
sequenceDiagram
participant Agent
participant MCP as MongoDB MCP
participant CLI as Atlas CLI
participant API as Atlas Admin API
participant Report
Agent->>MCP: Read projects, clusters, access lists, users, alerts
Agent->>CLI: Fill gaps for backup, private endpoints, access logs
Agent->>API: Fill any remaining read-only coverage gaps
Agent->>Report: Classify posture findings with context and caveats
Note over Agent: Read-only only, no Atlas mutations- you want a recurring Atlas security review without changing provider state
- you want access-control, backup, and alert posture interpreted together
- you need a project-level digest instead of checking Atlas screens manually
- Read access to the target Atlas organization and project through MongoDB MCP, Atlas CLI, Atlas Admin API, or a combination of them
- An explicit Atlas project set in the prompt
- Access to clusters, IP access lists, database users, alerts, and backup posture
- Access-history visibility if you want stale-user analysis beyond basic inventory
- Atlas CLI available if MCP does not expose every required read-only surface
- Open Cursor Automations.
- Name your automation and paste atlas-security-posture-digest.md as the automation prompt.
- Add MongoDB MCP with Atlas API credentials in read-only mode.
- If MCP does not expose every required surface, also make the Atlas CLI available.
- Set the Atlas project in the prompt, save the automation, and run it on a schedule.
- Click
Automation>New Automation. - Name your automation and paste atlas-security-posture-digest.md as the automation prompt.
- Install or configure MongoDB MCP with Atlas API credentials in read-only mode.
- If you need backup, private-endpoint, or access-history coverage beyond MCP, make the Atlas CLI available too.
- Set the Atlas project name in the prompt and save the automation.
- Configure MongoDB MCP with Atlas API credentials, or make the Atlas CLI available with authenticated read access.
- Make sure the runtime can read the Atlas organization, project, cluster, user, access-list, backup, and alert surfaces you need.
- For repeated checks in an open Claude Code session, use
/loop, for example:
/loop 1w Follow the instructions in automations/atlas-security-posture-digest/atlas-security-posture-digest.md
- For durable Claude-managed automation, use
/scheduleor create a Routine inclaude.ai/code/routines.
brew install mongodb-atlas-cli
atlas auth login
Use atlas api only when MCP or the higher-level CLI surface does not expose the read-only detail you need.
| Setting | Default |
|---|---|
| Atlas scope | one explicit Atlas project |
| Mutation policy | report only |
| Project resolution | match one explicit Atlas project; infer organization from that project when possible |
| Access-list review | all project entries, with special attention to 0.0.0.0/0 and very broad CIDRs |
| Private networking expectation | prefer private networking for production-like projects; otherwise treat public access as context-sensitive |
| Backup expectation | dedicated production-like clusters should have backups enabled; stronger compliance expectations are optional |
| Critical alert baseline | warn when core availability and host-health coverage appears missing, but do not block if no custom baseline is supplied |
| Stale-user threshold | 90 days without observed recent access unless stricter policy is supplied |
| Access-history window | last 7 days when available, otherwise inventory-only with a coverage gap |
| Final ranked findings | up to 10 |
| Output | Markdown security posture report with optional static HTML artifact |
Keep the interpretation conservative: broad exposure and missing backups or alerts should rank high, but temporary exceptions, intended public paths, and missing access-history coverage should be labeled clearly instead of overclaimed.
Use the project name at minimum:
Atlas project: checkout-production
Add extra context only when the project has stricter rules or known exceptions, for example:
Atlas project: checkout-production
Treat any public IP allowlist entry as suspicious unless it is the approved office NAT or break-glass entry.
Only the break-glass DBA account and platform automation account should have atlasAdmin.
This production project is expected to use private networking and managed backups.