MongoDB Lens
MongoDB Lens 是一个本地模型上下文协议 (MCP) 服务器,它使用自然语言通过 LLM 全功能访问 MongoDB 数据库,以执行查询、运行聚合、优化性能等。
内容
快速入门
- 安装 MongoDB Lens
- 配置 MongoDB Lens
- 设置 你的 MCP 客户端(例如 Claude Desktop、Cursor 等)
- 使用 自然语言查询 探索你的 MongoDB 数据库
功能
工具
add-connection-alias: 添加新的 MongoDB 连接别名aggregate-data: 执行聚合管道analyze-query-patterns: 分析实时查询并建议优化analyze-schema: 自动推断集合模式bulk-operations: 高效执行多个操作(需要确认 用于破坏性操作)clear-cache: 清除内存缓存以确保最新数据collation-query: 查找使用特定排序规则的文档compare-schemas: 比较两个集合之间的模式connect-mongodb: 连接到不同的 MongoDB URIconnect-original: 连接回启动时使用的原始 MongoDB URIcount-documents: 统计符合指定条件的文档create-collection: 创建具有自定义选项的新集合create-database: 创建新数据库(可选择切换到它)create-index: 创建新的索引以优化性能create-timeseries: 创建时间序列集合用于时间数据create-user: 创建具有特定角色的新的数据库用户current-database: 显示当前数据库上下文delete-document: 删除符合指定条件的文档(需要确认)distinct-values: 提取任何字段的唯一值drop-collection: 从数据库中删除集合(需要确认)drop-database: 删除数据库(需要确认)drop-index: 从集合中删除索引(需要确认)drop-user: 删除数据库用户(需要确认)explain-query: 分析查询执行计划export-data: 以 JSON 或 CSV 格式导出查询结果find-documents: 运行具有过滤器、投影和排序的查询generate-schema-validator: 生成 JSON Schema 验证器geo-query: 使用各种运算符执行地理空间查询get-stats: 获取数据库或集合统计信息gridfs-operation: 使用 GridFS 桶管理大文件insert-document: 将一个或多个文档插入集合list-collections: 探索当前数据库中的集合list-connections: 查看所有可用的 MongoDB 连接别名list-databases: 查看所有可访问的数据库rename-collection: 重命名现有集合(在删除目标时需要确认)(需要确认)shard-status: 查看数据库和集合的分片配置text-search: 对文本索引字段执行全文搜索transaction: 在单个 ACID 事务中执行多个操作update-document: 更新符合指定条件的文档use-database: 切换到特定数据库上下文validate-collection: 检查集合的数据一致性watch-changes: 监控集合的实时更改
其他功能
其他功能:概述
MongoDB Lens 包括许多其他功能:
- 配置文件: 通过
~/.mongodb-lens.[jsonc|json]进行自定义配置 - 环境变量覆盖: 通过
process.env.CONFIG_*覆盖配置设置 - 确认系统: 两步验证以执行可能导致数据丢失的破坏性操作
- 多个 MongoDB 连接: 定义和切换命名的 URI 别名
- 组件禁用: 选择性地禁用工具、提示或资源
- 连接弹性:自动重连并使用指数退避
- 查询保护:可配置的限制和性能保护
- 错误处理:全面的 JSONRPC 错误代码和消息
- 模式推断:使用智能采样进行高效的模式分析
- 凭据保护:在日志中混淆连接字符串密码
- 内存管理:自动监控和清理大型操作
- 智能缓存:针对模式、索引、字段和集合进行优化的缓存
- 向后兼容:支持现代和遗留 MongoDB 版本
其他功能:新的数据库元数据
MongoDB Lens 在它创建的每个数据库中插入一个 metadata 集合。
这个 metadata 集合存储一个包含上下文信息的单个文档,它充当数据库起源的永久记录,同时确保新的空数据库在 MongoDB 存储系统中持续存在。
示例元数据文档
{
"_id" : ObjectId("67d5284463788ec38aecee14"),
"created" : {
"timestamp" : ISODate("2025-03-15T07:12:04.705Z"),
"tool" : "MongoDB Lens v5.0.7",
"user" : "anonymous"
},
"mongodb" : {
"version" : "3.6.23",
"connectionInfo" : {
"host" : "unknown",
"readPreference" : "primary"
}
},
"database" : {
"name" : "example_database",
"description" : "Created via MongoDB Lens"
},
"system" : {
"hostname" : "unknown",
"platform" : "darwin",
"nodeVersion" : "v22.14.0"
},
"lens" : {
"version" : "5.0.7",
"startTimestamp" : ISODate("2025-03-15T07:10:06.084Z")
}
}
一旦你已将你自己的集合添加到你的新数据库中,你可以安全地通过 drop-collection 工具删除 metadata 集合:
- "删除新数据库的元数据集合"
➥ 使用drop-collection工具(带确认)
安装
MongoDB Lens 可以通过多种方式安装和运行:
安装:NPX
运行 MongoDB Lens 最简单的方法是使用 NPX。
首先,确保已安装 Node.js:
node --version # 理想情况下 >= v22.x,但 MongoDB Lens >= v18.x 兼容
然后,通过 NPX 运行 MongoDB Lens:
# 使用默认连接字符串 mongodb://localhost:27017
npx -y mongodb-lens@latest
# 使用自定义连接字符串
npx -y mongodb-lens@latest mongodb://your-connection-string
# 使用 "@latest" 以保持包最新
npx -y mongodb-lens@latest
[!TIP]
如果你遇到npx的权限错误,请在运行npx -y mongodb-lens之前运行npx clear-npx-cache(这会清除缓存并重新下载包)。
安装:Docker Hub
[!NOTE]
Docker Hub 要求你的系统上安装并运行 Docker。
首先,确保已安装 Docker:
docker --version # 理想情况下 >= v27.x
然后,通过 Docker Hub 运行 MongoDB Lens:
# 使用默认连接字符串 mongodb://localhost:27017
docker run --rm -i --network=host furey/mongodb-lens
# 使用自定义连接字符串
docker run --rm -i --network=host furey/mongodb-lens mongodb://your-connection-string
# 使用 "--pull" 以保持 Docker 镜像最新
docker run --rm -i --network=host --pull=always furey/mongodb-lens
安装:从源代码安装 Node.js
- 克隆 MongoDB Lens 存储库:
git clone https://github.com/furey/mongodb-lens.git - 进入克隆的存储库目录:
cd /path/to/mongodb-lens - 确保 Node.js 已安装:
node --version # 理想情况下 >= v22.x,但 MongoDB Lens >= v18.x 兼容 - 安装 Node.js 依赖项:
npm ci - 启动服务器:
# 使用默认连接字符串 mongodb://localhost:27017 node mongodb-lens.js # 使用自定义连接字符串 node mongodb-lens.js mongodb://your-connection-string
安装:从源代码安装 Docker
[!NOTE]
从源代码安装 Docker 要求你的系统上安装并运行 Docker。
- 克隆 MongoDB Lens 存储库:
git clone https://github.com/furey/mongodb-lens.git - 进入克隆的存储库目录:
cd /path/to/mongodb-lens - 确保 Docker 已安装:
docker --version # 理想情况下 >= v27.x - 构建 Docker 镜像:
docker build -t mongodb-lens . - 运行容器:
# 使用默认连接字符串 mongodb://localhost:27017 docker run --rm -i --network=host mongodb-lens # 使用自定义连接字符串 docker run --rm -i --network=host mongodb-lens mongodb://your-connection-string
安装验证
要验证安装,请将以下 JSONRPC 消息粘贴到服务器的 stdio 中:
{"method":"resources/read","params":{"uri":"mongodb://your-mongodb-uri"},"jsonrpc":"2.0","id":1}
服务器应响应你的 MongoDB 实例中的数据库列表,例如:
{"result":{"contents":[{"uri":"mongodb://your-mongodb-uri","text":"Databases (12):\n- admin (180.00 KB)\n- config (108.00 KB)\n- local (40.00 KB)\n- sample_airbnb (51.88 MB)\n- sample_analytics (9.46 MB)\n- sample_geospatial (980.00 KB)\n- sample_guides (40.00 KB)\n- sample_mflix (108.90 MB)\n- sample_restaurants (7.73 MB)\n- sample_supplies (968.00 KB)\n- sample_training (40.85 MB)\n- sample_weatherdata (2.69 MB)"}],"jsonrpc":"2.0","id":1}
MongoDB Lens 现在已安装并准备好接受 MCP 请求。
安装:较旧的 MongoDB 版本
如果连接到 MongoDB 实例的版本 < 4.0,MongoDB Lens 使用的最新版本的 MongoDB Node.js 驱动程序将不兼容。具体来说,MongoDB Node.js 驱动程序版本 4.0.0 及以上要求 MongoDB 版本 4.0 或更高版本。
要使用 MongoDB Lens 与较旧的 MongoDB 实例一起使用,您需要使用 3.x 系列(例如 3.7.4)的 MongoDB Node.js 驱动程序。
较旧的 MongoDB 版本:从源代码运行
- 克隆 MongoDB Lens 存储库:
git clone https://github.com/furey/mongodb-lens.git - 进入克隆的存储库目录:
cd /path/to/mongodb-lens - 修改
package.json:
"dependencies": { ... - "mongodb": "^6.15.0", // Or whatever newer version is listed + "mongodb": "^3.7.4", // Or whatever 3.x version is compatible with your older MongoDB instance ... } - 安装 Node.js 依赖项:
npm install - 启动 MongoDB Lens:
node mongodb-lens.js mongodb://older-mongodb-instance
这将使用与你的 MongoDB 实例兼容的旧驱动程序版本。
[!NOTE]
你可能还需要回滚 这个提交 以添加回useNewUrlParser和useUnifiedTopologyMongoDB 配置选项。
较旧的 MongoDB 版本:使用 NPX 或 Docker
如果你更喜欢使用 NPX 或 Docker,你需要使用与兼容的旧版本的 MongoDB Lens 发布版。
例如,MongoDB Lens 8.3.0 使用 MongoDB Node.js 驱动程序 3.7.4(参见 package-lock.json)。
要使用 NPX 运行 MongoDB Lens 的旧版本,请指定版本标签:
npx -y mongodb-lens@8.3.0
类似地,对于 Docker:
docker run --rm -i --network=host furey/mongodb-lens:8.3.0
配置
配置:MongoDB 连接字符串
服务器接受 MongoDB 连接字符串作为其唯一的参数。
示例 NPX 使用:
npx -y mongodb-lens@latest mongodb://your-connection-string
MongoDB 连接字符串的格式如下:
mongodb://[username:password@]host[:port][/database][?options]
示例连接字符串:
- 本地连接:
mongodb://localhost:27017 - 连接到
mydatabase并使用admin数据库的凭据:
mongodb://username:password@hostname:27017/mydatabase?authSource=admin - 连接到
mydatabase并使用各种其他选项:
mongodb://hostname:27017/mydatabase?retryWrites=true&w=majority
如果未提供连接字符串,服务器将尝试通过本地连接连接。
配置:配置文件
MongoDB Lens 支持通过 JSON 配置文件进行广泛的自定义。
[!NOTE]
配置文件是可选的。如果未提供配置文件,MongoDB Lens 将使用默认设置运行。
[!TIP]
你只需要在配置文件中包含你想自定义的设置。MongoDB Lens 将为省略的值使用默认设置。
[!TIP]
MongoDB Lens 支持两种格式的配置文件:.json和.jsonc(带注释的 JSON)。
示例配置文件
{
"mongoUri": "mongodb://localhost:27017", // 默认 MongoDB 连接字符串或别名-URI 对象
"connectionOptions": {
"maxPoolSize": 20, // 连接池中的最大连接数
"retryWrites": false, // 是否重试写操作
"connectTimeoutMS": 30000, // 连接超时(毫秒)
"socketTimeoutMS": 360000, // 套接字超时(毫秒)
"heartbeatFrequencyMS": 10000, // 多久 ping 服务器以检查状态
"serverSelectionTimeoutMS": 30000 // 服务器选择超时
},
"defaultDbName": "admin", // 如果 URI 中未指定,则默认数据库
"connection": {
"maxRetries": 5, // 初始连接尝试的最大次数
"maxRetryDelayMs": 30000, // 重试尝试的最大延迟
"reconnectionRetries": 10, // 连接丢失时的最大重连尝试次数
"initialRetryDelayMs": 1000 // 重试的初始延迟
},
"disabled": {
"tools": [], // 要禁用或全部禁用工具的数组
"prompts": [], // 要禁用或全部禁用提示的数组
"resources": [] // 要禁用或全部禁用资源的数组
},
"enabled": {
"tools": true, // 要启用或全部启用的工具的数组
"prompts": true, // 要启用或全部启用的提示的数组
"resources": true // 要启用或全部启用的资源的数组
},
"cacheTTL": {
"stats": 15000, // 统计缓存的生命周期(毫秒)
"fields": 30000, // 字段缓存的生命周期(毫秒)
"schemas": 60000, // 模式缓存的生命周期(毫秒)
"indexes": 120000, // 索引缓存的生命周期(毫秒)
"collections": 30000, // 集合列表缓存的生命周期(毫秒)
"serverStatus": 20000 // 服务器状态缓存的生命周期(毫秒)
},
"enabledCaches": [ // 要启用的缓存列表
"stats", // 统计缓存
"fields", // 集合字段缓存
"schemas", // 集合模式缓存
"indexes", // 集合索引缓存
"collections", // 数据库集合缓存
"serverStatus" // MongoDB 服务器状态缓存
],
"memory": {
"enableGC": true, // 是否启用垃圾回收
"warningThresholdMB": 1500, // 警告的内存阈值(MB)
"criticalThresholdMB": 2000 // 关闭缓存的内存阈值(MB)
},
"logLevel": "info", // 日志级别(info 或 verbose)
"disableDestructiveOperationTokens": false, // 是否跳过确认破坏性操作
"watchdogIntervalMs": 30000, // 连接监控间隔(毫秒)
"defaults": {
"slowMs": 100, // 慢查询检测阈值(毫秒)
"queryLimit": 10, // 查询结果的默认限制
"allowDiskUse": true, // 允许操作使用磁盘进行大型数据集
"schemaSampleSize": 100, // 模式推断的采样大小
"aggregationBatchSize": 50 // 聚合操作的批处理大小
},
"security": {
"tokenLength": 4, // 确认令牌的长度
"tokenExpirationMinutes": 5, // 令牌过期时间(分钟)
"strictDatabaseNameValidation": true // 强制严格数据库名称验证
},
"tools": {
"transaction": {
"readConcern": "snapshot", // 事务的读取隔离级别
"writeConcern": {
"w": "majority" // 事务的写入隔离级别
}
},
"bulkOperations": {
"ordered": true // 是否按顺序执行批量操作
},
"export": {
"defaultLimit": -1, // 导出的默认限制(-1 = 无限制)
"defaultFormat": "json" // 导出的默认格式(json 或 csv)
},
"watchChanges": {
"maxDurationSeconds": 60, // 更改流的最大持续时间(秒)
"defaultDurationSeconds": 10 // 更改流的默认持续时间(秒)
},
"queryAnalysis": {
"defaultDurationSeconds": 10 // 查询分析的默认持续时间(秒)
}
}
}
默认情况下,MongoDB Lens 在以下位置查找配置文件:
~/.mongodb-lens.jsonc首先查找,如果不存在则回退到~/.mongodb-lens.json如果前者不存在
要自定义配置文件路径,将环境变量 CONFIG_PATH 设置为所需的文件路径。
示例 NPX 使用:
CONFIG_PATH='/path/to/config.json' npx -y mongodb-lens@latest
示例 Docker Hub 使用:
docker run --rm -i --network=host --pull=always -v /path/to/config.json:/root/.mongodb-lens.json furey/mongodb-lens
配置:配置文件生成
你可以使用 config:create 脚本自动生成配置文件:
# NPX 使用(推荐)
npx -y mongodb-lens@latest config:create
# Node.js 使用
npm run config:create
# 强制覆盖现有文件
npx -y mongodb-lens@latest config:create -- --force
npm run config:create -- --force
此脚本提取上面的示例配置文件并保存到: ~/.mongodb-lens.jsonc
配置文件生成:自定义路径
你可以使用 CONFIG_PATH 环境变量指定自定义输出位置。
- 如果
CONFIG_PATH没有文件扩展名,则将其视为目录并追加.mongodb-lens.jsonc - 如果
CONFIG_PATH以.json(不是 `.