ytmcp
Provides tools for controlling a YouTube channel end-to-end, including uploading videos, editing metadata, setting visibility, managing playlists, moderating comments, updating channel branding, reading analytics, and searching videos.
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., "@ytmcpupload my new video from ~/Videos/demo.mp4 with title 'Demo'"
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.
ytmcp
Unofficial YouTube API + MCP server — let AI agents control a YouTube channel end-to-end.
ytmcp is a Python library, REST API, CLI, and Model Context Protocol server that wraps an unofficial YouTube client. It lets AI agents (Claude Desktop, Cursor, custom agents…) upload videos, edit metadata, manage playlists, moderate comments, and read analytics — all through MCP tools.
⚠️ Disclaimer
This project is provided for educational and research purposes only.
It uses reverse-engineered, undocumented YouTube endpoints that may change or break at any time.
Automating YouTube may violate YouTube's Terms of Service.
Using this software can result in account suspension or termination.
The authors accept no liability for any consequences arising from its use.
Use at your own risk, ideally with a test account. You are solely responsible for complying with all applicable terms and laws.
Related MCP server: youtube-live-mcp
✨ Features
Domain | Capabilities |
Video | upload (resumable), update metadata, set visibility, set thumbnail, delete, get info |
Playlist | create, list, add/remove videos, delete |
Comments | list, reply, moderate (approve/hold/reject) |
Channel | get info, subscriber count, update branding/links |
Analytics | views, watch-time, subscriber growth, top videos |
Search | search videos, list channel uploads |
Three interfaces share one core:
🐍 Python library —
from ytmcp.core import YouTubeClient🤖 MCP server —
ytmcp serve(stdio / HTTP)🌐 REST API —
ytmcp api(FastAPI, auto docs at/docs)
🔐 Authentication (hybrid)
ytmcp supports two auth methods and picks automatically (auth_mode = auto):
Option A — Browser cookies (fastest)
Export cookies for
youtube.comwith a browser extension (e.g. Get cookies.txt) oryt-dlp --cookies-from-browser chrome --cookies cookies.txt.Point ytmcp at the file:
export YTMCP_AUTH_MODE=cookie
export YTMCP_COOKIE_FILE=/path/to/cookies.txt
uv run ytmcp auth verify-cookies /path/to/cookies.txtSupports Netscape cookies.txt and JSON exports (including Playwright storage_state).
Option B — OAuth 2.0 (device flow)
Create an OAuth client (type TVs and Limited Input devices) in Google Cloud Console.
Configure and log in:
export YTMCP_AUTH_MODE=oauth
export YTMCP_OAUTH_CLIENT_ID=...
export YTMCP_OAUTH_CLIENT_SECRET=...
uv run ytmcp auth loginTokens are cached in ~/.ytmcp/oauth_token.json and refreshed automatically.
Check status any time:
uv run ytmcp auth status🚀 Quick start
# 1. Install
git clone https://github.com/Lightforce325/ytmcp.git
cd ytmcp
uv venv && source .venv/bin/activate
uv pip install -e ".[dev]"
# 2. Configure auth (see above)
cp .env.example .env # then edit
# 3. Run the MCP server
uv run ytmcp serve
# or the REST API
uv run ytmcp api # http://127.0.0.1:8765/docs🤖 Connect to Claude Desktop (MCP)
Add this to claude_desktop_config.json:
{
"mcpServers": {
"ytmcp": {
"command": "uv",
"args": [
"--directory", "/ABSOLUTE/PATH/TO/ytmcp",
"run", "ytmcp", "serve"
],
"env": {
"YTMCP_AUTH_MODE": "cookie",
"YTMCP_COOKIE_FILE": "/ABSOLUTE/PATH/TO/cookies.txt"
}
}
}
}Restart Claude Desktop — the agent will now see 20 tools for controlling your channel.
See examples/claude_desktop_config.json and docs/TOOLS.md.
🧰 MCP tools
Tool | Auth | Description |
| ✅ | Upload a video file with metadata |
| ✅ | Edit title/description/tags/category |
| ✅ | public / unlisted / private / scheduled |
| ✅ | Permanently delete a video |
| — | Fetch video details |
| — | Search YouTube |
| — | List a channel's uploads |
| ✅ | Create a playlist |
| — | List channel playlists |
| ✅ | Add a video to a playlist |
| ✅ | Remove a video from a playlist |
| ✅ | Delete a playlist |
| — | List video comments |
| ✅ | Reply to a comment |
| ✅ | Approve / hold / reject a comment |
| — | Channel metadata |
| — | Subscriber count |
| ✅ | Banner / avatar / links |
| ✅ | Views, watch-time, growth |
| — | Most-viewed videos |
🧩 Example agent workflow
"Upload
intro.mp4as a private video titled Hello World, add it to my Demos playlist, then reply to the latest comment."
The agent chains: upload_video → list_playlists → add_video_to_playlist → list_comments → reply_to_comment. See examples/agent_batch_upload.py.
🏗️ Architecture
AI Agent ──MCP──► mcp/server.py ──► core/* ──► YouTube endpoints
api/app.py ──►
cli.py ──►See docs/ARCHITECTURE.md for the full breakdown.
🧪 Development
uv pip install -e ".[dev]" # install dev dependencies
uv run ruff check . # lint
uv run ruff format . # format
uv run mypy src # type-checkTesting
The suite lives in tests/ and runs on pytest
with pytest-asyncio (asyncio_mode = "auto")
and respx for HTTP mocking — no network
access or credentials are needed for the default run.
# Run the whole suite (unit tests + integration tests, which skip by default)
uv run pytest
# Run only the unit tests
uv run pytest tests/unit
# Run a single file / test
uv run pytest tests/unit/test_upload.py -q
uv run pytest tests/unit/test_config.py::test_settings_defaults -qCoverage
Coverage is configured with pytest-cov
and coverage.py. Configuration lives in
pyproject.toml under [tool.coverage.run] (source = src/ytmcp, branch
coverage enabled) and [tool.coverage.report].
# Terminal report highlighting missing lines
uv run pytest --cov=src/ytmcp --cov-report=term-missing
# HTML report (written to htmlcov/, git-ignored)
uv run pytest --cov=src/ytmcp --cov-report=html
open htmlcov/index.html
# Fail the run if total coverage drops below a threshold
uv run pytest --cov=src/ytmcp --cov-report=term-missing --cov-fail-under=70Integration tests (opt-in)
End-to-end multi-service flows live in tests/integration/. They are marked
integration and skipped by default; opt in with the environment variable:
# Run everything, including integration tests
YTMCP_RUN_INTEGRATION=1 uv run pytest -m integration
# Run only the integration marker
YTMCP_RUN_INTEGRATION=1 uv run pytest tests/integration -m integrationQuality gates
uv run pytest # tests
uv run pytest --cov=src/ytmcp --cov-report=term-missing # tests + coverage
uv run ruff check . # lint
uv run mypy src # type-check📄 License
MIT — provided as-is, without warranty. See the disclaimer above.
Available Tools
20 toolsadd_video_to_playlistC
Add a video to a playlist.
Args: playlist_id: Target playlist id (starts with 'PL'). video_id: Video id to add.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| 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 provided, so the description carries the full behavioral burden, and it discloses almost nothing: no auth/ownership requirements, no note on duplicate entries, no rate-limit or quota behavior. The existence of an output schema relieves it of explaining return values, which keeps this above a 1.
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?
Very short and front-loaded with the core action in the first sentence. The 'Args:' block is somewhat redundant with the input schema but not wasteful.
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-required-parameter tool with an output schema, the description covers the basic contract. However, with no annotations and no permission or duplicate-handling context, an agent still lacks information about failure modes and preconditions.
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 must compensate. It adds a genuinely useful format hint for playlist_id ('starts with PL') but video_id is only restated as 'Video id to add', adding nothing beyond the schema. Partial compensation only.
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?
States a specific verb ('Add') and resource ('a video to a playlist'), which is unambiguous and clearly distinct from the sibling remove_video_from_playlist. It does not explicitly name or differentiate against siblings, but the name and description are specific enough that an agent can select it correctly.
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?
There is no when-to-use guidance, no prerequisites, and no mention of the natural alternative (remove_video_from_playlist) or related tools like create_playlist. Usage is only implied by the verb-resource phrasing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_playlistB
Create a new playlist on the channel.
Args: title: Playlist title. description: Playlist description. visibility: One of 'public', 'unlisted', 'private'.
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | ||
| visibility | No | private | |
| description | 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 signals a mutation ('Create') but says nothing about auth requirements, whether titles must be unique, rate limits, or what happens on conflict. A mutation tool with zero annotation coverage needs more disclosure.
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?
Front-loaded with the action, followed by a compact args list; no filler sentences. The docstring-style formatting is clean and each line carries 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?
An output schema exists, so return values need not be explained, and the params are covered by the args list. However, for a create/mutation tool with no annotations, the absence of any behavioral or prerequisite context leaves a real gap.
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%, yet the description documents all three parameters and, importantly, supplies the enum values for visibility ('public', 'unlisted', 'private') that the schema omits. It does not state the default ('private'), but it compensates well beyond the empty schema.
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?
States a specific verb and resource ('Create a new playlist on the channel'), which is unambiguous against siblings like delete_playlist or list_playlists. It does not explicitly name an alternative, but the create action is inherently distinguished from the read/delete siblings.
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?
There is no guidance on when to use this versus list_playlists, add_video_to_playlist, or delete_playlist, nor any prerequisites or channel-scope conditions. The use case is inferrable from the name but the description adds nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_playlistC
Delete a playlist.
Args: playlist_id: Playlist id to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| 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 provided, so the description carries full behavioral burden. It doesn't state whether deletion is permanent or reversible, whether it requires ownership/permissions, or what happens to videos that were in the playlist. 'Delete a playlist' gives no behavioral context beyond the obvious.
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?
Very short and front-loaded with the action. The Args block is minimally informative but not verbose; nothing extraneous, though also nothing added.
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?
An output schema exists, so return values are covered, but the description omits critical mutation context: no annotations, no reversibility, no permission info, and 0% param documentation. For a destructive operation it is significantly under-specified.
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% for the single parameter playlist_id, and the description only restates it as 'Playlist id to delete.' There is no format, source, or constraint information to compensate for the schema 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?
States a specific verb (Delete) and resource (playlist) clearly, so the agent immediately knows the outcome. It lacks any sibling differentiation, e.g. vs. delete_video or remove_video_from_playlist, but the purpose itself is 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?
No guidance on when to use this tool versus alternatives like remove_video_from_playlist or delete_video. The agent must infer context from the name alone; there are no prerequisites, warnings, or exclusion conditions stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_videoB
Permanently delete a video from the channel.
Args: video_id: The YouTube video id to delete.
| Name | Required | Description | Default |
|---|---|---|---|
| video_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 provided, so the description must carry the behavioral load. It does disclose the most important trait — the deletion is permanent/irreversible — which is genuinely useful. It omits permission requirements, whether only owned videos can be deleted, and what collateral effects occur (comments, analytics, playlist membership).
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 operative sentence is front-loaded and free of filler, which is exactly right for a one-parameter tool. The docstring-style 'Args:' block is slightly boilerplate but does carry the only parameter documentation available.
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?
An output schema exists, so return values need not be explained. However, for an irreversible destructive operation with no annotations and zero schema-level parameter documentation, the definition should at least state auth/permission expectations and that the action cannot be undone beyond the single word 'Permanently.'
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 must compensate. It identifies video_id as 'the YouTube video id to delete,' which confirms the identifier domain and purpose, but adds no format, length, or example detail beyond the parameter name.
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?
Names a specific verb (delete) and resource (video) with the scope qualifier 'from the channel,' which clearly separates it from non-destructive siblings like get_video_info or update_video_metadata. It does not, however, explicitly distinguish itself from remove_video_from_playlist, which an agent might confuse with video deletion.
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 states what the tool does but gives no when-to-use context, no prerequisites, and no alternatives. An agent gets no help deciding between this and set_video_visibility or the playlist-removal siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_analyticsB
Get channel analytics (views, watch-time, subscribers gained/lost).
Args: channel_id: Channel id. period_days: Reporting window in days (default 28).
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | Yes | ||
| period_days | 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 disclosure burden. It conveys the read-only 'Get' nature and names the metric categories, but says nothing about auth requirements, data freshness/lag, or rate limits. It avoids misleading claims, but leaves real behavioral gaps for a tool with zero annotation coverage.
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?
Compact and front-loaded: purpose first, then an Args block with no filler sentences. The Args block largely restates schema field titles, so it is efficient but not maximally information-dense.
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?
An output schema exists, so return format need not be described. For a simple two-parameter read tool, the description covers purpose and both parameters adequately; only usage routing against siblings and basic access/freshness context are absent.
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 must compensate, and it does minimally: it glosses channel_id and explains period_days as a 'Reporting window in days' with default 28. That adds slight semantic value over the bare schema titles, but offers no format, accepted range, or unit conventions beyond the default.
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?
States a specific verb+resource ('Get channel analytics') and enumerates the returned metrics (views, watch-time, subscribers gained/lost), which is more specific than most siblings. However, it never explicitly distinguishes itself from adjacent tools like get_channel_info or get_subscriber_count, leaving some overlap for the agent to resolve.
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 says nothing about when to use this tool versus the ~20 siblings, nor any prerequisite such as channel ownership, permissions, or whether analytics require a minimum account age. The agent must infer usage entirely from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_channel_infoB
Get information about a channel (title, description, banner).
Args: channel_id: Channel id; if omitted, uses the authenticated channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | 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 bears the full behavioral burden. It implies a read via 'Get', but says nothing about permission requirements, whether the authenticated channel must exist, error behavior for invalid ids, or rate limits. The output schema covers the return shape, so that gap is partially mitigated.
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 tight elements: a front-loaded purpose sentence with the returned fields, followed by parameter clarification. No padding or redundancy, though the 'Args:' block style is slightly boilerplate for a single optional parameter.
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 single-optional-parameter read tool with an output schema, the description covers purpose and the parameter default adequately. It is nonetheless missing usage context and any behavioral caveats, leaving it merely viable rather than complete.
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% — 'Channel Id' is the only schema text — so the description must compensate, and it does: it defines channel_id and explains the important default that omitting it falls back to the authenticated channel. It does not specify accepted id formats (handle vs numeric), which keeps it from a 5.
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?
States a specific verb and resource ('Get information about a channel') and even enumerates the returned fields (title, description, banner). It is clearly distinguishable from write-oriented siblings like update_channel_branding, though it never explicitly contrasts with other channel reads such as get_subscriber_count.
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?
There is no explicit when-to-use guidance or routing to alternatives; the agent must infer that this is the general channel-read tool. The only contextual aid is the note about omitting channel_id, which is parameter behavior rather than usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_subscriber_countB
Get the subscriber count of a channel.
Args: channel_id: Channel id; if omitted, uses the authenticated channel.
| Name | Required | Description | Default |
|---|---|---|---|
| channel_id | 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 does add one genuinely useful behavioral detail — that omitting channel_id falls back to the authenticated channel — but says nothing about auth requirements, rate limits, or whether the count is exact vs approximate. Read-only is implied by 'get' but not declared.
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 short lines, front-loaded with the purpose, and the args block is minimal. The argparse-style 'Args:' preamble is slightly verbose for a single optional parameter but wastes little space.
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?
An output schema exists, so return-value explanation is not required, and this is a simple single-parameter read tool. The essentials — purpose, the one parameter's semantics, and default behavior — are covered; only auth/permission context is absent.
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 must compensate, and it does: it defines channel_id's meaning and its default/fallback behavior, which the schema alone does not convey. It does not specify the expected id format (numeric id, handle, or URL), leaving a small 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?
States a specific verb and resource ('Get the subscriber count of a channel'), which is clearly distinguishable from siblings like get_channel_info or get_analytics. It stops short of explicitly naming how it differs from those tools, so it is clear but not sibling-differentiating.
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 get_channel_info or get_analytics. The only conditional context given is the channel_id default, which is about invocation mechanics rather than tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_top_videosC
Get a channel's most-viewed videos.
Args: channel_id: Channel id. limit: Maximum number of videos to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel_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 provided, so the description carries the full behavioral burden, and it discloses almost nothing: no ordering guarantee, no mention of how 'most-viewed' is computed or over what period, no pagination or permission requirements. Only the bare operation is stated.
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 leading sentence is well front-loaded and economical. However, the 'Args' block largely duplicates the schema titles and default, adding length without 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?
An output schema exists so return values need no explanation, but for a read tool with zero annotations the description leaves out ordering semantics, time window, and auth context. An agent could invoke it but would not understand what it is actually ranking.
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 must compensate, but 'channel_id: Channel id.' merely restates the schema title and gives no format (raw ID vs handle vs URL). 'limit: Maximum number of videos to return.' is slightly more informative but omits valid range and interaction with ordering.
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?
States a specific verb+resource with a scope qualifier ('most-viewed'), which implicitly distinguishes it from list_channel_videos and search_videos. It does not explicitly name a sibling, but the ranking semantics are clear enough to route correctly.
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 when-to-use guidance and no alternative named. With siblings like list_channel_videos and search_videos, the agent must guess whether 'top videos' means ranked-by-views or filtered list, and there is no exclusion or condition stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_video_infoB
Get detailed information about a video (title, views, description).
Args: video_id: The YouTube video id.
| Name | Required | Description | Default |
|---|---|---|---|
| video_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 provided, so the description carries the full behavioral burden. It implies a read-only lookup and hints at the payload shape, but says nothing about auth requirements, quota/rate limits, what happens for a nonexistent or private video, or error behavior — significant gaps for a YouTube API call.
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 core sentence is short and front-loaded, and the single parameter is called out. The 'Args:' block is boilerplate duplication of the schema, a minor but real bit of waste.
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?
An output schema exists, so return values need not be described, and for a one-parameter read tool the description covers the essentials. It is thin on failure modes and auth, but nothing critical to invoking it correctly is missing.
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 must compensate; it does so only minimally by restating 'video_id: The YouTube video id,' which adds almost no information beyond the schema's own 'Video Id' title and type.
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?
States a specific verb and resource ('Get detailed information about a video') and enumerates the returned fields (title, views, description), which separates it from mutating siblings like update_video_metadata and delete_video. It does not explicitly name a sibling it must be disambiguated from, so it stops short of a 5.
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?
There is no when-to-use, when-not-to-use, or alternative-tool guidance at all. An agent must infer on its own that this is for fetching a single known video id versus search_videos or get_top_videos.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_channel_videosB
List a channel's uploaded videos (newest first).
Args: channel_id: The channel id (starts with 'UC'). limit: Maximum number of videos to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| channel_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 the full behavioral burden, and it does disclose the sort order ('newest first'). However, it says nothing about pagination, whether only public videos are returned, or auth requirements — meaningful gaps for a listing tool.
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?
Purpose is front-loaded in the first sentence with the args listed compactly afterward. Slight overhead from the args-block formatting, but every line 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?
An output schema exists so return values need not be explained, and both parameters are documented. Only pagination and visibility scope are unaddressed, which is a minor gap for a straightforward list 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?
Schema coverage is 0%, so the description must compensate, and it does: it documents both parameters and adds the valuable 'starts with UC' format constraint for channel_id. The limit description is minimal but adequate given the schema's default.
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?
States a specific verb and resource ('List a channel's uploaded videos') plus the ordering ('newest first'), which implicitly distinguishes it from get_top_videos and search_videos. It stops short of naming the sibling alternatives explicitly, so it is clear but not fully differentiated.
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 offers no when-to-use guidance and never names alternatives such as get_top_videos or search_videos. The agent must infer that this is the enumeration path from the tool name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commentsB
List top-level comments for a video.
Args: video_id: The YouTube video id. limit: Maximum number of comments to return.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| video_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 provided, so the description carries the full behavioral burden, yet it discloses almost nothing: no pagination/ordering behavior, no authentication or quota requirements, and no indication of what happens when comments are disabled. "Top-level" is the only behavioral signal.
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 one-line purpose is front-loaded and waste-free. The following Args block is somewhat redundant with the JSON schema, which keeps it out of 5 territory, but it is short and not padded.
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?
An output schema exists, so return values need not be explained. However, with zero annotations and no pagination, ordering, or error-condition context, the definition is only minimally complete for a listing tool that an agent may need to page through.
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 must compensate. It does name and gloss both parameters (video_id as the YouTube video id, limit as the max comments returned), but the glosses largely restate the field names and add no format, range, or default detail beyond the schema's own default of 20.
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?
States a specific verb and resource ("List ... comments for a video") and adds a meaningful scope qualifier ("top-level"), which implicitly distinguishes it from reply_to_comment and moderate_comment. It does not explicitly name those siblings, so it stops short of a 5.
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?
Usage is only implied: the tool lists comments, and the "top-level" qualifier hints that replies are handled elsewhere. There is no explicit when-to-use versus siblings (e.g., moderate_comment) and no stated prerequisites such as whether comments must be enabled or the video public.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_playlistsC
List all playlists belonging to a channel.
Args: channel_id: The channel id (starts with 'UC').
| Name | Required | Description | Default |
|---|---|---|---|
| channel_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 provided, so the description carries the full behavioral burden. It does not disclose pagination behavior, ordering, auth requirements, or whether the listing is exhaustive, all of which matter for a listing tool. It only conveys that the operation targets a channel's 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 short and front-loaded with the core purpose, then the parameter note. The 'Args:' block is slightly awkward for a single parameter but contains 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?
An output schema exists, so return values need not be explained. For a simple single-parameter read tool this is close to adequate, but the absence of any pagination or scope caveat leaves a small gap.
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 must compensate. It does add useful meaning by noting the channel_id format ('starts with UC'), which is real value beyond the bare string type, but it stops there with no further parameter 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?
States a specific verb and resource ('List all playlists belonging to a channel'), which is clearer than the sibling playlist-mutation tools. It does not explicitly distinguish itself from create_playlist/delete_playlist/add_video_to_playlist, relying on the reader to infer the difference from the verb.
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?
There is no guidance on when to use this tool versus alternatives like list_channel_videos or the other playlist tools, and no prerequisites or exclusions are stated. The read-only intent is only implied by the verb 'List'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
moderate_commentB
Moderate a comment (approve, hold, or reject).
Args: comment_id: Target comment id. action: One of 'published', 'heldForReview', 'rejected'.
| Name | Required | Description | Default |
|---|---|---|---|
| action | No | published | |
| comment_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 provided, so the description carries the full behavioral burden. It does not say what approving/holding/rejecting actually does to the comment, whether it is reversible, what permissions are required, or that it is a mutation with 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?
Two short, front-loaded elements with no filler. The 'Args:' block is slightly schema-like but efficient; nothing is wasted.
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?
An output schema exists so return values need not be described, and the params are covered. However, for a mutation tool with zero annotations, the description omits effects, permissions, and reversibility, leaving a meaningful behavioral gap.
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 must compensate, and it does: both parameters are documented, and the action values are enumerated with human-readable glosses ('approve', 'hold', 'reject') that the bare schema lacks. It could go further by explaining the default of 'published'.
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?
States a specific verb (moderate) and resource (comment) and enumerates the three possible outcomes (approve, hold, reject), which maps directly onto the action values. This cleanly separates it from the sibling read/reply tools list_comments and reply_to_comment.
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?
There is no explicit when-to-use or when-not-to-use guidance and no alternatives are named. The purpose implies usage, but nothing tells the agent when moderating is appropriate versus replying or listing, nor any prerequisite (e.g. ownership/permission).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
remove_video_from_playlistC
Remove a video from a playlist.
Args: playlist_id: Target playlist id. video_id: Video id to remove.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| 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, the description must carry the full behavioral burden. It implies mutation but says nothing about whether removal is destructive/permanent, whether it requires write permission on the playlist, whether it is idempotent, or what error surfaces for a missing video.
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 purpose sentence is front-loaded and the argument block is compact. There is some redundancy in the Args lines repeating the parameter names, but no filler prose.
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?
An output schema exists so return values need not be explained, but for a two-required-parameter mutation with zero annotations and 0% schema coverage, the description is missing side effects, permission requirements, and failure modes that an agent needs before calling it.
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 should compensate. Instead it only restates the parameter names ('Target playlist id', 'Video id to remove') with no format, ID-source, or validation detail, adding essentially nothing over the schema.
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 ('remove') and resource ('a video from a playlist'), which cleanly distinguishes it from the sibling 'add_video_to_playlist' and from 'delete_video'/'delete_playlist'. It is clear without being explicitly comparative, so a 4 rather than a 5.
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 versus alternatives, no prerequisites such as needing ownership of the playlist or authenticated channel, and no note on what happens if the video isn't in the playlist. The inverse sibling 'add_video_to_playlist' is never referenced.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reply_to_commentB
Reply to a comment on a video.
Args: video_id: The video id the comment belongs to. comment_id: The comment to reply to. text: Reply text.
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | ||
| video_id | Yes | ||
| comment_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 provided, so the description carries the full behavioral burden for a mutation tool. It does not disclose authentication/permission needs, whether the reply is public, rate limits, or other side effects beyond the basic action.
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 purpose is front-loaded and the Args block is compact and useful. There is no filler or redundant explanation.
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 reply mutation with an output schema, the description covers the call mechanics and parameters. However, with no annotations, it omits important behavioral context such as permissions or visibility of the reply.
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 compensates by documenting all three parameters at a basic level: video_id's association, comment_id's target, and text as reply content. It lacks format or constraint details, so it is minimally adequate rather than rich.
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?
States a specific verb and resource: reply to a comment on a video. It is clearly distinct from siblings like list_comments and moderate_comment, though it does not explicitly route the agent from those alternatives.
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 when-to-use guidance, no prerequisites, and no alternative tools to consider. Usage is only implied by the verb 'Reply'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_videosC
Search YouTube for videos.
Args: query: Search keywords. limit: Maximum number of results (default 20).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | 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 provided, so the description carries the full burden. It does not disclose result ordering, pagination, quota/rate-limit behavior, or any auth requirements for a YouTube search call. It only restates the limit default already present in the schema.
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?
Short, front-loaded, and free of filler. The Args block is somewhat redundant with the schema but serves as a readable parameter summary, keeping it efficient overall.
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?
An output schema exists, so return values need not be explained. But for a search tool with 0% schema coverage, missing pagination, ordering, and query-syntax context leaves the definition only minimally adequate.
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 must compensate, and it does document both parameters (query as search keywords, limit as max results with default 20). However, 'Search keywords' adds little beyond the parameter name, and there is no mention of query syntax, filters, or operators that would matter for a search tool.
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?
States a specific verb and resource ('Search YouTube for videos'), so the agent knows exactly what the tool does. However, it does not differentiate from siblings like get_video_info, list_channel_videos, or get_top_videos, which also surface video data.
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?
There is no guidance on when to search versus using list_channel_videos, get_top_videos, or get_video_info. No prerequisites, no exclusions, no alternative routing is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_video_visibilityB
Change a video's visibility.
Args: video_id: The YouTube video id. visibility: One of 'public', 'unlisted', 'private', 'scheduled'. publish_at: ISO-8601 datetime; required for 'scheduled'.
| Name | Required | Description | Default |
|---|---|---|---|
| video_id | Yes | ||
| publish_at | No | ||
| visibility | 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 behavioral burden and largely fails: it never says who may call it, whether changes apply immediately, what happens to scheduled videos, or that making a video private removes public access. The one useful trait disclosed is that 'scheduled' requires publish_at.
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?
Front-loaded with the one-line purpose followed by a compact Args block; no filler. The Args formatting is slightly boilerplate but each line carries a distinct parameter fact.
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?
An output schema exists so return values needn't be explained, and all parameters are covered. But for a mutation tool with zero annotations, the absence of permission, immediacy, and reversibility context leaves an agent under-informed.
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% with no enums, so the description compensates well by defining video_id, enumerating the four valid visibility values ('public', 'unlisted', 'private', 'scheduled'), and specifying publish_at's ISO-8601 format and its dependency on 'scheduled'. It stops short of clarifying interaction between visibility and publish_at beyond that.
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?
States a specific verb+resource ("Change a video's visibility") that is distinct from siblings like update_video_metadata and delete_video. However, it never names or contrasts those siblings, so the differentiation is inferable rather than explicit.
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 vs. the parameter-overlapping update_video_metadata, nor any prerequisites or side-effect warnings. The only conditional given (publish_at required for 'scheduled') is parameter semantics, not usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_channel_brandingB
Update channel branding: banner, avatar, and profile links.
Args: banner_path: Local path to a new banner image. avatar_path: Local path to a new avatar image. links: List of {'title': ..., 'url': ...} profile links.
| Name | Required | Description | Default |
|---|---|---|---|
| links | No | ||
| avatar_path | No | ||
| banner_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 full behavioral burden but stays silent on key traits: whether this is a partial update (all three params default to null), what happens to omitted fields (preserved or cleared), reversibility, and required auth scope. Only the argument shapes are conveyed.
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 purpose is front-loaded in one line, followed by a compact Args list. Every sentence earns its place; the only minor cost is the Python-style 'Args:' formatting that is slightly boilerplate.
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?
An output schema exists, so return values need not be explained, and all three params are described. However, for a mutation tool with zero annotations, the description leaves gaps around partial-update semantics, permissions, and failure modes.
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 Args block is the only source of parameter meaning — and it delivers: banner_path/avatar_path are 'Local path to a new ... image' and links is a list of {'title','url'} objects. This compensates well for the undocumented schema, though it omits accepted file formats and size limits.
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 and resource ('Update channel branding') and enumerates exactly which sub-resources are touched: banner, avatar, profile links. No sibling tool in the list deals with channel branding, so differentiation is implicit but 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?
There is no guidance on when to use this tool, what permissions or channel ownership is required, or how it relates to sibling tools like get_channel_info. The agent must infer that this is the sole branding mutation path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_video_metadataB
Update the metadata of an existing video.
Args: video_id: The YouTube video id to edit. title: New title (optional). description: New description (optional). tags: New tag list (optional). category_id: New category id (optional). default_language: New default language code, e.g. 'en' (optional).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| video_id | Yes | ||
| category_id | No | ||
| description | No | ||
| default_language | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations at all, so the description carries the full burden and largely drops it. It never states that this is a mutating operation, whether it requires ownership/OAuth scopes or quota, or that omitted fields are left unchanged. Only the '(optional)' markers hint at partial-update semantics.
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?
One front-loaded sentence states the action, followed by a compact Args list. The Args block slightly duplicates parameter names but is justified given the total absence of schema descriptions.
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?
An output schema exists so return values need not be explained, and all parameters are named. However, for a mutation tool with zero annotations, the description omits auth/quota requirements and exact partial-update behavior, leaving meaningful 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 description coverage is 0% and titles are bare ('Video Id', 'Tags'), so the Args block does real work: it identifies video_id as 'The YouTube video id to edit' and gives a format example for default_language ('en'). It covers all six parameters, though tags/category_id get only one-line restatements with no format 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?
States a specific verb+resource ('Update the metadata of an existing video'), which clearly separates it from siblings like upload_video, delete_video, and set_video_visibility. It does not explicitly name an alternative, but the purpose is 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?
No when-to-use guidance, no prerequisites, no mention of alternatives such as set_video_visibility or upload_video. The agent must infer that this is the tool for editing an existing video's descriptive fields.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
upload_videoA
Upload a video file to the authenticated YouTube channel.
Args: file_path: Absolute path to the video file on the local machine. title: Video title (max 100 chars). description: Video description text. tags: Optional list of tags/keywords. visibility: One of 'public', 'unlisted', 'private', 'scheduled'. category_id: YouTube category id (default '22' = People & Blogs). publish_at: ISO-8601 datetime; required when visibility='scheduled'. made_for_kids: COPPA compliance flag. thumbnail_path: Optional path to a custom thumbnail image.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | Yes | ||
| file_path | Yes | ||
| publish_at | No | ||
| visibility | No | private | |
| category_id | No | 22 | |
| description | No | ||
| made_for_kids | No | ||
| thumbnail_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 behavioral burden. It does reveal parameter-driven behaviors — publish_at is required when visibility='scheduled', and made_for_kids is a COPPA compliance flag — but omits upload quota limits, file format/size constraints, and processing latency, which materially affect calling an upload tool.
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?
Front-loaded one-line purpose followed by a structured Args block; appropriate length for a 9-parameter tool. The pseudo-code Args style is slightly heavier than prose but every line carries parameter meaning.
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?
An output schema exists, so return values need not be explained. The description adequately covers the 9 params for correct invocation, with the only real gaps being the missing usage guidance and behavioral caveats noted above.
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% (only titles), so the description must compensate, and it does: all 9 params are documented with meaning, defaults (category_id='22', visibility='private'), the 100-char title limit, valid visibility values, and the conditional requirement on publish_at. A few entries are thin ('description: Video description text'), keeping it below 5.
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?
States a specific verb+resource: 'Upload a video file to the authenticated YouTube channel.' This is unambiguous and distinct from 'update_video_metadata', 'set_video_visibility', and the other siblings, which all operate on already-uploaded 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?
No when-to-use guidance is given. With siblings like update_video_metadata and set_video_visibility, the agent gets no explicit rule for choosing upload_video over them, and no stated prerequisites despite YouTube requiring OAuth auth.
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.
20 tool updates
v0.1.0- First observed
add_video_to_playlist - First observed
create_playlist - First observed
delete_playlist - First observed
delete_video - First observed
get_analytics - First observed
get_channel_info - First observed
get_subscriber_count - First observed
get_top_videos - First observed
get_video_info - First observed
list_channel_videos - First observed
list_comments - First observed
list_playlists - First observed
moderate_comment - First observed
remove_video_from_playlist - First observed
reply_to_comment - First observed
search_videos - First observed
set_video_visibility - First observed
update_channel_branding - First observed
update_video_metadata - First observed
upload_video
TDQS
Scored across 20 tools
Most tools have clearly distinct purposes, but a few channel-video retrieval and channel-info tools have closely related scopes (e.g., get_top_videos vs list_channel_videos, get_channel_info vs get_subscriber_count), which could cause minor misselection.
All tool names use a consistent snake_case verb_noun pattern (get_, list_, create_, update_, delete_, etc.) with no mixed conventions, making them predictable and readable.
20 tools is on the higher side but reasonable for the broad YouTube channel management domain, covering videos, playlists, comments, analytics, and channel branding without obvious redundancy.
Core CRUD exists for videos and playlists, but notable gaps remain: no way to list videos within a playlist, no update_playlist, no update_channel_description/title, and no delete comment. These missing operations could hinder full playlist and channel management.
Maintenance
Related MCP Connectors
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Build, run, schedule, and publish AI video pipelines to YouTube and TikTok from any MCP client.
Give AI agents a creator's video pipeline: Shorts, thumbnails and YouTube publishing.
Hosted MCP for YouTube Studio: uploads, metadata, playlists, comments, analytics, captions.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceGives AI coding agents full control over a YouTube channel with 22 tools for channel management, videos, playlists, comments, search, analytics, thumbnails, and captions.9 npm3MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to control YouTube Live Streaming, including creating broadcasts, managing chat, and monitoring stream health via MCP tools.9 npmMIT
- FlicenseNot gradedqualityDmaintenanceEnables AI models to interact with YouTube content through 18 MCP tools for videos, transcripts, channels, and playlists.11 npm-
- AlicenseAqualityCmaintenanceEnables Claude to control a YouTube channel through MCP, including uploading and editing videos, scheduling releases, and reading channel and video analytics via official APIs.8MIT