The MCP MongoDB Server enables large language models to interact with MongoDB databases through a standardized protocol, providing tools for schema inspection, querying, aggregation, and write operations. It offers features including configurable ObjectId handling, read-only mode for safe operations, automatic schema inference from document samples, and full support for MongoDB queries and aggregation pipelines. This server solves the problem of giving LLMs safe, structured access to MongoDB data while maintaining control over read/write permissions and query execution.
A Model Context Protocol (MCP) server that lets AI assistants work with your MongoDB databases. It exposes your collections, infers their schemas, and runs queries, aggregations, and writes through a standard interface — so tools like Claude Desktop and Cursor can read and reason about your data.
$out/$merge that could modify data).auto/none/force conversion of 24-character hex strings to ObjectIds.explain plans.convertTime helper turns Unix timestamps and date strings into UTC/GMT/ISO, so date queries stay unambiguous across timezones.Point the server at your database — no install step needed:
npx -y mcp-mongo-server mongodb://localhost:27017/mydatabase
Explore safely, without any chance of changing data:
npx -y mcp-mongo-server mongodb://localhost:27017/mydatabase --read-only
This is the default, used by Claude Desktop, Cursor, and other local clients:
npx -y mcp-mongo-server "mongodb://user:pass@localhost:27017/mydatabase"
Expose an HTTP endpoint at /mcp for remote or multi-client access:
npx -y mcp-mongo-server "mongodb://user:pass@localhost:27017/mydatabase" --transport http --port 3001
By default, only requests without a browser Origin (CLIs, IDEs) and requests
from localhost are accepted; everything else is rejected with 403 to guard
against DNS-rebinding attacks. Allow specific browser origins with
--allowed-origins:
npx -y mcp-mongo-server "mongodb://..." --transport http --port 3001 --allowed-origins "https://app.example.com"
| Flag | Description |
|---|---|
--read-only, -r | Block all write operations |
--allow-cross-db | Allow aggregation $out/$merge/$lookup to target other databases (off by default) |
--allow-server-js | Allow server-side JavaScript operators $function/$where/$accumulator (off by default) |
--transport, -t | stdio (default) or http |
--port, -p | HTTP port (default 3001) |
--allowed-origins | Comma-separated browser origins to allow in HTTP mode |
--json-limit | Max HTTP request body size (default 10mb) |
--auth-token | Require Authorization: Bearer <token> on the HTTP endpoint |
| Variable | Description |
|---|---|
MCP_MONGODB_URI | MongoDB connection URI (alternative to the argument) |
MCP_MONGODB_READONLY | Enable read-only mode ("true") |
MCP_MONGODB_ALLOW_CROSS_DB | Allow cross-database aggregation stages ("true") |
MCP_MONGODB_ALLOW_SERVER_JS | Allow server-side JavaScript operators ("true") |
MCP_PORT | HTTP port |
MCP_HTTP_ALLOWED_ORIGINS | Comma-separated browser origins to allow in HTTP mode |
MCP_HTTP_JSON_LIMIT | Max HTTP request body size (default 10mb) |
MCP_HTTP_AUTH_TOKEN | Bearer token required to access the HTTP endpoint |
Database scope. The server operates on the database in your connection
string. Aggregation stages that reach another database ($out, $merge,
$lookup with an explicit db) are rejected by default, so a pipeline can't
quietly read from or write to databases you didn't point it at. Enable them
with --allow-cross-db if you need them.
Server-side JavaScript. The aggregation operators $function, $where,
and $accumulator run arbitrary JavaScript on the MongoDB server. They are
rejected by default; enable them with --allow-server-js if you trust the
pipelines being run.
Read-only mode blocks every write path, including aggregation stages that
write or run server-side JavaScript ($out, $merge, $function, $where,
$accumulator).
Least privilege. Application-level checks only go so far — the strongest guarantee comes from the database. Connect with a MongoDB user scoped to just the database you need, with read-only permissions when the assistant only needs to explore. That way the database itself enforces the boundary, as defense in depth.
MIT — see LICENSE for details.
hovecapital/read-only-local-postgres-mcp-server
cocaxcode/database-mcp
io.github.infoinlet-marketplace/mcp-mysql
io.github.cybeleri/database-admin
io.github.yash-0620/postgres-mcp-secured