komga-mcp
This MCP server allows managing and browsing a Komga digital library (comic, manga, BD, magazine, ebook) via tools exposing the Komga REST API. It provides comprehensive administration for libraries, series, books, collections, readlists, metadata, users, and server settings.
Library Management: List, get, create, update, delete, scan, analyze, refresh metadata, and empty trash for libraries.
Series Management: Search series using full-text and complex condition filters (with
allOf/anyOfoperators), browse alphabetically, get details/collections/thumbnails, latest/new/updated lists, update/refresh metadata, analyze, and mark read/unread.Book Management: Search books with full-text/condition filters, get details, page metadata, next/previous in series, thumbnails, latest/ondeck/duplicates, update metadata (single/bulk), refresh/analyze, set read progress, mark unread, and list containing readlists.
Collections & Readlists: List, get, create, update, delete collections/readlists, list series in collections, books in readlists (with filtering), and navigate next/previous books in a readlist.
Referential Metadata: List authors (name and role), tags, genres, publishers, languages, age ratings, sharing labels, series release years. All support pagination, sorting, and relationship filters (by library, series, collection, readlist).
User & Authentication: Get current user (
whoami), list/create/update/delete users (ADMIN), change passwords (own/other), manage API keys, and view authentication activity (own or all if ADMIN).Server Administration: Get server info, settings, claim status, history, tasks; update settings; browse filesystem directories for library setup.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@komga-mcpfind the manga series 'One Piece'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
komga-mcp
Part of the arr-mcps collection. MCP server exposing Komga's REST API as tools for browsing and managing comic, manga, BD, magazine, and ebook libraries. It is built with FastMCP.
Install
Download a wheel from the latest release
and install it as a uv tool:
uv tool install komga_mcp-*.whlRegister it with Claude Code:
claude mcp add komga \
--env KOMGA_URL=https://your-komga-host \
--env KOMGA_API_KEY=<api-key> \
-- komga-mcpFrom source
uv sync
cp .env.example .envclaude mcp add komga \
--env KOMGA_URL=https://your-komga-host \
--env KOMGA_API_KEY=<api-key> \
-- uv run --directory /path/to/komga-mcp komga-mcpRelated MCP server: komga-mcp
Configuration
Komga API keys are created in the Komga user settings. The key is sent as
X-API-Key on every request. The server does not accept credentials supplied
by an MCP tool call.
Env var | Required | Default |
| yes | - |
| yes | - |
| no |
|
KOMGA_URL is the server root, without /api; the client adds the documented
/api/v1 and /api/v2 paths itself. Set KOMGA_VERIFY_TLS=false only when a
self-signed certificate is intentional.
Tools
8 resource-scoped tools, each covering multiple Komga REST endpoints
(81 total) via an operation parameter. Call a tool with operation set
to one of its listed operations (the function names below, e.g.
list_libraries) and an arguments dict matching that operation's
parameters — the tool's own description (visible to your MCP client)
lists every operation, its signature, and a one-line doc, including any
"Requires ADMIN" notes. Image, file-download, page-stream, and multipart
ComicRack endpoints are intentionally excluded.
Tool | Operations | Kind | Covers |
| 9 | reads + writes | Libraries: list, get, create, update, delete, scan, analyze, refresh metadata, empty trash |
| 13 | reads + writes | Series: search, get, collections, latest/new/updated, thumbnails, metadata, analyze, read progress |
| 16 | reads + writes | Books: search, get, pages, next/previous, readlists, thumbnails, latest/ondeck/duplicates, metadata, analyze, read progress |
| 6 | reads + writes | Collections: list, get, series, create, update, delete |
| 8 | reads + writes | Readlists: list, get, books, next/previous book, create, update, delete |
| 10 | read-only | Authors, tags, genres, publishers, languages, age ratings, sharing labels, release years |
| 12 | reads + writes | whoami, users CRUD, passwords, API keys, auth activity |
| 7 | reads + writes | Server info, settings, claim status, history, tasks, filesystem |
Example: komga_libraries(operation="scan_library", arguments={"library_id": "l1"}).
Search conditions
search_series, search_books, and search_series_alphabetical_groups send a
JSON body containing fullTextSearch and an optional recursive condition.
Pagination is sent as query parameters (page, size, repeated sort, and
unpaged). For example:
{
"fullTextSearch": "berserk",
"condition": {
"allOf": [
{"genre": {"operator": "contains", "value": "action"}},
{"readStatus": {"operator": "is", "value": "UNREAD"}}
]
}
}Use anyOf for OR and allOf for AND. String operators include is, isNot,
beginsWith, contains, endsWith, and their negative forms. Boolean fields
use isTrue or isFalse; date fields use after, before, isInTheLast,
isNotInTheLast, isNull, or isNotNull.
Metadata patches use Komga's normal semantics: omit a field to leave it alone,
or send null to unset it. Read progress accepts page and/or completed.
Development
make helpCommand | Does |
| Run |
| Run the offline test suite |
| Run live tests (needs |
| Build wheel and sdist into |
| Bump package version and lockfile |
| Remove build artifacts |
The release workflow runs tests and publishes wheel and sdist files whenever a
v* tag is pushed.
Available Tools
8 toolskomga_booksA
komga books operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
analyze_book(book_id) — Analyze a book. Requires ADMIN.
get_book(book_id) — Get book details, media information, metadata, and read progress.
get_book_next(book_id) — Get the next book in the series.
get_book_pages(book_id) — List page metadata for a book without downloading page images.
get_book_previous(book_id) — Get the previous book in the series.
get_book_readlists(book_id) — List readlists containing a book.
get_books_ondeck(library_id=None, page=0, size=50, sort=None, unpaged=False) — List books currently on deck for the authenticated user.
get_duplicate_books(page=0, size=50, sort=None, unpaged=False) — List duplicate books by file hash. Requires ADMIN.
get_latest_books(library_id=None, page=0, size=50, sort=None, unpaged=False) — List recently added or updated books.
list_book_thumbnails(book_id) — List thumbnail metadata for a book; does not download image bytes.
mark_book_unread(book_id) — Mark a book as unread.
refresh_book_metadata(book_id) — Re-import embedded metadata for a book. Requires ADMIN.
search_books(full_text='', condition=None, page=0, size=50, sort=None, unpaged=False) — Search books using Komga's BookSearch body. Structured condition leaves are keyed by fields such as libraryId, collectionId, title, tag, genre, publisher, language, ageRating, readStatus, seriesStatus, mediaStatus, author, deleted, complete, oneShot, releaseDate, numberSort, and seriesId. Each leaf contains an operator object. Use string operators is, isNot, beginsWith, doesNotBeginWith, contains, doesNotContain, endsWith, or doesNotEndWith; booleans use isTrue/isFalse; dates use after/before/isInTheLast/isNotInTheLast/isNull/isNotNull; and group conditions with anyOf (OR) or allOf (AND). Read-status values are UNREAD, READ, IN_PROGRESS; media-status values are UNKNOWN, ERROR, READY, UNSUPPORTED, OUTDATED; series-status values are ENDED, ONGOING, ABANDONED, HIATUS.
set_book_read_progress(book_id, page=None, completed=None) — Set a book's read position. Supply page and/or completed.
update_book_metadata(book_id, patch) — Update book metadata; null unsets a field and omission keeps it. Requires ADMIN.
update_books_metadata_bulk(updates) — Bulk update book metadata using a map of book ID to patch. Requires ADMIN.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for disclosing behaviors. It explicitly notes permissions (ADMIN for some ops), side-effect semantics for updates ('null unsets a field'), and non-downloading behaviors for page/thumbnail listing. It also explains the arguments structure and search syntax, covering edge cases like nullable arguments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the general invocation pattern, then presents a well-organized bullet list of operations with minimal but sufficient detail. Each line is concise and information-dense, avoiding redundancy while covering 16 distinct operations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (16 operations, varied parameters, permissions, rich search conditions), the description is exceptionally complete. It details permissions, null handling, and search operator semantics. Since an output schema exists, lack of return-value descriptions is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines `operation` (enum) and a generic `arguments` object with 0% coverage. The description fully compensates by enumerating every operation's parameters, defaults, and types (e.g., 'page=0, size=50'). This is essential for correct tool use and is provided comprehensively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it performs 'komga books operations on Komga' and lists all 16 supported operations with specific verbs and targets (e.g., 'get_book_next', 'search_books'). It distinguishes from sibling tools by focusing exclusively on books, and the operation list makes the tool's scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear guidance on how to invoke the tool (pass operation + arguments dict) and details each operation's parameters and required permissions (e.g., 'Requires ADMIN'). However, it does not explicitly mention when not to use this tool or contrast with sibling tools, though the separation is obvious from naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_collectionsA
komga collections operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
create_collection(collection) — Create a collection. Requires ADMIN.
delete_collection(collection_id) — Delete a collection. Requires ADMIN.
get_collection(collection_id) — Get collection details.
get_collection_series(collection_id, status=None, read_status=None, publisher=None, language=None, genre=None, tag=None, age_rating=None, release_year=None, author=None, page=0, size=50, sort=None, unpaged=False) — List series in a collection using Komga's legacy filter query params.
list_collections(search=None, library_id=None, page=0, size=50, sort=None, unpaged=False) — List collections, optionally filtered by search text or library.
update_collection(collection_id, patch) — Update a collection. Requires ADMIN.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are present, the description carries the full transparency burden. It discloses that create_collection, delete_collection, and update_collection require ADMIN, and it specifies that arguments must match the operation's parameters. However, it does not cover side effects (e.g., cascading deletes), error handling, or read-operation specifics beyond what is inherent in the operation names.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact, well-organized bullet list that front-loads the overall purpose and then presents each operation's signature and any permission requirements in a single line. No redundant text or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity of six operations with varying parameters, the description provides complete signatures for all, along with permission flags. It covers all documented operations and their parameters, making it sufficient for an agent to invoke the tool correctly. The output schema likely handles return values, so no extra explanation is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only defines operation and arguments, while the description provides detailed parameter lists for each operation, including defaults (e.g., page=0, size=50) and optional filters for get_collection_series and list_collections. This adds significant semantic meaning beyond the sparse schema, which has 0% coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it covers 'komga collections operations' and enumerates six specific operations (create, delete, get, list, update) with concise descriptions for each, distinguishing it from sibling tools focused on other Komga entities like series or books. The verb+resource pattern is explicit and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for collection-related tasks but does not explicitly contrast with sibling tools. It does note ADMIN requirements for mutating operations (create, delete, update), which guides when to use which operation, but lacks direct alternative tool guidance like 'use komga_series for series operations.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_librariesA
komga libraries operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
analyze_library(library_id) — Analyze all books in a library. Requires ADMIN.
create_library(library) — Create a library. Requires the Komga ADMIN role.
delete_library(library_id) — Delete a library without deleting its files. Requires ADMIN.
empty_library_trash(library_id) — Permanently empty a library's trash. Requires ADMIN.
get_library(library_id) — Get one library by ID.
list_libraries() — List libraries visible to the authenticated Komga user.
refresh_library_metadata(library_id) — Refresh embedded metadata for a library. Requires ADMIN.
scan_library(library_id, deep=False) — Scan a library for new or changed files. Requires ADMIN.
update_library(library_id, patch) — Partially update a library. Requires the Komga ADMIN role.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description bears the burden of providing behavioral context. It does well: 'Delete a library without deleting its files', 'Permanently empty a library's trash', and 'Scan a library for new or changed files' disclose side effects and permissions. It lacks some detail about update/analyze behaviors, but the central safety-relevant behaviors are included.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is efficiently structured: a short usage instruction followed by a bulleted list of operations. Every line conveys a distinct purpose and permission note, with no redundant filler. The front-loaded dispatch instruction helps an agent quickly understand how to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description fully lists all operations, their required roles, and the main effects, which is strong for a dispatcher with nine operations. The output schema provides return-value coverage. However, the incomplete shape of the argument dictionaries for `create_library` and `update_library` means an agent could not fully construct a correct call from description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description needs to compensate. It provides function signatures like `scan_library(library_id, deep=False)` and names `library`, `library_id`, and `patch`, which is helpful. Yet it never explains the structure of the `library` object, the contents of `patch`, or the meaning of `deep`, so the actual argument semantics remain under-specified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly enumerates nine specific library operations with explicit verbs and resources, such as 'analyze_library', 'delete_library', and 'update_library'. Each line states the exact action, so the tool's purpose as a dispatcher for Komga library operations is unmistakable and distinct from sibling tools focused on other resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation list and general 'Komga libraries operations' phrasing imply when the tool should be used, and the ADMIN requirements help agents avoid unprivileged calls. However, it does not explicitly mention the alternative sibling tools or state when to prefer this tool over them, so usage guidance is implied rather than precise.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_readlistsA
komga readlists operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
create_readlist(readlist) — Create a readlist. Requires ADMIN.
delete_readlist(readlist_id) — Delete a readlist. Requires ADMIN.
get_readlist(readlist_id) — Get readlist details.
get_readlist_book_next(readlist_id, book_id) — Get the next book in a readlist.
get_readlist_book_previous(readlist_id, book_id) — Get the previous book in a readlist.
get_readlist_books(readlist_id, library_id=None, read_status=None, tag=None, media_status=None, deleted=None, author=None, page=0, size=50, sort=None, unpaged=False) — List books in a readlist using Komga's filter query params.
list_readlists(search=None, library_id=None, page=0, size=50, sort=None, unpaged=False) — List readlists, optionally filtered by search text or library.
update_readlist(readlist_id, patch) — Update a readlist. Requires ADMIN.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the transparency burden. It explicitly flags ADMIN requirements for create_readlist, delete_readlist, and update_readlist, which is valuable beyond the schema. However, it does not describe side-effect behavior in detail or confirm read/list operations as safe.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well structured as an intro line plus compact operation bullets. It front-loads the key dispatch rule and each operation earns its place with a short actionable summary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
All eight operations and their ADMIN requirements are covered, which is helpful for a generic dispatcher schema. Yet the argument semantics are not fully complete: create_readlist and update_readlist rely on underspecified objects, and filter parameter values are not defined well enough for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description is the main source of parameter meaning. It provides full signature lines including defaults, pagination, and filter parameters for get_readlist_books and list_readlists. It stops short of defining the structure of the readlist object and patch argument, which would materially improve confidence in creating or updating readlists.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies this as the readlists area of Komga and enumerates eight distinct operations with one-line purposes. It distinguishes the tool at the resource level from sibling Komga tools, though the opening phrase is somewhat generic and leans on the operation list for specificity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The operation list makes it clear what the tool can do, but the description does not explicitly state when to use this tool instead of a sibling such as komga_collections or komga_books. Usage context is implied rather than directly prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_referential_metadataBRead-only
komga referential metadata operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
list_age_ratings(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct age ratings.
list_author_names(search=None, page=0, size=50, sort=None, unpaged=False) — List distinct author names.
list_author_roles(search=None, page=0, size=50, sort=None, unpaged=False) — List distinct author roles.
list_authors(search=None, role=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List author names and roles used by the library.
list_genres(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct genres.
list_languages(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct languages.
list_publishers(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct publishers.
list_series_release_years(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct series release years.
list_sharing_labels(search=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct sharing labels.
list_tags(search=None, include=None, library_id=None, collection_id=None, series_id=None, readlist_id=None, page=0, size=50, sort=None, unpaged=False) — List distinct tags; include can be SERIES, BOOK, or BOTH.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotation readOnlyHint=true is provided, and the description makes clear these are list operations, which aligns. The description adds value by listing the specific operations, which are all read-only queries, but it does not go beyond the annotation in disclosing behavioral traits like pagination defaults or potential performance considerations. No contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear introductory sentence followed by a bullet-like list of operations. It is efficient in that each line is concise and informative. The list format is easy to scan, and the description is front-loaded with the core instruction. Slight redundancy in repeating common parameters is acceptable for clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the high complexity of this tool (ten operations with many parameters), the description provides reasonable coverage by listing each operation and its parameters. However, it lacks details on response structure (though an output schema exists), filtering behavior, or edge cases. The absence of usage guidelines and limited parameter semantics makes it less complete for a tool with such a broad scope.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has a low description coverage of 0% (the 'arguments' property is a generic object with additionalProperties true), so the description carries the full burden of explaining parameters. The description lists the parameters for each operation, which is helpful, but it provides minimal semantics beyond parameter names and a brief purpose. For example, it does not explain what 'search' filters against or how 'sort' works, leaving gaps in understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states that this tool performs list operations on distinct metadata values like age ratings, authors, genres, etc. It enumerates each operation with a one-line summary, making the purpose clear. However, it does not distinguish itself from sibling tools beyond listing metadata-specific operations, which is inferred from the operation names.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by saying to pass an `operation` and an `arguments` dict, and it lists each operation with its parameters. It does not explicitly state when to use this tool versus sibling tools, but the metadata-specific nature is implied. No exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_seriesA
komga series operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
analyze_series(series_id) — Analyze all books in a series. Requires ADMIN.
get_latest_series(library_id=None, deleted=None, oneshot=None, page=0, size=50, sort=None, unpaged=False) — List recently added or updated series.
get_new_series(library_id=None, deleted=None, oneshot=None, page=0, size=50, sort=None, unpaged=False) — List newly added series.
get_series(series_id) — Get series details and metadata by ID.
get_series_collections(series_id) — List collections containing a series.
get_updated_series(library_id=None, deleted=None, oneshot=None, page=0, size=50, sort=None, unpaged=False) — List series that were updated but are not newly added.
list_series_thumbnails(series_id) — List thumbnail metadata for a series; does not download image bytes.
mark_series_read(series_id) — Mark every book in a series as read.
mark_series_unread(series_id) — Mark every book in a series as unread.
refresh_series_metadata(series_id) — Re-import embedded series metadata. Requires ADMIN.
search_series(full_text='', condition=None, page=0, size=50, sort=None, unpaged=False) — Search series using Komga's SeriesSearch body. Structured condition leaves are keyed by fields such as libraryId, collectionId, title, tag, genre, publisher, language, ageRating, readStatus, seriesStatus, mediaStatus, author, deleted, complete, oneShot, releaseDate, numberSort, and seriesId. Each leaf contains an operator object. Use string operators is, isNot, beginsWith, doesNotBeginWith, contains, doesNotContain, endsWith, or doesNotEndWith; booleans use isTrue/isFalse; dates use after/before/isInTheLast/isNotInTheLast/isNull/isNotNull; and group conditions with anyOf (OR) or allOf (AND). Read-status values are UNREAD, READ, IN_PROGRESS; media-status values are UNKNOWN, ERROR, READY, UNSUPPORTED, OUTDATED; series-status values are ENDED, ONGOING, ABANDONED, HIATUS.
search_series_alphabetical_groups(full_text='', condition=None, page=0, size=50, sort=None, unpaged=False) — List series grouped alphabetically. Structured condition leaves are keyed by fields such as libraryId, collectionId, title, tag, genre, publisher, language, ageRating, readStatus, seriesStatus, mediaStatus, author, deleted, complete, oneShot, releaseDate, numberSort, and seriesId. Each leaf contains an operator object. Use string operators is, isNot, beginsWith, doesNotBeginWith, contains, doesNotContain, endsWith, or doesNotEndWith; booleans use isTrue/isFalse; dates use after/before/isInTheLast/isNotInTheLast/isNull/isNotNull; and group conditions with anyOf (OR) or allOf (AND). Read-status values are UNREAD, READ, IN_PROGRESS; media-status values are UNKNOWN, ERROR, READY, UNSUPPORTED, OUTDATED; series-status values are ENDED, ONGOING, ABANDONED, HIATUS.
update_series_metadata(series_id, patch) — Update series metadata; null unsets a field and omission keeps it. Requires ADMIN.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It notes that analyze_series and refresh_series_metadata require ADMIN, that list_series_thumbnails does not download image bytes, and that update_series_metadata has null/omission semantics. It also describes the search condition structure in detail, which is complex. Minor gap: it does not state side effects of mark_series_read/unread or that update_series_metadata is a mutation, but the verbs imply it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is structured as a bulleted list of operations, which is scannable. However, it is quite long, especially the search condition repeated twice for two operations, adding verbosity. It could be trimmed by referencing the condition once, but overall structure is good and front-loaded with the operation list.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (13 operations, many with complex parameters), the description is thorough. It covers return types implicitly (e.g., 'list', 'get details'), and with an output schema present, it doesn't need to detail return formats. It provides enough context for an agent to select and invoke operations correctly, but some operations lack side-effect details (e.g., mark_series_read) which would enhance completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage (only two generic params: operation and arguments), so the description must compensate by documenting each operation's parameters. It does this effectively by listing exact function signatures with parameter names and defaults, and for search operations, it explains the condition structure in detail (supported fields, operators, enums). This is far beyond the schema's capability.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description provides a clear list of all operations with specific verbs (e.g., 'analyze_series', 'get_latest_series', 'search_series') and explicit resource scope (all on Komga series). It distinguishes between similar operations like 'get_latest_series', 'get_new_series', and 'get_updated_series' by their exact definitions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use each operation, e.g., 'List recently added or updated series' vs 'List newly added series' vs 'List series that were updated but are not newly added'. It also notes admin requirements for some operations, providing clear context. However, it does not explicitly mention when not to use this tool compared to siblings, but the sibling scope is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_serverA
komga server operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
clear_server_tasks() — Cancel all queued server tasks and return the number removed. Requires ADMIN.
get_server_claim_status() — Return whether the Komga server has been claimed.
get_server_history(page=0, size=50, sort=None, unpaged=False) — Get server event history. Requires ADMIN.
get_server_info() — Get Komga build and runtime information. Requires ADMIN.
get_server_settings() — Get server settings. Requires ADMIN.
list_filesystem(path, show_files=False) — List server filesystem directories for library setup. Requires ADMIN.
update_server_settings(patch) — Update server settings. Requires ADMIN.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It does this well by noting ADMIN requirements for most operations, flagging clear_server_tasks as canceling queued tasks and returning the number removed, and marking update_server_settings as an update. It does not cover error behavior or return shapes for every operation, but the core side effects and permissions are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a one-sentence dispatcher explanation followed by compact bullet entries. No word is wasted, and the format makes it easy for an agent to scan operations, parameters, and permission requirements.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool aggregates seven distinct server operations with generic schema coverage, the description covers each operation, its parameters, and admin requirements. It does not explain output schemas, but an output schema exists, reducing that burden. Minor gaps like the exact structure of 'patch' prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema only exposes a generic operation enum and an opaque 'arguments' object, so the description's per-operation signatures add substantial meaning. It lists parameters with defaults (page=0, size=50, unpaged=False, show_files=False) and gives enough context for most arguments; the main gap is that 'patch' is not structurally defined, but the operation name and general 'patch' convention help.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly defines the tool as a dispatcher for Komga server operations and enumerates seven specific operations with precise verbs (clear, get, list, update). Each bullet names a distinct server-level action, which differentiates this tool from sibling tools focused on libraries, series, books, collections, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The opening instruction 'Pass operation and an arguments dict matching that operation's parameters' gives concrete invocation guidance. The server-scoped title and operation list make the intended domain clear versus sibling tools, though it does not explicitly state when not to use this tool or name specific alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
komga_users_api_keysA
komga users api keys operations on Komga. Pass operation and an arguments dict matching that operation's parameters.
change_my_password(password) — Change the current user's password.
change_user_password(user_id, password) — Change another user's password. Requires ADMIN.
create_api_key(request) — Create an API key for the current user.
create_user(user) — Create a user. Requires ADMIN.
delete_api_key(key_id) — Revoke one of the current user's API keys.
delete_user(user_id) — Delete a user. Requires ADMIN.
list_auth_activity(page=0, size=50, sort=None, unpaged=False) — List all authentication activity. Requires ADMIN.
list_my_api_keys() — List API keys belonging to the current user.
list_my_auth_activity(page=0, size=50, sort=None, unpaged=False) — List authentication activity for the current user.
list_users(page=0, size=50, sort=None, unpaged=False) — List users. Requires ADMIN.
update_user(user_id, patch) — Update a user. Requires ADMIN.
whoami() — Return the currently authenticated user.
| Name | Required | Description | Default |
|---|---|---|---|
| arguments | No | ||
| operation | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses important behavior such as which operations require ADMIN, which affect the current user vs other users, and which create or revoke credentials. It does not explain error behavior or reversibility, but state-changing verbs plus permission notes cover the main operational traits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A brief dispatcher instruction is followed by a well-organized bullet list with one-line explanations for each operation. Every line conveys a parameter signature, a concise behavioral description, and permission context, with no fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 12 operations, a mostly untyped arguments schema, and no annotations, so the description needs to do heavy lifting. It covers operation names, parameters, and admin requirements, but it falls short of fully specifying payload structures for create_user, update_user, and create_api_key.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant value over the free-form arguments schema by listing per-operation parameter signatures and pagination defaults. However, opaque parameters such as user, request, and patch lack shape or required-field documentation, so agents still must infer important parts of the argument payload.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description lists concrete operations such as change_my_password, create_user, delete_user, list_users, and whoami, making the dispatcher's purpose unmistakable. The users/auth/API-key scope clearly distinguishes it from sibling Komga tools like komga_series, komga_libraries, and komga_books.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The scope is obviously Komga user, API-key, and authentication activity management, and every operation is documented. It does not explicitly provide when-not-to-use statements or sibling alternatives, but the domain context is strong enough to route relevant requests here.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
The eight top-level tools are clearly separated by resource domain, and most operations have distinct purposes. However, within series and books there are overlapping list operations (e.g., get_latest_series vs get_new_series vs get_updated_series) that could cause an agent to pick the wrong one.
All tools use the komga_<resource> pattern, and operations consistently follow snake_case verb_noun naming like get_series, create_library, mark_book_unread, and update_collection. The naming is highly predictable with no mixing of conventions.
Eight namespace tools is a reasonable scope for a server covering Komga's broad API, and each namespace maps to a meaningful resource domain. However, each tool acts as a large dynamic dispatcher, hiding many operations behind a single tool, which slightly reduces discoverability.
The server covers the major Komga domains: libraries, series, books, collections, readlists, metadata, users/API keys, and server settings, with update, delete, search, and lifecycle operations. Minor gaps exist, such as no direct list-books-in-series operation (requires a structured search) and no server claim operation.
Maintenance
Related MCP Connectors
MCP server for progressive tool usage at any scale (see https://klavis.ai)
An MCP server that let you interact with Cycloid.io Internal Development Portal and Platform
MCP Server for Slima - AI Writing IDE for Novel Authors with AI Beta Reader.
MCP server for Russian books search, details, and recommendation candidates.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server enabling LLMs to query a local Calibre Content Server for ebook metadata, chapters, and content in HTML or Markdown.16MIT
- AlicenseNot gradedqualityBmaintenanceA read-only MCP server that exposes Komga reading data via Streamable HTTP, providing tools for searching comics, listing unread series, and tracking reading progress.MIT
- AlicenseCqualityAmaintenanceMCP server that exposes qui's JSON REST API as tools for monitoring and managing qBittorrent instances, torrents, automations, cross-seeding, RSS, backups, and related services.12MIT
- AlicenseAqualityAmaintenanceMCP server that exposes Mylar3's HTTP API as tools, letting an LLM read and manage a comic library including watchlist, wanted issues, upcoming, history, logs, story arcs, and providers.5MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/arr-mcps/komga-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server