Mongodb Backups
TheDecipherist/claude-code-mastery-project-starter-kit
Production MongoDB backup and restore practices that the documentation gets wrong.
A skill your agent uses when writing async MongoDB queries with Motor, designing aggregation pipelines, creating indexes, running multi-document transactions, or working with adk.state in Agentex…
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install kid-sid/claude-spellbook mongodb --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mongodb .claude/skills/mongodb && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .claude/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodbType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install kid-sid/claude-spellbook mongodb --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skills/mongodb .agents/skills/mongodb && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .agents/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install kid-sid/claude-spellbook mongodb --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skills/mongodb .cursor/skills/mongodb && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .cursor/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/kid-sid/claude-spellbook.git --path skills/mongodb--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install kid-sid/claude-spellbook mongodb --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skills/mongodb .gemini/skills/mongodb && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .gemini/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install kid-sid/claude-spellbook mongodbInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .github/skills && cp -r skills-src/skills/mongodb .github/skills/mongodb && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .github/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add kid-sid/claude-spellbook --skill mongodb -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install kid-sid/claude-spellbook mongodb --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/kid-sid/claude-spellbook.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skills/mongodb .opencode/skills/mongodb && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "mongodb" agent skill from https://github.com/kid-sid/claude-spellbook/tree/main/skills/mongodb into .opencode/skills/mongodb/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "mongodb", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
mongodbA skill your agent uses when writing async MongoDB queries with Motor, designing aggregation pipelines, creating indexes, running multi-document transactions, or working with adk.state in Agentex…
Mongodb is an agent skill from kid-sid/claude-spellbook. Use when writing async MongoDB queries with Motor, designing aggregation pipelines, creating indexes, running multi-document transactions, or working with adk.state in Agentex agents.
Its SKILL.md is about 4.5k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.
It sits in Databases, covering NoSQL databases. It works with MongoDB. The repository describes itself as: A curated collection of skills, prompts, and workflows that extend Claude's capabilities — your personal grimoire for AI-powered development. The licence is MIT.
Read from SKILL.md and the folder at commit a7c2ac9. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
No scripts in the folder and no shell commands in SKILL.md (its code samples are python and typescript).
From the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Mongodb loads about 4.5k tokens when it runs. Until then it costs about 48 tokens; SKILL.md has 612 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from kid-sid/claude-spellbook at commit a7c2ac9, republished under its MIT licence (© kid-sid). 612 words, ~4,509 tokens.
.claude/skills/mongodb/SKILL.md (or your agent's skills folder).Async MongoDB via Motor, aggregation pipelines, and index design.
$match, $group, $lookup, $unwind)adk.state (Agentex per-task state backed by MongoDB)from motor.motor_asyncio import AsyncIOMotorClient, AsyncIOMotorDatabase
client = AsyncIOMotorClient("mongodb://localhost:27017")
db: AsyncIOMotorDatabase = client["mydb"]
# With auth + replica set (production)
client = AsyncIOMotorClient(
"mongodb://user:pass@host1:27017,host2:27017/mydb?replicaSet=rs0&authSource=admin"
)
# Close on shutdown
client.close()Collections are accessed as attributes — no schema declaration needed:
users = db["users"] # or db.users
orders = db.ordersfrom datetime import datetime, timezone
from bson import ObjectId
# Insert one
result = await db.users.insert_one({
"email": "alice@example.com",
"name": "Alice",
"role": "user",
"created_at": datetime.now(timezone.utc),
})
inserted_id = result.inserted_id # ObjectId
# Insert many
result = await db.users.insert_many([
{"email": "bob@example.com", "name": "Bob"},
{"email": "carol@example.com", "name": "Carol"},
])
# Find one
user = await db.users.find_one({"email": "alice@example.com"})
user = await db.users.find_one({"_id": ObjectId("64a...")})
# Find many — returns an async cursor
cursor = db.users.find({"role": "admin"}).sort("created_at", -1).skip(0).limit(20)
users = await cursor.to_list(length=None) # length=None = all results
# Count
count = await db.users.count_documents({"role": "admin"})
estimated = await db.users.estimated_document_count() # fast, uses metadata
# Update one
result = await db.users.update_one(
{"_id": ObjectId("64a...")},
{"$set": {"role": "admin", "updated_at": datetime.now(timezone.utc)}},
)
matched = result.matched_count
modified = result.modified_count
# Update many
await db.users.update_many(
{"role": "user", "created_at": {"$lt": cutoff_date}},
{"$set": {"tier": "legacy"}},
)
# Upsert
await db.users.update_one(
{"email": "dave@example.com"},
{"$setOnInsert": {"created_at": datetime.now(timezone.utc)},
"$set": {"name": "Dave", "role": "user"}},
upsert=True,
)
# Delete
await db.users.delete_one({"_id": ObjectId("64a...")})
await db.users.delete_many({"status": "inactive", "created_at": {"$lt": cutoff}})
# Find one and update (atomic — returns updated doc)
updated = await db.users.find_one_and_update(
{"_id": ObjectId("64a...")},
{"$inc": {"login_count": 1}},
return_document=True, # return doc after update
)# Comparison
{"age": {"$gt": 18, "$lte": 65}}
{"status": {"$in": ["active", "pending"]}}
{"status": {"$nin": ["banned", "deleted"]}}
{"score": {"$ne": 0}}
# Logical
{"$and": [{"role": "admin"}, {"active": True}]}
{"$or": [{"email": {"$regex": "@company.com"}}, {"role": "admin"}]}
{"$not": {"status": "banned"}}
# Array operators
{"tags": {"$all": ["python", "async"]}} # array contains all
{"tags": {"$elemMatch": {"$gt": 10, "$lt": 20}}} # element matching condition
{"tags.2": "python"} # index access
# Element operators
{"phone": {"$exists": True}}
{"age": {"$type": "int"}}
# Regex
{"email": {"$regex": "^admin", "$options": "i"}}
# Nested document
{"address.city": "New York"}
{"address.zip": {"$in": ["10001", "10002"]}}# $set — update or add fields
{"$set": {"name": "Alice", "role": "admin"}}
# $unset — remove fields
{"$unset": {"temp_token": "", "legacy_field": ""}}
# $inc — atomic increment
{"$inc": {"login_count": 1, "score": -5}}
# $push — append to array
{"$push": {"tags": "python"}}
{"$push": {"events": {"$each": ["a", "b"], "$slice": -100}}} # keep last 100
# $addToSet — append only if not present (unique set)
{"$addToSet": {"permissions": "write"}}
# $pull — remove from array
{"$pull": {"tags": "deprecated"}}
{"$pull": {"events": {"type": "click"}}} # remove matching sub-docs
# $setOnInsert — only set on upsert insert (not on update)
{"$setOnInsert": {"created_at": datetime.now(timezone.utc)}}# Basic aggregation — group orders by status with total revenue
pipeline = [
{"$match": {"created_at": {"$gte": start_date}}},
{"$group": {
"_id": "$status",
"count": {"$sum": 1},
"total_revenue": {"$sum": "$total"},
"avg_order": {"$avg": "$total"},
}},
{"$sort": {"total_revenue": -1}},
]
results = await db.orders.aggregate(pipeline).to_list(None)
# $lookup — JOIN equivalent
pipeline = [
{"$match": {"role": "admin"}},
{"$lookup": {
"from": "orders", # collection to join
"localField": "_id", # field from users
"foreignField": "user_id", # field from orders
"as": "orders", # output array field
}},
{"$addFields": {"order_count": {"$size": "$orders"}}},
{"$project": {"name": 1, "email": 1, "order_count": 1, "_id": 0}},
]
# $unwind — flatten array field into separate documents
pipeline = [
{"$unwind": "$items"}, # one doc per item
{"$group": {
"_id": "$items.product_id",
"total_sold": {"$sum": "$items.quantity"},
}},
]
# $facet — multiple aggregations in one query
pipeline = [
{"$match": {"status": "active"}},
{"$facet": {
"by_role": [
{"$group": {"_id": "$role", "count": {"$sum": 1}}},
],
"total": [
{"$count": "count"},
],
"recent": [
{"$sort": {"created_at": -1}},
{"$limit": 5},
{"$project": {"name": 1, "email": 1}},
],
}},
]
# $bucket — range bucketing
pipeline = [
{"$bucket": {
"groupBy": "$total",
"boundaries": [0, 50, 100, 500, 1000],
"default": "1000+",
"output": {"count": {"$sum": 1}, "avg": {"$avg": "$total"}},
}},
]# Ensure indexes at startup (idempotent — no-op if already exists)
async def create_indexes(db):
# Single field
await db.users.create_index("email", unique=True)
# Compound — order matters (equality first, range last, sort last)
await db.orders.create_index([("user_id", 1), ("status", 1), ("created_at", -1)])
# Text search index
await db.articles.create_index([("title", "text"), ("body", "text")])
# TTL — auto-delete documents after expiry_at
await db.sessions.create_index("expires_at", expireAfterSeconds=0)
# Sparse — only index docs where field exists
await db.users.create_index("stripe_customer_id", sparse=True, unique=True)
# Partial — only index matching docs (smaller index)
await db.orders.create_index(
"created_at",
partialFilterExpression={"status": "active"},
)In Agentex, indexes are defined in src/config/mongodb_indexes.py and created on startup automatically.
# Requires replica set (or mongos)
async with await client.start_session() as session:
async with session.start_transaction():
await db.accounts.update_one(
{"_id": from_id},
{"$inc": {"balance": -amount}},
session=session,
)
await db.accounts.update_one(
{"_id": to_id},
{"$inc": {"balance": amount}},
session=session,
)
# auto-commits if no exception, auto-aborts on exception# Watch a collection for changes
async def watch_orders():
pipeline = [{"$match": {"operationType": {"$in": ["insert", "update"]}}}]
async with db.orders.watch(pipeline) as stream:
async for change in stream:
op = change["operationType"] # "insert", "update", "delete"
doc = change.get("fullDocument") # updated document (for insert/update)
keys = change.get("updateDescription", {}).get("updatedFields", {})
yield op, doc, keysRequires replica set. Use change streams to push updates to SSE clients without polling.
adk.state Patternadk.state is MongoDB-backed per-task state storage. Under the hood it's a document per (task_id, agent_id).
from agentex.lib import adk
from project.models import SummarizerState
# Create initial state (insert)
await adk.state.create(
task_id=task_id,
agent_id=agent_id,
data=SummarizerState().model_dump(),
)
# Load state (find_one by task_id + agent_id)
raw = await adk.state.get_by_task_and_agent(task_id=task_id, agent_id=agent_id)
state = SummarizerState(**raw.data)
# Mutate and save (update_one with $set)
state.total_processed += len(batch)
await adk.state.update(
task_id=task_id,
agent_id=agent_id,
data=state.model_dump(),
)Always load → mutate → save in sequence. Never hold state in workflow memory — Temporal replays will lose it.
| Pattern | When | Example |
|---|---|---|
| Embed sub-documents | Read together always | order.items[] inside order doc |
| Reference (store ID) | Independent lifecycle, large sub-docs | order.user_id → users collection |
| Bucket pattern | Time-series data, many small writes | One doc per hour with readings[] array |
| Computed fields | Expensive aggregations read often | Store order_count on user doc, update with $inc |
| Schema versioning | Evolving document shape | Add schema_version field, migrate lazily |
# winningPlan shows which index was used (or COLLSCAN = no index)
plan = await db.orders.find({"user_id": uid, "status": "active"}).explain()
print(plan["queryPlanner"]["winningPlan"])
# COLLSCAN → add an index
# IXSCAN → index was used; check "indexName"
# executionStats — actual rows examined vs returned
stats = await db.orders.find({"user_id": uid}).explain("executionStats")
examined = stats["executionStats"]["totalDocsExamined"]
returned = stats["executionStats"]["totalDocsReturned"]
# ratio examined/returned > 10 → index is not selective enoughA query is covered when the index contains all projected fields — MongoDB never reads the actual document:
# Index: [("user_id", 1), ("status", 1), ("total", 1)]
# Query uses only indexed fields + projects only indexed fields → covered
cursor = db.orders.find(
{"user_id": uid, "status": "active"},
{"_id": 0, "user_id": 1, "status": 1, "total": 1}, # only indexed fields
)
# executionStats.totalDocsExamined == 0 confirms it's covered# Force a specific index (useful when the planner picks the wrong one)
cursor = db.orders.find({"user_id": uid}).hint([("user_id", 1), ("created_at", -1)])
# Force collection scan (bypass indexes for small collections)
cursor = db.orders.find({}).hint([("$natural", 1)])# GOOD: project only needed fields
users = await db.users.find({}, {"name": 1, "email": 1, "_id": 0}).to_list(100)
# BAD: fetch entire document when only name is needed
users = await db.users.find({}).to_list(100)
names = [u["name"] for u in users]| Signal | Embed | Reference |
|---|---|---|
| Access pattern | Always read together | Read independently |
| Cardinality | One-to-few (≤100) | One-to-many (>100) or unbounded |
| Write pattern | Updated together | Updated independently |
| Document size | Sub-docs are small | Sub-docs are large or growing |
| Sharing | Only one parent | Shared across multiple parents |
# EMBED — order items always loaded with the order
{
"_id": ObjectId("..."),
"user_id": ObjectId("..."),
"total": 149.99,
"items": [ # embed: always loaded together
{"product_id": "p-1", "qty": 2, "price": 49.99},
{"product_id": "p-2", "qty": 1, "price": 50.01},
]
}
# REFERENCE — reviews exist independently; many per product
{
"_id": ObjectId("..."),
"product_id": ObjectId("..."), # reference: independent lifecycle
"user_id": ObjectId("..."),
"rating": 4,
"body": "Great product.",
}# BAD: one document per reading → millions of tiny docs, index overhead
{"sensor_id": "s-1", "ts": datetime(...), "temp": 22.4}
# GOOD: one document per hour, readings array inside
{
"sensor_id": "s-1",
"hour": datetime(2026, 5, 11, 14, 0, 0, tzinfo=timezone.utc),
"count": 60,
"readings": [22.4, 22.5, 22.3, ...], # one per minute
"min": 22.3, "max": 22.7, "avg": 22.5, # pre-computed
}
# Index on sensor_id + hour → one index lookup per hour of data# Add schema_version field; migrate lazily on read
async def get_user(user_id: ObjectId) -> dict:
doc = await db.users.find_one({"_id": user_id})
version = doc.get("schema_version", 1)
if version == 1:
doc = migrate_v1_to_v2(doc)
await db.users.update_one(
{"_id": user_id},
{"$set": {"preferences": doc["preferences"], "schema_version": 2}}
)
return docimport { MongoClient, ObjectId, type Db } from "mongodb";
const client = new MongoClient("mongodb://localhost:27017", {
maxPoolSize: 20,
serverSelectionTimeoutMS: 5000,
});
await client.connect();
const db: Db = client.db("mydb");
// Find one
const user = await db.collection("users").findOne({ email: "alice@example.com" });
// Find many with pagination
const users = await db.collection("users")
.find({ role: "admin" })
.sort({ created_at: -1 })
.skip(page * limit)
.limit(limit)
.toArray();
// Insert
const { insertedId } = await db.collection("users").insertOne({
email: "alice@example.com",
role: "user",
created_at: new Date(),
});
// Update
await db.collection("users").updateOne(
{ _id: new ObjectId(id) },
{ $set: { role: "admin", updated_at: new Date() } }
);
// Aggregation
const results = await db.collection("orders").aggregate([
{ $match: { status: "completed" } },
{ $group: { _id: "$user_id", total: { $sum: "$amount" }, count: { $sum: 1 } } },
{ $sort: { total: -1 } },
{ $limit: 10 },
]).toArray();
// Transaction
const session = client.startSession();
try {
await session.withTransaction(async () => {
await db.collection("accounts").updateOne(
{ _id: fromId }, { $inc: { balance: -amount } }, { session }
);
await db.collection("accounts").updateOne(
{ _id: toId }, { $inc: { balance: amount } }, { session }
);
});
} finally {
await session.endSession();
}
// Create indexes at startup
await db.collection("users").createIndex({ email: 1 }, { unique: true });
await db.collection("orders").createIndex({ user_id: 1, created_at: -1 });
await db.collection("sessions").createIndex({ expires_at: 1 }, { expireAfterSeconds: 0 });find({"user_id": x}) on a million-document collection takes seconds without an index on user_idfind() in production — db.collection.find({}) without .limit() loads the entire collection into memory; always add .limit(N) and paginate with a cursor$match not as the first pipeline stage — aggregation stages before $match process every document before filtering; placing $match first lets MongoDB use indexes and dramatically reduces the work for subsequent stagesdatetime.utcnow() instead of datetime.now(timezone.utc) — utcnow() returns a naive datetime with no timezone info and is deprecated in Python 3.12; use datetime.now(timezone.utc) to get a timezone-aware UTC datetime that Motor stores correctlyclient.start_session() multi-document transactions require a replica set (or mongos); on a standalone instance they raise a server error; use a replica set even in development (mongo --replSet rs0)tags[] or events[] array without a $slice limit grows the document indefinitely, eventually hitting the 16 MB BSON document size limit; cap arrays at creation time using $push with $sliceadk.state — Temporal replays recreate the workflow from scratch; any in-memory state not persisted to MongoDB via adk.state is lost on replay, causing the workflow to behave differently than the first executionfind() always has .limit() — never unbounded cursor in production$match is the first stage (filters before loading docs)$lookup result arrays have $limit or $slice if sub-docs can be largeadk.state always follows load → mutate → save pattern in Temporal activitiesdatetime.now(timezone.utc) used (not datetime.utcnow() — deprecated)© kid-sid, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
Just SKILL.md in skills/mongodb of kid-sid/claude-spellbook.
Open the folder on GitHubat commit a7c2ac9
Mongodb next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Mongodb this skillkid-sid/claude-spellbook | 189 | — | ~4.5k | Automated safety check: Pass | MIT | |
| Mongodb BackupsTheDecipherist/claude-code-mastery-project-starter-kit | 338 | — | ~1.3k | Automated safety check: Pass | MIT | |
| Mongodbsickn33/agentic-awesome-skills | 47k | 2 repos | ~2.7k | Automated safety check: Notes | MIT | |
| Mongodb Qe Size Estimationmongodb/agent-skills | 190 | — | ~4.2k | Automated safety check: Pass | Apache-2.0 | |
| MongodbRightNow-AI/openfang | 18k | — | ~821 | Automated safety check: Pass | Apache-2.0 | |
| Mongodb RulesTheDecipherist/claude-code-mastery-project-starter-kit | 338 | — | ~1.7k | Automated safety check: Pass | MIT |
TheDecipherist/claude-code-mastery-project-starter-kit
Production MongoDB backup and restore practices that the documentation gets wrong.
sickn33/agentic-awesome-skills
Administer MongoDB databases. An agent skill from sickn33/agentic-awesome-skills.
mongodb/agent-skills
Estimates the storage and memory impact of encrypting fields in collections with Queryable Encryption (QE) enabled.
RightNow-AI/openfang
MongoDB operations expert for queries, aggregation pipelines, indexes, and schema design
TheDecipherist/claude-code-mastery-project-starter-kit
Native-driver, StrictDB, and data-modeling rules for MongoDB.
jabrena/plinth
A skill your agent uses when you need MongoDB persistence in Quarkus — including Panache Mongo entities/repositories, document design, indexes, transactions where applicable, and error handling.
kid-sid/claude-spellbook
A skill your agent uses when building or reviewing UI components for keyboard and screen reader compatibility, adding ARIA to custom widgets, auditing a page for WCAG AA conformance, or preparing…
kid-sid/claude-spellbook
A skill your agent uses when building, wiring, or debugging an Agentex agent — choosing agent type, configuring acp.py and manifest.yaml, using adk.messages or adk.state, or resolving…
kid-sid/claude-spellbook
A skill your agent uses when building production LLM applications — designing RAG pipelines, choosing vector databases, implementing agent orchestration, optimizing cost, or adding AI safety…
kid-sid/claude-spellbook
A skill your agent uses when building or refactoring Angular applications — choosing between signals, RxJS, and NgRx for state, configuring routing with guards and lazy loading, optimizing change…
kid-sid/claude-spellbook
A skill your agent uses when designing new REST endpoints, reviewing an existing API contract, adding pagination or filtering, planning a versioning strategy, or building a public or partner-facing…
kid-sid/claude-spellbook
A skill your agent uses when implementing login flows, issuing or validating JWTs, setting up OAuth2/OIDC with a provider, designing role-based or attribute-based access control, securing API…
Works with
Categories
A skill your agent uses when writing async MongoDB queries with Motor, designing aggregation pipelines, creating indexes, running multi-document transactions, or working with adk.state in Agentex…. Mongodb is an agent skill from kid-sid/claude-spellbook.state in Agentex agents.
Mongodb fits situations like: writing async MongoDB queries with Motor; designing aggregation pipelines; creating indexes; running multi-document transactions.
Run `npx skills add kid-sid/claude-spellbook --skill mongodb -a claude-code`. Or copy the skill folder (skills/mongodb in kid-sid/claude-spellbook) into .claude/skills/mongodb in your project. Claude Code loads it when a task matches its description.
Run `npx skills add kid-sid/claude-spellbook --skill mongodb -a codex`. Or copy the skill folder (skills/mongodb in kid-sid/claude-spellbook) into .agents/skills/mongodb in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add kid-sid/claude-spellbook --skill mongodb -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mongodb, .gemini/skills/mongodb, .github/skills/mongodb and .opencode/skills/mongodb in your project.
SKILL.md names no scripts, command-line tools or credentials: Mongodb is instructions for the agent only. Our summary lists: Python 3.
SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Mongodb is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 4.5k tokens (SKILL.md is roughly 18k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.
Skills that share tags, products or a category with Mongodb: Mongodb Backups (TheDecipherist/claude-code-mastery-project-starter-kit, 338 stars), Mongodb (sickn33/agentic-awesome-skills, 47k stars), Mongodb Qe Size Estimation (mongodb/agent-skills, 190 stars) and Mongodb (RightNow-AI/openfang, 18k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
kid-sid (a GitHub user) maintains it in kid-sid/claude-spellbook, which has 189 GitHub stars. The repository holds 54 skills in this directory. The repository was last updated on August 5, 2026.
Source: kid-sid/claude-spellbook on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.