Connecting clients
Every snippet below runs the same stdio server. Replace https://abs.example.com with your instance and … with the API key from Settings → Users → API Keys.
Claude Code
claude mcp add audiobookshelf \
-e AUDIOBOOKSHELF_URL=https://abs.example.com \
-e AUDIOBOOKSHELF_API_KEY=… \
-- npx -y audiobookshelf-mcpCheck it took:
claude mcp listClaude Desktop
claude_desktop_config.json — macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\:
{
"mcpServers": {
"audiobookshelf": {
"command": "npx",
"args": ["-y", "audiobookshelf-mcp"],
"env": {
"AUDIOBOOKSHELF_URL": "https://abs.example.com",
"AUDIOBOOKSHELF_API_KEY": "…"
}
}
}
}Restart Claude Desktop afterwards; it only reads the file at startup.
Codex
~/.codex/config.toml:
[mcp_servers.audiobookshelf]
command = "npx"
args = ["-y", "audiobookshelf-mcp"]
env = { AUDIOBOOKSHELF_URL = "https://abs.example.com", AUDIOBOOKSHELF_API_KEY = "…" }MCP Inspector
AUDIOBOOKSHELF_URL=https://abs.example.com \
AUDIOBOOKSHELF_API_KEY=… \
npx @modelcontextprotocol/inspector npx -y audiobookshelf-mcpDocker
The image is multi-arch (amd64 and arm64) and published with an SBOM and build provenance:
docker run -i --rm \
-e AUDIOBOOKSHELF_URL=https://abs.example.com \
-e AUDIOBOOKSHELF_API_KEY=… \
ghcr.io/ni-c/audiobookshelf-mcp-i is not optional: the protocol runs over stdin and stdout. There is no port to publish and no healthcheck, because the server does not listen for anything.
As an MCP server entry:
{
"mcpServers": {
"audiobookshelf": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"AUDIOBOOKSHELF_URL",
"-e",
"AUDIOBOOKSHELF_API_KEY",
"ghcr.io/ni-c/audiobookshelf-mcp"
],
"env": {
"AUDIOBOOKSHELF_URL": "https://abs.example.com",
"AUDIOBOOKSHELF_API_KEY": "…"
}
}
}
}Passing -e NAME without a value forwards the variable from the client's environment instead of putting the key on the docker run command line, where it would show up in docker inspect and in the host's process list.
Pinning a version
npx -y audiobookshelf-mcp follows the latest tag. To pin:
npx -y audiobookshelf-mcp@0.1.0…or use the matching image tag, ghcr.io/ni-c/audiobookshelf-mcp:0.1.0.
Running it from a checkout
For development, or to run an unreleased change:
git clone https://github.com/ni-c/audiobookshelf-mcp.git
cd audiobookshelf-mcp
npm install && npm run build
AUDIOBOOKSHELF_URL=https://abs.example.com \
AUDIOBOOKSHELF_API_KEY=… \
node dist/index.jsSee CONTRIBUTING.md for a throwaway Audiobookshelf you can safely write to.