安全扫描
OpenClaw
安全
high confidence该技能的代码、说明与需求与其声明的用途一致:提供一个基于Python的MongoDB CLI客户端;未请求无关凭据或安装意外工具。
评估建议
该技能看起来确实只做它声明的事:通过Python CLI运行MongoDB操作。安装前,请确认代理将连接的MongoDB实例(MONGO_URI或config.json),并避免在未审查的情况下指向生产数据。对任何自动代理授予包含'confirm': true的操作权限时需谨慎——这些标志是防止意外破坏性操作(drop/delete)的保护措施。建议在隔离环境中运行提供的安装脚本(它会创建.venv并pip安装pymongo)。如需更高保障,请检查完整的mongo_client.py(已包含)并在非生产数据库上测试。...详细分析 ▾
✓ 用途与能力
名称/描述(MongoDB客户端)与提供的文件一致:一个Python CLI(mongo_client.py)、安装pymongo的本地设置脚本,以及配置MONGO_URI或config.json的文档。所需二进制文件(python3)和记录的环境变量与声明用途相符。
ℹ 指令范围
SKILL.md将操作限制为通过JSON负载执行MongoDB操作,并记录了连接解析与破坏性操作保护措施(drop/delete需要'confirm'标志)。注意:客户端会在技能目录和工作区路径(Path.cwd()候选)中查找config.json,因此如果存在,可能会拾取技能目录外的配置——为方便而设计,但需留意。
✓ 安装机制
没有远程任意下载。设置是本地shell脚本,创建venv并从PyPI pip安装pymongo(Python技能所需)。INSTALL-UBUNTU.md引用官方MongoDB仓库以安装本地服务器。这些操作标准且与用途相称。
✓ 凭证需求
声明并使用的环境变量仅限于MongoDB连接设置(MONGO_URI、MONGO_DB、MONGO_HOST、MONGO_PORT、MONGO_USER、MONGO_PASSWORD)。未请求无关机密或服务凭据。
✓ 持久化与权限
技能未强制包含(always: false)。它在自身scripts目录下创建venv,不修改其他技能或系统级代理设置。技能可被自主调用(平台默认),这对执行数据库操作的技能是预期的——用户应控制何时发送破坏性负载。
安全有层次,运行前请审查代码。
运行时依赖
无特殊依赖
版本
latestv1.0.02026/3/3
● 无害
安装命令
点击复制官方npx clawhub@latest install mongo-db
镜像加速npx clawhub@latest install mongo-db --registry https://cn.longxiaskill.com
技能文档
当代理需要向 MongoDB 读取或写入持久化数据时,可使用此技能。所有操作均通过 Python CLI 脚本执行,并返回 JSON 输出。
使用场景
- 用户要求“保存到数据库”、“存储到 Mongo”或“从 MongoDB 检索”
- 代理需要在会话之间持久化数据(预算、交易、摘要、关注列表)
- 代理需要查询、过滤或聚合已存储的记录
- 需要设置新的集合或 schema(验证器)
首次设置
本地 MongoDB: 如果需要在 Ubuntu 上安装 MongoDB,请参阅 INSTALL-UBUNTU.md。对于 Atlas,请在配置或环境变量中使用您的连接字符串。从工作区根目录运行一次设置脚本,以创建虚拟环境并安装 pymongo:
bash skills/mongo-db/scripts/setup.sh
这将创建 skills/mongo-db/scripts/.venv/ 并在其中安装依赖项。设置完成后,使用 venv 解释器调用客户端:
skills/mongo-db/scripts/.venv/bin/python3 skills/mongo-db/scripts/mongo_client.py ''
配置
连接按以下顺序解析(优先匹配):
选项 1 — 环境变量(推荐)
MONGO_URI=mongodb+srv://user:password@cluster.mongodb.net/mydb
MONGO_DB=mydb # 如果数据库在 URI 中,则此项可选
选项 2 — config.json(本地文件,已被 gitignore)
复制示例并填写您的值:
cp skills/mongo-db/config.example.json skills/mongo-db/config.json
编辑 skills/mongo-db/config.json:
{
"uri": "mongodb://localhost:27017",
"database": "mydb",
"username": "optional",
"password": "optional"
}
选项 3 — 单独的环境变量
MONGO_HOST=localhost
MONGO_PORT=27017
MONGO_USER=myuser
MONGO_PASSWORD=mypassword
MONGO_DB=mydb
CLI 接口
所有操作都使用单个 JSON 负载参数:
PYTHON=skills/mongo-db/scripts/.venv/bin/python3
$PYTHON skills/mongo-db/scripts/mongo_client.py ''
负载 schema:
{
"operation": "",
"database": "<可选覆盖>",
"collection": "<集合名称>",
...操作特定字段
}
输出始终为 JSON:{"success": true, ...result_fields} 或 {"success": false, "error": "..."}。
操作参考
列出数据库
{"operation": "list_databases"}
列出数据库中的集合
{"operation": "list_collections", "database": "mydb"}
创建集合(可选带 JSON Schema 验证器)
{
"operation": "create_collection",
"database": "mydb",
"collection": "budgets",
"validator": {
"$jsonSchema": {
"bsonType": "object",
"required": ["period", "income"],
"properties": {
"period": {"bsonType": "string"},
"income": {"bsonType": "number"}
}
}
}
}
删除集合
删除前务必确认用户。需提供 "confirm": true。
{"operation": "drop_collection", "database": "mydb", "collection": "old_data", "confirm": true}
创建索引
{
"operation": "create_index",
"database": "mydb",
"collection": "transactions",
"keys": {"date": 1, "category": 1},
"unique": false
}
查询文档
{
"operation": "find",
"database": "mydb",
"collection": "transactions",
"filter": {"category": "groceries"},
"projection": {"_id": 0, "date": 1, "amount": 1, "description": 1},
"sort": {"date": -1},
"limit": 20
}
查询单个文档
{
"operation": "find_one",
"database": "mydb",
"collection": "transactions",
"filter": {"id": "txn_20260131_0001"}
}
统计文档数量
{
"operation": "count",
"database": "mydb",
"collection": "transactions",
"filter": {"type": "expense"}
}
插入单个文档
{
"operation": "insert_one",
"database": "mydb",
"collection": "transactions",
"document": {
"id": "txn_20260201_0001",
"date": "2026-02-01",
"description": "Supermarket",
"amount": -85.50,
"category": "groceries",
"type": "expense"
}
}
插入多个文档
{
"operation": "insert_many",
"database": "mydb",
"collection": "transactions",
"documents": [
{"date": "2026-02-01", "description": "Coffee", "amount": -4.50, "category": "dining"},
{"date": "2026-02-02", "description": "Salary", "amount": 5000, "category": "income"}
]
}
更新单个文档
{
"operation": "update_one",
"database": "mydb",
"collection": "budget",
"filter": {"period": "monthly"},
"update": {"$set": {"income": 5500, "last_updated": "2026-02-01"}},
"upsert": false
}
更新多个文档
{
"operation": "update_many",
"database": "mydb",
"collection": "transactions",
"filter": {"category": "food"},
"update": {"$set": {"category": "groceries"}}
}
替换单个文档
{
"operation": "replace_one",
"database": "mydb",
"collection": "budget",
"filter": {"period": "monthly"},
"replacement": {"period": "monthly", "income": 5500, "currency": "USD"},
"upsert": true
}
删除单个文档
删除前务必确认用户。需提供 "confirm": true。
{
"operation": "delete_one",
"database": "mydb",
"collection": "transactions",
"filter": {"id": "txn_20260131_0001"},
"confirm": true
}
删除多个文档
删除前务必确认用户。需提供 "confirm": true。
{
"operation": "delete_many",
"database": "mydb",
"collection": "transactions",
"filter": {"source_file": "january_statement.pdf"},
"confirm": true
}
聚合
{
"operation": "aggregate",
"database": "mydb",
"collection": "transactions",
"pipeline": [
{"$match": {"type": "expense"}},
{"$group": {"_id": "$category", "total": {"$sum": "$amount"}, "count": {"$sum": 1}}},
{"$sort": {"total": 1}}
]
}
注意事项
- 破坏性操作(
delete_one、delete_many、drop_collection)需要在负载中提供"confirm": true。在包含此标志之前,务必询问用户确认。 - ObjectId 字段在所有输出中序列化为字符串。
- 数据库覆盖:负载中的
"database"字段可覆盖该次调用的默认数据库配置(来自 config/环境变量)。 - Schema 验证:使用带
"validator"的create_collection在 MongoDB 级别强制执行文档结构。这是写入结构化数据的代理的推荐方法(例如 finance-budget 代理的预算和交易集合)。 - Upsert 模式:对于类似配置的文档(每种类型一个),使用带
"upsert": true的replace_one以原子方式创建或替换。 - 如果缺少
pymongo,请重新运行bash skills/mongo-db/scripts/setup.sh。