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
getSchemato 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
getSchemato 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
limitparameter - 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
HowToCook
A recipe database server providing meal planning, recipe recommendations, and menu suggestions for daily meals.
Bauplan
Interact with Bauplan data tables and run queries.
SQL Server Express
An MCP server for interacting with Microsoft SQL Server Express databases.
Quran.com API
Interact with the Quran.com corpus using their official REST API v4.
Tableau MCP Server
Interact with Tableau Server using natural language to query data and perform administrative tasks.
MCP SQLite Server
A Node.js MCP server for interacting with local SQLite databases, runnable via npx.
Teradata MCP Server
Interact with Teradata databases for data queries and business intelligence.
CData Reckon Accounts Hosted
A read-only MCP server by CData that enables LLMs to query live data from Reckon Accounts Hosted. Requires a separate CData JDBC Driver.
Education Data MCP Server
Provides access to the Urban Institute's Education Data API for comprehensive education data.
QDrant Loader
A toolkit for loading data into the Qdrant vector database, supporting AI-powered development workflows.