Skip to main content
Glama
Nam088

Multi-Database MCP Server

by Nam088
README.md7.55 kB
# @nam088/mcp-mongodb MongoDB plugin for Model Context Protocol (MCP) server. ## Features - 🔍 **Query Documents**: Find documents with flexible filtering, sorting, and projection - 📊 **Database Introspection**: List databases, collections, indexes, and statistics - 🔧 **CRUD Operations**: Insert, update, and delete documents - 🚀 **Aggregation Pipeline**: Run complex aggregation queries - 📈 **Index Management**: Create and manage indexes - 🛡️ **Type-Safe**: Full TypeScript support with proper typing - 🔒 **Secure**: Support for MongoDB authentication and SSL/TLS connections - ⚡ **Connection Pooling**: Efficient connection management ## Installation ```bash npm install @nam088/mcp-mongodb ``` ## Configuration ### Environment Variables Configure your MongoDB connection using environment variables: ```bash # Required MONGODB_URI=mongodb://localhost:27017 MONGODB_DATABASE=your_database # Optional MONGODB_MODE=READONLY # Plugin mode: READONLY or FULL ``` ### Plugin Configuration ```typescript import { MongoDBPlugin } from '@nam088/mcp-mongodb'; const plugin = new MongoDBPlugin({ uri: 'mongodb://localhost:27017', database: 'your_database', mode: 'READONLY', // or 'FULL' options: { // MongoDB client options maxPoolSize: 10, minPoolSize: 0, } }); ``` ### MongoDB Atlas Configuration For MongoDB Atlas (cloud): ```bash MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net MONGODB_DATABASE=your_database ``` ## Usage ### As Standalone MCP Server Create `mcp-config.json`: ```json { "mcpServers": { "mongodb": { "command": "npx", "args": [ "-y", "@nam088/mcp-mongodb" ], "env": { "MONGODB_URI": "mongodb://localhost:27017", "MONGODB_DATABASE": "your_database", "MONGODB_MODE": "READONLY" } } } } ``` ### Complete Configuration Examples **Using Connection String (Recommended):** ```json { "mcpServers": { "mongodb": { "command": "npx", "args": ["-y", "@nam088/mcp-mongodb"], "env": { "MONGODB_URI": "mongodb://username:password@localhost:27017/database_name?authMechanism=SCRAM-SHA-256", "MONGODB_MODE": "READONLY" } } } } ``` **MongoDB Atlas (Cloud) with Connection String:** ```json { "mcpServers": { "mongodb": { "command": "npx", "args": ["-y", "@nam088/mcp-mongodb"], "env": { "MONGODB_URI": "mongodb+srv://username:password@cluster.mongodb.net/database_name?retryWrites=true&w=majority", "MONGODB_MODE": "READONLY" } } } } ``` **Using Individual Environment Variables (Alternative):** ```json { "mcpServers": { "mongodb": { "command": "npx", "args": ["-y", "@nam088/mcp-mongodb"], "env": { "MONGODB_HOST": "localhost", "MONGODB_PORT": "27017", "MONGODB_USER": "username", "MONGODB_PASSWORD": "your_password", "MONGODB_DATABASE": "your_database", "MONGODB_MODE": "READONLY" } } } } ``` ### As Plugin in Your MCP Server ```typescript import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js'; import { PluginRegistry } from '@nam088/mcp-core'; import { MongoDBPlugin } from '@nam088/mcp-mongodb'; const server = new McpServer( { name: 'my-server', version: '1.0.0' }, { capabilities: { tools: {} } } ); const registry = new PluginRegistry(server); await registry.registerPlugin(MongoDBPlugin); const transport = new StdioServerTransport(); await server.connect(transport); ``` ## Available Tools ### Read-Only Tools (READONLY mode) - **mongodb_find**: Find documents in a collection - **mongodb_count**: Count documents in a collection - **mongodb_aggregate**: Run aggregation pipeline - **mongodb_list_databases**: List all databases - **mongodb_list_collections**: List collections in a database - **mongodb_collection_stats**: Get collection statistics - **mongodb_list_indexes**: List indexes on a collection - **mongodb_server_status**: Get server status information ### Write Tools (FULL mode only) - **mongodb_insert_one**: Insert a single document - **mongodb_insert_many**: Insert multiple documents - **mongodb_update_one**: Update a single document - **mongodb_update_many**: Update multiple documents - **mongodb_delete_one**: Delete a single document - **mongodb_delete_many**: Delete multiple documents - **mongodb_create_index**: Create an index - **mongodb_drop_index**: Drop an index ## Plugin Modes ### READONLY Mode (Default) Only read operations are allowed. Safe for production use. ```bash MONGODB_MODE=READONLY ``` ### FULL Mode All operations including writes are allowed. Use with caution. ```bash MONGODB_MODE=FULL ``` ## Examples ### Find Documents ```typescript // Tool: mongodb_find { "collection": "users", "filter": { "age": { "$gte": 18 }, "status": "active" }, "projection": { "name": 1, "email": 1, "_id": 0 }, "sort": { "name": 1 }, "limit": 10 } ``` ### Insert Document (FULL mode) ```typescript // Tool: mongodb_insert_one { "collection": "users", "document": { "name": "John Doe", "email": "john@example.com", "age": 30, "status": "active" } } ``` ### Update Documents (FULL mode) ```typescript // Tool: mongodb_update_many { "collection": "users", "filter": { "status": "inactive" }, "update": { "$set": { "status": "archived" } } } ``` ### Aggregation Pipeline ```typescript // Tool: mongodb_aggregate { "collection": "orders", "pipeline": [ { "$match": { "status": "completed" } }, { "$group": { "_id": "$userId", "totalSpent": { "$sum": "$amount" }, "orderCount": { "$sum": 1 } } }, { "$sort": { "totalSpent": -1 } }, { "$limit": 10 } ] } ``` ### Create Index (FULL mode) ```typescript // Tool: mongodb_create_index { "collection": "users", "keys": { "email": 1 }, "options": { "unique": true, "name": "email_unique" } } ``` ### List Collections ```typescript // Tool: mongodb_list_collections { "database": "mydb" } ``` ### Get Collection Statistics ```typescript // Tool: mongodb_collection_stats { "collection": "users", "database": "mydb" } ``` ## Security Best Practices 1. **Use Encrypted Connections**: Use `mongodb+srv://` or configure SSL/TLS 2. **Limit Permissions**: Use database users with minimal required permissions 3. **Use READONLY Mode**: For most use cases, READONLY mode is sufficient 4. **Validate Input**: MongoDB operators like `$where` can be dangerous 5. **Connection Pooling**: Configure appropriate pool sizes for your workload 6. **Network Security**: Use VPN or IP whitelisting for remote connections ## Type Safety This plugin is fully typed with TypeScript. All query results and configurations use proper types from the `mongodb` library, ensuring type safety throughout your application. ```typescript import type { MongoDBPluginConfig, MongoDBQueryResult, MongoDBInsertResult, MongoDBUpdateResult, MongoDBDeleteResult } from '@nam088/mcp-mongodb'; ``` ## Requirements - Node.js >= 18 - MongoDB 4.0 or later (including MongoDB Atlas) - Network access to MongoDB instance ## License MIT ## Author nam088 ## Support For issues and questions, please visit the [GitHub repository](https://github.com/nam088/mcp-server).

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Nam088/mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server