YouTube MCP AIO
It is a read-only YouTube research MCP server for retrieving video metadata, transcripts, comments, search results, channel profiles, playlists, and trending content through four tools.
youtube_video_get: fetch one video's metadata, paged transcript, or paged comments.youtube_search: run global, channel-scoped, transcript-scoped, or trending searches.youtube_channel_get: retrieve channel profile, statistics, branding, and uploads playlist selections.youtube_playlist_get: get playlist metadata and signed pages of playlist items.All tools are read-only and idempotent, with bounded responses, opaque signed cursors, quota cost, freshness, and untrusted-content markers.
Provider modes include hybrid (official Data API + transcript fallbacks), official-only, or unofficial keyless operation.
Deployable as local stdio or Google Cloud Run Streamable HTTP; no media upload, account writes, or watch-history modification.
Provides read-only tools for retrieving YouTube video metadata, transcripts, comments, search results, channel info, playlists, and trending data.
Click on "Install 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., "@YouTube MCP AIOGet the transcript of this video: https://youtu.be/abc123"
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.
YouTube MCP AIO
YouTube MCP AIO 1.1.1 is a read-only research server with four task-oriented tools. The small surface is deliberate: video metadata, transcripts, comments, search, channels, playlists, and trending data are exposed through coherent views instead of many low-level API tools.
It supports local stdio and Google Cloud Run Streamable HTTP. Steam remains a separate plugin and service so YouTube schemas are absent when they are irrelevant.
Public tool surface
Tool | Views/scopes |
| One video's |
|
|
| Profile, statistics, branding, and uploads-playlist selections |
| Playlist metadata and a signed page of items |
All tools are read-only and idempotent. Responses share a bounded envelope with provider provenance, quota cost, freshness, warnings, untrusted-field markers, and opaque signed cursors. The default result budget is 12,288 bytes, the hard maximum is 32,768 bytes, and cursors expire after 86,400 seconds. Transcript pages return only availableLanguageCount by default; set options.include_available_languages=true to include the full language list on page one without repeating it on cursor pages. Channel-controlled titles are marked untrusted in video, search, and playlist responses.
Related MCP server: mcp-server-youtube
Providers
The YouTube Data API v3 supplies official public video, search, channel, playlist, comment, and trending data when
YOUTUBE_API_KEYis configured.yt-dlpand YouTube.js form the public transcript fallback chain. Cloud Run adds a pinned local PO-token sidecar foryt-dlp; no account cookies are used.No Google account OAuth bootstrap or account-scoped write route is included in 1.1.0.
Provider modes:
hybrid(default): official public data plus transcript fallbacks;official: Data API only;unofficial: no-key transcript and limited metadata paths only.
Local stdio
Node.js 24 or newer is required. yt-dlp is optional locally.
npm ci
npm run build
npm startGeneric MCP client configuration:
{
"mcpServers": {
"youtube-mcp-aio": {
"type": "stdio",
"command": "node",
"args": ["C:/absolute/path/youtube-mcp-server-AIO/dist/index.js", "--stdio"],
"env": {
"YOUTUBE_API_KEY": "OPTIONAL_RESTRICTED_API_KEY"
}
}
}
}Google Cloud Run
The cloud profile is one public Cloud Run service with an ingress MCP container and a private localhost-only PO-token sidecar. /mcp is bearer- or OAuth-protected and /health is public. Local HTTP defaults remain on /healthz. Firestore makes daily quota guards and one-time OAuth codes consistent across requests, restarts, and up to two instances; the MCP transport remains stateless.
pwsh -File .\scripts\provision-gcp.ps1 -ProjectId "YOUR_PROJECT_ID"
pwsh -File .\scripts\deploy-cloud-run.ps1 -ProjectId "YOUR_PROJECT_ID" -PromoteDeployment requires a clean Git worktree. It builds a full Git SHA tag, resolves the Artifact Registry digest, creates a tagged zero-traffic candidate, checks /health, OAuth discovery, bearer rejection, the exact four-tool contract, a multi-video transcript matrix, bounded comments/replies, and locale-region inference, and promotes only with -Promote. ChatGPT uses Authorization Code + PKCE with a private personal access key; Codex can continue using the existing bearer. See docs/CLOUD_RUN.md.
Cloud plugin configuration lives in .mcp.json. scripts/sync-codex-plugin.ps1 can build local or cloud plugin profiles, but changes the user's plugin installation and is not part of CI or deployment.
Hosts that implement OpenAI Tool Search can defer this server's definitions until YouTube work is actually selected. Enable tool_search and mark the MCP tool as defer_loading in the host/API tool configuration; do not add defer_loading to this plugin's .mcp.json, which follows the Codex plugin packaging contract.
Configuration
Variable | Default | Meaning |
| empty | Enables official public Data API operations |
|
|
|
|
| Transcript fallback order |
|
| Local executable; image uses |
|
| Use the localhost PO-token provider; Cloud Run sets this with its pinned sidecar |
|
| Default trending region when neither |
|
| Preferred transcript/result language |
|
| Bounded process-local cache freshness |
|
| Conservative ordinary Data API guard |
|
| Conservative search-call guard |
|
| Cloud deployment sets |
| empty | Required by the Firestore quota adapter |
| bearer fallback | Cursor-signing secret |
|
| Cursor validity |
|
| Default result limit; hard maximum 32,768 |
| auto | stdio locally, HTTP on Cloud Run; CLI flag wins |
|
| Streamable HTTP path |
|
| Public health path |
|
| Maximum request body (2 MiB) |
|
| Node request timeout aligned with Cloud Run |
| empty | Required fixed bearer in HTTP mode |
|
| Enable personal ChatGPT OAuth 2.1 endpoints |
| empty | Private key entered only on the hosted authorization page |
| empty | Signs audience-bound access and refresh tokens |
|
| Cloud deployment uses Firestore for one-time codes |
| empty | Stable HTTPS URL used for Host validation |
| empty | Additional exact candidate/stable hosts |
See .env.example for the complete local template.
Security and policy
Browser Origin and Host are exact-allowlisted in HTTP mode.
YouTube titles, descriptions, comments, and transcripts are marked as untrusted content.
API and bearer secrets are injected by service-specific Secret Manager IAM bindings at numeric versions.
The existing fixed bearer and personal OAuth 2.1 flow are for one private operator. OAuth accepts only ChatGPT client metadata URLs, requires PKCE S256 and the exact MCP audience, and is not a shared multi-user identity system.
The default server does not upload/download media, use browser cookies, modify watch history, or perform account writes.
localeonly supplies a trending region when it contains an explicit region subtag such asko-KR;filters.regionalways wins.
Development
npm ci
npm run checkPlugin routing fixtures under docs/evals are review artifacts. They have not been executed against newly created Codex tasks.
Documents
MIT License. See LICENSE.
Available Tools
4 toolsyoutube_channel_getCRead-onlyIdempotent
Resolve and get one YouTube channel profile.
| Name | Required | Description | Default |
|---|---|---|---|
| select | No | ||
| channel | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the operation as read-only, idempotent, non-destructive, and open-world, so the safety profile is well covered. The description adds only the word 'Resolve' as a behavioral hint, but does not explain what input forms are accepted or what 'resolve' entails. No contradiction exists, but the description contributes little beyond the annotations.
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, efficient sentence that front-loads the operation and resource. It contains no filler, but it is so terse that it omits important usage and parameter context, making it concise at the expense of completeness.
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 two parameters, one required, and the description does not sufficiently explain either. The annotations cover safety and idempotency, but the lack of parameter semantics is a notable gap. Given the absence of an output schema and a low-complexity tool, the description should have at least clarified what 'Resolve' means and how to specify the channel.
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 provides no parameter-level meaning. It does not explain what the 'channel' parameter accepts (ID, handle, URL, etc.) or what the 'select' parameter controls. With zero coverage and no compensating description, this is a major gap for an agent trying to call the tool correctly.
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 ('Resolve and get') and resource ('one YouTube channel profile'), clearly indicating this tool fetches a single channel. It distinguishes itself from sibling tools by resource type (channel vs video/playlist/search). The term 'Resolve' is slightly ambiguous but generally signals that the channel can be identified in multiple forms.
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 conveys that this tool is for retrieving one YouTube channel, which is a clear usage context. However, it does not explicitly address when to use this instead of youtube_search, youtube_video_get, or youtube_playlist_get, nor does it mention any exclusions or prerequisites for resolving a channel.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_playlist_getBRead-onlyIdempotent
Get playlist metadata or one signed page of playlist items.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| cursor | No | ||
| playlist | Yes | ||
| include_items | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds useful behavior about returning either metadata or a signed page of playlist items, but does not clarify pagination behavior, response shape, or any special requirements around the 'signed page' concept.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words and front-loads the core purpose. Minor ambiguity around 'signed page' prevents a perfect score, but the overall structure is efficient.
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?
There is no output schema, so the description carries the burden of explaining return behavior; it does broadly say what the tool returns. However, it does not describe the response format, cursor usage, or how include_items changes the result, leaving some gaps for an agent trying to 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?
Schema description coverage is 0%, so the description must compensate for parameter meaning. It only hints at include_items through the metadata-versus-items distinction and does not explain the playlist identifier, cursor, or limit semantics. This is insufficient for four parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool retrieves playlist data, either metadata or a page of playlist items. The playlist resource orientation distinguishes it from sibling tools for videos, channels, and search, though the phrase 'one signed page' is slightly ambiguous.
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 context is implied through the resource name and sibling tool names: use this when you need playlist metadata or items rather than video/channel/search data. However, there is no explicit guidance on when to choose this tool over alternatives or when to set include_items versus use pagination.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_searchARead-onlyIdempotent
Search globally, within a channel or transcript, or get trending videos.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| scope | No | global | |
| cursor | No | ||
| locale | No | ||
| within | No | ||
| filters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds no further behavioral context such as pagination behavior, result shape, or how multiple scopes interact, so it contributes little beyond the annotations.
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 front-loaded sentence with no filler. It efficiently communicates the core purpose and the main modes of operation, earning its place 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?
For a tool with seven parameters, multiple scope modes, nested schema structures, and no output schema, the one-line description is too sparse. It omits details about pagination, locale handling, the meaning of 'within' in transcript/channel scopes, and what a search result contains, leaving the agent under-informed for complex calls.
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 for seven undocumented parameters. It only hints at scope-related parameters ('within a channel or transcript', 'get trending videos') and says nothing about query, limit, cursor, locale, or filters. This is insufficient parameter guidance.
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 action ('Search') on a clear resource (YouTube) and enumerates the distinct modes: global, within a channel, within a transcript, or trending videos. This clearly distinguishes it from sibling tools that fetch a single video, channel, or playlist.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is for searching rather than retrieving known entities, and the scope enum adds mode context, but it does not explicitly say when to prefer this tool over youtube_video_get, youtube_channel_get, or youtube_playlist_get. No exclusions or alternative-selection guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
youtube_video_getARead-onlyIdempotent
Get one video's metadata, transcript page, or comments page.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | metadata | |
| limit | No | ||
| video | Yes | ||
| cursor | No | ||
| locale | No | ||
| options | No | ||
| max_chars | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description is consistent with those annotations but adds little behavioral detail beyond the three views; it does not mention pagination, cursor usage, rate limits, or other operational behaviors.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, front-loaded with the action and resource, and contains no filler or redundancy. Every word contributes to the core purpose.
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 tool with seven parameters, a nested options object, and no output schema, the description is too thin. It does not explain how the views differ operationally, what cursor-based pagination means, how limit and max_chars apply, or what values video should take.
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 for seven undocumented parameters. It only loosely maps to the 'view' parameter by naming metadata, transcript, and comments, while leaving video ID format, limit, cursor, locale, options, and max_chars unexplained.
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 ('Get') and resource ('one video's metadata, transcript page, or comments page'), clearly identifying what the tool operates on. It also differs from sibling tools by restricting scope to a single video rather than search results, channels, or 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 implies usage for a specific video when metadata, transcript, or comments are needed, but it does not explicitly state when to choose this tool over youtube_search, youtube_channel_get, or youtube_playlist_get. There is no exclusion or alternative guidance, only the resource scope.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool targets a distinct primary resource or action: video, search, channel, and playlist. The descriptions make it clear which resource to use, and there is little overlap in their intended purposes.
Three tools follow the youtube_<resource>_get pattern, while youtube_search uses a verb-style name. The shared youtube_ prefix and clear resource naming keep the set mostly consistent and predictable.
Four tools is on the smaller side for a self-described all-in-one YouTube server, but each tool is broad enough to earn its place. The count is reasonable for a read-only YouTube access tool.
Core read-only YouTube workflows are covered: video details, transcripts, comments, search, channel profiles, and playlist items. There are minor gaps such as explicit comment listing or channel upload feeds, but these can be worked around via search and video_get.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
YouTube public video, comment, reply, channel, search, and speech-to-text transcript tools.
YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.
YouTube transcripts, search, channel/playlist listings and upload tracking for AI agents. No signup.
YouTube video search with transcript extraction as first-class output.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI language models to interact with YouTube content through a standardized interface, providing tools for retrieving video information, transcripts, channel analytics, and trend analysis.51965MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to search videos, read channels, browse playlists, fetch comments, and get transcripts from YouTube using the YouTube Data API v3 and InnerTube API for captions.2GPL 3.0
- FlicenseNot gradedqualityCmaintenanceEnables AI assistants to search videos, channels, and playlists, retrieve video metadata, transcripts, and comments via the YouTube Data API v3.73
- AlicenseAqualityBmaintenanceEnables researching YouTube channels and videos by listing uploads, reading transcripts, extracting frames, and searching, without needing a YouTube API key.4MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/BK927/youtube-mcp-server-AIO'
If you have feedback or need assistance with the MCP directory API, please join our Discord server