mcpField
A
Audiobookshelf MCP

Audiobookshelf MCP

本地服务
github.com/jeeftor游戏娱乐111 周前更新

关于 Audiobookshelf MCP

Audiobookshelf MCP 是面向需要检查 Audiobookshelf 媒体库并执行受控维护的 Agent 和客户端的 Go 服务。默认只读,并提供错放条目的审计功能。

主要功能

  1. 01检查媒体库、条目和元数据
  2. 02搜索、统计与收听记录
  3. 03审计目录结构异常条目
  4. 04可选的受控维护工具
  5. 05MCP 资源与提示词

适用场景

  1. 01查看媒体库内容和元数据
  2. 02查找可能的目录布局问题
  3. 03诊断扫描和服务器状态
  4. 04按需启用受限维护

MCP 相关

通过 MCP 向客户端提供类型化工具、资源和提示词。默认使用 stdio,也支持可选的 Streamable HTTP。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"jeeftor-abs": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ABS_BASE_URL",
"-e",
"ABS_API_KEY",
"-e",
"ABS_READ_ONLY",
"-e",
"ABS_TIMEOUT",
"-e",
"ABS_FIXTURE_DIR",
"-e",
"ABS_EXTRA_HEADERS_FILE",
"-e",
"ABS_TLS_CA_CERT_FILE",
"-e",
"ABS_TLS_INSECURE_SKIP_VERIFY",
"-e",
"ABS_TRANSPORT",
"-e",
"ABS_HTTP_ADDR",
"-e",
"ABS_HTTP_PATH",
"-e",
"ABS_HTTP_BEARER_TOKEN",
"ghcr.io/jeeftor/abs-mcp:0.6.0"
],
"env": {
"ABS_BASE_URL": "<ABS_BASE_URL>",
"ABS_API_KEY": "<ABS_API_KEY>",
"ABS_READ_ONLY": "<ABS_READ_ONLY>",
"ABS_TIMEOUT": "<ABS_TIMEOUT>",
"ABS_FIXTURE_DIR": "<ABS_FIXTURE_DIR>",
"ABS_EXTRA_HEADERS_FILE": "<ABS_EXTRA_HEADERS_FILE>",
"ABS_TLS_CA_CERT_FILE": "<ABS_TLS_CA_CERT_FILE>",
"ABS_TLS_INSECURE_SKIP_VERIFY": "<ABS_TLS_INSECURE_SKIP_VERIFY>",
"ABS_TRANSPORT": "<ABS_TRANSPORT>",
"ABS_HTTP_ADDR": "<ABS_HTTP_ADDR>",
"ABS_HTTP_PATH": "<ABS_HTTP_PATH>",
"ABS_HTTP_BEARER_TOKEN": "<ABS_HTTP_BEARER_TOKEN>"
}
}
}
}
启动命令docker run -i --rm -e ABS_BASE_URL -e ABS_API_KEY -e ABS_READ_ONLY -e ABS_TIMEOUT -e ABS_FIXTURE_DIR -e ABS_EXTRA_HEADERS_FILE -e ABS_TLS_CA_CERT_FILE -e ABS_TLS_INSECURE_SKIP_VERIFY -e ABS_TRANSPORT -e ABS_HTTP_ADDR -e ABS_HTTP_PATH -e ABS_HTTP_BEARER_TOKEN ghcr.io/jeeftor/abs-mcp:0.6.0
需要配置的环境变量
ABS_BASE_URLBase URL of your Audiobookshelf server.
ABS_API_KEY密钥Audiobookshelf API key or bearer token.
ABS_READ_ONLYSet to false to enable scan and cleanup tools.
ABS_TIMEOUTAudiobookshelf request timeout as a Go duration or seconds.
ABS_FIXTURE_DIROptional local ABS fixture directory for fixture resources.
ABS_EXTRA_HEADERS_FILEOptional JSON file containing extra request headers.
ABS_TLS_CA_CERT_FILEOptional PEM CA bundle for private or corporate ABS TLS.
ABS_TLS_INSECURE_SKIP_VERIFYTemporary TLS verification bypass for local troubleshooting.
ABS_TRANSPORTMCP transport to run at startup. Use stdio for local launchers or http for Streamable HTTP.
ABS_HTTP_ADDRBind address used when ABS_TRANSPORT=http.
ABS_HTTP_PATHStreamable HTTP endpoint path used when ABS_TRANSPORT=http.
ABS_HTTP_BEARER_TOKEN密钥Optional bearer token required from Streamable HTTP MCP clients.

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
ocighcr.io/jeeftor/abs-mcp:0.6.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

Audiobookshelf MCP 标志

Audiobookshelf MCP 服务

一个用于检查 Audiobookshelf 媒体库并安全执行操作的 Go MCP 服务。

abs-mcp 提供安全、类型化的 MCP 工具和资源,供需要检查 Audiobookshelf 媒体库、诊断扫描问题,以及按需触发范围受限的维护工作流的 Agent 使用。

目录

亮点

  • 默认只读;扫描和清理工具需要设置 ABS_READ_ONLY=false。
  • 可通过单个 Go 二进制文件或 Docker 镜像作为本地 stdio MCP 服务运行,也可选择 Streamable HTTP 模式,用于托管部署或多客户端部署。
  • 支持环境变量、Docker 风格的环境变量文件、额外请求头和自定义 TLS CA 证书包。
  • 包含基于源码的 Audiobookshelf API 清单资源和可重复运行的测试夹具。
  • 发布版本二进制文件和适用于官方 MCP 注册表元数据的 GHCR 镜像。

Audiobook Organizer 兼容性

我构建此 MCP 服务时,特别注重与 jeeftor/audiobook-organizer 配合使用。 它提供了用于检查媒体库、条目、元数据和服务状态的常规 Audiobookshelf MCP 工具;其中一个最实用的工作流,是审查书籍在磁盘上的实际整理方式是否符合预期。

abs_find_misorganized_items 工具会根据支持的文件夹布局约定,检查 Audiobookshelf 条目路径,包括作者/书名和作者/系列/书名结构。它仅用于审计,因此只会报告可能配置错误或放置位置不当的书籍,不会移动或删除文件。因此,它很适合作为 Audiobook Organizer 的搭档:先使用此 MCP 服务从 Audiobookshelf 的角度找出布局问题,再使用 Audiobook Organizer 清理或规范底层文件。

AI 生成的对比 - 上次更新于 2026-06-22

此对比根据 GitHub 上的公开仓库元数据、公开项目 README、注册表和软件包搜索结果,以及此仓库的当前文档生成。 它用于描述情况,而非提供建议。

有修改与不修改操作的覆盖情况:

  • jeeftor/abs-mcp 默认提供只读检查、搜索、作者、系列、合集、当前用户进度/书签/收听记录读取、备份、电子阅读器设备发现、电子书发送预览、元数据对象、布局审计、资源和提示词。电子书设备发送工具会执行向外发送,但不会更改 Audiobookshelf 库、元数据、备份、进度、合集或播放列表状态,因此在只读模式下仍可使用。只有在 ABS_READ_ONLY=false 时,扫描、清理、封面、章节、进度/书签写入、备份创建、元数据,以及合集/播放列表的创建/更新/添加/删除/移除工具才能更改 Audiobookshelf 状态;破坏性操作还需要精确的确认字符串。
  • michaeldvinci/audiobookshelf-mcp 提供广泛的管理功能,除了读取工具,还包括库、合集、播放列表、进度和备份等会更改状态的操作。本次查阅未发现公开 README 证据表明其默认启用了全局只读限制。
  • sandymac/audiobookshelf-mcp 主要用于读取/查询,并提供默认禁用的可选进度和书签修改工具。
  • sierikov/audiobookshelf-mcp 提供只读浏览、搜索、进度、统计、作者、系列和合集功能。
  • ForceConstant/audiobookshelf_mcp 似乎由 Audiobookshelf OpenAPI 资料生成;无法根据公开 README 确定其修改功能覆盖范围和安全限制。

本次查阅的来源:

  • 公开 GitHub 仓库: michaeldvinci/audiobookshelf-mcp、 sandymac/audiobookshelf-mcp、 sierikov/audiobookshelf-mcp、 ForceConstant/audiobookshelf_mcp 和 schmidt-software/mcp-audiobookshelf。
  • 对其他 npm 和 PyPI 软件包的搜索未发现上述 GitHub 目标以外可信的 Audiobookshelf 专用 MCP 服务。 | 服务 | 形态 | 已确认的优势 | 安全措施 | 与 jeeftor/abs-mcp 的区别 | | --- | --- | --- | --- | --- | | michaeldvinci/audiobookshelf-mcp | Go 标准输入/输出服务,提供发布二进制文件;GitHub 元数据显示,最新版本 0.0.5 于 2025-11-11 发布。 | 提供广泛的 Audiobookshelf 通用管理功能,包括媒体库、条目、作者、合集、播放列表、用户信息、会话、播客、进度更新和备份。 | 提供可修改数据的工具;在本次对比过程中,未在公开 README 中发现全局默认只读限制。 | 通用管理范围更广,但限制较少。该服务现在与本项目在类型化修复/目录工作流方面的重合度更高;本项目还新增了默认只读限制、破坏性操作确认、基于源代码的 API 清单、MCP 资源/提示词、面向整理工作的审计工具,以及由测试数据验证的行为检查。 | | sandymac/audiobookshelf-mcp | Rust 服务,支持标准输入/输出和 HTTP/SSE。 | 提供媒体库、搜索、进度、统计数据、近期会话的读取/查询功能,并可选择修改进度/书签。 | 默认禁用可修改数据的工具,必须显式启用。HTTP 模式建议使用 bearer 身份验证和 TLS 代理。 | 安全模型相似。该服务将可修改数据的功能范围保持在较小规模;本项目还新增了基于源代码的 API 清单、资源/提示词、面向整理工作的审计、测试数据工作流、类型化元数据/封面/章节/目录工具,以及明确的破坏性操作确认。 | | sierikov/audiobookshelf-mcp | Go 服务,提供只读工具、发布二进制文件、.mcpb Claude Desktop 套件,以及 MCP Registry 条目。 | 跨媒体库、条目、进度、统计数据、会话、系列、作者和合集提供只读浏览与搜索。 | 公开 README 将所有工具描述为只读,不支持写入、播放控制或用户管理。 | 与本项目的只读浏览功能重合,包括进度、作者、系列和合集读取;但未发现公开证据表明其支持受控的修复/目录变更工作流、基于源代码的 API 清单、MCP 提示词/资源、面向整理工作的审计工具或 Docker 测试数据工作流。 | | ForceConstant/audiobookshelf_mcp | 基于生成的 OpenAPI MCP 桥接服务,通过 3000 端口提供 Streamable HTTP,并提供面向 Docker 的文件。 | 基于 Audiobookshelf OpenAPI 资料广泛暴露生成的 API。 | 无法根据公开 README 判定;生成的 API 可能包含可修改数据的端点,但 README 未列出安全控制措施。 | 定制程度较低,也较少针对运维人员需求。本项目有意提供范围受限的类型化工具,并采用只读限制和由测试数据验证的行为检查,而不是直接暴露所有路由。 |

对于没有可用实现或功能证据的弱匹配或占位项目,例如 schmidt-software/mcp-audiobookshelf, 均未纳入对比。

基于此比较发现的候选差距
  • 候选项:评估范围有限的播客工作流。公开同类项目提供播客浏览或剧集检查功能;此服务目前除通用条目/资料库 API 外,没有专用的播客工具。
  • 候选项:评估资料库创建/更新工作流。一个公开同类项目提供资料库创建功能,但这仍属于管理员级操作,需要验证来源、覆盖测试夹具、设置 ABS_READ_ONLY=false,并在任何删除/移除路径中加入破坏性操作确认。
  • 候选项:评估 .mcpb 桌面应用程序包。一个公开同类项目提供 Claude Desktop .mcpb 程序包;此服务目前提供的是二进制文件、Docker/GHCR 构件和 MCP Registry 元数据。
  • 现有候选项仍然相关: #5 跟踪 Streamable HTTP 传输支持。公开同类项目展示了 HTTP/SSE 和 Streamable HTTP 两种形式,因此应结合当前可选的 Streamable HTTP 实现,以及任何尚存的加固或文档差距,重新审视此问题。

快速开始

通过 MCP stdio 运行已下载的发布版二进制文件:

ABS_BASE_URL=http://localhost:13378 \
ABS_API_KEY=... \
ABS_READ_ONLY=true \
/path/to/abs-mcp

或运行容器镜像:

docker run --rm -i \
  -e ABS_BASE_URL=http://host.docker.internal:13378 \
  -e ABS_API_KEY=... \
  -e ABS_READ_ONLY=true \
  ghcr.io/jeeftor/abs-mcp:0.5.0

客户端专属代码片段请参阅客户端配置。

MCP 接口

工具

服务器会在 README 中公开所有已注册的工具,并根据它们是否会更改 Audiobookshelf 状态进行分组。

只读且不会更改 ABS 状态的工具:

  • abs_health_check
  • abs_list_libraries
  • abs_get_library
  • abs_list_library_items
  • abs_get_library_item
  • abs_search_library
  • abs_search_ebooks
  • abs_preview_ebook_device_send
  • abs_get_library_stats
  • abs_get_filter_data
  • abs_list_library_authors
  • abs_get_author
  • abs_list_library_series
  • abs_get_series
  • abs_list_collections
  • abs_get_collection
  • abs_get_items_in_progress
  • abs_get_listening_stats
  • abs_list_listening_sessions
  • abs_get_item_progress
  • abs_list_bookmarks
  • abs_list_backups
  • abs_list_ereader_devices
  • abs_send_ebook_to_device
  • abs_send_ebook_by_query
  • abs_get_item_metadata_object
  • abs_find_misorganized_items

已实现的变更工具:

  • abs_scan_library
  • abs_scan_library_and_wait
  • abs_scan_item
  • abs_update_item_metadata
  • abs_update_item_progress
  • abs_create_bookmark
  • abs_update_bookmark
  • abs_create_backup
  • abs_update_item_cover
  • abs_remove_item_cover
  • abs_update_item_chapters
  • abs_create_collection
  • abs_update_collection
  • abs_delete_collection
  • abs_add_collection_item
  • abs_remove_collection_item
  • abs_create_playlist
  • abs_update_playlist
  • abs_delete_playlist
  • abs_add_playlist_item
  • abs_remove_playlist_item
  • abs_remove_library_items_with_issues

计划中、用于发现的变更工具:

  • abs_match_item
  • abs_update_item_tracks

默认情况下,会阻止更改 Audiobookshelf 状态的工具,因为 ABS_READ_ONLY 默认为 true。扫描工具、问题清理、封面更新、章节更新、类型化条目元数据、当前用户的进度/书签写入、备份创建,以及集合/播放列表的创建、更新、添加条目、删除和移除条目工具,均为已实现的变更操作。向设备发送电子书,以及受保护的基于查询的设备发送操作,只会将现有电子书文件通过电子邮件发送出去;它们不会在 Audiobookshelf 上创建、更改或删除任何内容(包括媒体库、元数据、备份、进度、集合或播放列表状态),因此在启用只读模式时也允许使用。此处的只读是指“不会更改 Audiobookshelf 状态”,而非“不会产生任何外部副作用”;如果需要完全禁止向设备发送内容,请勿配置电子阅读器设备。对于设备发送操作的使用体验,请先调用 abs_preview_ebook_device_send:该工具为只读,会返回精简的电子书候选项、已清理的设备名称、ready,以及在解析出一本电子书和一个已保存设备名称时返回的确切确认字符串和发送步骤对应的 nextTool。ABS 仍会在最终的设备发送调用中授权设备访问和内容发送。 其余计划中的变更工具(包括条目匹配和条目音轨更新)会公开供发现,但在通过只读检查后会返回未实现错误,直至其 ABS 源代码和 fixture 行为得到验证。

资源
  • abs://server/info
  • abs://libraries
  • abs://libraries/{library_id}
  • abs://libraries/{library_id}/items?limit=...&offset=...
  • abs://libraries/{library_id}/stats
  • abs://libraries/{library_id}/filterdata
  • abs://items/{item_id}
  • abs://items/{item_id}/metadata-object
  • abs://api-inventory/current
  • abs://fixture/status
提示词
  • abs_library_audit
  • abs_scan_troubleshooting
  • abs_api_update_review

有关工具输入、输出格式、变更行为和常见错误,请参阅 docs/tools.md。

配置

对于 MCP 客户端、容器以及其他注入密钥的启动器,首选使用环境变量和环境文件进行配置:

export ABS_BASE_URL=http://localhost:13388
export ABS_API_KEY=...
export ABS_READ_ONLY=true
export ABS_TIMEOUT=30s
export ABS_FIXTURE_DIR=test/abs
export ABS_EXTRA_HEADERS_FILE=/path/to/headers.json
export ABS_TLS_CA_CERT_FILE=/path/to/corporate-ca.pem
export ABS_TLS_INSECURE_SKIP_VERIFY=false
export ABS_TRANSPORT=stdio
export ABS_HTTP_ADDR=127.0.0.1:3333
export ABS_HTTP_PATH=/mcp
export ABS_HTTP_BEARER_TOKEN=

服务器也可以从 Docker 风格的环境文件中加载相同的值:

go run ./cmd/abs-mcp --env-file /path/to/.env

服务器还接受对应的 Cobra/Viper CLI 标志。优先级依次为显式 CLI 标志、进程环境变量、--env-file,最后是内置默认值:

go run ./cmd/abs-mcp \
  --env-file /path/to/.env \
  --base-url http://localhost:13388 \
  --api-key ... \
  --read-only=true \
  --timeout 30s \
  --fixture-dir test/abs \
  --extra-headers-file /path/to/headers.json \
  --header 'CF-Access-Client-Id=...' \
  --header 'CF-Access-Client-Secret=...' \
  --tls-ca-cert-file /path/to/corporate-ca.pem \
  --transport stdio \
  --http-bearer-token ...

除短暂的本地调试会话外,建议使用 ABS_API_KEY 和 ABS_HTTP_BEARER_TOKEN,而非 --api-key 和 --http-bearer-token,以免令牌出现在 shell 历史记录或进程列表中。

环境变量CLI 标志默认值
无--env-file未设置
ABS_BASE_URL--base-url必填
ABS_API_KEY--api-key必填
ABS_READ_ONLY--read-onlytrue
ABS_TIMEOUT--timeout30s
ABS_FIXTURE_DIR--fixture-dirtest/abs
ABS_EXTRA_HEADERS_FILE--extra-headers-file未设置
无--header NAME=VALUE未设置
ABS_TLS_CA_CERT_FILE--tls-ca-cert-file未设置
ABS_TLS_INSECURE_SKIP_VERIFY--tls-insecure-skip-verifyfalse
ABS_TRANSPORT--transportstdio
ABS_HTTP_ADDR--http-addr127.0.0.1:3333
ABS_HTTP_PATH--http-path/mcp
ABS_HTTP_BEARER_TOKEN--http-bearer-token未设置

使用 ABS_TRANSPORT=http 或 --transport=http,即可在 http://<ABS_HTTP_ADDR><ABS_HTTP_PATH> 提供无状态 Streamable HTTP 服务。默认绑定地址仅供本地访问。每个请求都可独立路由:不会创建或使用 MCP 会话 ID。代理必须原样转发 Mcp-Protocol-Version、Mcp-Method 和 Mcp-Name 请求头。 设置 ABS_HTTP_BEARER_TOKEN 后,HTTP 客户端必须向 MCP 端点发送 Authorization: Bearer <token>。此令牌用于保护 MCP HTTP 端点,与发送给 Audiobookshelf 的上游 ABS_API_KEY 相互独立。对于远程或多用户访问,请将服务器置于 TLS/身份验证反向代理(如 Cloudflare Access / Zero Trust)之后,并将 Audiobookshelf 凭据保存在环境变量或密钥文件中,不要放在 URL 查询参数中。

ABS_EXTRA_HEADERS_FILE 是可选的。设置后,它必须指向一个 JSON 对象,其中字符串形式的请求头名称对应字符串形式的值,例如 {"X-Corp-Trace":"trace-1"}。此处不接受 Authorization;Audiobookshelf 身份验证请使用 ABS_API_KEY。

--env-file 支持简单的 Docker 风格 dotenv 行,例如 KEY=value、 KEY="value"、KEY='value'、空行、注释以及可选的 export 前缀。MCP 服务会忽略未知键。

使用 --header NAME=VALUE 可快速在本地注入请求头。该参数可重复使用,且重复的名称会覆盖 ABS_EXTRA_HEADERS_FILE 中的值。对于 Cloudflare Access 凭据等密钥,建议使用文件,因为 CLI 标志可能会出现在 shell 历史记录和进程列表中。

对于私有或企业 TLS 证书,建议使用 ABS_TLS_CA_CERT_FILE 或 --tls-ca-cert-file,并提供 PEM CA 证书包。仅在修复本地信任配置时,才将 ABS_TLS_INSECURE_SKIP_VERIFY=true 或 --tls-insecure-skip-verify 用作临时备用方案。

安全

abs-mcp 默认处于只读模式。设置 ABS_READ_ONLY=true 后,所有会修改数据的 工具都会在调用 Audiobookshelf API 之前被阻止。

以下工具会修改 Audiobookshelf 状态,因此需要设置 ABS_READ_ONLY=false:

  • abs_scan_library
  • abs_scan_library_and_wait
  • abs_scan_item
  • abs_update_item_cover
  • abs_remove_item_cover
  • abs_update_item_chapters
  • abs_update_item_metadata
  • abs_update_item_progress
  • abs_create_bookmark
  • abs_update_bookmark
  • abs_create_backup
  • abs_send_ebook_to_device
  • abs_send_ebook_by_query
  • abs_match_item(计划实现;尚未实现)
  • abs_update_item_tracks(计划实现;尚未实现)
  • abs_create_collection
  • abs_update_collection
  • abs_delete_collection
  • abs_add_collection_item
  • abs_remove_collection_item
  • abs_create_playlist
  • abs_update_playlist
  • abs_delete_playlist
  • abs_add_playlist_item
  • abs_remove_playlist_item
  • abs_remove_library_items_with_issues

匹配条目和条目音轨工具目前只是存根:它们会先验证只读模式,然后返回明确的“尚未实现”错误,直到 Audiobookshelf 源码和 Docker 测试环境中的行为得到验证。

abs_remove_library_items_with_issues 还要求提供完全一致的确认字符串 remove issues from <libraryId>,并且可以在请求 Audiobookshelf 移除缺失或无效条目之前检查预期的问题数量。

未来的破坏性工具应遵循相同模式:必须设置 ABS_READ_ONLY=false,但这还不够;在删除、移除、清除、替换、覆盖或批量修改 Audiobookshelf 数据之前,工具还应要求明确的确认输入。

服务需要 Audiobookshelf 基础 URL,以及 API 密钥或 bearer token。请优先使用权限范围满足计划开放工具所需的最小权限的 Audiobookshelf API 密钥。此服务不会记录 bearer token、API 密钥、原始 Authorization 标头或额外标头值。ABS_EXTRA_HEADERS_FILE 中不允许使用 Authorization;请使用 ABS_API_KEY 进行 Audiobookshelf 身份验证。

安装

从 GitHub releases 页面下载发布压缩包并解压,然后将 MCP 客户端指向 abs-mcp 二进制文件。服务默认通过 stdio 使用 MCP,这仍是发布和注册所采用的方式。

本地开发时,也可以从源代码运行服务:

go run ./cmd/abs-mcp

本地测试 Streamable HTTP:

ABS_TRANSPORT=http \
ABS_HTTP_ADDR=127.0.0.1:3333 \
ABS_HTTP_PATH=/mcp \
ABS_HTTP_BEARER_TOKEN=dev-mcp-token \
go run ./cmd/abs-mcp

将 Streamable HTTP 客户端(包括 Hermes 或 MCP Inspector 等本地工具)指向 http://127.0.0.1:3333/mcp。如果设置了 ABS_HTTP_BEARER_TOKEN,请将客户端配置为发送匹配的 bearer token。该端点使用静态 bearer token,而非 OAuth;只有当服务之后采用 OAuth 授权流程时,才部署 OAuth 受保护资源元数据。

客户端配置

Claude Desktop、Cursor、VS Code 和 Windsurf 均支持通过命令、参数和环境值配置 stdio MCP 服务。请使用二进制文件的绝对路径,并优先使用 env 或 --env-file 来处理机密信息。

Claude Desktop claude_desktop_config.json:

{
  "mcpServers": {
    "Audiobookshelf": {
      "command": "/path/to/abs-mcp",
      "args": [
        "--env-file",
        "/path/to/abs-mcp.env",
        "--extra-headers-file",
        "/path/to/cf-headers.json"
      ]
    }
  }
}

Claude Code:

claude mcp add Audiobookshelf /path/to/abs-mcp \
  -e ABS_BASE_URL=http://localhost:13378 \
  -e ABS_API_KEY=... \
  -e ABS_READ_ONLY=true

Cursor mcp.json:

{
  "mcpServers": {
    "Audiobookshelf": {
      "command": "/path/to/abs-mcp",
      "env": {
        "ABS_BASE_URL": "http://localhost:13378",
        "ABS_API_KEY": "...",
        "ABS_READ_ONLY": "true"
      }
    }
  }
}

VS Code MCP 配置:

{
  "servers": {
    "Audiobookshelf": {
      "type": "stdio",
      "command": "/path/to/abs-mcp",
      "env": {
        "ABS_BASE_URL": "http://localhost:13378",
        "ABS_API_KEY": "...",
        "ABS_READ_ONLY": "true"
      }
    }
  }
}

使用环境文件的 Windsurf MCP 配置:

{
  "mcpServers": {
    "Audiobookshelf": {
      "command": "/path/to/abs-mcp",
      "args": [
        "--env-file",
        "/path/to/abs-mcp.env"
      ]
    }
  }
}

基于 Docker 的 stdio 配置:

{
  "mcpServers": {
    "Audiobookshelf": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "ABS_BASE_URL=http://host.docker.internal:13378",
        "-e",
        "ABS_API_KEY",
        "-e",
        "ABS_READ_ONLY=true",
        "ghcr.io/jeeftor/abs-mcp:0.5.0"
      ],
      "env": {
        "ABS_API_KEY": "..."
      }
    }
  }
}

直接运行容器镜像:

docker run --rm -i \
  -e ABS_BASE_URL=http://host.docker.internal:13388 \
  -e ABS_API_KEY=... \
  -e ABS_READ_ONLY=true \
  ghcr.io/jeeftor/abs-mcp:0.5.0

使用 Cloudflare Access 标头和企业/私有 CA 证书包:

docker run --rm -i \
  -e ABS_BASE_URL=https://abs.example.com \
  -e ABS_API_KEY=... \
  -e ABS_EXTRA_HEADERS_FILE=/run/secrets/abs-headers.json \
  -e ABS_TLS_CA_CERT_FILE=/run/secrets/corporate-ca.pem \
  -v /path/to/headers.json:/run/secrets/abs-headers.json:ro \
  -v /path/to/corporate-ca.pem:/run/secrets/corporate-ca.pem:ro \
  ghcr.io/jeeftor/abs-mcp:0.5.0

构建本地镜像:

make docker-build

本地开发

启动仓库本地的 Audiobookshelf 固定测试环境,扫描暂存的测试媒体, 构建 MCP 服务,并写入本地 MCP 客户端配置:

make dev

该目标会让 Audiobookshelf 继续运行在 http://localhost:13388,并写入 .mcp.dev.json。生成的配置指向 bin/abs-mcp,包含来自 test/abs/.env.testing 的固定测试环境令牌,设置 ABS_READ_ONLY=true,并且 已添加到 Git 忽略列表。

如果需要在本地客户端中启用可修改数据的扫描工具,请使用此命令:

make mcp-dev-config-read-write

完成后停止固定测试环境:

make abs-dev-down

安装本地 pre-commit 钩子:

prek install
prek install --hook-type commit-msg

手动运行所有钩子:

prek run --all-files

测试

运行单元测试和协议测试:

make test-unit

运行基于 Docker 的 Audiobookshelf 集成测试:

make abs-test-integration

集成测试目标会在运行测试前重置并扫描仓库本地的 ABS 固定测试环境。

完成后停止固定测试环境容器:

make abs-dev-down

CI 和发布

GitHub Actions 会在推送到 master 以及向 master 提交拉取请求时,运行单元测试、Go 包测试、二进制文件构建和 Docker 镜像构建。

匹配 v* 的标签会发布适用于 Linux、macOS 和 Windows 的 amd64 与 arm64 版本归档。发布工作流还会向 ghcr.io/jeeftor/abs-mcp 发布多架构 Docker 镜像。

MCP 注册表

本仓库已准备好通过以下 OCI 包路径接入官方 MCP 注册表:

  • 注册表名称:io.github.jeeftor/abs-mcp
  • 包:ghcr.io/jeeftor/abs-mcp:<version>
  • 注册表传输方式:stdio
  • 运行时传输方式:默认为 stdio;也可选择本地 Streamable HTTP,并设置 ABS_TRANSPORT=http
  • 元数据文件:server.json

Docker 镜像包含必需的 MCP 所有权标签 io.modelcontextprotocol.server.name=io.github.jeeftor/abs-mcp。

对于 v* 标签,发布工作流会构建不可变的 GHCR 镜像标签,将 server.json 重写为对应的标签版本,使用 GitHub OIDC 向 MCP 注册表进行身份验证,并通过 mcp-publisher 发布。GitHub OIDC 无需专用的注册表密钥。

官方注册表条目发布后,下游聚合平台即可从注册表 API 获取该条目。Glama 是下一个值得考虑的上架目标。Smithery 则应等到本项目为 stdio 分发提供 MCPB 包,或准备好经过加固且记录了外部身份验证方式的公开 Streamable HTTP 部署配置后再接入。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。