yt-curator-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@yt-curator-mcpscan my YouTube inventory for duplicates"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
yt-curator π¬π§Ή
YouTube playlist curation engine β inventory, deduplicate, merge, clean up, and reorganise thousands of playlists spanning 20 years.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β yt-curator β
β β
β βββββββββββ βββββββββββ ββββββββββββββββββββββ β
β β CLI β β MCP β β Python Library β β
β β (Click)β β (FastMCP)β β (import yt_curator)β β
β ββββββ¬βββββ ββββββ¬βββββ βββββββββββ¬βββββββββββ β
β β β β β
β ββββββββ¬ββββββββββββββββββββββββ β
β β β
β ββββββββββΌβββββββββ β
β β YouTube Data β β
β β API v3 + OAuthβ β
β β + Local SQLite β β
β βββββββββββββββββββ β
ββββββββββββββββββββββββββββββββββββββββββββββββββββββFeatures
Full inventory β scan all your playlists and every video in them into a local SQLite database
Dead video detection β find deleted, private, and blocked videos across all playlists
Cross-playlist deduplication β find every video that appears in 2+ playlists
Intra-playlist dedup β remove duplicate copies within a single playlist
Merge playlists β move all videos from one playlist into another, then delete the source
Bulk delete β remove empty or unwanted playlists
Merge suggestions β AI-free title-similarity analysis to find consolidation candidates
Privacy audit β see which playlists are public vs private
Dry-run everything β all destructive operations preview before executing
Related MCP server: mcp-youtube
Three Interfaces
1. CLI (yt-curator)
# OAuth setup (one-time)
yt-curator auth
# Full inventory scan
yt-curator inventory
# Reports
yt-curator report
yt-curator find-dupes
yt-curator find-dead
# Curation (try --dry-run first!)
yt-curator merge PL_source_id PL_target_id --dry-run
yt-curator dedup PL_playlist_id --dry-run
yt-curator delete PL_playlist_id --dry-run
# Start MCP server
yt-curator serve-mcp2. MCP Server (yt-curator-mcp)
Register as a backend for any MCP client (Claude Desktop, Hermes, Cursor, etc.).
stdio mode (default β plug-and-play with Claude Desktop):
{
"mcpServers": {
"yt-curator": {
"command": "yt-curator",
"args": ["serve-mcp"]
}
}
}SSE mode (register with the mcp-gateway):
yt-curator serve-mcp --host 0.0.0.0 --port 39401Then add to your gateway config:
backends:
- name: yt-curator
type: sse
url: http://127.0.0.1:39401Available MCP tools:
Tool | Description |
| List all playlists in the inventory DB |
| List all videos in a specific playlist with status |
| Full scan β all playlists, items, and video status |
| Summary stats from inventory |
| Cross-playlist duplicate detection |
| Dead/private/blocked videos |
| Zero-video playlists |
| Title-similarity merge candidates |
| Merge with dry-run mode |
| Delete with dry-run mode |
| Bulk dead video removal |
| Check OAuth credentials |
3. Python Library (import yt_curator)
from yt_curator.core.client import YouTubeClient
from yt_curator.core.inventory import scan_all
client = YouTubeClient()
report = scan_all(client)
print(f"Scanned {report.total_playlists} playlists")Quota Budget
YouTube Data API v3 default: 10,000 units/day (free).
Operation | Cost per call | Your 900-playlist scan |
| 1 | ~18 calls |
| 1 | ~900 calls |
| 1 | ~120 calls |
| 50 | per operation |
| 50 | per operation |
Full inventory scan | ~1,200 units β |
A full scan uses ~12% of your daily quota, leaving 8,800 units for curation writes (about 175 write operations per day).
Setup
One-time: Google Cloud + OAuth
Go to Google Cloud Console
Create a project β Enable YouTube Data API v3
APIs & Services β Credentials β Create Credentials β OAuth client ID
Application type: Desktop app
Download
client_secret.json
Save it to
~/.config/yt-curator/client_secret.jsonRun
yt-curator authβ opens a browser for Google login
Tip for headless servers: Run
yt-curator authonce on a desktop machine with a browser, then copy~/.config/yt-curator/token.jsonto the server.
NixOS Module
Add yt-curator to your flake inputs:
{
inputs.yt-curator = {
url = "github:telos-systems/yt-curator";
inputs.nixpkgs.follows = "nixpkgs";
};
}Then enable the module:
{
imports = [ yt-curator.nixosModules.default ];
services.yt-curator = {
enable = true;
mcpServer.enable = true;
mcpServer.port = 39401;
credentials.clientSecretPath = config.sops.secrets."yt-curator/client_secret".path;
};
}Or use the flake directly:
nix run github:telos-systems/yt-curator -- inventory
nix run github:telos-systems/yt-curator#mcp -- serve-mcpProject Structure
yt-curator/
βββ src/yt_curator/
β βββ __init__.py # Package entry
β βββ cli/app.py # Click CLI (11 commands)
β βββ mcp/server.py # FastMCP server (12 tools)
β βββ core/
β β βββ auth.py # OAuth 2.0 + token storage
β β βββ client.py # YouTube API client wrapper
β β βββ inventory.py # Full scan β SQLite
β β βββ curator.py # Merge, delete, dedup operations
β β βββ dedup.py # Cross-playlist dedup + suggestions
β β βββ __init__.py # Data models (dataclasses)
β βββ db/schema.py # SQLite schema
βββ nix/module.nix # NixOS module
βββ flake.nix # Nix flake
βββ pyproject.toml # Python project metadata
βββ LICENSE # MIT
βββ README.mdWhy This Exists
YouTube's web UI has no bulk operations. If you have 900+ playlists accumulated over 20 years, there's no way to:
Find which videos are dead across all playlists
See which videos appear in 10 different playlists
Merge similar playlists
Delete 50 empty playlists in one go
Existing MCP servers for YouTube are read-only analytics tools or basic CRUD wrappers. None do inventory, dedup, merge, or bulk curation. This fills that gap.
Roadmap
Core: inventory, dedup, merge, delete, dead video removal
CLI: 11 commands with --dry-run
MCP server: 12 tools (stdio + SSE)
Nix flake + NixOS module
AI-assisted reorganisation (local LLM via Ollama)
Playlist-as-code (declarative YAML β desired state)
GitHub release + PyPI publish
Scheduled inventory drift detection (weekly cron)
License
MIT Β© 2026 Telos Systems / Danny Poulson
Available Tools
12 toolsauth_statusA
Check whether OAuth credentials are configured and valid.
| 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 provided, the description carries the full burden of disclosing behavior. It only says 'check,' which implies read-only, but it does not state whether the tool makes network calls, what 'valid' means (e.g., expiry checks), or what the output looks like. The description is too minimal to provide meaningful behavioral insight.
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. It is front-loaded with the verb 'Check' and immediately specifies the resource. It is concise and appropriately sized for a zero-parameter utility.
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 and has an output schema (so return format is covered), but the description does not place the tool in the broader workflow of the sibling tools. It lacks guidance on when to invoke it relative to playlist operations, making it minimally complete but with a clear gap in usage 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?
The tool has zero parameters, so there is nothing for the description to explain about parameter semantics. The baseline for no parameters is 4, and the description correctly focuses on the subject (OAuth credentials) without adding unnecessary detail.
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 a specific verb ('Check') and resource ('OAuth credentials') and clearly conveys the tool's purpose: verifying credential configuration and validity. It is distinct from sibling tools, which all focus on playlist/inventory operations, making this a unique utility.
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 using it before making authenticated calls or setting up credentials. There is no mention of prerequisites, exclusion criteria, or preferred use cases, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
curation_reportA
Generate a summary report from the inventory database.
Shows playlist/video counts, dead videos, duplicates, and empty playlists.
Requires that scan_inventory() has been run first.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
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 the responsibility for behavioral disclosure. It usefully adds a dependency on scan_inventory() and defines the report scope, but it does not explicitly state that the operation is read-only or describe side effects or error behavior. The report nature implies non-mutation but does not state it.
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 extremely concise: the first sentence states the core purpose, the second enumerates the report contents, and the third provides the prerequisite. There is no filler, redundancy, or unnecessary repetition of schema or annotation data.
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 description adequately covers purpose, report contents, and the required prior scan. An output schema exists, so return values need not be described. The only significant gap is parameter semantics, but given the minimal parameter surface and output schema, the overall context is strong.
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 0%, and the description never mentions the db_path parameter or its default/null behavior. With only one optional parameter, the description should have compensated by explaining what db_path means and how it affects the report, but it is completely absent.
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 opens with a specific verb and resource ('Generate a summary report from the inventory database') and explicitly lists the report contents (playlist/video counts, dead videos, duplicates, empty playlists). This clearly distinguishes it from the sibling find_* tools, which target individual issue types.
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 gives a clear prerequisite: 'Requires that scan_inventory() has been run first.' This provides strong contextual guidance for when to invoke the tool. It does not explicitly name alternatives or exclusion cases, but the prerequisite plus the summary-report purpose is sufficient for a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playlistA
Delete a playlist and all its contents.
By default runs in dry_run mode β set dry_run=False to actually delete.
Args: playlist_id: The YouTube playlist ID to delete (e.g. PL...) dry_run: If True (default), only preview; set False to execute
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| dry_run | No | ||
| playlist_id | Yes |
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 the full burden of disclosure. It clearly reveals the destructive nature (deleting all contents) and the safety mechanism of dry-run mode. It stops short of detailing edge cases like non-existent playlists or idempotency, but the core behavioral traits are transparent.
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 economically writtenβtwo sentences plus a parameter list, all front-loaded with the core purpose. Every sentence contributes essential information: what it does, how to use it safely, and what the args mean. No filler.
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 delete operation with 3 parameters, the description covers the main functionality, the safety default, and the key parameters. An output schema exists so return values aren't needed in the description. The main shortfall is the unexplained db_path parameter, but the tool is otherwise adequately contextualized.
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 schema has 0% description coverage (no parameter descriptions), so the description must compensate. It does so for the two primary parameters: playlist_id (with example format) and dry_run (exact semantics of True/False). However, it omits any explanation for db_path, leaving a gap for that optional parameter.
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 opens with a clear, specific verb and resource: 'Delete a playlist and all its contents.' This distinctly identifies the operation and its scope, separating it from sibling tools like list_playlists or merge_playlists.
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 critical usage guidance by explaining the dry-run default and how to execute the deletion ('set dry_run=False to actually delete'). This tells the agent how to use the tool safely, though it doesn't explicitly contrast with alternatives or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_dead_videosB
Find deleted, private, or blocked videos across all playlists.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
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 the burden. It defines 'dead' as deleted/private/blocked and notes the all-playlists scope, which adds transparency. However, it does not disclose whether the operation is read-only, whether it requires network/auth, or any other 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, focused sentence with no filler words. It efficiently communicates 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?
Despite having an output schema, the description fails to explain the meaning of db_path, any prerequisites (like authentication), or potential performance implications of scanning all playlists. The minimal description is adequate for a simple tool but not complete given the optional parameter and the breadth of 'all playlists'.
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 0%, and the description makes no mention of the db_path parameter. The optional parameter's purpose and default behavior remain completely unexplained, so the description adds no value in this dimension.
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 the specific verb 'Find' and clarifies the resource as 'deleted, private, or blocked videos' with the scope 'across all playlists'. This clearly distinguishes it from sibling tools like find_duplicates and remove_dead_videos.
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 identifying dead videos but does not explicitly state when to use this tool instead of alternatives like find_duplicates or remove_dead_videos. No exclusions are mentioned, so it relies on the name and sibling context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicatesA
Find videos that appear in multiple playlists.
Args: min_appearances: Minimum number of playlists a video must appear in (default: 2, meaning any duplication at all).
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| min_appearances | No |
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 states the query action and the min_appearances default, but does not mention whether the operation is read-only, how db_path affects execution, whether any data is modified, or the grouping/ordering of results.
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 extremely concise and front-loaded. The first sentence states the purpose, and the Args section succinctly documents the one non-obvious parameter with its default, with zero 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?
For a simple two-parameter read query with an output schema, the description is mostly adequate, but the db_path parameter is entirely unexplained, and no context is given about the scope of the scan or any constraints. This leaves a notable gap for an agent deciding whether to supply db_path.
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 description adds meaningful semantics for min_appearances, explaining the minimum playlist count and the default value. However, db_path is never mentioned, and with 0% schema description coverage, its meaning remains opaque despite the schema's 'Db Path' title.
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 opens with the specific verb 'Find' and resource 'videos that appear in multiple playlists,' clearly identifying the duplicate-detection purpose. It also distinguishes itself from sibling tools like find_dead_videos and find_empty_playlists by focusing on cross-playlist duplicates.
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 clearly frames the tool's use case: detecting videos that appear in multiple playlists. It does not provide explicit when-not-to-use or alternative tool guidance, but the context is clear and no exclusions are needed for this focused query.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_empty_playlistsB
Find playlists with 0 videos.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is truthful and the verb 'find' implies a read-only operation, but with no annotations, it doesn't explicitly disclose side effects or prerequisites. However, the operation is inherently non-destructive and the description aligns with the tool name, so it is acceptable but lacks extra 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 sentence that front-loads the action and resource. It contains no filler or redundancy, 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?
The tool is simple and an output schema exists, so return values are covered. However, the description does not address the optional db_path parameter or provide any usage context, leaving some gaps for an agent to fill.
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 schema has one parameter, db_path, with 0% description coverage. The description does not mention the parameter at all, leaving the agent to infer its meaning from the name. No compensation is provided for the missing schema documentation.
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 'Find playlists with 0 videos' uses a specific verb and resource with a clear condition. It distinguishes from sibling tools like list_playlists (which lists all playlists) and find_duplicates, making the purpose unambiguous.
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 gives no guidance on when to use this tool versus alternatives. Sibling tools such as list_playlists and curation_report exist, but no comparison or recommended context is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_playlist_contentsB
List all videos in a specific playlist.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| playlist_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description is the only safety signal. The verb 'List' implies a read-only operation, but it does not explicitly disclose side effects, authentication needs, or edge cases such as missing playlist_id. Still, it does not misrepresent the 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 sentence with no filler words, immediately front-loaded with the action and target.
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?
While an output schema exists, the description lacks usage context, alternative references, and parameter details (db_path). For a simple listing tool, it is adequate but not fully complete, missing context that would help the agent select and invoke it correctly.
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 schema has 0% description coverage. The description implicitly references playlist_id via 'a specific playlist' but does not explain the optional db_path parameter or its effect. The description fails to compensate for the missing parameter documentation.
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 a specific verb ('List') and resource ('all videos in a specific playlist'), which distinguishes it from sibling tools like list_playlists that list playlists themselves.
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 gives no guidance on when to prefer this tool over siblings, nor any exclusions or alternative recommendations. It only states what it does, leaving the agent to infer usage from context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playlistsA
List all playlists in the inventory database.
Run scan_inventory() first if the database is empty.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
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 the full burden of behavioral disclosure. It does disclose a useful precondition (scan_inventory if the database is empty), which adds context beyond the schema. But it does not explicitly state that the operation is read-only, or mention any other behavioral details such as formatting or side effects. The guidance is helpful 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 two sentences long, with the first sentence directly stating the tool's purpose and the second adding an actionable tip. There is no filler or redundancy, and the most important information is front-loaded.
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 and the output schema covers return values, but the description leaves gaps in parameter semantics and alternative selection. The scan_inventory precondition is useful, but an agent would still struggle to understand the purpose of db_path without additional documentation. For a tool with one parameter and multiple siblings, this is moderately complete but not fully sufficient.
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 schema coverage for the only parameter (db_path) is 0%, and the description does not mention this parameter at all. The parameter name is somewhat self-explanatory, and the description mentions 'inventory database', but it does not clarify whether db_path is optional or how it affects the query. The description fails to compensate for the lack of schema documentation.
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's function with a specific verb 'List' and a resource 'all playlists', and further specifies the scope as 'inventory database'. This sharply distinguishes it from sibling tools like get_playlist_contents (which lists contents) and find_empty_playlists (which filters playlists).
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 a concrete usage condition: 'Run scan_inventory() first if the database is empty.' This is genuine guidance for when to use the tool. However, it does not explicitly discuss alternatives or situations where the tool should not be used, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_playlistsA
Move all videos from the SOURCE playlist into the TARGET, then delete SOURCE.
Skips videos already present in the target. By default runs in dry_run mode β set dry_run=False to actually execute.
Args: source_id: Playlist ID to move videos from (e.g. PL...) target_id: Playlist ID to move videos into dry_run: If True (default), only preview; set False to execute
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| dry_run | No | ||
| source_id | Yes | ||
| target_id | Yes |
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 weight. It explicitly discloses that the source playlist is deleted after the move, that duplicates are skipped, and that dry_run defaults to True to prevent accidental execution. This is strong transparency, though it omits edge cases like source==target or missing playlists.
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 and well-structured: the core operation is stated in the first sentence, followed by key behaviors, then a clear args list. Every sentence adds value without unnecessary padding.
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 moderate complexity and the presence of an output schema, the description covers the main aspects: operation, duplicate handling, dry-run safety, and parameter meanings. It does not address db_path or error scenarios, but these are secondary to the core use case.
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 0%, so the description compensates well for three of four parameters: source_id and target_id are explained with format hints, and dry_run is clearly described including its default behavior. However, db_path is entirely undocumented in the description, leaving a gap for that parameter.
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 a specific action ('Move all videos from SOURCE playlist into TARGET, then delete SOURCE') and names the exact resources involved. It distinguishes itself from sibling tools like delete_playlist (which deletes without moving) and suggest_merges (which only suggests candidates).
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 the tool but does not explicitly state alternatives or exclusions. It conveys the merge-and-delete workflow, making it easy to infer usage, but lacks direct guidance such as 'use this instead of delete_playlist when you want to preserve videos.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_dead_videosA
Remove all dead/private/blocked videos from their playlists.
By default runs in dry_run mode β set dry_run=False to actually remove.
Args: dry_run: If True (default), only preview; set False to execute
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| dry_run | No |
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 the full transparency burden. It discloses the critical safety behavior: 'By default runs in dry_run mode β set dry_run=False to actually remove.' This clearly distinguishes preview from execution. However, it does not elaborate on side effects of actual removal or the role of db_path.
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 appropriately sized, front-loaded with the action statement, and each sentence earns its place. It efficiently explains the purpose, the dry_run behavior, and parameter details without extraneous content.
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 has an output schema (not shown), so return values need no explanation. The description covers the core purpose and dry_run, but omits any explanation of db_path, which is a parameter with a default. This leaves the description incomplete for a fully self-sufficient 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 description adds meaning for the dry_run parameter, explaining it as 'If True (default), only preview; set False to execute.' However, db_path is completely unexplained, and schema description coverage is 0%. The description partially compensates but leaves a significant gap.
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's purpose with a specific verb and resource: 'Remove all dead/private/blocked videos from their playlists.' It distinguishes from sibling tools like find_dead_videos, as this tool performs removal rather than identification.
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 by explaining the dry_run default and how to execute, but it does not explicitly contrast with alternatives like find_dead_videos or state when this tool should be used over others. The guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scan_inventoryA
Run a full inventory scan: list all playlists, all items, check video status.
This is the primary data-collection command. Run this first before any curation operations. Uses the YouTube Data API β consumes ~1,200 quota units for a typical 900-playlist account.
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No | ||
| read_only | No |
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 description carries the burden. It discloses API usage ('Uses the YouTube Data API') and quota cost ('~1,200 quota units'), which is useful behavioral context. It also states the scan scope (all playlists, all items, check video status), though it doesn't explain parameter 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?
Four sentences total, front-loaded with the action and followed by usage and cost. No wasted words; each sentence adds value.
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?
Covers purpose, primary usage, and API cost, but lacks any parameter semantics and doesn't mention what db_path is for. With an output schema present, return details are covered, but the param gap makes it incomplete.
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 0%, and description does not mention db_path or read_only. The tool's parameters are completely unexplained, leaving a significant gap.
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 ('Run a full inventory scan') and resource (all playlists, all items, video status). It distinguishes itself as the primary data-collection command from siblings by stating 'Run this first before any curation operations.'
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?
Provides clear timing guidance: 'Run this first before any curation operations' and labels itself 'the primary data-collection command.' It does not explicitly mention when not to use it or alternatives, but this is clear enough for a first-step tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
suggest_mergesA
Suggest playlist merge candidates based on title similarity.
Useful for consolidating fragmented playlists (e.g. "Tech 2020" + "Tech 2021").
| Name | Required | Description | Default |
|---|---|---|---|
| db_path | No |
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 discloses the core behavior (title similarity-based suggestion) and provides an example, but it does not explicitly state whether the operation is read-only, what side effects might occur, or any algorithm details. The basics are covered, but not deeply.
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 appropriately sized at two sentences, front-loaded with the action, and includes a practical example. Every word earns its place with no redundancy or filler.
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 relatively simple, has an output schema, and the description covers purpose and use case. However, the unexplained db_path parameter and lack of workflow guidance (e.g., prerequisites or relationship to other tools) leave noticeable gaps in 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 0%, and the only parameter (db_path) is not mentioned in the description at all. The tool description provides no guidance on what db_path refers to or when to supply it, so the description completely fails to compensate for the lack of schema-level parameter documentation.
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 'suggest playlist merge candidates based on title similarity,' using a specific verb and resource. It distinguishes itself from siblings like merge_playlists (actual merging) and find_duplicates (duplicate detection) by focusing on similarity-based suggestions.
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?
Gives clear context with 'Useful for consolidating fragmented playlists' and a concrete example ('Tech 2020' + 'Tech 2021'). However, it does not explicitly state when not to use it or mention alternative tools, so it falls short of full guideline coverage.
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.
12 tool updates
v0.1.0- First observed
auth_status - First observed
curation_report - First observed
delete_playlist - First observed
find_dead_videos - First observed
find_duplicates - First observed
find_empty_playlists - First observed
get_playlist_contents - First observed
list_playlists - First observed
merge_playlists - First observed
remove_dead_videos - First observed
scan_inventory - First observed
suggest_merges
TDQS
Scored across 12 tools
Most tools target distinct resources/actions, but list_playlists and scan_inventory overlap slightly since both return playlist lists; the descriptions clarify that scan_inventory is the primary data-collection command. Overall, boundaries are clear.
The set mostly follows a verb_noun pattern (list_*, get_*, find_*, merge_*, delete_*, remove_*). Exceptions like 'curation_report' and 'auth_status' are minor and still readable, so consistency is good but not perfect.
With 12 tools, the server is well-scoped for a playlist curation domain. Each tool earns its place, covering inventory scanning, analysis, and actionable curation without unnecessary bloat.
The surface covers the full curation workflow: scan, analyze, merge, delete, and remove dead videos. Minor gaps exist (e.g., no playlist creation/renaming or single-video moves), but these are peripheral to the core purpose.
Maintenance
Related MCP Connectors
Hosted MCP for YouTube Studio: uploads, metadata, playlists, comments, analytics, captions.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
YouTube MCP β wraps the YouTube Data API v3 (BYO API key)
YouTube discovery, transcripts, library search, and monitors with API keys or OAuth.
1
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables natural-language creation, management, and optimization of Spotify playlists via MCP tools like search, generate, analyze, and recommend.-
- AlicenseAqualityBmaintenanceEnables conversational YouTube playlist management via Claude, allowing creation, pruning, cleanup, and deletion of playlists through the YouTube Data API v3.527 npmMIT
- FlicenseNot gradedqualityBmaintenanceEnables analyzing and managing YouTube playlists, including Watch Later, using InnerTube authentication via browser cookies.-
- AlicenseAqualityCmaintenanceAn MCP server for organizing YouTube playlists via the YouTube Data API v3, enabling playlist and playlist item creation, listing, updating, and deletion through natural language.9MIT