使用说明
MongoDB MCP服务器
也有俄语版本: README-ru.md
备注这个项目是为我的个人需求而设计的。我不打算用我不使用或无法验证的功能来扩展它的功能。您可以自由提交建议和拉取请求,但我不保证所有内容都会被接受。
MCP服务器,用于全面集成MongoDB,具有以下功能:
- 数据库操作 -连接到MongoDB实例,列出数据库和集合
- 文档管理 -查找、聚合和计数文档
- 模式分析 -分析集合模式和索引
- 查询工具 -使用完整的MongoDB语法执行查询和聚合
- 连接管理 -使用只读模式支持管理MongoDB连接
- 流文件导出 -流式保存到大型数据集的文件
- 只读模式 -安全的只读操作,防止意外的数据修改
- 监控 -数据库统计、性能指标和MongoDB日志
- 查询分析 -性能优化的执行计划分析
目录
需求
- Node.js≥22(节点20在2026-04-30达到EOL)
- 环境变量:
MONGODB_MCP_CONNECTION_STRING--MongoDB连接字符串(MongoDB://或MongoDB+srv://格式)MONGODB_MCP_DEFAULT_DATABASE--操作的可选默认数据库名称MONGODB_MCP_TIMEZONE--日期操作的可选时区(默认:Europe/Moscow),必须是有效的IANA时区标识符(例如。,Europe/London,America/New_York,Asia/Tokyo)
Qwen码配置
使用此MCP服务器 Qwen代码,添加到 ~/.qwen/settings.json:
{
"mcpServers": {
"mongodb-mcp": {
"command": "npx",
"args": ["-y", "@vitalyostanin/mongodb-mcp@latest"],
"env": {
"MONGODB_MCP_CONNECTION_STRING": "mongodb://localhost:27017"
}
}
}
}
注: 此配置使用npx运行已发布的包。对于当地发展,使用 "command": "node" 随着 "args": ["/absolute/path/to/mongodb-mcp/dist/index.js"]The MONGODB_MCP_TIMEZONE 环境变量是可选的。
VS代码库配置
使用此MCP服务器 克莱恩 VS代码中的扩展名:
- 打开安装了Cline扩展的VS代码
- 单击Cline顶部导航中的MCP服务器图标
- 选择“配置”选项卡,然后单击“配置MCP服务器”
- 将以下配置添加到
cline_mcp_settings.json:
{
"mcpServers": {
"mongodb-mcp": {
"command": "npx",
"args": ["-y", "@vitalyostanin/mongodb-mcp@latest"],
"env": {
"MONGODB_MCP_CONNECTION_STRING": "mongodb://localhost:27017"
}
}
}
}
注: 此配置使用npx运行已发布的包。对于当地发展,使用 "command": "node" 随着 "args": ["/absolute/path/to/mongodb-mcp/dist/index.js"]The MONGODB_MCP_TIMEZONE 环境变量是可选的。
MCP工具
只读模式工具
| 工具 | 说明 | 主要参数 |
|---|---|---|
service-info |
获取MongoDB服务信息、环境配置、版本和当前时区 | -- |
connect |
使用连接字符串 | --建立与MongoDB的连接 |
disconnect |
断开与MongoDB的连接 | -- |
list_databases |
列出MongoDB实例中的所有数据库 | -- |
db_stats |
获取特定数据库的统计信息 | database --数据库名称 |
list_collections |
列出给定数据库的所有集合 | database --数据库名称 |
collection_schema |
分析集合的架构 | database --数据库名称, collection --集合名称(可选) sampleSize (默认值50) |
collection_indexes |
描述集合的索引 | database --数据库名称, collection --集合名称 |
collection_storage_size |
获取收藏的大小 | database --数据库名称, collection --集合名称 |
find |
对MongoDB集合运行查找查询 | database --数据库名称, collection --集合名称(可选) filter, limit (默认值10), projection, sort |
count |
统计MongoDB集合中的文档 | database --数据库名称, collection --集合名称(可选) query --计数过滤器 |
explain |
返回描述查询优化器所选获胜计划执行情况的统计信息 | database --数据库名称, collection --集合名称, method --具有名称和参数的方法对象(可选) verbosity (默认为“queryPlanner”) |
mongodb_logs |
返回最近记录的mongod事件 | 可选 limit (默认值50), type (默认为“全局”或“startupWarnings”) |
非只读模式工具
| 工具 | 说明 | 主要参数 |
|---|---|---|
aggregate |
对MongoDB集合运行聚合 | database --数据库名称, collection --集合名称, pipeline --聚合阶段阵列, noLimit --禁用自动$limit阶段(对于以$out或$merge结尾的管道很有用) |
insert |
将一个或多个文档插入到MongoDB集合中 | database --数据库名称, collection --集合名称, document --插入单个文档, documents --要插入的文档数组(使用而不是单个文档) |
update |
更新MongoDB集合中的一个或多个文档 | database --数据库名称, collection --集合名称, filter --过滤以匹配要更新的文档, update --更新要执行的操作, upsert --如果为true,则如果没有文档与过滤器匹配则创建新文档(默认值:false), multi --如果为true,则更新所有匹配的文档(updateMany),否则仅更新一个(updateOne)(默认值:false) |
delete |
从MongoDB集合中删除一个或多个文档 | database --数据库名称, collection --集合名称, filter --过滤以匹配要删除的文档, multi --如果为true,则删除所有匹配的文档(deleteMany),否则仅删除一个文档(deleteOne)(默认值:false) |
create-index |
在MongoDB集合上创建索引 | database --数据库名称, collection --集合名称, keys --索引规范文档(例如,{field:1}表示升序,{field:-1}表示降序), options --附加索引选项(例如,{唯一:true,稀疏:true}) |
drop-index |
从MongoDB集合中删除索引 | database --数据库名称, collection --集合名称, index --要删除的索引名称或索引规范文档 |
create-collection |
在MongoDB数据库中创建新集合 | database --数据库名称, collection --要创建的集合名称, options --其他收集选项(例如,{capped:true,size:1024}) |
drop-collection |
从MongoDB数据库中删除集合 | database --数据库名称, collection --要删除的集合名称 |
注: 默认情况下,服务器以只读模式运行,以防止意外的数据修改。在只读模式下,所有写入操作都会被阻止,包括:
- 数据库级操作:
insertOne,insertMany,updateOne,updateMany,deleteOne,deleteMany,createIndex,dropIndex,dropDatabase,renameCollection等等。 - 收集级别操作:
insertOne,insertMany,updateOne,updateMany,deleteOne,deleteMany,findOneAndReplace,findOneAndUpdate,findOneAndDelete,bulkWrite,createIndex,dropIndex,drop等等。 - 修改数据的聚合阶段:
$out,$merge
以下聚合阶段在只读模式下受到限制: $out, $merge。这些阶段仅在服务器以读写模式运行时可用。
安全注意事项
MCP服务器安全生产使用建议:
- 对远程MongoDB集群使用TLS。 更喜欢
mongodb+srv://(TLS是隐含的)或设置tls=true明确地在规则中mongodb://连接字符串。明文连接向网络路径上的任何人公开凭据和查询有效负载。 - 应用最低权限角色。 创建一个专用的MongoDB用户,仅对所需的数据库具有只读访问权限。避免
root,dbAdmin,或授予的任何角色eval/脚本权限。除非需要写入工具,否则默认为只读模式。 - 将连接字符串排除在MCP主机参数之外。 配置
MONGODB_MCP_CONNECTION_STRING通过环境变量(例如。,.env文件)而不是传递它argsMCP主机配置--args通常在主机启动服务器时记录,泄露密码。 - 禁用服务器端JavaScript。 MCP服务器已阻止
$where,$function,以及$accumulator查询中的运算符。为了进行深度防御,请运行MongoDB服务器本身--javascriptEnabled=false(或同等产品security.javascriptEnabled: false在mongod.conf). - 限制导出目录。 使用文件导出工具时,设置
MONGODB_MCP_EXPORT_DIR指向仅MCP用户可访问的目录(chmod 700).机器上的其他用户不应该能够读取写入工具生成的转储。
并发注意事项
MCP服务器不提供超出MongoDB本身强制范围的事务或排序保证。相应地规划多步骤交互:
- 工具是独立的操作。 每个调用都在自己的隐式上下文中运行;服务器不启动多语句事务或共享
ClientSession跨电话。通过将先决条件编码到filter相同的update/delete调用,而不是链接一个单独的find接着是一个变异的呼叫。 - Singleton客户端,并行操作。 一个
MongoClient在所有工具调用中共享。仅connect/disconnect通过内部互斥体进行序列化;常规操作(find,aggregate,insert等等)对集群并发执行,MCP服务器不强制执行跨工具排序。 - 连接状态是一个快照。
getConnectionInfo()返回调用时的状态。对于依赖于连接性的决策,请依赖下一次操作的结果,而不是前一次操作isConnected检查一下——两者之间的连接可能会断开。 - 文件导出用途
wx. 写入文件的工具使用以下命令打开目标wx标记,并且不会覆盖现有文件。针对同一目标的并发呼叫filePath将失败EEXIST;呼叫者必须选择新的路径(例如,包含时间戳或每次呼叫后缀)。
本地开发
使用源代码的快速参考。
先决条件:
- Node.js如中所述
.nvmrc(当前LTS≥22)。使用nvm:nvm use. - npm。
设置:
git clone https://github.com/VitalyOstanin/mongodb-mcp.git
cd mongodb-mcp
npm install
常用脚本:
| 脚本 | 目的 |
|---|---|
npm run build |
将TypeScript编译为 dist/ (tsconfig.build.json)并打开CLI入口点 |
npm run dev |
快跑 index.ts 直接通过 tsx watch 用于迭代工作 |
npm start |
从以下位置运行编译后的服务器 dist/ |
npm run typecheck |
类型检查来源+测试(tsconfig.json,不排放) |
npm run typecheck:tests |
使用特别严格的标志进行类型检查(tsconfig.test.json) |
npm run lint |
运行ESLint |
npm run lint:fix |
使用以下命令运行ESLint --fix |
npm test |
运行Vitest测试套件一次 |
npm run test:watch |
在观看模式下运行Vitest |
npm run test:coverage |
使用v8覆盖率运行Vitest(选择加入;强制阈值门) |
npm run test:debug |
按顺序运行Vitest(--no-file-parallelism) |
本地连接示例:
export MONGODB_MCP_CONNECTION_STRING="mongodb://localhost:27017"
npm run dev
布局:
index.ts--CLI入口点。src/server.ts--MCP服务器引导。src/mongodb-client.ts--具有只读代理的单例MongoDB客户端。src/tools/--每个文件一个MCP工具及其*.test.ts.src/utils/--共享助手(流式导出、模式片段、日期处理、编校)。
