# MongoDB
import ToolInfo from "@/app/_components/tool-info";
import Badges from "@/app/_components/badges";
import TabbedCodeBlock from "@/app/_components/tabbed-code-block";
import TableOfContents from "@/app/_components/table-of-contents";
import ToolFooter from "@/app/_components/tool-footer";
import { Callout } from "nextra/components";
The Arcade MongoDB MCP Server provides a pre-built set of tools for interacting with MongoDB databases in a read-only manner. This MCP Sever enables agents to discover databases and collections, explore document structures, and execute queries safely. This MCP Sever is a companion to the blog post [Designing SQL Tools for AI Agents](https://blog.arcade.dev/sql-tools-ai-agents-security).
This MCP Sever is meant to be an example of how to build a MCP Sever for a
database, and is not intended to be used in production - you won't find it
listed in the Arcade dashboard or APIs. For production use, we recommend
forking this repository and building your own MCP Sever with use-case specific
tools.
## Key Features
This MCP Sever demonstrates several important concepts for LLM-powered database interactions:
- **Database Discovery**: Automatically discover available databases in the MongoDB instance
- **Collection Exploration**: Find all collections within a specific database
- **Schema Inference**: Sample documents to infer schema structure and data types
- **Safe Query Execution**: Execute find queries with built-in safety measures
- **Aggregation Support**: Run complex aggregation pipelines for data analysis
- **Document Counting**: Count documents matching specific criteria
- **Connection Pooling**: Reuse database connections efficiently
- **Read-Only Access**: Enforce read-only access to prevent data modification
- **Result Limits**: Automatically limit query results to prevent overwhelming responses
## Available Tools
Note that all tools require the `MONGODB_CONNECTION_STRING` secret to be set.
## MongoDB.DiscoverDatabases
Discover all databases in the MongoDB instance. This tool returns a list of all available databases, excluding system databases like `admin`, `config`, and `local` for security.
## MongoDB.DiscoverCollections
Discover all collections in a specific database. This tool should be used before any other tool that requires a collection name.
**Parameters:**
- `database_name` (str): The database name to discover collections in
## MongoDB.GetCollectionSchema
Get the schema structure of a collection by sampling documents. Since MongoDB is schema-less, this tool samples a configurable number of documents to infer the schema structure and data types. Always use this tool before executing any query.
**Parameters:**
- `database_name` (str): The database name containing the collection
- `collection_name` (str): The name of the collection to inspect
- `sample_size` (int): The number of documents to sample for schema discovery (default: 100)
## MongoDB.FindDocuments
Find documents in a collection with filtering, projection, and sorting. This tool allows you to build complex queries using MongoDB's query operators while maintaining safety and performance.
**Parameters:**
- `database_name` (str): The database name to query
- `collection_name` (str): The collection name to query
- `filter_dict` (str, optional): MongoDB filter/query as JSON string. Leave None for no filter
- `projection` (str, optional): Fields to include/exclude as JSON string. Use 1 to include, 0 to exclude
- `sort` (list[str], optional): Sort criteria as list of JSON strings with 'field' and 'direction' keys
- `limit` (int): Maximum number of documents to return (default: 100)
- `skip` (int): Number of documents to skip (default: 0)
**Best Practices:**
- Always use `discover_collections` and `get_collection_schema` before executing queries
- Always specify projection to limit fields returned if you don't need all data
- Always sort your results by the most important fields first
- Use appropriate MongoDB query operators for complex filtering ($gte, $lte, $in, $regex, etc.)
- Be mindful of case sensitivity when querying string fields
- Use indexes when possible (typically on \_id and commonly queried fields)
## MongoDB.CountDocuments
Count documents in a collection matching the given filter. This tool is useful for getting quick counts without retrieving the actual documents.
**Parameters:**
- `database_name` (str): The database name to query
- `collection_name` (str): The collection name to query
- `filter_dict` (str, optional): MongoDB filter/query as JSON string. Leave None to count all documents
## MongoDB.AggregateDocuments
Execute aggregation pipelines for complex data analysis. This tool allows you to run sophisticated data processing operations including grouping, filtering, and transformations.
**Parameters:**
- `database_name` (str): The database name to query
- `collection_name` (str): The collection name to query
- `pipeline` (list[str]): MongoDB aggregation pipeline as a list of JSON strings
- `limit` (int): Maximum number of results to return (default: 100)
**Common Aggregation Stages:**
- `$match` - filter documents
- `$group` - group documents and perform calculations
- `$project` - reshape documents
- `$sort` - sort documents
- `$limit` - limit results
- `$lookup` - join with other collections
## Usage Workflow
For optimal results, follow this workflow when using the MongoDB MCP Sever:
1. **Discover Databases**: Use `discover_databases` to see available databases
2. **Discover Collections**: Use `discover_collections` with your target database
3. **Get Collection Schema**: Use `get_collection_schema` for each collection you plan to query
4. **Execute Queries**: Use `find_documents`, `count_documents`, or `aggregate_documents` with the schema information
This workflow ensures your agent has complete information about the database structure before attempting queries, reducing errors and improving query performance.