ytt-mcp
Provides tools for retrieving YouTube video transcripts, supporting manual and autogenerated caption tracks with language priority and timed text snippets.
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., "@ytt-mcpGet the transcript for YouTube video dQw4w9WgXcQ"
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.
ytt-mcp
A deliberately tiny, single-user MCP server with one tool: get_transcript. It runs on a Cloudflare Worker and protects the MCP endpoint with a standards-compliant OAuth flow backed by one password.
It follows the transcript retrieval flow used by jdepoix/youtube-transcript-api: load the watch page, call YouTube's InnerTube player API, prefer a manual caption track over an autogenerated one, then fetch and parse the timed-text XML. That project is the reference and is MIT licensed; this Worker is a small TypeScript implementation using only fetch.
Run locally
Install dependencies and create your local secret file:
pn install
cp .dev.vars.example .dev.varsSet a long password in .dev.vars, then start the Worker:
pn devThe MCP endpoint is:
http://localhost:8787/mcpAn unauthenticated request returns 401 and OAuth discovery information. The easiest way to test the complete browser login is with the MCP Inspector:
pn dlx @modelcontextprotocol/inspectorIn the Inspector, select Streamable HTTP, enter http://localhost:8787/mcp, and connect. Its OAuth flow opens the ytt-mcp authorization page. Enter the password from .dev.vars.
Related MCP server: YT Transcripter Multilingual MCP
Deploy
Create the production KV namespace:
pn exec wrangler kv namespace create OAUTH_KVReplace the placeholder id under kv_namespaces in wrangler.jsonc with the returned ID (this repo is already configured with its production namespace). Set the production password as an encrypted Worker secret:
pn exec wrangler secret put MCP_PASSWORDDeploy manually:
pn deployPushes to master also deploy through .github/workflows/deploy.yml. Add these secrets under GitHub repository → Settings → Secrets and variables → Actions:
CLOUDFLARE_API_TOKEN— a Cloudflare API token with Workers Scripts: Edit and Workers KV Storage: Edit permissions.CLOUDFLARE_ACCOUNT_ID— your Cloudflare account ID.
The MCP_PASSWORD remains a Cloudflare Worker secret configured with Wrangler; do not add it to the GitHub workflow.
Configure your MCP client with:
https://ytt-mcp.<your-subdomain>.workers.dev/mcpDo not put the production password in wrangler.jsonc, .dev.vars.example, or Git. Consider adding a Cloudflare rate-limiting rule for /authorize to reduce password-guessing attempts.
Tool
get_transcript
{
"video_id": "dQw4w9WgXcQ",
"languages": ["en"]
}languages is optional and defaults to ["en"]. Codes are checked in priority order. For each code, a manually created transcript is preferred over an autogenerated transcript, matching the reference project.
The result is JSON text containing video/language metadata and snippets with text, start, and duration.
Authentication
@cloudflare/workers-oauth-provider handles OAuth discovery, dynamic client registration, PKCE, authorization codes, access tokens, refresh tokens, and bearer-token validation. OAuth data is stored in the OAUTH_KV namespace.
The custom /authorize page asks for one shared password and maps every successful login to the fixed user owner. There are no accounts or tenants. Existing access tokens remain valid after changing the password until they expire or are removed from KV.
YouTube can rate-limit or block cloud data-center IPs, and some videos require a PO token; those cases are returned as MCP tool errors.
ChatGPT compatibility patch
A two-line pnpm patch (in patches/) widens the OAuth library's CIMD handling so connectors that declare token_endpoint_auth_method: "private_key_jwt" (e.g. ChatGPT) are accepted and treated as public clients:
CIMD_ALLOWED_AUTH_METHODSgains"private_key_jwt"so the metadata document passes validation.The negotiated auth method maps
private_key_jwt→"none", so the token exchange works.
Security implications: the client's JWT assertion is not verified — the flow is protected instead by PKCE (S256, enforced for public clients), single-use authorization codes stored in KV, and redirect_uri validation against the client's metadata document. This is a deliberate trade-off for a single-password personal server. Re-apply with pnpm install after any upgrade of @cloudflare/workers-oauth-provider.
This server cannot be installed
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 Servers
- Flicense-qualityDmaintenanceEnables fetching YouTube video transcripts with Google OAuth 2.0 authentication. Supports both manual and auto-generated transcripts with optional timestamps from video URLs or IDs.
- Flicense-qualityDmaintenanceEnables transcription of YouTube videos in multiple languages through an MCP server interface.
- AlicenseAqualityDmaintenanceEnables users to extract, search, and analyze YouTube video transcripts directly within MCP-compatible clients. It supports advanced features like time-chunked summaries, keyword searching with surrounding context, and batch processing for multiple videos.4MIT
- AlicenseAqualityAmaintenanceMCP server that fetches YouTube video transcripts and optionally summarizes them. Supports multiple transcript formats (text, JSON, SRT, WebVTT), multi-language retrieval, and flexible YouTube URL parsing.64MIT
Related MCP Connectors
YouTube MCP — wraps the YouTube Data API v3 (BYO API key)
YouTube transcripts, subtitles, and video metadata as structured JSON via an Apify Actor.
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
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/Jawkx/ytt-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server