Agent skill

MoviePilot Media Server Operations

by jxxghp in jxxghp/MoviePilot

Inspects and operates Emby, Jellyfin, Plex and other media servers configured in MoviePilot through one helper script, without exposing stored credentials.

GPL-3.0Auto-check passedProductivity & Automation

Install MoviePilot Media Server Operations

skills CLI
$ npx skills add jxxghp/MoviePilot --skill mediaserver-operation -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install jxxghp/MoviePilot mediaserver-operation --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/jxxghp/MoviePilot.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills/mediaserver-operation .claude/skills/mediaserver-operation && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
mediaserver-operation
GitHub stars
12k
Token cost
~3.4k tokens
SKILL.md length
1,522 words
Files
2 (incl. scripts)
Skills in repo
16
Repo updated
First seen
Licence
GPL-3.0

At a glance

Inspects and operates Emby, Jellyfin, Plex and other media servers configured in MoviePilot through one helper script, without exposing stored credentials.

  • Checking what a Jellyfin or Plex library currently contains
  • SKILL.md covers Boundary, Instance And Provider Discovery, Call Shape and External MCP Contract, plus 2 more sections
  • Runs Python scripts from its folder; calls python
  • Finding which episodes of a series are missing from a media server

What it does

The skill drives `scripts/mp-mediaserver.py`, which reads MoviePilot's own server settings and credentials so the agent never asks for, prints or passes a host, password, API key, token, cookie or arbitrary URL. It discovers each provider's capabilities on demand and covers libraries, native movie and music search, episode coverage, recent media, resume state, playback sessions, statistics, library scans, metadata refreshes and play URLs for Emby, Jellyfin, Plex, ZSpace, UGREEN, TrimeMedia and Navidrome.

The helper is run from the MoviePilot program directory with the project's Python, and the `MOVIEPILOT_ROOT` variable must be set when a copied script is run directly. The agent is told to call the action directly, passing `--server` when a name is known, and to skip routine instance listings; a failed call lists the valid server names. Duplicate checks stay with the `moviepilot-api` skill, and a result from a media server is not treated as a MoviePilot transfer, subscription or history record.

When your agent uses it

  • Checking what a Jellyfin or Plex library currently contains
  • Finding which episodes of a series are missing from a media server
  • Starting a library scan or metadata refresh on a configured server
  • Seeing active playback sessions or resume state on a server

Example prompts

  • “Which Plex sessions are playing right now?”
  • “Show the most recently added movies on my Emby server.”
  • “Refresh metadata for the Movies library on Jellyfin.”
  • “Does my media server have every episode of season two of this show?”

Requirements

  • MoviePilot with at least one media server configured
  • The MoviePilot project's Python runtime
  • Pre-approved tools (allowed-tools): execute_command

What it can do on your machine

Read from SKILL.md and the folder at commit 6034dcc. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • execute_command

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 1 file in scripts/ (Python), which the agent can run.

    Shell commands in SKILL.md call:

    • python

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

MoviePilot Media Server Operations loads about 3.4k tokens when it runs. Until then it costs about 109 tokens; SKILL.md has 1,522 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~109
When it runs · the whole SKILL.md, loaded when a task matches
~3.4k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from jxxghp/MoviePilot at commit 6034dcc, republished under its GPL-3.0 licence (© jxxghp). 1,522 words, ~3,401 tokens.

Download SKILL.mdSave it as .claude/skills/mediaserver-operation/SKILL.md (or your agent's skills folder). This skill also uses 1 other file; get the full folder from GitHub.
name
mediaserver-operation
description
Use this skill when the user asks to inspect, diagnose, or directly operate a configured Emby, Jellyfin, Plex, ZSpace, UGREEN, TrimeMedia, or Navidrome server. It discovers provider capabilities on demand and supports libraries, native movie/music search, episode coverage, recent media, resume state, playback sessions, statistics, scans, metadata refreshes, and provider play URLs without adding permanent tools.
allowed-tools
execute_command
version
3

Media Server Operation

Use scripts/mp-mediaserver.py. The helper reads MoviePilot's local server configuration and credentials itself. Never request, print, or pass a host, username, password, API key, token, Cookie, or arbitrary URL.

Run the bundled copy from the MoviePilot program directory with its project runtime, for example:

bash
cd <MOVIEPILOT_ROOT>
python skills/mediaserver-operation/scripts/mp-mediaserver.py instances

The Agent command environment routes python to the project-specific moviepilot-python entry when available and falls back to the project or Docker VENV_PATH Python otherwise. Media-server connections may depend on macOS local-network permissions, so use the provided python command for every operation.

The runtime sets MOVIEPILOT_ROOT for copied skills. If you run a copied script directly from <CONFIG_PATH>/agent/skills/, set that variable to the program directory first; otherwise the helper returns a clear relocation error. Do not use a system python3 when it does not meet MoviePilot's required Python version.

Boundary

  • Keep library.exists in moviepilot-api for canonical duplicate checks. It aggregates configured servers and applies MoviePilot media identity and music matching rules.
  • Use this Skill for server-native exploration, diagnostics, playback state, library browsing, scans, and metadata refreshes.
  • A provider result is not automatically a MoviePilot transfer, subscription, or history fact. Use the appropriate MoviePilot API for those workflows.

Instance And Provider Discovery

Fast path: call directly

Do not routinely call instances or capabilities before an operation. This Skill already contains the full action contract, and the helper performs instance resolution, provider support checks, complete argument validation, and the action in one call invocation.

  • If the user or prior context provides the exact server name, pass it with --server and call the action immediately.
  • If no server name is known, omit --server. The helper automatically uses the only enabled media server.
  • If multiple servers remain ambiguous, the failed call lists every valid server name. Reuse that list for the next direct call; do not add a separate instances call unless the user explicitly asks to inspect instances.
  • Do not probe an action with empty or guessed arguments. Compose the complete JSON object from the contract below before calling.

The helper rejects unknown fields and reports all detectable argument errors in one response before connecting to the provider, so correct every reported field together instead of retrying one field at a time.

Optional discovery
bash
python skills/mediaserver-operation/scripts/mp-mediaserver.py instances
python skills/mediaserver-operation/scripts/mp-mediaserver.py capabilities
python skills/mediaserver-operation/scripts/mp-mediaserver.py capabilities --server "living-room"

The complete action and argument contract is documented below. Use capabilities only to confirm which documented actions a configured provider supports. For a compact machine-readable copy of one action's same contract:

bash
python skills/mediaserver-operation/scripts/mp-mediaserver.py capabilities \
  --server "living-room" \
  --action items.season_episodes

Do not inspect the helper source to discover arguments and do not guess a provider-specific action. capabilities is optional and should be used only when the configured provider itself is unknown or support must be diagnosed.

Call Shape

bash
python skills/mediaserver-operation/scripts/mp-mediaserver.py call \
  --server "living-room" \
  --action activity.latest \
  --arguments '{"limit":20}'

The --arguments value must be one JSON object. List reads default to 50 items and cap at 200.

External MCP Contract

External MCP clients do not receive this SKILL.md and cannot use the hidden execute_command tool. MoviePilot therefore exposes a separate admin-only MCP tool named mediaserver_operation. Its tools/list inputSchema contains one oneOf branch for every action below, including the function description, supported providers, effect, field types, required/default values, enums, nested metadata.refresh item fields, and cross-field rules. The external client should select the matching branch and make one tools/call; it does not need to call a discovery tool first.

MCP call arguments use the same contract without shell quoting:

json
{
  "server": "living-room",
  "action": "items.season_episodes",
  "arguments": {
    "item_id": "exact-series-id",
    "season": 2
  }
}

server may be omitted when only one media server is enabled. If multiple instances remain ambiguous, the result lists the valid server names.

Complete Action Contract

This is the complete Media Server Operation action contract. It comes directly from the script ACTIONS registry and matches the external MCP tools/list oneOf branches. A field name ending in * is required. Put every action parameter in the arguments object.

actionPurpose and argument summary
activity.backdropsRead recent provider backdrop images.; arguments: limit, remote
activity.latestRead recently added provider items.; arguments: limit, username
activity.resumeRead in-progress/resumable provider items.; arguments: limit, username
capabilities.listList supported media-server actions and their complete argument contracts.; arguments: action_name
instances.listList configured media-server instances without connection secrets.; no arguments
items.countCount items below one library or parent.; arguments: parent
items.detailRead one provider item by native ID.; arguments: item_id*
items.listPage items below one library or parent.; arguments: parent, offset, limit
items.movies.searchSearch provider-native movie items by title and optional year.; arguments: title*, year
items.music.searchSearch provider-native music by title, artist, or album.; arguments: title, artist, album
items.season_episodesRead native episode coverage for one series and optional season.; arguments: item_id, title, year, season
libraries.listList visible provider libraries.; arguments: hidden, username
library.scanTrigger a provider library scan.; arguments: scan_mode
metadata.refreshRefresh provider metadata for mapped items.; arguments: items*
playback.sessionsRead active playback sessions.; no arguments
playback.urlBuild the provider play URL for one item.; arguments: item_id*
server.statisticsRead media counts and provider statistics.; no arguments
server.user.library_foldersRead the current user's visible library folders.; no arguments
server.users.countRead provider user count.; no arguments
activity.backdrops

Read recent provider backdrop images. Effect: safe_read. Providers: ugreen, trimemedia, mediavault.

  • limit (integer; default 50): Number of items to return, from 1 to 200.
  • remote (boolean; default False): Return provider URLs that are remotely accessible.
activity.latest

Read recently added provider items. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • limit (integer; default 50): Number of items to return, from 1 to 200.
  • username (string): Read for this username; supported by Emby, Jellyfin, and ZSpace.
activity.resume

Read in-progress/resumable provider items. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • limit (integer; default 50): Number of items to return, from 1 to 200.
  • username (string): Read for this username; supported by Emby, Jellyfin, and ZSpace.
Show full SKILL.md (598 more words)Show less
capabilities.list

List supported media-server actions and their complete argument contracts. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • action_name (string): Optional exact action name used to return one capability contract.
instances.list

List configured media-server instances without connection secrets. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • arguments: {}
items.count

Count items below one library or parent. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • parent (string|integer): Library or parent item ID; Navidrome may omit it and use music.
  • Rule: parent is required except for Navidrome, which defaults to music.
items.detail

Read one provider item by native ID. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • item_id* (string): Provider-native item ID returned by the selected media server.
items.list

Page items below one library or parent. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • parent (string|integer): Library or parent item ID; Navidrome may omit it and use music.
  • offset (integer; default 0): Zero-based list offset.
  • limit (integer; default 50): Number of items to return, from 1 to 200.
  • Rule: parent is required except for Navidrome, which ignores it.

Search provider-native movie items by title and optional year. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, mediavault.

  • title* (string): Movie title.
  • year (string|integer): Optional release year.

Search provider-native music by title, artist, or album. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, navidrome.

  • title (string): Track, album, or music-item title.
  • artist (string): Artist name.
  • album (string): Album name; provide title, artist, or album.
  • Rule: Provide at least one of title, artist, and album.
items.season_episodes

Read native episode coverage for one series and optional season. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, mediavault.

  • item_id (string): Provider-native item ID returned by the selected media server.
  • title (string): Series title; provide it or item_id.
  • year (string|integer): Optional premiere year.
  • season (integer): Optional season number.
  • Rule: Provide at least one of item_id and title.
libraries.list

List visible provider libraries. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • hidden (boolean; default False): Return only libraries configured for synchronization.
  • username (string): Read libraries visible to this username; supported by Emby, Jellyfin, and ZSpace.
library.scan

Trigger a provider library scan. Effect: external_side_effect. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • scan_mode (string|integer): UGREEN-native scan mode; omit it for every other provider.
metadata.refresh

Refresh provider metadata for mapped items. Effect: external_side_effect. Providers: emby, plex, zspace, ugreen, trimemedia.

  • items* (object[]): Items to refresh. Each item supports title:string, year:string|integer, type using the exact MoviePilot media-type value, category:string, and target_path:string.
playback.sessions

Read active playback sessions. Effect: safe_read. Providers: emby, jellyfin, plex.

  • arguments: {}
playback.url

Build the provider play URL for one item. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • item_id* (string): Provider-native item ID returned by the selected media server.
server.statistics

Read media counts and provider statistics. Effect: safe_read. Providers: emby, jellyfin, plex, zspace, ugreen, trimemedia, navidrome, mediavault.

  • arguments: {}
server.user.library_folders

Read the current user's visible library folders. Effect: safe_read. Providers: emby, jellyfin, zspace.

  • arguments: {}
server.users.count

Read provider user count. Effect: safe_read. Providers: emby, jellyfin, zspace, ugreen, trimemedia, navidrome, mediavault.

  • arguments: {}

Safety And Verification

  • Before library.scan, confirm the exact server and scan scope/mode.
  • Before metadata.refresh, confirm the exact item list because providers may perform a broad library refresh when a precise item cannot be mapped.
  • After a scan or refresh, verify with activity.latest, items.detail, or the smallest relevant library query.
  • If a provider does not advertise an action, report it as unsupported. Never fall back to raw HTTP, arbitrary SDK methods, or credentials copied from MoviePilot settings.

© jxxghp, GPL-3.0. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 1 other file (scripts) in skills/mediaserver-operation of jxxghp/MoviePilot.

  • SKILL.md
  • scripts/mp-mediaserver.py

Open the folder on GitHubat commit 6034dcc

Compare with similar skills

MoviePilot Media Server Operations next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

MoviePilot Media Server Operations compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
MoviePilot Media Server Operations this skilljxxghp/MoviePilot12k—~3.4kAutomated safety check: PassGPL-3.0
Tavily Web Searchallenpeng0705/EnvoyMesh3.1k3 repos~2.5kAutomated safety check: NotesNone
Disk Storage AnalyzerKKKKhazix/khazix-skills21k1 repos~1.4kAutomated safety check: PassMIT
Process InboxTDesktop-x64/tdesktop3k1 repos~4.3kAutomated safety check: PassGPL-3.0
Process Inboxtelegramdesktop/tdesktop33k—~5.4kAutomated safety check: PassGPL-3.0
Browser Automation Edge Casesaden-hive/hive11k—~1.8kAutomated safety check: PassMIT

Similar skills

  • Tavily Web Search

    allenpeng0705/EnvoyMesh

    Searches the web through the Tavily API with LLM-friendly output: clean structured results, optional AI-written answers, domain filters, news mode, images and raw content.

    3.1k GitHub starsUsed in 3 repos~2.5k tokens
    Productivity & AutomationAuto-check: notes
  • Disk Storage Analyzer

    KKKKhazix/khazix-skills

    Scans a Mac or Windows PC read-only to find what fills the disk, grades each item by how safe it is to clean and builds an interactive HTML report.

    21k GitHub starsUsed in 1 repo~1.4k tokens
    Productivity & AutomationAuto-check passed
  • Process Inbox

    TDesktop-x64/tdesktop

    Process the local ignored ai-tdesktop inbox into durable, independently testable Telegram Desktop task records while task execution worktrees remain active.

    3k GitHub starsUsed in 1 repo~4.3k tokens
    Productivity & AutomationAuto-check passed
  • Process Inbox

    telegramdesktop/tdesktop

    Process the local ignored ai-tdesktop inbox into durable, independently testable Telegram Desktop task records while task execution worktrees remain active.

    33k GitHub stars~5.4k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Step-by-step procedure for debugging browser automation failures on complex sites such as LinkedIn, Twitter/X, single-page apps and Shadow DOM pages.

    11k GitHub stars~1.8k tokensUpdated today
    Productivity & AutomationAuto-check passed
  • Skyvern Browser Automation

    Skyvern-AI/skyvern

    Automates websites with Skyvern's AI browser agent to fill forms, extract data, download files, log in and run multi-step workflows through SDKs, REST, MCP or a CLI.

    23k GitHub stars~1.9k tokensUpdated today
    Productivity & AutomationAuto-check passed

More from jxxghp/MoviePilot

All 16 skills in this repo
  • Inspects, diagnoses and directly controls qBittorrent, Transmission or rTorrent downloaders configured in MoviePilot through a bundled Python helper.

    12k GitHub stars~4.4k tokensUpdated today
    Auto-check passed
  • Turns a confirmed MoviePilot bug or feature request into a structured upstream GitHub issue, but only after local diagnosis and an explicit request to file.

    12k GitHub stars~2.9k tokensUpdated today
    Auto-check passed
  • Publish MoviePilot Plugin

    jxxghp/MoviePilot

    Publishes and syncs a local MoviePilot plugin to a GitHub repository, merging only that plugin's package entry and previewing differences before writing.

    12k GitHub stars~1.9k tokensUpdated today
    Auto-check: notes
  • Submits code changes as a GitHub pull request through an isolated Git clone, reusing or creating your fork and pushing only after you confirm the real diff.

    12k GitHub stars~1.1k tokensUpdated today
    Auto-check: notes
  • AnySearch

    jxxghp/MoviePilot

    Gives your agent a real-time search service for web queries, domain-specific lookups, parallel batch searches and full-page URL extraction.

    12k GitHub starsUsed in 1 repo~2.7k tokens
    Auto-check: notes
  • Inspects, queries and carefully modifies the MoviePilot SQLite or PostgreSQL database through a bundled script that reads connection settings itself, without needing the password in the prompt.

    12k GitHub stars~7.3k tokensUpdated today
    Auto-check passed

Works with

Questions about MoviePilot Media Server Operations

What does MoviePilot Media Server Operations do?

Inspects and operates Emby, Jellyfin, Plex and other media servers configured in MoviePilot through one helper script, without exposing stored credentials. py`, which reads MoviePilot's own server settings and credentials so the agent never asks for, prints or passes a host, password, API key, token, cookie or arbitrary URL. It discovers each provider's capabilities on demand and covers libraries, native movie and music search, episode coverage, recent media, resume state, playback sessions, statistics, library scans, metadata refreshes and play URLs for Emby, Jellyfin, Plex, ZSpace, UGREEN, TrimeMedia and Navidrome.

When should I use MoviePilot Media Server Operations?

MoviePilot Media Server Operations fits situations like: checking what a Jellyfin or Plex library currently contains; finding which episodes of a series are missing from a media server; starting a library scan or metadata refresh on a configured server; seeing active playback sessions or resume state on a server.

How do I install MoviePilot Media Server Operations in Claude Code?

Run `npx skills add jxxghp/MoviePilot --skill mediaserver-operation -a claude-code`. Or copy the skill folder (skills/mediaserver-operation in jxxghp/MoviePilot) into .claude/skills/mediaserver-operation in your project. Claude Code loads it when a task matches its description.

How do I install MoviePilot Media Server Operations in Codex?

Run `npx skills add jxxghp/MoviePilot --skill mediaserver-operation -a codex`. Or copy the skill folder (skills/mediaserver-operation in jxxghp/MoviePilot) into .agents/skills/mediaserver-operation in your project. Codex loads it when a task matches its description.

Can I use MoviePilot Media Server Operations in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add jxxghp/MoviePilot --skill mediaserver-operation -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/mediaserver-operation, .gemini/skills/mediaserver-operation, .github/skills/mediaserver-operation and .opencode/skills/mediaserver-operation in your project.

What does MoviePilot Media Server Operations need to run?

Going by SKILL.md and its folder, MoviePilot Media Server Operations needs Python for the scripts in its folder and the command-line tools its instructions call (python). Our summary lists: MoviePilot with at least one media server configured; The MoviePilot project's Python runtime. Its frontmatter pre-approves these tools: execute_command.

Does MoviePilot Media Server Operations access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is MoviePilot Media Server Operations safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does MoviePilot Media Server Operations use?

MoviePilot Media Server Operations is published under the GPL-3.0 licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does MoviePilot Media Server Operations use?

About 3.4k tokens (SKILL.md is roughly 14k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to MoviePilot Media Server Operations?

Skills that share tags, products or a category with MoviePilot Media Server Operations: Tavily Web Search (allenpeng0705/EnvoyMesh, 3.1k stars), Disk Storage Analyzer (KKKKhazix/khazix-skills, 21k stars), Process Inbox (TDesktop-x64/tdesktop, 3k stars) and Process Inbox (telegramdesktop/tdesktop, 33k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains MoviePilot Media Server Operations?

jxxghp (a GitHub user) maintains it in jxxghp/MoviePilot, which has 11,853 GitHub stars. The repository holds 16 skills in this directory. The repository was last updated on October 9, 2026.

Source: jxxghp/MoviePilot on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.