关于 Audio File MCP App
Audio File MCP App 是一个在 MCP 宿主中播放和检查本地音频文件的 MCP App。它在对话中渲染播放器、元数据、响度、频谱图和标注时间轴,适合需要直观查看音频内容的用户。
主要功能
- 01按 EBU R128 计算的全局响度指标
- 02播放时的瞬时响度读数
- 03按频谱质心着色的波形
- 04带对数频率刻度的重分配频谱图
- 05拖动选择可循环播放的区域
- 06可绘制标注轨道的时间轴
适用场景
- 01在对话中预览本地音频并查看响度
- 02检查音频的频谱与动态范围
- 03用标注标记音频中的片段或事件
MCP 相关
该项目作为本地 stdio MCP 服务运行,通过 display_audio_file 工具渲染界面,并把文件元数据、响度、播放位置和标注状态回传给模型。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
1收录的工具列表 · 更新于 2 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| path | string | 是 | 用户设备上音频文件的绝对路径 |
| region | object | 否 | 可选的初始选中/高亮区域,单位为秒(十进制) |
| region.endSeconds | number | 是 | |
| region.startSeconds | number | 是 | |
| annotations | object | 否 | 可选的标注轨道,绘制在波形和频谱图之间。每个轨道包含可选标签、可选 CSS 颜色、以秒为单位的时间范围 [{start,end}],以及可选包络([{time,value}],其中 value 为 0..1),用于淡化时间范围的不透明度。时间使用音频自身的时间轴。 |
| annotations.lanes | array | 是 | |
| annotationsPath | string | 否 | 包含与 `annotations` 相同的 { lanes: [...] } 结构的 JSON 文件绝对路径。大型负载时使用此参数代替 `annotations`。如果同时提供 `annotations`,则忽略此参数。 |
| playheadSeconds | number | 否 | 可选的初始播放头位置,单位为秒(十进制) |
详细介绍
音频文件 MCP 应用
一个用于在 MCP 宿主中播放和检查本地音频文件的 MCP 应用。

在对话中呈现一个 UI,包含播放、元数据、响度、频谱图,以及可选的标注轨道时间线。
文件元数据、响度统计、当前播放头位置、任何选定区域,以及播放头处处于活动状态的标注轨道,也会反馈给模型,因此后续任务可以参考用户实际听到和看到的内容。
功能
- 全局响度指标,依据 EBU R128 计算:集成响度(LUFS)、响度范围(LRA)、真峰值(dBTP)、采样峰值和 RMS。
- 瞬时响度指标,播放或悬停时显示:瞬时(400 ms)和短时(3 s)LUFS,以及光标位置处的采样峰值和 RMS。
- 按频谱质心为波形着色——每个波形切片都会根据低/中/高频段能量比沿色调渐变着色,因此可以一眼看出明亮/暗淡区域对应明亮/暗淡的声音。
- 重分配频谱图,采用对数频率分箱(下限为 20 Hz)和 Inferno 色标;时频重分配可以比普通 STFT 更清晰地呈现瞬态和音调部分。
- 循环区域选择。 在时间线上拖动以标记一个区域;播放会在该区域内循环,并将区域的起止位置与文件的响度和播放头状态一并传回模型。
- 标注轨道时间线。 提供时间线标注后,组件会在波形和频谱图之间绘制一组细长的带标签轨道,并与音频自身的时间线对齐。每条轨道包含时间跨度、可选颜色,以及可选的包络线,用于沿轨道渐变跨度的不透明度。悬停在某个跨度上会显示其标签;播放头处处于活动状态的轨道,以及在选定区域内开始、结束或处于活动状态的轨道,都会反馈给模型。
安装
该服务通过 stdio 在本地运行。以下所有安装方式都配置相同的命令:npx -y @counterpoint-studio/audio-file-mcp-app。
Claude Desktop
最简单的方式:从发布页面获取最新的 .mcpb 文件,然后双击。Claude Desktop 已内置 Node,因此无需额外运行时。
或者,手动将服务添加到 claude_desktop_config.json:
{
"mcpServers": {
"audio-file": {
"command": "npx",
"args": ["-y", "@counterpoint-studio/audio-file-mcp-app"]
}
}
}
Codex Desktop
- 前往 Settings -> MCP Servers
- 添加服务
- 名称:
audiofile-mcp-app - 启动命令:
npx - 参数
-y和@counterpoint-studio/audio-file-mcp-app
VS Code(Copilot、Agent 模式)
或者添加到 .vscode/mcp.json(工作区)或你的用户级 mcp.json:
{
"servers": {
"audio-file": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@counterpoint-studio/audio-file-mcp-app"]
}
}
}
Goose
将此深层链接粘贴到浏览器中(必须已安装 Goose Desktop;自定义 URI 方案无法在 GitHub README 中作为真实链接使用):
goose://extension?id=audio-file&name=Audio%20File%20MCP%20App&cmd=npx&arg=-y&arg=%40counterpoint-studio%2Faudio-file-mcp-app
或者运行 goose configure → Add Extension → Command-line Extension,并输入 npx -y @counterpoint-studio/audio-file-mcp-app。
MCP Inspector
npx @modelcontextprotocol/inspector npx -y @counterpoint-studio/audio-file-mcp-app
使用方法
让宿主通过本地音频文件的绝对路径显示该文件。例如:
“显示
/Users/me/Music/track.wav”
宿主会调用 display_audio_file 工具,在应用内呈现包含波形、频谱图、响度指标和播放控制的 UI。
标注轨道
display_audio_file 接受可选的 annotations 对象,用于描述要在时间线上绘制的轨道(也可以通过 annotationsPath 指定一个 JSON 文件,其中包含相同的 { "lanes": [...] } 结构,适合较大的数据):
{
"annotations": {
"lanes": [
{
"label": "Delay tails",
"color": "#e6007e",
"spans": [{ "start": 8, "end": 24 }],
"envelope": [
{ "time": 8, "value": 0 },
{ "time": 24, "value": 1 }
]
}
]
}
}
时间以音频自身时间线上的秒数为单位。label、color 和 envelope 均为可选项;带有包络线的轨道会沿包络曲线渐变其片段的不透明度,未指定颜色的轨道则使用浅色强调填充。同一轨道中重叠的片段会在下一个片段的开始处截断,因此各行不会重叠。模型可以创建标注来指出某些片段、标记事件,或可视化刚刚运行的分析结果。
安全模型
- 服务在本地通过 stdio 运行,使用你的用户帐户权限。
display_audio_file会按设计打开传入的任何文件路径,但只接受可识别为音频的文件。- 播放器通过字节范围资源(
audiofile-range://…)流式传输文件。它只会返回可识别为音频的文件的字节;其他任何内容(包括不存在的路径)都会返回相同的“无法识别为音频文件”错误。 annotationsPath会读取你指定的 JSON 文件,且仅在文件符合标注格式时使用。- 工具错误会刻意提供具体信息,让你了解问题所在:它们可能会透露指定路径是否存在、是否为普通文件,或(对于
annotationsPath)是否为符合标注格式的有效 JSON。错误绝不会包含文件内容。 - 仍需注意:能够调用工具的模型可以打开你机器上的任何音频文件。会在工具调用前征求批准的宿主可以对此加以控制。
如需报告漏洞,请参阅 SECURITY.md。
客户端兼容性
已测试并确认可在以下客户端中使用:
- Claude Desktop — Chat、Cowork 和 Code
- Codex Desktop
- Visual Studio Code
- Goose
- MCP Inspector
开发
pnpm install
pnpm run build:dsp # emsdk required; see WASM-BUILD.md
pnpm run serve # runs the server with tsx, no compile step
pnpm test
pnpm run build:dist 会在 dist/ 下生成可发布的目录结构(dist/mcp-app.html + dist/server/)。
发布
pnpm version <bump> # bumps every version string (package.json, server.json,
# mcpb/manifest.json, src/server/app.ts) + commits + tags
git push && git push --tags
source /path/to/emsdk_env.sh # prepublishOnly rebuilds the DSP code with Emscripten
pnpm publish --access public # publishes to npm
gh workflow run publish-registry.yml -f tag=v<version> # MCP Registry, once npm shows the version
pnpm run build:mcpb # produces dist/audio-file-mcp-app-<version>.mcpb
gh release create v<version> dist/*.mcpb # attaches the bundle to a GitHub release
npm 可能会将新版本保持在 validating 状态长达一小时,然后才会显示。注册表会检查 npm 包,因此只有在 npm view @counterpoint-studio/audio-file-mcp-app version 显示新版本后,才运行注册表工作流。
MCP Registry 通过 GitHub Actions(.github/workflows/publish-registry.yml)发布,因为交互式命令 mcp-publisher login github 只会授予个人命名空间,而不会授予 io.github.counterpoint-studio/*。
许可证
ISC © Counterpoint Studio OÜ
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。