jellyfin
Skill172 starsChanged 4 months agoMITView on GitHub
Query your Jellyfin media server from the terminal — recently added media,
- Reads credentials
2 other projects use a version of this.
Adopted by
Most recently taken up by
- hevangel/media-agent-skillstheir own version, first seen Nov 1, 2026
- zrong/skillstheir own version, first seen Oct 29, 2026
Other versions2 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 2
- zrong/skills★ 13same name
- hevangel/media-agent-skills★ 4same name
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository192 other files it gives its agents.
- agent-production-operations/AGENTS.mdAGENTS.md
- AGENTS.mdAGENTS.md
- forward-deployed-engineering/AGENTS.mdAGENTS.md
- production-excellence/AGENTS.mdAGENTS.md
- product-lifecycle/AGENTS.mdAGENTS.md
- tailscale/AGENTS.mdAGENTS.md
- workflow-architect/AGENTS.mdAGENTS.md
- llms.txtllms.txt
- actuarial-risk-modelingSkill
- adr-authoringSkill
- agent-councilSkill
- agent-evals-and-observabilitySkill
- agent-production-operationsSkill
- agent-skillsSkill
- ai-governanceSkill
- ai-operating-economicsSkill
- amazon-memoSkill
- analog-occultismSkill
- anydocSkill
- api-design-and-evolutionSkill
- artifact-pyramidsSkill
- ascii-city-engineSkill
- autogenSkill
- backend-engineeringSkill
- binary-analysisSkill
- bmadSkill
- brand-designerSkill
- c4-diagrammingSkill
- camera-hackingSkill
- capacity-and-cost-engineeringSkill
- chief-of-staff-methodologySkill
- cli-builderSkill
- cncf-landscapeSkill
- code-reviewSkill
- color-managementSkill
- community-guidesSkill
- conditional-customer-successSkill
- confluence-cliSkill
- constrained-optimizationSkill
- crewaiSkill
- crmSkill
- crowdsecSkill
- cryptpadSkill
- cyberpunkSkill
- daily-life-discoverySkill
- data-architectSkill
- data-cleaningSkill
- data-engineeringSkill
- data-scientistSkill
- de-spinSkill
- digital-twinSkill
- docker-composeSkill
- documentsSkill
- dsm5Skill
- dspySkill
- electronicsSkill
- emailSkill
- enterprise-architectureSkill
- epubSkill
- esp32-developmentSkill
- The first 60 shown.
The file
We split this skill into the rules it gives an agent
6 rules. About 0 are common, 0 are distinctive, and 6 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈0
Distinctive · estimate
This author's own choices. Worth a look.
6
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Very specific: line 28
Make sure your Jellyfin server is running and accessible (default http://localhost:8096).
- Very specific: line 42
Run the bundled CLI as scripts/jellyfin.
- Very specific: line 97
Search hits /Search/Hints.
- Very specific: line 158
Put --json before or after the subcommand.
- Very specific: line 196
Use this skill for read-only interaction with a running Jellyfin server: discovery of what's new, searching and inspecting items, walking …
- Very specific: line 202
Do not use this skill for server installation or administration (installing Jellyfin or Emby, editing libraries, managing users) — every …
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
jellyfin — Jellyfin Media Server from the Terminal
Query recently added movies and TV episodes, search and inspect media, walk series →
seasons → episodes, browse libraries, see next-up episodes, log in as a user, and check
server stats — all from your Jellyfin server's REST API. Every command is read-only
except login.
Setup
- Make sure your Jellyfin server is running and accessible (default
http://localhost:8096). - Pick an authentication route:
- API key — Dashboard → API Keys →
+. Administrator-level, no user identity: every user-scoped command then needs an explicit user id. - User token — run
scripts/jellyfin login --username NAME --promptonce; it prints the values to export.
- API key — Dashboard → API Keys →
- Set these environment variables:
export JELLYFIN_URL="http://your-server:8096" # include protocol and port
export JELLYFIN_API_KEY="your-api-key-here" # or JELLYFIN_TOKEN after `login`
export JELLYFIN_USER_ID="your-jellyfin-user-id" # required by recent, next-up, item, seasons, episodesRun the bundled CLI as scripts/jellyfin. --help and --dry-run work without
credentials.
How authentication works
Jellyfin wants a MediaBrowser-scheme Authorization header on every call. The login
endpoint requires its Client=..., Device=..., DeviceId=..., Version=... quartet before
any token exists — the server rejects POST /Users/AuthenticateByName with
400 Error processing request. otherwise. Afterwards the access token (or API key) rides
the same header as Token="..."; the legacy X-Emby-Token header means the same thing
and is scheduled for removal from Jellyfin 12.0. The bundled CLI sends the modern form and
puts the token in exactly that one channel per request (never co-sends X-Emby-Token).
See references/auth-and-sessions.md.
Essential Commands
Authentication — get a session
scripts/jellyfin login --username alice --prompt # prints JELLYFIN_* exports
echo "pw" | scripts/jellyfin login --username alice --password-stdin
scripts/jellyfin login --username alice --dry-run --json # preview the pre-token headerlogin demonstrates the full researched sequence: complete pre-token MediaBrowser header
→ POST /Users/AuthenticateByName → capture User.Id + AccessToken → print the
post-token header for reuse. It never echoes the password.
info — Server information
scripts/jellyfin info # server name, version, OS, user count
scripts/jellyfin info --jsonrecent — Recently added media
scripts/jellyfin recent # last 10 items added for JELLYFIN_USER_ID
scripts/jellyfin recent --movies --limit 5 # server-side includeItemTypes filter
scripts/jellyfin recent --episodes --limit 20 --json
scripts/jellyfin recent --user-id USER_ID # override the env varHits /Items/Latest with userId; the response is a bare JSON array (no Items
wrapper), and groupItems merges episodes by series, so treat it as "what's new".
search — Search your media library
scripts/jellyfin search --query "dune" # everything
scripts/jellyfin search --query "dune" --type Movie # comma-separated types
scripts/jellyfin search --query "star trek" --type Series,Episode --limit 5 --jsonSearch hits /Search/Hints; results carry id (with a deprecated ItemId twin on old
servers — the CLI already prefers the modern field).
Navigation — inspect items and walk series
scripts/jellyfin search --query "dune" --type Movie --json # find an item ID
scripts/jellyfin item --id ITEM_ID # full metadata (needs user)
scripts/jellyfin seasons --series-id SERIES_ID # list seasons
scripts/jellyfin episodes --series-id SERIES_ID --season-id SEASON_ID
scripts/jellyfin next-up --limit 10 # next unwatched episodes
scripts/jellyfin next-up --series-id SERIES_ID --user-id USER_IDitem, seasons, episodes, and next-up are user-scoped: they require
JELLYFIN_USER_ID or --user-id and fail before any network call without one.
libraries — browse a collection
scripts/jellyfin libraries # library IDs and types
scripts/jellyfin browse --library-id LIBRARY_ID --type Movie --limit 50
scripts/jellyfin browse --library-id LIBRARY_ID --start-index 50 # paginate
scripts/jellyfin browse --library-id LIBRARY_ID --user-id USER_ID # userId sent explicitlylibraries reads /Library/MediaFolders, which is admin-only — non-admin tokens get
403 and should use /UserViews (see references). browse pages /Items with
startIndex/limit and passes userId when provided, since servers using non-API-key
auth reject unscoped queries with 400 userId is required.
stats — Library statistics
scripts/jellyfin stats # movie, series, episode, song counts (/Items/Counts)Pipeline recipes
Find a series, then its next unwatched episode
scripts/jellyfin search --query "breaking bad" --type Series --json | jq -r '.results[0].id'
scripts/jellyfin next-up --series-id "$SERIES_ID" --user-id "$JELLYFIN_USER_ID" --json | jq -r '.items[0].name'Page through a whole library
scripts/jellyfin browse --library-id "$LIB_ID" --limit 100 --start-index 0 --json | jq -c '.items'
# loop: advance --start-index by the returned count until .total_record_count is reachedLog in and persist a session
scripts/jellyfin login --username alice --prompt --json | jq -r '"\(.user_id) \(.access_token)"'JSON and jq
Put --json before or after the subcommand. Output keys are stable snake_case: items
(with id, name, type, year, series, season_number, episode_number),
results, libraries, total_record_count, start_index. --dry-run emits a plan
carrying dry_run, path, and params (login adds authorization_header; info
composes a requests list), matching what would be sent, so jq can verify a chain before
running it live. Exit codes: 0 success (including dry-run), 1 CLI/API errors, 2
argument errors. Use jq -r '.items[] | [.name, .year] | @tsv' for tabular handoff.
Known Gotchas
- JELLYFIN_URL must include protocol and port — e.g.
http://192.168.1.100:8096. - User-scoped commands require an explicit user —
recent,next-up,item,seasons,episodesrefuse to run withoutJELLYFIN_USER_ID/--user-id. The CLI never picks an administrator for you. A missing userId on user-token requests makes the server answer400 userId is required. - API keys have no user —
/Users/Meanswers400 Token is not owned by a user.to API keys by design; per-user queries need an explicit user id (see references/user-scoping-and-errors.md). - The login 400 vs 401 trap — missing/partial MediaBrowser header →
400with plain textError processing request.; wrong credentials →401. Same endpoint, different failures. - Response shapes differ per endpoint —
/Itemsand/Shows/*wrap results in{Items, TotalRecordCount, StartIndex};/Items/Latestreturns a bare array; search uses aSearchHintskey. Generic clients must branch (the CLI already does). - Recent type filtering is server-side —
--movies/--episodesbecomeincludeItemTypesbeforelimit; no local filtering. - NextUp needs userId on every server version — omitting it crashed servers ≤10.8 and silently scopes to the session user on ≥10.9. The CLI always sends it.
librariesis admin-only —/Library/MediaFoldersrequires an administrator token; non-admin tokens get 403.- Legacy auth is going away —
X-Emby-Token,X-MediaBrowser-Token, and theapi_keyquery parameter are deprecated; admins can already disable them (10.11+), and removal targets 12.0. Prefer the modern Authorization header the CLI sends. - Lazy auth —
--helpand--dry-runwork without credentials; dry-run never touches the network.
When to use
Use this skill for read-only interaction with a running Jellyfin server: discovery of
what's new, searching and inspecting items, walking series and seasons, next-up planning,
library inventories, and obtaining a user session via login or Quick Connect.
When not to use
Do not use this skill for server installation or administration (installing Jellyfin or
Emby, editing libraries, managing users) — every bundled command is read-only except
login. It does not target Plex or Kodi (different APIs — use their own tools), and it is
not a playback remote: route streaming or remote-control automation to Jellyfin's official
clients.
Reference Files
| File | Use it for |
| references/auth-and-sessions.md | MediaBrowser header scheme, login flow, token channels, legacy deprecation, error signatures |
| references/endpoint-catalog.md | Every read endpoint's parameters, response shapes, image URLs, pagination loop |
| references/user-scoping-and-errors.md | The userId requirement matrix, API-key identity quirks, 400-vs-404 diagnosis |
| references/gotchas-field-guide.md | Wire-level failure signatures, version-drift ledger, mock shapes |
| references/worked-recipes.md | Multi-step curl/jq and CLI recipes: login → latest, libraries → browse, search → seasons → episodes |
| references/quick-connect.md | Passwordless Quick Connect login flow |
Available Scripts and Prerequisites
scripts/jellyfin— the bundled Python CLI (--json,--dry-run, lazy auth). Imports only the standard library andrequests.scripts/test_jellyfin_cli.py— offline test suite (pytest + unittest compatible); all HTTP behavior is mocked, zero network egress.- Requires Python 3.8+ and
requests. A running Jellyfin server (10.8+ assumed; tested behaviors anchored to the 12.0-era OpenAPI spec). No service is started by this skill.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

