A Model Context Protocol server for interacting with Komga comic book server. Provides tools for searching libraries, managing reading lists, and discovering comics.
The Komga MCP server has a mixed definition quality profile. Naming is consistent (verb_noun pattern with search_, get_, create_, add_), and descriptions are present for all 7 tools. However, there are critical gaps: (1) Input schemas are visible but lack explicit JSON Schema type declarations in several parameters (library_ids, publisher, genre, tags, etc. are typed as arrays in the function signatures but the rubric requires formal JSON Schema definitions in the tool registration); (2) Parameter descriptions are generic and lack constraints (e.g., 'List of publishers to filter by' does not explain valid publisher formats or where publishers come from); (3) No output schema documentation is provided, callers cannot know what fields to expect from search results; (4) Error handling is completely absent, no guidance on retryable vs fatal errors, no validation of input formats, no recovery suggestions; (5) No evidence of permission gates, audit logging, or security patterns despite write operations (create_reading_list, add_to_reading_list); (6) Tool descriptions are adequate (100-150 chars) but do not explain when to call each tool vs alternatives, or what data structures are returned. The implementation appears sound (async, proper auth, pagination params present), but the tool definitions themselves lack the precision LLMs need to select and invoke tools reliably.
Add books to an existing reading list or update its properties.
Create a new reading list with specified books.
List all available comic libraries in the Komga server.
List existing reading lists with optional filtering.
Find comics by author/creator with role filtering.
Search for individual comic books with filtering options.
No output schema documentation. Tools return Dict[str, Any] with no declared fields. LLMs cannot know what fields to extract for downstream tool calls or user presentation.
Parameter descriptions lack constraints and validation guidance. E.g., 'List of publishers to filter by' does not specify format, where to get valid values, or max array length. No enums provided for constrained fields like read_status (UNREAD, READ, IN_PROGRESS) or series statuses (ENDED, ONGOING, ABANDONED, HIATUS).
No error handling or recovery guidance. If an API call fails, no documentation of what errors to expect, whether they are retryable, or what the LLM should do next. Write operations (create_reading_list, add_to_reading_list) have no confirmation, dry-run, or undo mechanisms.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 49 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Search for comic series with advanced filtering options.
No security patterns implemented. No audit logging of tool calls, no permission checks, no per-tool scope declarations, no rate limiting. Write operations should be gated by permission verification and logged for compliance.
Incomplete parameter descriptions. E.g., search_text, role, ordered params lack actionable detail. 'Text to search for in series titles' does not explain case sensitivity, substring vs full-word match, or required minimum length.
Missing tool composition documentation. No dependency hints explaining which tools to call first (e.g., 'Call get_libraries() first to find library IDs for search_series'). No guidance on when to call search_series vs search_books vs search_authors.
Array parameters lack size constraints. library_ids, publisher, genre, tags, read_status, status, book_ids arrays have no documented minimum/maximum length or element validation. This invites LLMs to pass unusually large or malformed arrays.