mylar3-mcp
Click on "Deploy 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., "@mylar3-mcp what's on my wanted list?"
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.
mylar3-mcp
Part of the arr-mcps collection. MCP server exposing Mylar3's HTTP API as tools, so an LLM can read and manage your comic library: watchlist, wanted issues, pull-list/upcoming, history, logs, story arcs, and providers.
Built with FastMCP.
Enabling the API on your Mylar3 server
Mylar3's API is opt-in and disabled by default. You must enable it and obtain an
API key in Mylar's web UI (or bootstrap it with cmd=getAPI if HTTP basic auth
is configured). This is server-side configuration specific to how you run
Mylar3, and out of scope for this project - see Mylar3's own settings for
API_ENABLED and API_KEY.
Related MCP server: komga-mcp
Install
Download a wheel from the latest release
and install it as a uv tool (no repo checkout needed):
uv tool install mylar3_mcp-*.whlThis puts a mylar3-mcp command on your PATH. Register it with Claude Code:
claude mcp add mylar3 \
--env MYLAR_URL=http://your-mylar-host:8090 \
--env MYLAR_API_KEY=<32-char key> \
-- mylar3-mcpFrom source
uv sync
cp .env.example .env # fill in MYLAR_URL and MYLAR_API_KEYclaude mcp add mylar3 \
--env MYLAR_URL=http://your-mylar-host:8090 \
--env MYLAR_API_KEY=<32-char key> \
-- uv run --directory /path/to/mylar3-mcp mylar3-mcpConfig
Env var | Required | Default |
| yes | - |
| yes (except | none (no |
| no |
|
Tools
5 resource-scoped tools, each covering multiple Mylar3 ?cmd= API
commands (40 total) via an operation parameter. Reads use GET, writes use
POST. Call a tool with operation set to one of its listed commands and an
arguments dict matching that command's params — the tool's own description
(visible to your MCP client) lists every operation, its signature, and a
one-line doc.
Tool | Operations | Covers |
| 12 | Add/get/pause/resume/refresh/delete comics, book type, status, recheck files, index, find |
| 7 | Issue info, queue/unqueue, force search/process, regenerate covers, refresh seriesjson |
| 7 | Read list, upcoming, wanted, story arcs, seriesjson listing, annual series |
| 4 | List/add/change/delete providers |
| 10 | Version, API, history, logs, config, GitHub check, update, restart, shutdown |
Example: mylar_comics(operation="mylar_del_comic", arguments={"id": "12345", "directory": True}).
Command-level naming (mylar_<verb>_<resource>, matching the underlying
?cmd= API command) is preserved as the operation value:
Operation | cmd |
| getIndex |
| getComic |
| getComicInfo |
| getIssueInfo |
| getReadList |
| getUpcoming |
| getWanted |
| getHistory |
| getLogs |
| findComic |
| getStoryArc |
| getVersion |
| listProviders |
| seriesjsonListing |
| listAnnualSeries |
| getAPI |
| addComic |
| pauseComic |
| resumeComic |
| refreshComic |
| changeBookType |
| changeStatus |
| recheckFiles |
| queueIssue |
| unqueueIssue |
| regenerateCovers |
| refreshSeriesjson |
| addStoryArc |
| forceSearch |
| forceProcess |
| addProvider |
| changeProvider |
| checkGithub |
| update |
| restart |
| clearLogs |
| delComic ( |
| delProvider |
| shutdown (stops the server) |
| configUpdate (session-cookie auth, see AGENTS.md) |
Notes
Mylar3's API responses are inconsistently enveloped: some wrap in
{"success": true, "data": ...}, some return the payload raw, and some return the bare string"OK". The server unwraps all of these so tools return just the meaningful data.mylar_queue_issueandmylar_force_searchcan actually snatch/download issues - treat them as state-changing.Binary endpoints (
getArt,downloadIssue,downloadNZB) are deliberately not exposed - they stream bytes, not JSON, which isn't useful over MCP.idparams are ComicVine ComicIDs; issue IDs are separate. Bulk-capable cmds (refreshComic,recheckFiles,regenerateCovers,refreshSeriesjson) accept comma-separated lists orall/missing.
Development
make help # list all commandsCommand | Does |
|
|
| Offline tests - one per endpoint, mocked HTTP |
| Tests against the live instance (needs |
| Build wheel + sdist into |
| Bump the version in |
| Remove build artifacts |
The release workflow (.github/workflows/release.yml) builds and publishes to
Releases whenever a v* tag
is pushed - so the usual flow is make bump-patch, commit, then tag and push.
The integration suite only reads data, plus a single reversible write test that
pauses and resumes an existing series (set via MYLAR_TEST_COMIC_ID) - it never
snatches, deletes, or modifies your library.
Available Tools
5 toolsmylar_comicsA
mylar comics operations on Mylar3. Pass operation and an arguments dict matching that operation's parameters.
mylar_add_comic(id) — Queue adding a series to the watchlist by ComicVine ComicID. Runs in a background thread.
mylar_change_book_type(id, booktype) — Force a series' book type.
booktype: Print, Digital, TPB, GN, HC, or One-Shot.mylar_change_status(status_from, status_to, id) — Bulk-change issue status across a series. Pass id='all' for every series. status_from/status_to are issue statuses.
mylar_del_comic(id, directory=None) — Delete a series from the watchlist (and its issues).
idis the ComicVine ComicID. WARNING: pass directory='true' to also delete the comic folder from disk (rmtree).mylar_find_comic(name, issue=None, type_=None, mode=None, page=None, pageSize=None, serinfo=None) — Search ComicVine for a series.
nameis required; type_='story_arc' searches arcs, mode can be series/pullseries/want.mylar_get_comic(id) — Get one series and its issues: returns {comic, issues, annuals}.
idis the ComicVine ComicID.mylar_get_comic_info(id) — Get a single series row from the comics table.
idis the ComicVine ComicID.mylar_get_index() — List every series on the Mylar3 watchlist (id, name, status, publisher, etc.).
mylar_pause_comic(id) — Pause a series' wanted tracking.
idis the ComicVine ComicID.mylar_recheck_files(id) — Recheck files on disk for a series.
idaccepts a single id, comma-list, or a JSON array.mylar_refresh_comic(id) — Queue a ComicVine refresh of a series.
idaccepts a single id or comma-separated list.mylar_resume_comic(id) — Resume a paused series.
idis the ComicVine ComicID.
Inputs: operation (required), arguments. Returns: result
mylar_issues_queueA
mylar issues queue operations on Mylar3. Pass operation and an arguments dict matching that operation's parameters.
mylar_force_process(nzb_name, nzb_folder, failed=None, issueid=None, comicid=None, ddl=None, oneoff=None, apc_version=None, comicrn_version=None) — Enqueue a post-processing job. Requires nzb_name and nzb_folder. Used by SABnzbd/NZBGet-style callbacks.
mylar_force_search() — Trigger a wanted-issue search across the library. May snatch/download wanted issues. Runs in-process.
mylar_get_issue_info(id) — Get a single issue row from the issues table.
idis the IssueID.mylar_queue_issue(id) — Mark an issue Wanted and immediately kick off a search (may snatch/download).
idis the IssueID.mylar_refresh_seriesjson(comicid) — Regenerate series.json files.
comicid: single, list, 'all', 'missing', or 'refresh-missing'.mylar_regenerate_covers(id, overwrite_existing=None) — Re-fetch series cover images.
id: single, comma-list, 'all', or 'missing'.mylar_unqueue_issue(id) — Mark an issue Skipped (un-queue it).
idis the IssueID.
Inputs: operation (required), arguments. Returns: result
mylar_lists_discoveryA
mylar lists discovery operations on Mylar3. Pass operation and an arguments dict matching that operation's parameters.
mylar_add_story_arc(issues=None, arclist=None, id=None, storyarcname=None) — Add/create a story arc. Provide
issuesORarclist.storyarcnamerequired when creating;idto extend an existing arc.mylar_get_read_list() — List the issues in the read list, ordered by issue date.
mylar_get_story_arc(id=None, customOnly=None) — List story arcs; with
id, list that arc's issues in reading order. Pass customOnly='1' for custom arcs only.mylar_get_upcoming(include_downloaded_issues=None) — List this week's wanted issues. Pass include_downloaded_issues='Y' to also include Snatched/Downloaded.
mylar_get_wanted(story_arcs=None) — List wanted issues. Pass story_arcs='true' to also include Wanted story-arc issues and annuals.
mylar_list_annual_series(list_issues=None, group_series=None, show_downloaded=None) — List annual issues. Provide list_issues OR group_series; pass show_downloaded to include downloaded.
mylar_seriesjson_listing(missing=None) — List series with/without series.json. Pass missing='1' for only series missing a series.json.
Inputs: operation (required), arguments. Returns: result
mylar_providersA
mylar providers operations on Mylar3. Pass operation and an arguments dict matching that operation's parameters.
mylar_add_provider(providertype, name, host, prov_apikey, enabled, categories=None, uid=None) — Add a newznab or torznab provider. providertype is 'newznab' or 'torznab' (torznab requires categories).
mylar_change_provider(providertype, name=None, prov_id=None, altername=None, host=None, prov_apikey=None, enabled=None, categories=None, uid=None) — Modify a provider. Provide providertype and either
nameorprov_id, plus any fields to change.mylar_del_provider(providertype, name=None, prov_id=None) — Remove a provider. Provide providertype and either
nameorprov_id.mylar_list_providers() — List configured newznab/torznab providers: returns {newznabs: [...], torznabs: [...]}.
Inputs: operation (required), arguments. Returns: result
mylar_systemA
mylar system operations on Mylar3. Pass operation and an arguments dict matching that operation's parameters.
mylar_check_github() — Check GitHub for updates and return current version data.
mylar_clear_logs() — Clear Mylar3's in-memory log buffer.
mylar_get_api(username, password) — Bootstrap helper: fetch the API key using HTTP basic login credentials. Does not require MYLAR_API_KEY.
mylar_get_history() — List rows from the snatched table (download history), newest first.
mylar_get_logs() — Return Mylar3's in-memory log buffer.
mylar_get_version() — Get Mylar3 version info: git_path, install_type, current_version, latest_version, commits_behind.
mylar_restart() — Restart Mylar3.
mylar_set_config(settings) — Set one or more Mylar config options via the web configUpdate endpoint. Takes a dict of checkbox/text settings keyed by their config.ini name (e.g. {"notify_pack_gif": True}). Checkboxes use boolean values; unchecked checkboxes should be set to False. Requires MYLAR_WEB_USERNAME and MYLAR_WEB_PASSWORD. Applies immediately and persists to config.ini.
mylar_shutdown() — Shut down Mylar3. This stops the server.
mylar_update() — Trigger Mylar3 to self-update (may restart the app).
Inputs: operation (required), arguments. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 5 tools
The five tools are clearly grouped by domain (comics, issues queue, lists/discovery, providers, system), making it easy to select the appropriate namespace. However, there is some overlap between mylar_comics and mylar_issues_queue (e.g., mylar_change_status vs. mylar_queue_issue/unqueue_issue) and subtle differences like mylar_get_comic vs. mylar_get_comic_info that could cause occasional misselection.
All tool names follow a consistent snake_case pattern of mylar_<domain> (mylar_comics, mylar_issues_queue, mylar_lists_discovery, mylar_providers, mylar_system). The operation names within each tool also consistently use the mylar_ prefix and a verb_noun style, ensuring predictability.
With exactly 5 tools, the server falls well within the ideal 3-15 range. Each tool represents a logical domain and earns its place, even though it internally dispatches many operations. The count is neither too thin nor bloated for the Mylar3 management purpose.
The tool surface covers the major lifecycle operations for comics (add, delete, get, refresh, pause/resume), issues (queue/unqueue, search), lists (wanted, upcoming, read list, story arcs), providers (CRUD), and system management (version, logs, config, restart). Minor gaps exist, such as no direct tool to edit an issue's metadata beyond queue status, but core workflows are fully supported.
Maintenance
Related MCP Connectors
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for Pentest-Tools.com: run scans, manage findings and reports via your preffered LLM.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that enables local LLMs to manage a home media stack including Radarr, Sonarr, Prowlarr, and others.MIT
- AlicenseAqualityCmaintenanceMCP server exposing Komga's REST API as tools for browsing and managing comic, manga, BD, magazine, and ebook libraries.8MIT
- AlicenseCqualityCmaintenanceMCP server exposing Radarr's v3 REST API as tools, enabling LLMs to read and manage movies, downloads, history, indexers, and more.100MIT
- AlicenseBqualityCmaintenanceMCP server that exposes the Bookshelf (Readarr fork) v1 REST API as tools, allowing an LLM to read and manage authors, books, book files, editions, series, download queue, history, indexers, import lists, custom formats, tags, commands, and system status, with full read/write access and destructive tools flagged.15MIT