mcp-tautulli
mcp-tautulli is a read-only MCP server for monitoring and analyzing your Plex media server through Tautulli, offering 15 tools:
Live activity – See who's streaming, what they're watching, playback progress, quality, and bandwidth usage
Playback history – Retrieve recent watch history filtered by user, media type, title, or date
Recently added content – Browse newly added media across Plex libraries
Search content – Find media by title across all libraries
User statistics – Per-user play counts, total watch time, and last-seen info
Library statistics – Item counts, total plays, and last played content per library
Most watched content – Top TV shows, movies, music, or users ranked by plays or watch duration
Server info – Plex server name, version, platform, and connection details
Server status – Verify Tautulli configuration and reachability
Transcode analysis – Direct play vs transcode breakdowns by platform/device
Platform/device stats – Top streaming devices by plays and total watch time
Resolution analysis – Compare source quality vs delivered resolution
Daily play trends – Day-by-day play counts broken down by stream type
Weekly & hourly patterns – Identify peak viewing days and hours
All operations are read-only. Configuration requires just a Tautulli URL and API key, and it works with Claude Code or any MCP-compatible client.
Provides tools for monitoring Plex media server activity, playback history, and statistics through Tautulli, including real-time stream status, library item counts, and per-user watch metrics.
mcp-tautulli
A single-file MCP server for Tautulli — Plex monitoring via Claude Code (or any MCP client).
19 read-only tools. No mutations. All configuration via environment variables.
Prerequisites
Python 3.10+
A running Tautulli instance with an API key
Claude Code (or any MCP-compatible client)
Related MCP server: Huntress-MCP-Server
Installation
pip install mcp-tautulliOr install with uv:
uv tool install mcp-tautulliOr from source:
git clone https://github.com/lodordev/mcp-tautulli.git
cd mcp-tautulli
pip install .Configuration
Three environment variables:
Variable | Required | Default | Description |
| Yes | — | Tautulli base URL with protocol (e.g. |
| Yes | — | Tautulli API key (Settings → Web Interface → API Key) |
| No |
| Set to |
Claude Code Setup
Add to your project's .mcp.json:
{
"mcpServers": {
"tautulli": {
"command": "mcp-tautulli",
"env": {
// Include the protocol (http:// or https://)
"TAUTULLI_URL": "http://your-tautulli-host:8181",
"TAUTULLI_API_KEY": "your-api-key-here"
}
}
}
}Claude Desktop Setup
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"tautulli": {
"command": "mcp-tautulli",
"env": {
"TAUTULLI_URL": "http://your-tautulli-host:8181",
"TAUTULLI_API_KEY": "your-api-key-here"
}
}
}
}Local Development Config
To point your MCP client at local source without reinstalling after every change, use uv run --directory instead of the installed binary:
{
"mcpServers": {
"tautulli-dev": {
"command": "uv",
"args": ["run", "--directory", "/path/to/mcp-tautulli", "mcp-tautulli"],
"env": {
"TAUTULLI_URL": "http://your-tautulli-host:8181",
"TAUTULLI_API_KEY": "your-api-key-here"
}
}
}
}This works in both Claude Code (.mcp.json) and Claude Desktop (claude_desktop_config.json). Restart the client after code changes — no uv tool install needed.
Or run standalone:
export TAUTULLI_URL="http://localhost:8181"
export TAUTULLI_API_KEY="your-api-key"
mcp-tautulliTools
Tool | Description |
| Current Plex streaming activity — who's watching what, progress, quality |
| Recent playback history with filters (user, media type, search, date) — includes transcode decision; pass |
| Recently added content — what's new in your Plex libraries |
| Search Plex content by title across all libraries — output includes |
| Full metadata for one item by rating key — summary, cast/crew, genres, ratings, and media quality (resolution, codecs, HDR/Dolby Vision, file size). Server file paths omitted |
| Watch stats for one item — plays/time over 24h/7d/30d/all, plus which users watched it (friendly name only) |
| Per-user watch statistics — plays, watch time, last seen |
| Library item counts, total plays, last played per library — output includes |
| Per-library media-quality breakdown — total size, item count, and per-item resolution/codec/container/size (find largest files) |
| Top content by plays or duration (TV, movies, music, users) |
| Plex server identity — name, version, platform, connection |
| Server config and reachability check |
| Direct play vs transcode breakdown by platform |
| Top platforms/devices by plays and watch time |
| Source vs delivered resolution analysis |
| Daily play counts over time by stream type |
| Weekly viewing patterns — which days see the most activity |
| Hourly viewing distribution — when people watch |
| Detailed stream performance data — bitrate, codec, transcode decision, bandwidth for a specific play (use |
All tools are read-only — this server does not modify any Tautulli or Plex state. Each tool calls a fixed Tautulli get_*/search command; there is no passthrough that could reach a write/destructive endpoint.
Privacy: user-identifying data is minimized by default — usernames, user IDs, emails, and thumbnails are never emitted (users appear by friendly name only), server file paths are omitted, and client IP addresses are opt-in (include_ip=true on tautulli_history). Note that Tautulli itself has no read-only API key — the key you configure is a full-access master key, so this server's read-only guarantee lives in its fixed command set, not in the credential.
tautulli_activity
2 active stream(s):
• Alice playing "The Bear S02E06 — Fishes" — 45%, on Apple TV (direct play)
• Bob playing "Oppenheimer (2023)" — 12%, on Roku (transcode)
Bandwidth: 18.5 Mbps total (LAN: 12.2, WAN: 6.3)tautulli_plays_by_day_of_week
Plays by day of week (last 30 days):
Monday : 91 ██████████████████████████████ (TV:62, Movies:18, Music:11) ← peak
Tuesday : 76 █████████████████████████ (TV:56, Movies:15, Music:5)
Wednesday: 62 ████████████████████ (TV:34, Movies:20, Music:8)
Thursday : 45 ██████████████ (TV:32, Movies:8, Music:5)
Friday : 59 ███████████████████ (TV:37, Movies:14, Music:8)
Saturday : 50 ████████████████ (TV:32, Movies:10, Music:8)
Sunday : 86 ████████████████████████████ (TV:60, Movies:16, Music:10)
Total: 469 plays, avg 67.0/daytautulli_stream_data (pass row_id from history output)
Stream Performance Data:
Media: Game of Thrones — The Red Woman (episode)
Quality Profile: Original
Source Bitrate: 10617 kbps
Source Video Bitrate: 10233 kbps
Source Audio Bitrate: 384 kbps
Stream Bitrate: 10617 kbps
Stream Resolution: 1080p
Stream Video Codec: h264
Stream Framerate: 24p
Stream Audio Codec: ac3
Stream Audio Channels: 6
Source Container: mkv
Source Video Codec: h264
Source Audio Codec: ac3
Source Resolution: 1080
Video Decision: direct play
Audio Decision: direct playtautulli_metadata (pass [key: N] from search / recently-added)
Example Movie (2019) — movie
Library: Movies
Content Rating: PG-13
Aired: 2019-05-01
Duration: 2h 10m
Ratings: audience 7.9
Genres: Adventure, Sci-Fi
Resolution: 1080p
Container: mkv
Video Codec: h264
Audio: eac3 6ch
File Size: 18.5 GB
Dynamic Range: SDR
IDs: imdb://tt0000000, tmdb://00000tautulli_library_media_info (pass [id: N] from library stats)
Library media info (section 1, 500 items, 4.2 TB total):
Resolutions (top 3): 1080:2, 4k:1
Items (sorted by file_size desc):
• Example Feature (2021) — 4k, hevc, mkv, 42.0 GB
• Another Movie (2018) — 1080, h264, mkv, 12.3 GB
• A Third Film (2016) — 1080, h264, mp4, 9.8 GBtautulli_search
Search results for "breaking":
Movies:
• Breaking (2012) — Movies
TV Shows:
• Breaking Bad (2008) — TV ShowsTroubleshooting
"TAUTULLI_URL environment variable not set"
Both TAUTULLI_URL and TAUTULLI_API_KEY must be set. Find your API key in Tautulli → Settings → Web Interface → API Key.
TLS/SSL errors
If Tautulli is behind a reverse proxy with a self-signed certificate, set TAUTULLI_TLS_VERIFY=false.
"Tautulli unreachable" Verify the URL is accessible from the machine running the MCP server. Check firewalls and that Tautulli is running.
License
MIT
Available Tools
16 toolstautulli_activityA
Get current Plex streaming activity — who's watching what, playback state, progress, and quality.
Use this before restarting Plex or rebooting servers to check for active streams.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes the action and output hints but does not disclose behavioral traits like read-only nature, error conditions, or side effects. The description is adequate for a simple getter but lacks explicit transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with the core action, followed by a practical usage tip. Every word adds value, no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and the existence of an output schema (which covers return values), the description is sufficient. It covers purpose, usage scenario, and hints at output fields. Missing details on error responses or empty state, but overall complete for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
No parameters exist, so schema coverage is 100% by default. The description adds no parameter information, but none is needed. Baseline for 0 parameters is 4, and the description does not detract.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get current Plex streaming activity' with specific details (who's watching, playback state, progress, quality). It distinguishes from siblings like tautulli_history (historical data) by focusing on current activity, and uses a specific verb+resource pair.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly gives a usage scenario: 'Use this before restarting Plex or rebooting servers to check for active streams.' This provides clear context, though it does not explicitly mention when not to use or compare to siblings, the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_historyB
Get recent Plex playback history.
| Name | Required | Description | Default |
|---|---|---|---|
| length | No | Number of records to return (default 10, max 50). | |
| user | No | Filter by username. | |
| media_type | No | Filter by type: "movie", "episode", "track" (audiobook). | |
| search | No | Text search in titles. | |
| start_date | No | Only show history from this date (YYYY-MM-DD). | |
| include_performance | No | Also fetch stream bitrate per record via get_stream_data (makes one extra API call per record — use with small lengths). | |
| include_ip | No | Also show the client IP address per record. Off by default — IP addresses are personally identifying, so opt in when you need them. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It only says 'get recent history' without mentioning whether the tool is read-only, idempotent, or has any side effects, permissions, or performance implications beyond what schema hints at (e.g., include_performance parameter).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is efficiently front-loaded. However, for a tool with 7 parameters and many siblings, slightly more context would be beneficial without harming conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has many filters and siblings, the description is too minimal. It does not explain what 'playback history' includes (e.g., time range, user info, media details), leaving the agent to rely entirely on the output schema for completeness.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all parameters. The description adds no additional meaning beyond the generic tool purpose. Baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get recent Plex playback history' clearly states the verb ('Get'), resource ('Plex playback history'), and implies recency, distinguishing it from siblings like tautulli_activity (current activity) and tautulli_recently_added (recently added media).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use this tool versus alternatives (e.g., tautulli_activity for live viewing). The description only states what it does, leaving the agent to infer context from the tool name and sibling list.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_library_statsA
Get library-level statistics — item counts, total plays, and last played content per library.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description only implies a read operation but lacks details on performance, side effects, or any constraints. For a tool with no annotations, the description should provide more behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear, and front-loaded sentence. Every part contributes to understanding the tool's purpose without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and the presence of an output schema, the description is largely sufficient. It clearly states what the tool returns. However, it could mention that it covers all libraries on the server to avoid ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the baseline is 4. The description adds value by listing the types of statistics returned (item counts, total plays, last played content), compensating for the lack of parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (Get), the resource (library-level statistics), and specifies the exact statistics returned (item counts, total plays, last played content). This distinguishes it from sibling tools like tautulli_user_stats or tautulli_most_watched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives such as tautulli_user_stats or tautulli_most_watched. The description only states what it does without any context on scoping or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_most_watchedC
Get most watched content over a time period.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 7). | |
| stat_type | No | Sort by "plays" (total plays) or "duration" (total watch time). | plays |
| category | No | Content category — "tv", "movies", "music", or "users" (top users). | tv |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It does not disclose that it is a read operation, what data is returned, or how 'most watched' is determined beyond the schema parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise, but it omits useful context that could fit without becoming verbose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the presence of an output schema, the description does not need to explain return values. However, with three optional parameters and many siblings, the description is minimally complete but lacks depth to guide usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so each parameter already has a description. The tool description adds no additional semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states 'Get most watched content over a time period,' which is a clear verb+resource but is vague and does not differentiate from sibling tools like tautulli_library_stats or tautulli_user_stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Sibling tools include many statistics-related tools, but the description provides no context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_platform_statsA
Get top platforms/devices by plays and total watch time.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must cover behavioral traits. It describes the output but doesn't disclose read-only nature, authentication needs, or potential side effects. However, the operation is clearly a read, so it's adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 9 words, front-loaded with key information. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional param, output schema present), the description adequately informs about the output. It could mention that it provides aggregated stats but is largely complete for this context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Only one parameter ('days') with schema description covering 100%. The description adds no extra meaning beyond what the schema already provides, so baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets top platforms/devices by plays and total watch time. It uses a specific verb ('get') and resource ('top platforms/devices'), distinguishing it from siblings like tautulli_user_stats or tautulli_most_watched.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use (for platform/device stats) but lacks explicit guidance on when not to use or alternatives. With many siblings, this is a moderate gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_plays_by_dateA
Get daily play counts over time, broken down by stream type (direct play, direct stream, transcode).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Number of days to show (default 14, max 90). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It correctly describes a read operation ('Get daily play counts') but does not mention any side effects, permissions, or data limits beyond what the schema shows. The description is straightforward and accurate, but minimal.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence of 15 words, front-loaded with the core action ('Get daily play counts') and essential details ('broken down by stream type'). No extraneous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter and an output schema present, the description provides sufficient context for a simple daily-play-count tool. It lacks mention of date formatting or handling of missing days, but the output schema likely covers return format. Adequate for its complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'days' is fully described in the input schema ('Number of days to show (default 14, max 90)'). The tool description adds no additional meaning beyond the schema, so baseline score of 3 applies due to high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Get daily play counts over time, broken down by stream type', using a specific verb ('Get') and resource ('daily play counts'). It distinguishes from sibling tools like 'tautulli_plays_by_hour' and 'tautulli_most_watched' by specifying the time granularity ('daily') and breakdown ('by stream type').
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives such as 'tautulli_plays_by_hour', 'tautulli_plays_by_day_of_week', or 'tautulli_most_watched'. It also lacks prerequisites or limitations like minimum days or data availability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_plays_by_day_of_weekB
Get weekly viewing patterns — which days of the week see the most Plex activity.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and description only states the tool 'gets viewing patterns' without detailing behavioral traits like aggregation behavior or data freshness.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, concise sentence that efficiently conveys purpose without any fluff; front-loaded with key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite output schema existence, description omits details about the return format (e.g., day names vs numbers) and provides no behavioral context, leaving gaps for such a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Input schema describes 'days' parameter with default and coverage is 100%, but description adds no additional meaning beyond what schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it retrieves Plex activity patterns by day of week, distinguishing it from sibling tools like tautulli_plays_by_date (daily totals) and tautulli_plays_by_hour (hourly patterns).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives; lacks explicit context or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_plays_by_hourB
Get hourly viewing distribution — when people watch Plex throughout the day.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description should disclose behavioral traits like read-only nature, output format, or any side effects. It only states the purpose, omitting details such as whether results are aggregated or what the data range covers.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no redundant words. Front-loaded with key action and resource, making it immediately clear what the tool does.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the output schema, description need not detail return values. However, for a tool among many similar sibling tools, it could benefit from specifying the aggregation level (hourly) more explicitly. Adequate but not comprehensive.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% for the single parameter 'days'. Tool description does not add additional meaning beyond what the schema already provides (time range in days). Baseline score is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves hourly viewing distribution for Plex, using specific verb 'get' and resource 'hourly viewing distribution'. It distinguishes from sibling tools like tautulli_plays_by_date and tautulli_plays_by_day_of_week.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description provides no guidance on when to use this tool versus alternatives. It does not mention exclusions, prerequisites, or explicitly suggest choosing this over other 'plays_by_*' tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_recently_addedA
Get recently added content to Plex — shows what's new in your libraries.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | Number of items to return (default 10, max 50). | |
| media_type | No | Filter by type: "movie", "show", "artist". Empty for all. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It only states the purpose without disclosing behavioral traits like caching, real-time behavior, or required permissions. For a retrieval tool, more transparency is needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that is front-loaded with the core purpose. It wastes no words and is efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple list tool with two parameters and an output schema, the description is mostly adequate. However, it lacks any behavioral or usage context that could improve completeness, such as whether results are sorted by date.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with both parameters described. The description adds no additional meaning beyond the schema, so it meets the baseline but does not enhance understanding.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves recently added content from Plex, specifying the resource and context. It effectively distinguishes from sibling tools like tautulli_most_watched and tautulli_history, which focus on different metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for seeing new content but provides no explicit guidance on when to use this tool versus alternatives such as tautulli_search or tautulli_history. It lacks when-not-to-use guidance or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_searchB
Search Plex content by title — find movies, shows, episodes, and tracks.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search text (required). | |
| limit | No | Maximum results per category (default 10, max 25). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears full responsibility for behavioral disclosure. It only describes the search action, omitting details like read-only nature, auth requirements, rate limits, or that no content is mutated. For a read-only search tool, this is insufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence that front-loads the key action. It is concise with no filler, though it could include a brief usage hint without adding clutter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with 2 parameters and an output schema present. The description covers the basic search purpose, but fails to mention result format or that it searches across multiple categories. Given the sibling tools, this is adequate but not thorough.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description adds 'by title' to clarify the query parameter, but does not explain the limit parameter beyond what the schema already provides. No extra context for edge cases or formatting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Search') and resource ('Plex content by title') and lists content types ('movies, shows, episodes, tracks'). This clearly distinguishes it from sibling tools like tautulli_history or tautulli_activity, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching by title, but it does not explicitly state when to use it versus alternatives (e.g., for non-title searches or browsing). No usage exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_server_infoA
Get Plex server identity — name, version, platform, and connection details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It clearly states it returns identity details, implying a read-only operation. No side effects or auth requirements are mentioned, but for a simple info retrieval, this is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, front-loaded with action and resource, no waste. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and an output schema (not shown), the description covers the return values explicitly. It is fully complete for a simple info retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has no parameters, so schema coverage is 100%. With 0 parameters, baseline is 4. The description adds no parameter info, but none is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Get Plex server identity — name, version, platform, and connection details' uses a specific verb and resource, clearly distinguishing it from sibling tools like tautulli_activity or tautulli_history, which serve different purposes.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies its use for retrieving server identity, and given it has no parameters and no siblings with similar purpose, the context is clear. However, it lacks explicit when-not-to-use or alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_statusA
Check Tautulli server configuration and reachability.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description does not disclose behavioral traits such as what the output contains, whether it requires authentication, or what 'reachability' entails. The presence of an output schema partially compensates, but the description still lacks detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, clear sentence with no wasted words, making it highly concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and an output schema exists, the description is largely complete. However, it could benefit from specifying what the output contains (e.g., config details, status indicators).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has zero parameters, and the description adds no parameter information, which is acceptable as the schema is fully descriptive. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'check' and the resource 'Tautulli server configuration and reachability'. It effectively distinguishes from sibling tools like tautulli_server_info and tautulli_activity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, such as tautulli_server_info for detailed information or other tools for specific metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_stream_dataA
Get detailed stream performance data for diagnosing Plex playback issues.
Use row_id from history or session_key from current activity to fetch detailed performance metrics including bitrate, bandwidth, codec information, and connection details.
| Name | Required | Description | Default |
|---|---|---|---|
| row_id | No | The history row ID (from tautulli_history output). | |
| session_key | No | The current session key (from tautulli_activity). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses the tool returns performance metrics (bitrate, bandwidth, codec info, connection details) and implies read-only behavior, though it does not explicitly state side effects or permissions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with purpose, followed by usage guidance. No redundancy or unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, output schema exists), the description adequately explains input sources and output data types, leaving no critical gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, baseline 3. The description adds value by clarifying that row_id comes from tautulli_history and session_key from tautulli_activity, which is not fully detailed in the schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool fetches detailed stream performance data for diagnosing Plex playback issues, distinguishing it from sibling tools like tautulli_activity (current activity) and tautulli_history (historical logs).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells when to use (diagnosing playback issues) and how (using row_id or session_key), but does not specify when not to use or mention alternative tools beyond the source IDs.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_stream_resolutionB
Get source vs delivered resolution analysis — shows what quality your library serves and what clients actually receive.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden but does not disclose safety profile, permissions, or side effects. It only states the analysis function without mentioning read-only or destructive behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that front-loads the core purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has only one parameter and an output schema, the description provides sufficient context for basic use. However, it lacks usage guidance and behavioral details, though the output schema mitigates the need for return value explanation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with a description for the single parameter 'days'. The tool description adds no additional meaning beyond the schema, achieving the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves a 'source vs delivered resolution analysis', indicating a specific verb and resource. It distinguishes from siblings like tautulli_transcode_stats by focusing on resolution comparison rather than transcode decisions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives such as tautulli_transcode_stats or other analysis tools. The description does not mention prerequisites or context for invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_transcode_statsA
Get direct play vs transcode breakdown by platform — shows which devices cause the most transcoding load.
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | Time range in days (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description alone must convey behavioral traits. It indicates a read operation but lacks details on data aggregation, refresh rate, or any side effects. The description is somewhat transparent but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of one sentence with a dash for additional context. It is front-loaded with the key action. While effective, a slightly more structured format could improve readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple input (one optional parameter) and presence of an output schema, the description is mostly complete. It explains what the tool returns (direct play vs transcode breakdown by platform) but could mention that output schema exists or specify the exact fields.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% coverage for the 'days' parameter, including a clear description and default. The tool description adds no further meaning beyond what the schema provides, fitting the baseline for high coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Get direct play vs transcode breakdown by platform') and identifies the resource ('devices'). It effectively distinguishes from sibling tools like tautulli_platform_stats by focusing on transcoding load.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for analyzing transcode versus direct play, but it does not explicitly state when to use this tool over alternatives like tautulli_platform_stats or tautulli_activity. No exclusions or alternative tool references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tautulli_user_statsA
Get per-user watch statistics — total plays, watch time, last seen.
| Name | Required | Description | Default |
|---|---|---|---|
| user | No | Filter to a specific username. If empty, shows all active users. | |
| days | No | Time range in days for stats (default 30). |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only mentions what statistics are returned but does not specify whether it lists all active users by default, any authentication requirements, rate limits, or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence of 11 words that efficiently communicates the tool's purpose and output. It is front-loaded with the action and resource.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the existence of an output schema, the description need not detail return values. It covers the core purpose and statistics. However, it could be more complete by noting that it shows all active users by default, especially given the many sibling tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage for both parameters, so the schema already explains them well. The description does not add extra meaning beyond what is in the schema, warranting the baseline score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action 'Get' and the resource 'per-user watch statistics', listing specific data points (total plays, watch time, last seen). It effectively distinguishes from sibling tools like tautulli_library_stats which focuses on library-level stats.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for per-user watch statistics but provides no explicit guidance on when to use it versus alternatives like tautulli_history or tautulli_most_watched. No exclusions or when-not-to-use scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.2.0- Changed
tautulli_history2 fields changed- added
Input schema / properties / include_ipAdded value: +{ + "default": false, + "description": "Also show the client IP address per record. Off by default —\nIP addresses are personally identifying, so opt in when you need them.", + "type": "boolean" +} - added
Input schema / properties / include_performanceAdded value: +{ + "default": false, + "description": "Also fetch stream bitrate per record via get_stream_data\n(makes one extra API call per record — use with small lengths).", + "type": "boolean" +}
- Added
tautulli_stream_data
11 tool updates
v1.0.0- Changed
tautulli_history5 fields changed- added
Input schema / properties / length / descriptionAdded value: +"Number of records to return (default 10, max 50)." - added
Input schema / properties / media_type / descriptionAdded value: +"Filter by type: \"movie\", \"episode\", \"track\" (audiobook)." - added
Input schema / properties / search / descriptionAdded value: +"Text search in titles." - added
Input schema / properties / start_date / descriptionAdded value: +"Only show history from this date (YYYY-MM-DD)." - added
Input schema / properties / user / descriptionAdded value: +"Filter by username."
- Changed
tautulli_most_watched3 fields changed- added
Input schema / properties / category / descriptionAdded value: +"Content category — \"tv\", \"movies\", \"music\", or \"users\" (top users)." - added
Input schema / properties / days / descriptionAdded value: +"Time range in days (default 7)." - added
Input schema / properties / stat_type / descriptionAdded value: +"Sort by \"plays\" (total plays) or \"duration\" (total watch time)."
- Changed
tautulli_platform_stats1 field changed- added
Input schema / properties / days / descriptionAdded value: +"Time range in days (default 30)."
- Changed
tautulli_plays_by_date1 field changed- added
Input schema / properties / days / descriptionAdded value: +"Number of days to show (default 14, max 90)."
- Added
tautulli_plays_by_day_of_week - Added
tautulli_plays_by_hour - Added
tautulli_recently_added - Added
tautulli_search - Changed
tautulli_stream_resolution1 field changed- added
Input schema / properties / days / descriptionAdded value: +"Time range in days (default 30)."
- Changed
tautulli_transcode_stats1 field changed- added
Input schema / properties / days / descriptionAdded value: +"Time range in days (default 30)."
- Changed
tautulli_user_stats2 fields changed- added
Input schema / properties / days / descriptionAdded value: +"Time range in days for stats (default 30)." - added
Input schema / properties / user / descriptionAdded value: +"Filter to a specific username. If empty, shows all active users."
11 tool updates
v0.1.0- First observed
tautulli_activity - First observed
tautulli_history - First observed
tautulli_library_stats - First observed
tautulli_most_watched - First observed
tautulli_platform_stats - First observed
tautulli_plays_by_date - First observed
tautulli_server_info - First observed
tautulli_status - First observed
tautulli_stream_resolution - First observed
tautulli_transcode_stats - First observed
tautulli_user_stats
TDQS
Scored across 16 tools
Each tool targets a distinct aspect of Plex monitoring: activity, history, various statistics, search, server info, etc. Descriptions clearly differentiate them, minimizing confusion.
All tools follow a consistent 'tautulli_<descriptive_name>' pattern using lowercase with underscores. No mixing of conventions.
With 16 tools, the set is well-scoped for a monitoring/stats server. It covers essential queries without being overwhelming.
The tool set covers a comprehensive range of monitoring needs: current activity, history, various statistics, search, server info, stream performance, and user stats. No obvious gaps for the stated domain.
Maintenance
Related MCP Connectors
The official MCP Server for the Mux API
A simple MCP server built with FastMCP and python
Syslog receiver and MCP server for homelab log intelligence.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server for interacting with Prometheus metrics and data.17MIT
- AlicenseNot gradedqualityNot gradedmaintenanceMCP server for Huntress API integration1MIT
- AlicenseNot gradedqualityDmaintenanceThe MCP server that keeps you informed by sending the notification on phone using ntfy.sh537 npm44Apache 2.0
- AlicenseBqualityAmaintenanceA Model Context Protocol server that enables AI assistants to query and manage Plex Media Server content through natural language, providing library access, viewing statistics, and media management capabilities.58110 npm51JavaScriptMIT