MongoDB That Works
A MongoDB MCP server with schema discovery and field validation. Requires a MONGODB_URI environment variable.
MongoDB That Works - MCP Server
A reliable MongoDB MCP (Model Context Protocol) server that provides seamless MongoDB integration for Claude Desktop with built-in schema discovery and field validation.
Features
- 🔍 Schema Discovery: Automatically analyze collection structures
- ✅ Field Validation: Prevent field name mistakes
- 📊 Full MongoDB Support: Find, aggregate, insert, update, delete operations
- 🚀 High Performance: Efficient connection pooling and query optimization
- 🔐 Secure: Support for MongoDB Atlas and authentication
- 🎯 Type-Safe: Built with TypeScript and Zod validation
Installation
Install from npm
npm install -g @sourabhshegane/mongodb-mcp-that-works
Configuration
Add to your Claude Desktop configuration file:
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://username:password@cluster.mongodb.net/database",
"MONGODB_DATABASE": "your_database_name"
}
}
}
}
Configuration Options
MONGODB_URI
: Your MongoDB connection string (required)MONGODB_DATABASE
: Default database name (optional)
Available Tools
1. listCollections
List all collections in the database.
// Example
mcp.listCollections({ filter: {} })
2. find
Find documents in a collection with filtering, sorting, and pagination.
// Example
mcp.find({
collection: "users",
filter: { status: "active" },
sort: { createdAt: -1 },
limit: 10
})
3. findOne
Find a single document.
// Example
mcp.findOne({
collection: "users",
filter: { email: "user@example.com" }
})
4. aggregate
Run aggregation pipelines.
// Example
mcp.aggregate({
collection: "orders",
pipeline: [
{ $match: { status: "completed" } },
{ $group: { _id: "$userId", total: { $sum: "$amount" } } }
]
})
5. count
Count documents matching a filter.
// Example
mcp.count({
collection: "products",
filter: { inStock: true }
})
6. distinct
Get distinct values for a field.
// Example
mcp.distinct({
collection: "orders",
field: "status"
})
7. insertOne
Insert a single document.
// Example
mcp.insertOne({
collection: "users",
document: { name: "John Doe", email: "john@example.com" }
})
8. updateOne
Update a single document.
// Example
mcp.updateOne({
collection: "users",
filter: { _id: "123" },
update: { $set: { status: "active" } }
})
9. deleteOne
Delete a single document.
// Example
mcp.deleteOne({
collection: "users",
filter: { _id: "123" }
})
10. getSchema
Analyze collection structure and discover field names.
// 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
}
}
}
Best Practices
- Use Schema Discovery First: Before querying, run
getSchema
to understand field names - Handle ObjectIds: The server automatically converts string IDs to ObjectIds
- Use Projections: Limit returned fields to improve performance
- Batch Operations: Use aggregation pipelines for complex queries
Examples
Basic Usage
// 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
});
Advanced Aggregation
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 } }
]
});
Troubleshooting
Connection Issues
- Verify your MongoDB URI is correct
- Check network connectivity to MongoDB Atlas
- Ensure IP whitelist includes your current IP
Field Name Errors
- Always use
getSchema
to discover correct field names - Remember MongoDB is case-sensitive
- Check for typos in nested field paths (e.g., "user.profile.name")
Performance
- Use indexes for frequently queried fields
- Limit result sets with
limit
parameter - Use projections to return only needed fields
License
MIT License - see LICENSE file for details
Changelog
v0.1.0
- Initial release
- Full MongoDB CRUD operations
- Schema discovery tool
- Automatic ObjectId conversion
- TypeScript support
Made out of pain since the official MongoDB MCP didn't work for me
Related Servers
LSD MCP server
Access the internet and query data using LSD SQL.
USDA Nutrition MCP Server
Access nutrition information for over 600,000 foods from the USDA FoodData Central database.
SQL Analyzer
Analyze, lint, and convert SQL dialects using SQLGlot.
CData Avalara AvaTax
A read-only MCP server for querying live Avalara AvaTax data. Powered by the CData JDBC Driver.
CIViC MCP Server
A server for querying the CIViC API, converting GraphQL responses into queryable SQLite tables using Cloudflare Workers.
Seq MCP Server
Search and stream events from a Seq server.
OpenCTI MCP Server
Integrates with the OpenCTI platform to query and retrieve threat intelligence data.
MongoDB
Interact with MongoDB databases using natural language to query collections, inspect schemas, and manage data.
ADO.NET MCP Server
A C# MCP server for interacting with databases via ADO.NET, compatible with Virtuoso.
Neo4j MCP Server
A read-only query service for Neo4j graph databases.