MCP server for interacting with Audiobookshelf API, providing tools to manage libraries, items, users, and other Audiobookshelf resources
The server defines 26 tools with consistent naming and structure, but suffers from critical gaps in schema documentation and parameter descriptions. All tools follow verb_noun or noun-only naming conventions (libraries, library, create_library, item, etc.), which is good. However, the source code provided shows only partial tool registrations, tool definitions are visible in main.go but the actual JSON Schema input definitions are not fully expanded in the code excerpt. Parameter descriptions are present for most tools (base_url, token, and resource-specific params like library_id, item_id), ranging 40-80 characters, which meets baseline standards. However, many optional boolean parameters (items, authors, series, collections, etc.) lack meaningful descriptions, they are too terse ('Include all items in the library' is better than nothing, but doesn't explain WHEN to use them or what fields appear in the response). Output schemas are not documented anywhere in the provided code, the tools return raw JSON from the Audiobookshelf API via mcp.NewToolResultText(string(body)), which means the LLM has no schema guidance for parsing responses. Error handling is present but minimal: errors are returned via mcp.NewToolResultError(err.Error()), but these are generic HTTP error messages without recovery guidance. The create_library tool (WRITE operation) has no confirmation pattern or dry-run capability, which is a security concern.
Retrieve a single Audiobookshelf author by ID
Authorize with Audiobookshelf using username and password
List all Audiobookshelf backups
Retrieve a single Audiobookshelf collection by ID
List all Audiobookshelf collections
Create a new Audiobookshelf library
Get filesystem information for Audiobookshelf server
Output schemas not documented. Tools return raw API responses via mcp.NewToolResultText(string(body)) with no schema guidance. LLMs cannot plan downstream operations or extract fields reliably.
Optional boolean parameters lack meaningful descriptions. E.g., 'Include all items in the library' does not explain when to use it, what response structure changes, or how it affects performance. LLMs cannot make principled choices about which flags to enable.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 50 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
List all Audiobookshelf genres
Check Audiobookshelf server health status
Retrieve a single Audiobookshelf item (audiobook or podcast) by ID, optionally with sub-resources
List Audiobookshelf libraries
Retrieve a single Audiobookshelf library by ID, optionally with sub-resources
Get authenticated user information, or fetch specific user sub-resources
Ping Audiobookshelf server to check connectivity
Retrieve a single Audiobookshelf playlist by ID
List all Audiobookshelf playlists
Retrieve a single Audiobookshelf podcast by ID
List all Audiobookshelf podcasts
Retrieve a single Audiobookshelf series by ID
Retrieve a single Audiobookshelf session by ID
List all Audiobookshelf sessions
Get Audiobookshelf server status information
List all Audiobookshelf tags
Retrieve a single Audiobookshelf user by ID, optionally with sub-resources
Retrieve listening progress for a user on a specific item
List all Audiobookshelf users
create_library (WRITE operation) has no confirmation, dry-run, or rollback support. An agent error could create unwanted libraries with no way to undo. Destructive/write tools should support confirmation patterns.
Error responses are generic HTTP messages (e.g., 'ABS API returned 404: ...'). No recovery guidance or classification (retryable vs user-fixable vs fatal). LLMs cannot self-correct without actionable error messages.
No pagination parameters or result limits documented. Tools like 'libraries', 'users', 'podcasts' can return unbounded lists, risking context window exhaustion. No limit, offset, or cursor parameters visible.
Credentials (base_url, token) exposed as tool parameters instead of server-side injection. Parameters are logged in agent traces, tokens will leak into logs and prompt history.
No input validation or constraint enforcement. Parameters like 'icon' (in create_library) and optional booleans have no enum, format, or range constraints. Free-form strings invite hallucinated values.
List tools (libraries, users, podcasts, etc.) provide no way to filter or search. Agents must fetch all results to find a specific item, wasting tokens and API calls. No filter, search, or query parameters offered.