Skip to main content
Glama

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

youtube_video_get

One video's metadata, paged transcript, or paged comments; replies are opt-in and bounded by reply_limit

youtube_search

global, channel, transcript, or trending search

youtube_channel_get

Profile, statistics, branding, and uploads-playlist selections

youtube_playlist_get

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_KEY is configured.

  • yt-dlp and YouTube.js form the public transcript fallback chain. Cloud Run adds a pinned local PO-token sidecar for yt-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 start

Generic 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" -Promote

Deployment 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

YOUTUBE_API_KEY

empty

Enables official public Data API operations

YOUTUBE_PROVIDER_MODE

hybrid

hybrid, official, or unofficial

YOUTUBE_TRANSCRIPT_PROVIDERS

yt-dlp,youtubejs

Transcript fallback order

YT_DLP_PATH

yt-dlp

Local executable; image uses /opt/yt-dlp/bin/yt-dlp

YT_DLP_POT_PROVIDER_ENABLED

false

Use the localhost PO-token provider; Cloud Run sets this with its pinned sidecar

YOUTUBE_DEFAULT_REGION

US

Default trending region when neither filters.region nor a locale region is present

YOUTUBE_DEFAULT_LANGUAGE

en

Preferred transcript/result language

YOUTUBE_CACHE_TTL_SECONDS

900

Bounded process-local cache freshness

YOUTUBE_API_DAILY_BUDGET

9000

Conservative ordinary Data API guard

YOUTUBE_SEARCH_DAILY_BUDGET

90

Conservative search-call guard

YOUTUBE_QUOTA_STORE

memory

Cloud deployment sets firestore

GOOGLE_CLOUD_PROJECT

empty

Required by the Firestore quota adapter

YOUTUBE_CURSOR_SECRET

bearer fallback

Cursor-signing secret

YOUTUBE_CURSOR_TTL_SECONDS

86400

Cursor validity

YOUTUBE_MAX_RESULT_BYTES

12288

Default result limit; hard maximum 32,768

MCP_TRANSPORT

auto

stdio locally, HTTP on Cloud Run; CLI flag wins

MCP_PATH

/mcp

Streamable HTTP path

HEALTH_PATH

/healthz locally; /health on Cloud Run

Public health path

HTTP_MAX_BODY_BYTES

2097152

Maximum request body (2 MiB)

HTTP_REQUEST_TIMEOUT_MS

300000

Node request timeout aligned with Cloud Run

MCP_ACCESS_TOKEN

empty

Required fixed bearer in HTTP mode

MCP_OAUTH_ENABLED

false

Enable personal ChatGPT OAuth 2.1 endpoints

MCP_OAUTH_LOGIN_SECRET

empty

Private key entered only on the hosted authorization page

MCP_OAUTH_SIGNING_SECRET

empty

Signs audience-bound access and refresh tokens

MCP_OAUTH_STORE

memory

Cloud deployment uses Firestore for one-time codes

PUBLIC_BASE_URL

empty

Stable HTTPS URL used for Host validation

MCP_ALLOWED_HOSTS

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.

  • locale only supplies a trending region when it contains an explicit region subtag such as ko-KR; filters.region always wins.

Development

npm ci
npm run check

Plugin 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 tools
youtube_channel_getC
Read-onlyIdempotent

Resolve and get one YouTube channel profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
selectNo
channelYes

TDQS

C2.9/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_getB
Read-onlyIdempotent

Get playlist metadata or one signed page of playlist items.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
playlistYes
include_itemsNo

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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_video_getA
Read-onlyIdempotent

Get one video's metadata, transcript page, or comments page.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNometadata
limitNo
videoYes
cursorNo
localeNo
optionsNo
max_charsNo

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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

A3.5/5.0
Disambiguation5/5

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.

Naming Consistency4/5

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.

Tool Count4/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

Latest Blog Posts

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