Exposes QLens image library operations (tagging, searching, quality detection, file management) to any MCP client. Requires QLens Manager to be running.
QLens server has reasonable tool coverage (14 tools) with visible schema registration via fastmcp decorators. However, there are significant gaps: (1) descriptions are in Chinese, creating a barrier for English-speaking developers and LLM reasoning; (2) parameter descriptions are minimal and often embedded in tool descriptions rather than per-parameter; (3) output schemas are not formally documented, return types are inferred from code (e.g., list[dict], dict, list[str]) but not declared in JSON Schema format; (4) no explicit error handling patterns or recovery guidance; (5) dangerous operations (delete_files) lack programmatic confirmation/dry-run patterns despite warnings in description. Tools like qlens_analyze have good domain specificity, but the Chinese documentation severely limits accessibility and LLM comprehension. Parameter type annotations exist in Python signatures (e.g., folder: str, tags: list[str]) but are not propagated to structured input schemas visible in tool registration.
增量添加标签(已有标签忽略,不覆盖)。
✅ 推荐工具:批量图片质量检测打标(QC)。当用户要求分析/质检一批图片时,必须用本工具,不要逐张读图或让用户上传原图。本工具在程序内部用 OpenCV 算法检测(不出本机、零 token、零 API 配置),检测结果直接写入 qltag.db。folder: 目标文件夹绝对路径;task: 当前仅 "qc"(模糊/曝光过度/曝光不足/色偏/红眼/闭眼);recursive: 是否递归子文件夹;confidence: 置信度阈值 0~1(默认 0.5,低于此不写标签)。
多标签组合搜索。tags: 标签名数组;match: 'all'=AND(默认,同时命中全部)/'any'=OR(任一命中);folder: 可选限定目录。
⚠️⚠️ 危险操作:永久删除文件,不可恢复!调用前必须向用户确认:1) 文件确实不再需要;2) 用户明确同意删除。如果只是整理,请优先用 qlens_move_files 移动到回收目录。paths: 要删除的文件绝对路径数组。
导出文件夹内全部图片的标签到文件。fmt: 'csv'(默认)/'json'。
列出该文件夹内所有图片已用到的标签(去重),用于筛选候选。
查询单张图片的标签列表。image_path: 图片绝对路径。
All tool and parameter descriptions are in Chinese (Mandarin), which severely impairs LLM reasoning in English contexts and blocks discovery for non-Chinese developers. LLMs struggle to comprehend non-English descriptions, leading to incorrect tool selection and parameter mapping.
Parameter descriptions are either missing or embedded in the tool description rather than provided per-parameter. For example, qlens_combo_search has 'tags', 'folder', and 'match' parameters, but each parameter's individual description is minimal or redundant with the tool summary. LLMs cannot infer parameter semantics from names alone.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 48 | 2026-07-28+ | v2 |
从 CSV/JSON 文件导入标签到文件夹的 qltag.db(已存在的跳过)。
列出文件夹内所有图片及它们已打的标签。folder: 绝对路径目录。
移动/归档文件。moves: [{"src": 源绝对路径, "dst": 目标绝对路径}]。目标目录不存在会自动创建。移动后标签从旧 qltag.db 迁到新 qltag.db。
重命名文件。renames: [{"src": 绝对路径, "new_name": "新文件名含扩展名"}]。标签从旧名迁到新名(同一 qltag.db)。
按标签搜索图片,返回绝对路径列表。tag: 标签名;folder: 可选限定目录。
全量设置图片标签(替换原有标签)。tags: 标签名数组,传空数组清空标签。
统计文件夹内每个标签的图片数(按数量降序)。folder: 绝对路径目录。
Output schemas are not formally documented in JSON Schema format. Return types are inferred from Python type hints (list[dict], dict, list[str]) but are never declared in a machine-readable output schema. Downstream tools or LLMs cannot discover what fields are returned or their types.
qlens_delete_files is a destructive operation with an irreversible side effect. The description includes a warning, but there is no programmatic confirmation mechanism, dry-run capability, or Multi Round-Trip Request (MRTR) pattern to force explicit user confirmation before deletion. An LLM can still invoke this tool and permanently delete files without additional checks.
No explicit error handling or recovery guidance. Tools return dict with 'ok' and 'failed' fields (e.g., qlens_move_files), but error messages are minimal. For example, 'reason': 'missing src/dst' does not guide the LLM on what to do next. Error responses should suggest retry strategies, alternative approaches, or root cause investigation.
Parameter 'match' in qlens_combo_search accepts string values ('all', 'any') but is not declared as an enum. Free-form strings invite hallucinated or misspelled values. An explicit enum constraint would prevent invalid inputs like 'both' or 'either'.
Parameters 'fmt' in qlens_export_tags and qlens_import_tags accept string values ('csv', 'json') but are not declared as enums. Similarly, 'task' in qlens_analyze accepts only 'qc'. These should be enum-constrained to prevent invalid inputs.
Numeric parameter 'confidence' in qlens_analyze is described as '0~1' but lacks a formal minimum/maximum constraint. An LLM could pass 1.5 or -0.1, which would be invalid. Numeric parameters should declare min and max in the schema.