MongoDB That Works
Un servidor MCP de MongoDB con descubrimiento de esquemas y validación de campos. Requiere una variable de entorno MONGODB_URI.
Documentación
MongoDB MCP That Works
Un servidor MCP (Model Context Protocol) de MongoDB confiable con descubrimiento de esquemas integrado y validación de campos. Es un servidor MCP estándar sobre stdio, por lo que se conecta a cualquier cliente MCP: Claude Desktop, Claude Code, OpenAI Codex, Cursor, VS Code / GitHub Copilot, Zed y más.
Publicado en npm:
@sourabhshegane/mongodb-mcp-that-works· Instalar connpx -y @sourabhshegane/mongodb-mcp-that-works
[!CAUTION] Este servidor se conecta a tu MongoDB con acceso completo de lectura/escritura al usuario y la base de datos que proporciones mediante
MONGODB_URI, y expone herramientas de escritura (insertOne,updateOne,deleteOne) a cualquier cliente conectado. Solo regístralo con clientes MCP en los que confíes. Para entornos de alto riesgo, usa un usuario de MongoDB de solo lectura o una base de datos dedicada.
Características
- 🔍 Descubrimiento de esquemas: Analiza automáticamente las estructuras de las colecciones
- ✅ Validación de campos: Evita errores en los nombres de los campos
- 📊 Soporte completo de MongoDB: Operaciones de find, aggregate, insert, update, delete
- 🚀 Alto rendimiento: Pooling de conexiones eficiente y optimización de consultas
- 🔐 Seguro: Soporte para MongoDB Atlas y autenticación
- 🎯 Seguridad de tipos: Construido con TypeScript y validación Zod
Instalación
Instalar desde npm
npm install -g @sourabhshegane/mongodb-mcp-that-works
Configuración
Este es un servidor MCP estándar sobre stdio. Cualquier cliente MCP lo inicia con npx y le pasa dos variables de entorno:
| Variable | Requerida | Descripción |
|---|---|---|
MONGODB_URI | Sí | Cadena de conexión de MongoDB, p. ej. mongodb+srv://user:pass@cluster.mongodb.net/database |
MONGODB_DATABASE | No | Nombre de la base de datos por defecto (usa la base de datos de la URI si no se especifica) |
Cada cliente a continuación usa el mismo comando de lanzamiento:
npx -y @sourabhshegane/mongodb-mcp-that-works@latest
La bandera -y confirma automáticamente la instalación para que el cliente nunca se quede esperando en un mensaje interactivo.
Seguridad: nunca confirmes una cadena de conexión real. Los ejemplos usan marcadores de posición o referencian variables de entorno (
${env:...},env_vars,${input:...}) para que las credenciales no queden en el control de versiones.
Claude Desktop
Edita tu configuración de Claude Desktop:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"mongodb": {
"command": "npx",
"args": ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"],
"env": {
"MONGODB_URI": "mongodb+srv://<user>:<password>@cluster.mongodb.net/<database>",
"MONGODB_DATABASE": "your_database_name"
}
}
}
}
Claude Code
Agrégalo con la CLI (todo lo que esté después de -- es el comando del servidor):
claude mcp add mongodb --scope user \
--env MONGODB_URI=mongodb+srv://<user>:<password>@cluster.mongodb.net/<database> \
-- npx -y @sourabhshegane/mongodb-mcp-that-works@latest
O confirma un .mcp.json a nivel de proyecto (los secretos se referencian con ${VAR}):
{
"mcpServers": {
"mongodb": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"],
"env": {
"MONGODB_URI": "${MONGODB_URI}",
"MONGODB_DATABASE": "${MONGODB_DATABASE:-your_database_name}"
}
}
}
}
Ámbitos: local → ~/.claude.json, project → .mcp.json, user → ~/.claude.json. Verifica con claude mcp list.
OpenAI Codex
Codex usa TOML (no JSON). Agrégalo a ~/.codex/config.toml (o a nivel de proyecto .codex/config.toml):
[mcp_servers.mongodb]
command = "npx"
args = ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"]
env = { MONGODB_URI = "mongodb+srv://<user>:<password>@cluster.mongodb.net/<database>", MONGODB_DATABASE = "your_database_name" }
startup_timeout_sec = 30
O reenvía variables desde tu shell en lugar de incrustarlas:
[mcp_servers.mongodb]
command = "npx"
args = ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"]
env_vars = ["MONGODB_URI", "MONGODB_DATABASE"]
O agrégalo con la CLI: codex mcp add mongodb -- npx -y @sourabhshegane/mongodb-mcp-that-works@latest. Verifica con codex mcp list.
Cursor
Ámbito de proyecto: .cursor/mcp.json (confírmalo para compartirlo con tu equipo). Ámbito global: ~/.cursor/mcp.json.
{
"mcpServers": {
"mongodb": {
"command": "npx",
"args": ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"],
"env": {
"MONGODB_URI": "${env:MONGODB_URI}",
"MONGODB_DATABASE": "${env:MONGODB_DATABASE}"
}
}
}
}
VS Code / GitHub Copilot
Para una instalación rápida, haz clic en los botones a continuación. Después de instalar, reemplaza la cadena de conexión de marcador de posición en tu configuración:
Nota: la clave raíz de VS Code es servers (otros clientes usan mcpServers), y type es obligatorio. .vscode/mcp.json:
{
"servers": {
"mongodb": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"],
"env": {
"MONGODB_URI": "${input:mongodb-uri}"
}
}
},
"inputs": [
{
"id": "mongodb-uri",
"type": "promptString",
"description": "MongoDB connection string",
"password": true
}
]
}
Zed
Agrégalo a settings.json (~/.config/zed/settings.json o .zed/settings.json):
{
"mcp": {
"mongodb": {
"command": "npx",
"args": ["-y", "@sourabhshegane/mongodb-mcp-that-works@latest"],
"env": {
"MONGODB_URI": "mongodb+srv://<user>:<password>@cluster.mongodb.net/<database>"
}
}
}
}
Herramientas disponibles
1. listCollections
Lista todas las colecciones en la base de datos.
// Example
mcp.listCollections({ filter: {} })
2. find
Busca documentos en una colección con filtrado, ordenamiento y paginación.
// Example
mcp.find({
collection: "users",
filter: { status: "active" },
sort: { createdAt: -1 },
limit: 10
})
3. findOne
Busca un solo documento.
// Example
mcp.findOne({
collection: "users",
filter: { email: "user@example.com" }
})
4. aggregate
Ejecuta pipelines de agregación.
// Example
mcp.aggregate({
collection: "orders",
pipeline: [
{ $match: { status: "completed" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } }
]
})
5. count
Cuenta documentos que coinciden con un filtro.
// Example
mcp.count({
collection: "products",
filter: { inStock: true }
})
6. distinct
Obtiene valores distintos para un campo.
// Example
mcp.distinct({
collection: "orders",
field: "status"
})
7. insertOne
Inserta un solo documento.
// Example
mcp.insertOne({
collection: "users",
document: { name: "John Doe", email: "john@example.com" }
})
8. updateOne
Actualiza un solo documento.
// Example
mcp.updateOne({
collection: "users",
filter: { _id: "123" },
update: { $set: { status: "active" } }
})
9. deleteOne
Elimina un solo documento.
// Example
mcp.deleteOne({
collection: "users",
filter: { _id: "123" }
})
10. getSchema
Analiza la estructura de la colección y descubre los nombres de los campos.
// Example
mcp.getSchema({
collection: "users",
sampleSize: 100
})
// Returns:
{
"collection": "users",
"sampleSize": 100,
"fields": {
"_id": {
"types": ["ObjectId"],
"examples": ["507f1f77bcf86cd799439011"],
"frequency": "100/100",
"percentage": 100
},
"email": {
"types": ["string"],
"examples": ["user@example.com"],
"frequency": "100/100",
"percentage": 100
}
}
}
Anotaciones de herramientas (pistas MCP)
Las herramientas están anotadas con MCP ToolAnnotations para que los clientes puedan distinguir las herramientas de solo lectura de las que pueden escribir y marcar las operaciones destructivas:
| Herramienta | readOnlyHint | idempotentHint | destructiveHint | Notas |
|---|---|---|---|---|
listCollections | true | – | – | Solo lectura |
find | true | – | – | Solo lectura |
findOne | true | – | – | Solo lectura |
aggregate | true | – | – | Solo lectura (puede ejecutar etapas de escritura) |
count | true | – | – | Solo lectura |
distinct | true | – | – | Solo lectura |
getSchema | true | – | – | Solo lectura |
insertOne | false | false | false | Aditiva; reintentar inserta un documento nuevo |
updateOne | false | false | true | Modifica documentos existentes; $inc/$push no son idempotentes |
deleteOne | false | true | true | Eliminar un documento ya inexistente es una operación nula |
Nota:
aggregateestá anotada como solo lectura, pero puede contener etapas de escritura (p. ej.$out,$merge): inspecciona los pipelines antes de ejecutarlos.
Buenas prácticas
- Usa el descubrimiento de esquemas primero: antes de consultar, ejecuta
getSchemapara entender los nombres de los campos - Maneja ObjectIds: el servidor convierte automáticamente los IDs de cadena a ObjectIds
- Usa proyecciones: limita los campos devueltos para mejorar el rendimiento
- Operaciones por lotes: usa pipelines de agregación para consultas complejas
Ejemplos
Uso básico
// Get schema first to avoid field name mistakes
const schema = await mcp.getSchema({ collection: "reports" });
// Use correct field names from schema
const reports = await mcp.find({
collection: "reports",
filter: { organization_id: "64ba7374f8b63db2083b2665" },
limit: 10
});
Agregación avanzada
const analytics = await mcp.aggregate({
collection: "orders",
pipeline: [
{ $match: { createdAt: { $gte: new Date("2024-01-01") } } },
{ $group: {
_id: { $dateToString: { format: "%Y-%m", date: "$createdAt" } },
revenue: { $sum: "$amount" },
count: { $sum: 1 }
}},
{ $sort: { _id: 1 } }
]
});
Depuración
Puedes usar el MCP Inspector para depurar el servidor, inspeccionar los esquemas de las herramientas y llamar a las herramientas de forma interactiva:
npx @modelcontextprotocol/inspector npx -y @sourabhshegane/mongodb-mcp-that-works@latest
Configura MONGODB_URI (y opcionalmente MONGODB_DATABASE) en tu entorno antes de lanzar el inspector.
Solución de problemas
Problemas de conexión
- Verifica que tu URI de MongoDB sea correcta
- Comprueba la conectividad de red con MongoDB Atlas
- Asegúrate de que la lista blanca de IP incluya tu IP actual
Errores en nombres de campos
- Usa siempre
getSchemapara descubrir los nombres de campos correctos - Recuerda que MongoDB distingue entre mayúsculas y minúsculas
- Revisa si hay errores tipográficos en las rutas de campos anidados (p. ej., "user.profile.name")
Rendimiento
- Usa índices para los campos consultados con frecuencia
- Limita los conjuntos de resultados con el parámetro
limit - Usa proyecciones para devolver solo los campos necesarios
Pruebas
El repositorio incluye un conjunto de pruebas automatizadas (node:test, sin framework adicional):
npm test
Esto primero compila y luego ejecuta:
- Pruebas unitarias (
tests/unit.test.mjs): protocolo MCP: versión negociada, los 10 esquemas de herramientas, ToolAnnotations y manejo de errores. No se requiere base de datos. - Pruebas de extremo a extremo (
tests/e2e.test.mjs): recorrido completo de CRUD contra un MongoDB real (insertOne→find/findOne/count/distinct/aggregate→updateOne→getSchema→deleteOne), además de conversión automática de ObjectId y comprobaciones de idempotencia. Se omite automáticamente con una nota cuando no hay MongoDB accesible.
El conjunto se conecta a MongoDB en MONGODB_URI (por defecto mongodb://127.0.0.1:27017) y usa una base de datos desechable que elimina después, por lo que es seguro frente a cualquier dato existente. CI ejecuta ambos conjuntos contra un MongoDB real (Docker mongo:7) en cada push/PR.
Contribuciones
Las contribuciones son bienvenidas: nuevas herramientas, correcciones de errores, ejemplos y mejoras de documentación. Se agradecen las pull requests y los issues. Consulta CHANGELOG.md para ver el historial de versiones. Para ver ejemplos de otros servidores MCP, consulta las implementaciones de referencia.
Licencia
Licencia MIT: consulta el archivo LICENSE para más detalles
Registro de cambios
Consulta CHANGELOG.md para ver el historial completo.
| Versión | npm | GitHub Release | Destacados |
|---|---|---|---|
| 0.1.8 | npm | v0.1.8 | Conjunto de pruebas automatizadas unitarias + e2e de MongoDB |
| 0.1.7 | npm | v0.1.7 | ToolAnnotations, SDK 1.30, documentación estándar del repositorio |
| 0.1.6 | npm | v0.1.6 | CI/CD, registro de cambios e insignias del repositorio |
| 0.1.5 | npm | v0.1.5 | Correcciones de metadatos y propiedad posteriores a la migración |
| 0.1.3 | npm | v0.1.3 | Publicado con documentación de instalación @latest |
| 0.1.2 | npm | v0.1.2 | URLs del repositorio actualizadas a mongodb-mcp-that-works |
| 0.1.0 | npm | v0.1.0 | Versión inicial |
Lanzamientos
Todas las versiones publicadas en npm también tienen GitHub Releases etiquetadas con comprobaciones de compilación. El repositorio usa GitHub Actions para integración continua y publicación automatizada:
- Los pushes de etiquetas (
v*) activan comprobaciones de lint/compilación y, una vez que pasan, una publicación automatizada en npm - Cada versión publicada tiene un GitHub Release correspondiente
Hecho por necesidad, ya que el MongoDB MCP oficial no funcionó para mí