원클릭으로
moviepilot-cli
// Use this skill for any request involving movies, TV shows, or anime, including searching, downloads, subscriptions, library management. Also use this skill whenever the user explicitly mentions MoviePilot.
// Use this skill for any request involving movies, TV shows, or anime, including searching, downloads, subscriptions, library management. Also use this skill whenever the user explicitly mentions MoviePilot.
| name | moviepilot-cli |
| version | 1 |
| description | Use this skill for any request involving movies, TV shows, or anime, including searching, downloads, subscriptions, library management. Also use this skill whenever the user explicitly mentions MoviePilot. |
All script paths are relative to this skill file.
Use scripts/mp-cli.js to interact with the MoviePilot backend.
List all available commands: node scripts/mp-cli.js list
Show parameters and usage for a specific command: node scripts/mp-cli.js show <command>
Always run show <command> before calling a command — parameter names are not inferable, do not guess.
| Category | Commands |
|---|---|
| Media Search | search_media, recognize_media, query_media_detail, get_recommendations, search_person, search_person_credits |
| Torrent | search_torrents, get_search_results |
| Download | add_download, query_download_tasks, delete_download, query_downloaders |
| Subscription | add_subscribe, query_subscribes, update_subscribe, delete_subscribe, search_subscribe, query_subscribe_history, query_popular_subscribes, query_subscribe_shares |
| Library | query_library_exists, query_library_latest, transfer_file, scrape_metadata, query_transfer_history |
| Files | list_directory, query_directory_settings |
| Sites | query_sites, query_site_userdata, test_site, update_site, update_site_cookie |
| System | query_schedulers, run_scheduler, query_workflows, run_workflow, query_rule_groups, query_episode_schedule, send_message |
Search for a movie or TV show by title:
node scripts/mp-cli.js search_media title="..." media_type="movie"
If the user specifies a TV season, run Season Validation step first — the season number provided by the user may not match TMDB.
Prefer tmdb_id; use douban_id only when tmdb_id is unavailable.
Omitting sites= uses the user's default sites. If the user specifies sites, first retrieve site IDs:
node scripts/mp-cli.js query_sites
Search torrents using default sites:
node scripts/mp-cli.js search_torrents tmdb_id=791373 media_type="movie"
Search torrents using user-specified sites (pass site IDs from query_sites):
node scripts/mp-cli.js search_torrents tmdb_id=791373 media_type="movie" sites='1,3'
When search_torrents returns:
get_search_results yet.filter_options fields and every value within each field to the user verbatim.Run node scripts/mp-cli.js show get_search_results to check available parameters. Filter logic: OR within a field, AND across fields.
Filter values must come from the filter_options returned by search_torrents — do not invent, translate, normalize, or use values from any other source. Note: filter_options keys are camelCase (e.g., freeState), but get_search_results params are snake_case (e.g., free_state).
Fetch results with selected filters:
node scripts/mp-cli.js get_search_results resolution='1080p,2160p' free_state='免费,50%'
If empty, tell the user which filter to relax and ask before retrying.
Show all results without pre-selection. Each row: index, title, size, seeders, resolution, release group, volume_factor, freedate_diff.
volume_factor | Meaning |
|---|---|
免费 | Free download |
50% | 50% download size |
2X | Double upload |
2X免费 | Double upload + free |
普通 | No discount |
freedate_diff: remaining free window (e.g., 2天3小时).
After the user picks torrents: Run Check Library and Subscriptions step.
If the media already exists in the library or is already subscribed, stop and report the finding to the user.
Download one or more torrents (torrent_url comes from get_search_results output):
node scripts/mp-cli.js add_download torrent_url="abc1234:1,def5678:2"
| Step | Action |
|---|---|
search_media empty | Retry with alternative title (English/original), inform user. Still empty → ask for title or TMDB ID. |
search_torrents empty | Inform user, ask whether to retry with different sites. |
get_search_results empty | Do not silently broaden filters. Suggest which filter to relax, ask before retrying. |
add_download fails | Run query_downloaders + query_download_tasks to diagnose, then report to user. |
tmdb_id: Run search_media.Subscribe to a movie or TV show:
node scripts/mp-cli.js add_subscribe title="..." year="2011" media_type="tv" tmdb_id=42009
Subscribe to a specific season:
node scripts/mp-cli.js add_subscribe title="..." year="2011" media_type="tv" tmdb_id=42009 season=4
Subscribe starting from a specific episode:
node scripts/mp-cli.js add_subscribe title="..." year="2024" media_type="tv" tmdb_id=12345 season=1 start_episode=13
List download tasks and get hash for further operations:
node scripts/mp-cli.js query_download_tasks status=downloading
Delete a download task (confirm with user first — irreversible):
node scripts/mp-cli.js delete_download hash=<hash>
Delete a download task and also remove its files (confirm with user first — irreversible):
node scripts/mp-cli.js delete_download hash=<hash> delete_files=true
List active subscriptions:
node scripts/mp-cli.js query_subscribes status=R
Update subscription filters:
node scripts/mp-cli.js update_subscribe subscribe_id=123 resolution="1080p"
Only download full-season packs for a TV best-version subscription:
node scripts/mp-cli.js update_subscribe subscribe_id=123 best_version=1 best_version_full=1
Trigger a search for missing episodes (confirm with user first):
node scripts/mp-cli.js search_subscribe subscribe_id=123
Remove a subscription (confirm with user first):
node scripts/mp-cli.js delete_subscribe subscribe_id=123
Run before any download or subscription to avoid duplicates.
Check if the media already exists in the library:
node scripts/mp-cli.js query_library_exists tmdb_id=123456 media_type="movie"
Check if the media is already subscribed:
node scripts/mp-cli.js query_subscribes tmdb_id=123456
Mandatory when user specifies a season. Productions sometimes release a show in multiple parts under one TMDB season; online communities and torrent sites may label each part as a separate "season".
Fetch media detail to check available seasons:
node scripts/mp-cli.js query_media_detail tmdb_id=<id> media_type="tv"
Compare season_info with the user's requested season:
season_info → use that season number directly and return to the calling workflow.season_info, then continue to next step.Fetch episode schedule for the latest season from season_info:
node scripts/mp-cli.js query_episode_schedule tmdb_id=<id> season=<latest_season_number>
Use air_date to find a block of recently-aired episodes that likely corresponds to what the user calls the missing season. Look for a gap in air_date between episodes — the gap indicates a part break, and the episodes after the gap are what the user likely refers to as the next "season". For example, if TMDB Season 1 has episodes 1–24 and there is a multi-month gap between episode 12 and 13, then episodes 13–24 correspond to the user's "Season 2". If no such gap exists, tell user content is unavailable. Otherwise confirm the episode range with user.
Missing configuration: Ask the user for the backend host and API key. Once provided, save the config persistently — subsequent commands will use it automatically:
node scripts/mp-cli.js -h <HOST> -k <KEY>
Use this skill when you need to call MoviePilot REST API endpoints directly. Covers all 238 API endpoints across 27 categories including media search, downloads, subscriptions, library management, site management, system administration, plugins, workflows, and more. Use this skill whenever the user asks to interact with MoviePilot via its HTTP API, or when the moviepilot-cli skill cannot cover a specific operation.
Use this skill when the user asks the agent to open, browse, inspect, extract content from, click through, fill forms on, screenshot, or verify a web page with a browser. Also use it for MoviePilot scenarios that need browser interaction, such as checking a site page, confirming a JavaScript-rendered result, testing login state, capturing visible errors, or updating and validating tracker site cookies.
Use this skill when a user provides a torrent name or file name and wants to fix recognition issues, or asks to add/manage custom identifiers (自定义识别词). This skill generates identifier rules based on the WordsMatcher preprocessing logic, checks for duplicates against existing rules, and saves them via MCP tools. Because custom identifiers are global, generated rules must default to conservative, sample-specific regex patterns instead of broad matches unless the user explicitly wants global cleanup. Applicable scenarios include: 1) A torrent or file name is incorrectly recognized (wrong title, season, episode, etc.); 2) The user wants to block unwanted keywords from torrent names; 3) The user needs episode offset rules for series with non-standard numbering; 4) The user wants to force recognition of a specific media by TMDB/Douban ID; 5) The user wants TV recognition to use a specific TMDB episode group.
Use this skill ONLY when the user EXPLICITLY requests filing an upstream issue against `jxxghp/MoviePilot`, for example "反馈 issue", "提 issue", "报 bug", "给 MP 提 issue", "让上游修一下", "提交错误报告", or English "file an issue / report a bug / open an upstream issue". A bare problem report is not enough: diagnose locally first. This skill uses its own scripts under `scripts/`; it does not add or call dedicated Agent tools for collect / prepare / submit.
Use this skill when you need to execute SQL against the MoviePilot database. This skill guides you through connecting to the database and executing SQL statements. The database type (SQLite or PostgreSQL) and connection details are provided in the system prompt <system_info>. Applicable scenarios include: 1) The user asks about data statistics, counts, or aggregations that existing tools don't cover; 2) The user wants to inspect, modify, or fix raw database records; 3) The user asks to clean up data, update records, or perform database maintenance; 4) The user asks questions like "how many downloads", "show me site stats", "delete old records", etc.
Use this skill when you need to check MoviePilot versions, restart MoviePilot, or trigger a MoviePilot upgrade. Prefer the built-in system APIs instead of docker commands or manual file replacement. If auto-update on restart is already enabled, just restart. If it is disabled, call the upgrade API so MoviePilot performs a one-shot upgrade and restart.