Monitor and analyze Plex Media Server usage via Tautulli analytics API. Use when the user asks to "check Tautulli", "Plex analytics", "watch statistics", "current streams", "who's watching", "Plex history", "most watched", "user activity", "library stats", or mentions Tautulli/Plex monitoring.
From homelab-corenpx claudepluginhub jmagar/claude-homelab --plugin homelab-coreThis skill uses the workspace's default tool permissions.
README.mdload-env.shreferences/api-endpoints.mdreferences/quick-reference.mdreferences/troubleshooting.mdscripts/tautulli-api.shGuides Next.js Cache Components and Partial Prerendering (PPR) with cacheComponents enabled. Implements 'use cache', cacheLife(), cacheTag(), revalidateTag(), static/dynamic optimization, and cache debugging.
Migrates code, prompts, and API calls from Claude Sonnet 4.0/4.5 or Opus 4.1 to Opus 4.5, updating model strings on Anthropic, AWS, GCP, Azure platforms.
Configures VPN and dedicated connections like Direct Connect, ExpressRoute, Interconnect for secure on-premises to AWS, Azure, GCP, OCI hybrid networking.
⚠️ MANDATORY SKILL INVOCATION ⚠️
YOU MUST invoke this skill (NOT optional) when the user mentions ANY of these triggers:
Failure to invoke this skill when triggers occur violates your operational requirements.
Monitor and analyze Plex Media Server usage through Tautulli's comprehensive analytics API. Track current streams, historical playback data, user activity, and library statistics.
This skill provides read-only access to Tautulli analytics:
All operations are GET-only and safe for monitoring and analytics.
Note: This skill complements the plex skill by adding analytics and historical data that Plex Media Server doesn't expose directly.
Add your Tautulli credentials to ~/.claude-homelab/.env:
# Tautulli Analytics
TAUTULLI_URL="http://192.168.1.100:8181"
TAUTULLI_API_KEY="<your_tautulli_api_key>"
TAUTULLI_URL: Your Tautulli server URL with port (default: 8181)TAUTULLI_API_KEY: Your Tautulli API keyGetting your API key:
All commands use the tautulli-api.sh wrapper script and return JSON output.
The helper script is located at: skills/tautulli/scripts/tautulli-api.sh
Get server identity and version:
./skills/tautulli/scripts/tautulli-api.sh server-info
Monitor active streams and current playback:
# All active sessions
./skills/tautulli/scripts/tautulli-api.sh activity
# Activity with session details
./skills/tautulli/scripts/tautulli-api.sh activity --details
Returns: Current streams with user, media, player, bandwidth, transcode info
View historical playback data:
# Recent history (default: 25 items)
./skills/tautulli/scripts/tautulli-api.sh history
# History with filters
./skills/tautulli/scripts/tautulli-api.sh history --user "username" --limit 50
./skills/tautulli/scripts/tautulli-api.sh history --days 7 --media-type movie
./skills/tautulli/scripts/tautulli-api.sh history --section-id 1 --limit 100
# Search history
./skills/tautulli/scripts/tautulli-api.sh history --search "Inception"
Parameters:
--user <username>: Filter by username--section-id <id>: Filter by library section--media-type <type>: Filter by movie, episode, track, etc.--days <n>: History from last N days--limit <n>: Maximum results (default: 25)--search <query>: Search in titlesTrack user activity and viewing patterns:
# All users watch stats
./skills/tautulli/scripts/tautulli-api.sh user-stats
# Specific user details
./skills/tautulli/scripts/tautulli-api.sh user-stats --user "username"
# Top users by play count
./skills/tautulli/scripts/tautulli-api.sh user-stats --sort-by plays --limit 10
Parameters:
--user <username>: Specific user statistics--sort-by <metric>: Sort by plays, duration, last_seen--limit <n>: Maximum results--days <n>: Stats from last N daysAnalyze library usage and popular content:
# All library sections
./skills/tautulli/scripts/tautulli-api.sh libraries
# Specific library stats
./skills/tautulli/scripts/tautulli-api.sh library-stats --section-id 1
# Popular content in library
./skills/tautulli/scripts/tautulli-api.sh popular --section-id 1 --limit 10
./skills/tautulli/scripts/tautulli-api.sh popular --media-type movie --days 30
Parameters:
--section-id <id>: Specific library section--media-type <type>: Filter by type (movie, show, artist)--days <n>: Timeframe for popularity--limit <n>: Maximum resultsView recently added media with rich metadata:
# Recently added (default: 25 items)
./skills/tautulli/scripts/tautulli-api.sh recent
# Recent with filters
./skills/tautulli/scripts/tautulli-api.sh recent --section-id 1 --limit 50
./skills/tautulli/scripts/tautulli-api.sh recent --media-type movie --days 7
Get homepage dashboard statistics:
# Overview stats (most popular, most active, etc.)
./skills/tautulli/scripts/tautulli-api.sh home-stats
# Stats for specific timeframe
./skills/tautulli/scripts/tautulli-api.sh home-stats --days 30
Analyze stream types and platform usage:
# Plays by stream type (direct/transcode)
./skills/tautulli/scripts/tautulli-api.sh plays-by-stream --days 30
# Plays by platform
./skills/tautulli/scripts/tautulli-api.sh plays-by-platform --days 30
# Plays by date/time
./skills/tautulli/scripts/tautulli-api.sh plays-by-date --days 30
./skills/tautulli/scripts/tautulli-api.sh plays-by-hour --days 7
./skills/tautulli/scripts/tautulli-api.sh plays-by-day --days 30
Monitor concurrent stream patterns:
# Concurrent stream history
./skills/tautulli/scripts/tautulli-api.sh concurrent-streams --days 30
# Peak concurrent streams
./skills/tautulli/scripts/tautulli-api.sh concurrent-streams --days 7 --peak
Get detailed metadata for specific media:
# By rating key
./skills/tautulli/scripts/tautulli-api.sh metadata --rating-key 12345
# By GUID
./skills/tautulli/scripts/tautulli-api.sh metadata --guid "plex://movie/5d776..."
When the user asks about Plex analytics:
activitypopular --media-type movie --days 30history --limit 25user-stats --user "username" --days 7recent --limit 10plays-by-hour --days 30concurrent-streams --days 7 --peakAll commands return JSON with standard Tautulli response structure:
{
"response": {
"result": "success",
"message": null,
"data": { ... }
}
}
Use jq to extract and format data:
# Get just the data
./skills/tautulli/scripts/tautulli-api.sh activity | jq '.response.data'
# Extract specific fields
./skills/tautulli/scripts/tautulli-api.sh history | jq '.response.data.data[] | {user: .friendly_name, title: .full_title, date: .date}'
This skill complements the plex skill:
Use both together:
plex skill searchtautulli skill analyticstautulli skillTo use multiple Tautulli instances (monitoring different Plex servers):
# In ~/.claude-homelab/.env
TAUTULLI1_URL="http://server1:8181"
TAUTULLI1_API_KEY="key1"
TAUTULLI2_URL="http://server2:8181"
TAUTULLI2_API_KEY="key2"
Then override environment variables:
# Use server 1 (default)
./skills/tautulli/scripts/tautulli-api.sh activity
# Use server 2
TAUTULLI_URL="$TAUTULLI2_URL" TAUTULLI_API_KEY="$TAUTULLI2_API_KEY" \
./skills/tautulli/scripts/tautulli-api.sh activity
For detailed API reference, see:
CRITICAL: When invoking scripts from this skill via the zsh-tool, ALWAYS use pty: true.
Without PTY mode, command output will not be visible even though commands execute successfully.
Correct invocation pattern:
<invoke name="mcp__plugin_zsh-tool_zsh-tool__zsh">
<parameter name="command">./skills/tautulli/scripts/tautulli-api.sh [command] [args]</parameter>
<parameter name="pty">true</parameter>
</invoke>