mcp-media-toolbox
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-media-toolboxpull the AAC audio track out of /sdcard/Movies/clip.mp4"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
mcp-media-toolbox
一个零依赖的 MCP 服务器:媒体元数据探测 / AAC 音轨直抽 / EXIF 读取。不需要 ffmpeg,不需要 Python。
A zero-dependency MCP server for media probing, AAC extraction and EXIF — no ffmpeg, no Python. Runs where you cannot install binaries: Android app sandboxes, Termux, minimal containers.
整个 server 只 import 4 个 Node 内置模块(fs / os / crypto / readline),
npm install 什么都不装,node server.mjs 直接跑。
为什么会有这个
主流媒体工具都依赖 ffmpeg/ffprobe。但在受限环境里(Android 应用私有目录禁止执行二进制、
无 root、无 Python、容器里不想装 100 MB 依赖),这条路直接断掉。
这个项目把最常用的三件事用纯 JS 重写:
能力 | 怎么做的 |
MP4/MOV 元数据 | 手工解析 ISO-BMFF: |
AAC 音轨 → | 按 |
EXIF | 解析 JPEG APP1 的 TIFF/IFD(IFD0 / ExifIFD / GPS IFD,支持 II/MM 字节序) |
Related MCP server: image-analysis-mcp
快速开始
git clone https://github.com/Verchiel666/mcp-media-toolbox.git && cd mcp-media-toolbox
npm run fixtures # 生成合成测试素材(仓库里没有第三方二进制)
npm run selftest # 21 项断言,退出码 0 = 全过
node client.mjs --demo接进任何 MCP 客户端(Claude Desktop / Cursor / 自研):
{
"mcpServers": {
"media-toolbox": {
"command": "node",
"args": ["/absolute/path/to/server.mjs"]
}
}
}已发布到 npm,可以直接用 npx(无需 clone):
{
"mcpServers": {
"media-toolbox": {
"command": "npx",
"args": ["-y", "mcp-media-toolbox"]
}
}
}npx -y mcp-media-toolbox # 直接作为 stdio server 启动工具
工具 | 说明 |
| 容器/时长/总码率;每轨编码、分辨率、帧率、码率、声道、采样率、AAC 参数;图片给尺寸;其他文件给魔数嗅探 |
| mp4/m4a 的 AAC 轨直抽为 ADTS |
| 目录批量体检 + 按类型汇总占用 |
| Top 子目录 / 类型分布 / 最大文件 |
| 大小预筛 + sha256 确认的重复文件组 |
| 拍摄时间、机型、GPS、光圈快门 ISO 焦距;并对比文件 mtime 提示「该信哪一个」 |
| 架构 / 内存 / 磁盘 / Node 版本 |
全部只读,或只新增输出文件,不修改、不删除源文件。
实测数据
在 Android 15(arm64,Node v24.22.1,无 ffmpeg)上:
项目 | 结果 |
4.17 MiB mp4(854×480 avc1 24fps + mp4a AAC-LC 48k 2ch) |
|
同一文件的 AAC 直抽 | 2435 帧 / 839716 字节,42.6 ms |
产物校验 | 逐帧遍历 ADTS:覆盖率 100%、0 异常、推算时长 51.95 s 与源轨道 51.947 s 一致 |
5712×4284 手机照片 | 3.7 ms |
selftest.mjs 用合成素材跑同样的断言,所以 CI 不需要任何外部文件。
已知限制(诚实清单)
只解析带
moov的 ISO-BMFF;碎片化 mp4 / fMP4 / MKV / 裸流一律明确报错,不假装成功。只直抽 AAC(
mp4a);Opus / AC-3 / ALAC 不支持。不做重采样、不转 WAV。HE-AAC(SBR/PS)会被当成 AAC-LC 写 ADTS 头:能播,但采样率标注可能偏低。
EXIF 仅 JPEG;PNG/HEIC 未实现。
find_duplicates对超大目录只做有界扫描(默认 3000 文件),返回里有truncated标记。
三个必踩的坑(experiments/ 可复现)
写 MCP server 时最容易在这三处翻车,详见 docs/mcp-notes.md:
工具里一句
console.log污染 stdout → 客户端 JSON 解析当场崩。美化输出(
JSON.stringify(x, null, 2))把一个消息拆成多行,同样违规,而且症状只是「没反应」。握手顺序错(缺
notifications/initialized)→ 客户端无限转圈。
node client.mjs --list --server experiments/server-pretty.mjs # 看它怎么炸在 DSH(Android)里挂本地 server
DSH 引擎自带 @deepseek-ai/dsh-mcp-client,但 App 的设置页只接受远程 HTTP / npm 包,
拒绝本地 node script.mjs 这种写法。可行方式与踩坑记录见 docs/dsh-android.md。
在 npm 上
mcp-media-toolbox —— 只发布 server.mjs 与文档,测试素材不进包(21.6 KiB)。
相关
同源的姊妹项目:DSH(本项目的 MCP 桥接就是在它上面验证的)。
License
MIT
Available Tools
7 toolsextract_audio_track抽取视频音轨(ADTS AAC)A
把 mp4/m4a 里的 AAC 音轨按样本表(stsz/stco/stsc)直抽出来,手工构造 ADTS 头写成 .aac 裸流,可直接播放或喂给语音识别。本机无 ffmpeg,故不做重采样/转 WAV。
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | 源视频绝对路径 | |
| output_path | No | 输出 .aac 路径,省略则同目录同名 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that this is a container-level copy with hand-built ADTS headers, that no transcoding/resampling occurs, and that no external binary is required. It omits failure behavior when the source has no AAC track and says nothing about output overwrite semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the operation and format, followed by the hard constraint. Nothing is padding; the parenthetical sample-table detail earns its place by explaining how the extraction works and why the result is playable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter, no-output-schema tool this covers the essentials: input formats, output artifact, and the no-WAV limitation that would otherwise cause a wrong call. A note on the no-AAC-track case or the returned location would make it fully self-sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% — both input_path and output_path are documented in the schema, including the same-directory default. The description adds no additional meaning about these parameters, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (extract) and resource (AAC audio track from mp4/m4a), names the output format (.aac ADTS raw stream) and the mechanism (sample-table stsz/stco/stsc direct extraction). An agent can distinguish this from every sibling tool, none of which touches audio streams, without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Makes the use case explicit — the resulting .aac can be played directly or fed to speech recognition — and fences off an expectation an agent might otherwise have by noting there is no ffmpeg, so no resampling or WAV conversion. It stops short of naming an alternative tool for the WAV case or stating preconditions such as the source actually needing an AAC track.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicates重复文件查找A
找出目录里的重复文件:先按文件大小分组,只对同尺寸的候选算 sha256 确认,返回重复组、可回收空间。适合清理相册里重复保存的图片。只读,不删除。
| Name | Required | Description | Default |
|---|---|---|---|
| dir_path | Yes | 目录绝对路径 | |
| max_files | No | 最多扫描多少个文件,默认 3000 | |
| min_bytes | No | 只检查不小于该字节数的文件,默认 102400(100 KiB) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full disclosure burden and does well: it explains the two-phase algorithm (size bucketing first, hashing only same-size candidates), states the return payload (duplicate groups and reclaimable space), and explicitly declares the read-only, non-deleting behavior. It omits operational concerns such as hashing cost on large directories and what happens when the scan limit truncates results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short clauses, each earning its place: method first, use case second, safety guarantee last. No filler and the most decision-relevant content (what it returns, that it does not delete) is front-loaded or clearly flagged.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, and the description compensates by naming what is returned (duplicate groups plus reclaimable space). What remains missing is the truncation behavior under max_files and the scope of what is not scanned, which matters for a tool that reports completeness of a directory sweep.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters with defaults, making 3 the baseline. The description adds conceptual meaning for the size-threshold and size-grouping logic but never mentions the max_files cap or its effect on result completeness, which is the one parameter semantic that would genuinely help an agent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (找出重复文件) plus the underlying method (size grouping then sha256 on same-size candidates), so the agent knows exactly what the tool computes. It does not name or contrast the nearest siblings (probe_dir, storage_report), so differentiation is inferred from the resource rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers one concrete use case (清理相册里重复保存的图片) which implies usage, but gives no when-not conditions, no prerequisites, and no pointer to alternative tools for related jobs such as directory probing or storage reporting.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_hardware宿主机硬件/运行时快照A
获取宿主机 CPU 架构、操作系统、内存、磁盘、Node 运行时版本与 MCP 服务信息,供 Agent 决策本地算力分配。
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full burden. '获取' implies a non-mutating read, and the enumerated data categories give a useful preview of returned content, but there is no statement about latency/cost, whether results are cached, or whether it requires any host-level access — meaningful gaps for a tool with zero annotation coverage and no output schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the resource and then lists the covered fields, with no filler or repetition. It is dense but readable; a short clause on the disk-vs-storage_report boundary would have been worth the extra words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no parameters, the description does the necessary work by enumerating what the snapshot contains, so an agent knows what it will get back. The remaining gap is structural detail — units, whether values are live or cached, and how this differs from storage_report.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, which is the baseline-4 case: there is no parameter meaning for the description to add. The schema is empty and fully consistent with the description's claim of an unfiltered whole-host snapshot.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (获取) and resource (宿主机硬件/运行时快照), then enumerates the concrete fields covered: CPU architecture, OS, memory, disk, Node runtime version, MCP service info. An agent can tell this is a host-snapshot tool, though the description never distinguishes it from the sibling storage_report, which plausibly overlaps on the disk/storage portion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The tail clause '供 Agent 决策本地算力分配' implies a use scenario (call it before deciding local compute allocation), but it is framed as a purpose rather than an explicit when-to-use rule. There are no exclusions and no naming of alternatives such as storage_report when only disk figures are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_info视频/媒体元数据探测A
获取本地媒体文件的容器、时长、视频流(编码/分辨率/帧率/码率)与音频流(编码/声道/采样率/AAC 参数);对图片返回 JPEG/PNG/GIF 尺寸,其他文件返回魔数嗅探。纯 JS 解析,不需要 ffprobe。参数为本地绝对路径。
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | 本地文件绝对路径,例如 /sdcard/DCIM/a.mp4 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does disclose meaningful behavior: parsing is pure JS with no ffprobe dependency, unsupported files fall back to magic-number sniffing rather than failing silently, and the operation is a read. It does not state what happens on a nonexistent path, permission denial, or large files, which is the remaining gap for a no-annotation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One dense sentence, front-loaded with the verb and resource, with semicolon-separated clauses that each carry distinct information (stream fields, image case, fallback case, implementation note). Nothing is padding, though the clause chain is long enough that a reader must parse it carefully.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, so the description must describe return values and it does so field by field for each file class. Combined with the absolute-path constraint and the ffprobe-free note, an agent has enough to call it correctly; only error/edge-case behavior is unspecified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There is a single parameter with 100% schema description coverage, and the schema already specifies an absolute local path with an example. The closing clause '参数为本地绝对路径' only restates that constraint, adding no new meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb (获取/probe) and enumerates exactly what is returned: container, duration, video stream fields (codec/resolution/fps/bitrate), audio stream fields (codec/channels/sample rate/AAC params), plus image dimensions and magic-number sniffing for other files. It is clearly distinguishable from extract_audio_track or probe_dir, but it never explicitly contrasts with read_exif, which also targets image metadata, so the boundary with that sibling is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the file-type breakdown (media files get stream info, images get dimensions, anything else gets magic sniffing), which tells an agent when the tool will still return something useful. However, there is no explicit when-to-use/when-not guidance and no named alternative such as read_exif for EXIF fields or extract_audio_track for audio extraction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
probe_dir目录媒体体检A
批量体检一个目录:逐个文件的类型(魔数嗅探)、大小、修改时间,视频给出时长/分辨率/编码,图片给出尺寸,并按图片/视频/音频/文档/压缩包汇总占用。比逐个调 get_video_info 省往返。
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | 排序依据:mtime(默认,最新在前)或 size(最大在前) | |
| limit | No | 最多返回前几个文件,默认 20,上限 60 | |
| dir_path | Yes | 目录绝对路径,例如 /sdcard/DCIM/Camera | |
| recursive | No | 是否递归子目录,默认 false |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It clearly implies a read-only inspection ('体检', '嗅探') and discloses the inspection techniques (magic-number sniffing) and aggregation behavior, which is useful. However, it does not state how large directories, permission-denied paths, or missing directories are handled, nor the cost of scanning, so an agent cannot predict failure or latency behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in the opening clause, and the enumeration of per-file fields is dense but readable. The closing comparison sentence earns its place by providing routing guidance. It could be tightened slightly, but there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must convey return values, and it does describe per-file fields and the category-level totals that an agent can expect. Gaps remain around error cases (nonexistent path, unreadable files) and whether the limit truncates the aggregates, but the core contract is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so sort, limit, recursive, and dir_path are already fully documented including defaults and enum meanings. The description adds no additional parameter guidance such as when to set recursive or how limit interacts with the per-category totals. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description gives a specific verb and scope ('批量体检一个目录' — inspect a directory in bulk) and enumerates exactly what is reported per file: magic-number type, size, mtime, video duration/resolution/codec, image dimensions, plus category totals. It also names the sibling it replaces, so an agent can tell it apart from get_video_info immediately.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states an explicit alternative and a reason to choose this tool ('比逐个调 get_video_info 省往返'), which is real routing guidance. However, there are no when-not-to-use conditions and it does not relate to other similar siblings such as storage_report, find_duplicates, or read_exif, so the agent must infer whether it subsumes them.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_exif照片 EXIF(拍摄时间/GPS/机型)A
读取 JPEG 的 EXIF:拍摄时间(DateTimeOriginal)、机型、GPS 经纬度、光圈/快门/ISO/焦距、像素尺寸,并对比文件修改时间提示「文件时间是否可信」。传目录则批量汇总(有 EXIF 几张、时间跨度、机型分布)。用于按真实拍摄时间整理相册。
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | 目录模式下最多检查几张,默认 50,上限 200 | |
| file_path | Yes | 图片文件或目录的绝对路径 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it is clearly a read-only inspection, it discloses the extra computed output (是否可信 comparison against file mtime), and it explains that passing a directory switches to a batch aggregation with a sampled subset governed by limit. It does not say what happens for non-JPEG files, images lacking EXIF, or missing paths, which for a read tool with no annotations is the main remaining gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight clauses: what is extracted, the mtime-credibility signal, then the directory batch behavior, then the intended use. Output contents are front-loaded and nothing is redundant or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned EXIF fields and the batch summary statistics (count with EXIF, time span, model distribution), which is what an agent needs to decide to call it. Missing only failure-mode behavior and any note on cost of scanning large directories beyond the limit cap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, including the default 50 and cap 200 for limit. The description adds the meaning of the file_path dual mode (file vs directory → single report vs batch summary), but restates rather than extends the limit semantics. Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (读取 JPEG 的 EXIF) and enumerates exactly what is extracted: DateTimeOriginal, camera model, GPS, aperture/shutter/ISO/focal length, pixel dimensions, plus a file-mtime credibility check. The directory-mode batch summary is spelled out too, and the JPEG constraint implicitly separates it from the video sibling get_video_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a use case (用于按真实拍摄时间整理相册) and implicitly scopes it to still images, which helps against get_video_info and probe_dir. But it never says when NOT to use it, never names an alternative (e.g. probe_dir for non-EXIF metadata listings), and does not state prerequisites such as the file needing to be a JPEG with an EXIF block.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
storage_report空间占用分析A
分析一个目录的空间都去哪了:Top 子目录、按文件类型(图片/视频/音频/文档/压缩包)的占用分布、最大的几个文件。用于「手机空间不够了帮我看看」。
| Name | Required | Description | Default |
|---|---|---|---|
| top | No | 列出前几个子目录,默认 8 | |
| path | Yes | 要分析的目录绝对路径 | |
| max_entries | No | 最多扫描多少个文件,默认 20000 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full disclosure burden. It does describe what the analysis returns, but it says nothing about read-only safety, permissions, cost, scan time, or whether the scan recurses. For a recursive filesystem scan with no annotations, those omissions matter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences, with the core capability front-loaded and the use-case cue trailing. The parenthetical file-type list earns its place by previewing the output categories, and nothing is redundant.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description compensates by enumerating the returned sections, and all three parameters are fully documented in the schema. The only gap is operational behavior: depth of recursion and performance limits are not stated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so path, top, and max_entries are already documented in the schema. The description adds context that the 'top' parameter drives the 'top subdirectories' section and names the file-type buckets, but it adds no format guidance or defaults beyond the schema, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb-plus-resource framing ('分析一个目录的空间都去哪了') and enumerates the three result components: top subdirectories, distribution by file type, and largest files. That is enough for an agent to distinguish it from get_video_info or read_exif. It does not explicitly contrast with the overlapping sibling probe_dir, which keeps it from a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It supplies a concrete triggering scenario ('手机空间不够了帮我看看'), so an agent knows the situation that should select this tool. It offers no explicit when-not conditions or named alternatives such as probe_dir or find_duplicates, so it falls short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
7 tool updates
v1.3.2- First observed
extract_audio_track - First observed
find_duplicates - First observed
get_system_hardware - First observed
get_video_info - First observed
probe_dir - First observed
read_exif - First observed
storage_report
TDQS
Scored across 7 tools
Most tools target clearly distinct operations: single-file inspection, bulk directory inspection, space analysis, duplicate finding, EXIF reading, audio extraction, and system info. The two potential overlaps (get_video_info vs probe_dir on per-file detail, probe_dir vs storage_report on type aggregation) are explicitly disambiguated by the descriptions ('比逐个调 get_video_info 省往返', '分析空间去哪了' vs per-file listing).
All names are snake_case and six of seven follow a verb_noun pattern (get_video_info, extract_audio_track, get_system_hardware, probe_dir, find_duplicates, read_exif). storage_report is the one noun-phrase outlier, a minor deviation but still readable and in-family.
Seven tools is well within the 3-15 sweet spot and each covers a distinct analysis task. No obvious filler; get_system_hardware is slightly tangential to media but justified as local-compute context for an agent.
The surface is solid for read-only inspection/analysis (info, directory probing, storage, duplicates, EXIF, audio extraction). However it is entirely read-only: there is no tool to actually reorganize/move/rename/delete files, even though read_exif is pitched as '整理相册' and duplicates are found but not removable—leaving agents at a dead end after analysis.
Maintenance
Related MCP Connectors
Read EXIF, GPS, XMP, C2PA and AI-generator metadata from a public image or video URL. Read-only.
Open-source developer, PDF, image, SEO and security tools over a stateless HTTP MCP server. No key.
Run FFmpeg and FFprobe in the cloud: convert, compress, trim and analyze video and audio.
FFmpeg processing for video, audio and images via MCP with OAuth and shared account allowance.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn offline MCP server that allows LLMs or humans to extract and analyze metadata from images using the exifr library, supporting various image formats and metadata segments without external tools.1140BSD 2-Clause "Simplified"
- FlicenseAqualityDmaintenanceMCP server for image analysis, providing OCR text extraction, image metadata, and EXIF/GPS data as structured JSON for downstream processing.3-
- FlicenseAqualityDmaintenanceFastMCP server for image analysis providing OCR, metadata, and EXIF extraction.3-
- AlicenseBqualityCmaintenanceAn MCP server that lets LLMs read and edit image metadata (EXIF, GPS, XMP, ICC, IPTC, and more) entirely offline. Supports files, URLs, base64, and includes a browser-based UI for analysis, GPS extraction, and metadata stripping.13BSD 2-Clause "Simplified"