YouTube Transcript & Search MCP Server
What this MCP does
Searches YouTube, retrieves video and channel information, and obtains individual or bulk video transcripts.
Tools
Input schema
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'id returned by submit_transcripts_job'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'status': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'credits': {'type': 'integer'}, 'metered': {'type': 'boolean'}, 'user_id': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['video'], 'properties': {'kind': {'enum': ['manual', 'auto'], 'type': 'string', 'description': 'Track kind. Omit to prefer a manual track and fall back to auto'}, 'lang': {'type': 'string', 'description': "Language code of the track, e.g. 'en', 'de'. Default 'en'."}, 'video': {'type': 'string', 'description': 'YouTube video id or URL'}, 'format': {'enum': ['text', 'json', 'srt', 'vtt', 'srv3'], 'type': 'string', 'description': "'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment)"}, 'segment': {'type': 'integer', 'maximum': 5000, 'minimum': 20, 'description': 'Max characters per segment. Raise it when chunking the transcript for embeddings or retrieval — 500-1500 gives chunks with enough context; lower it for subtitle-sized lines. Left out, an auto-generated track is cut into ~180-character segments and a manual one is returned exactly as its author broke it, so pass this whenever you need one size regardless of which track answers.'}, 'video_metadata': {'type': 'boolean', 'description': "Include the video's title, channel, duration and views alongside the transcript. Replaces a separate get_video_info call — same one credit either way."}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'kind': {'type': 'string'}, 'language': {'type': 'string'}, 'metadata': {'type': 'object'}, 'video_id': {'type': 'string'}, 'transcript': {'description': 'format=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format'}, 'available_langs': {'type': 'array'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['job_id'], 'properties': {'job_id': {'type': 'string', 'description': 'id returned by submit_transcripts_job'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'done': {'type': 'integer'}, 'count': {'type': 'integer'}, 'ready': {'type': 'integer'}, 'failed': {'type': 'integer'}, 'status': {'type': 'string'}, 'pending': {'type': 'integer'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['job_id', 'video_id'], 'properties': {'job_id': {'type': 'string', 'description': 'id returned by submit_transcripts_job'}, 'video_id': {'type': 'string', 'description': 'one of the video ids the job was submitted with'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'status': {'type': 'string'}, 'video_id': {'type': 'string'}, 'transcript': {'description': 'format=json: array of {text, start, duration} segments (seconds); text/srt/vtt/srv3: one string in that format'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['job_id'], 'properties': {'limit': {'type': 'integer', 'description': 'Entries per page, 1-500 (default 100)'}, 'job_id': {'type': 'string', 'description': 'id returned by submit_transcripts_job'}, 'next_page_token': {'type': 'string', 'description': 'Token from a previous result'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'count': {'type': 'integer'}, 'results': {'type': 'array'}, 'has_more': {'type': 'boolean'}, 'next_page_token': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['id'], 'properties': {'id': {'type': 'string', 'description': 'YouTube video id or URL'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'title': {'type': 'string'}, 'available_langs': {'type': 'array'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['name'], 'properties': {'name': {'type': 'string', 'description': '@handle, channel name, UC... channel id or channel URL'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'videos': {'type': 'array'}, 'channel': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'name': {'type': 'string', 'description': '@handle, channel name, UC... channel id or channel URL (required unless paginating)'}, 'limit': {'type': 'integer', 'description': 'Page size. Up to 100, or up to 500 with ids_only'}, 'ids_only': {'type': 'boolean', 'description': 'Return video_ids[] instead of full video objects'}, 'next_page_token': {'type': 'string', 'description': 'Token from a previous result'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'count': {'type': 'integer'}, 'videos': {'type': 'array'}, 'channel': {'type': 'string'}, 'has_more': {'type': 'boolean'}, 'video_ids': {'type': 'array'}, 'next_page_token': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'id': {'type': 'string', 'description': 'PL... playlist id or URL (required unless paginating)'}, 'limit': {'type': 'integer', 'description': 'Page size. Up to 100, or up to 500 with ids_only'}, 'ids_only': {'type': 'boolean', 'description': 'Return video_ids[] instead of full video objects'}, 'next_page_token': {'type': 'string', 'description': 'Token from a previous result'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'count': {'type': 'integer'}, 'videos': {'type': 'array'}, 'has_more': {'type': 'boolean'}, 'playlist': {'type': 'string'}, 'video_ids': {'type': 'array'}, 'next_page_token': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'Query to search within the channel'}, 'name': {'type': 'string', 'description': '@handle, channel name, UC... channel id or channel URL'}, 'limit': {'type': 'integer', 'description': 'Results per page, 1-100 (default 30)'}, 'next_page_token': {'type': 'string', 'description': 'Token from a previous result'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'videos': {'type': 'array'}, 'channel': {'type': 'string'}, 'has_more': {'type': 'boolean'}, 'next_page_token': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['id', 'q'], 'properties': {'q': {'type': 'string', 'description': 'Substring to match in the video title'}, 'id': {'type': 'string', 'description': 'PL... playlist id or URL'}, 'limit': {'type': 'integer', 'description': 'Max matches to return, 1-100 (default 30)'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'truncated': {'type': 'boolean'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': [], 'properties': {'q': {'type': 'string', 'description': 'Search query (required unless paginating)'}, 'type': {'enum': ['video', 'channel'], 'type': 'string', 'description': "Default 'video'"}, 'limit': {'type': 'integer', 'description': 'Results per page, 1-50 (default 20)'}, 'next_page_token': {'type': 'string', 'description': 'Token from a previous result'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'has_more': {'type': 'boolean'}, 'next_page_token': {'type': 'string'}}, 'additionalProperties': True}
Input schema
{'type': 'object', 'required': ['videos'], 'properties': {'kind': {'enum': ['manual', 'auto'], 'type': 'string', 'description': 'Track kind. Omit to prefer a manual track and fall back to auto'}, 'lang': {'type': 'string', 'description': "Language code for every video, e.g. 'en'. Default 'en'."}, 'format': {'enum': ['text', 'json', 'srt', 'vtt', 'srv3'], 'type': 'string', 'description': "'text' = plain text (default), 'json' = timed segments, 'srt'/'vtt' = subtitle file body, 'srv3' = raw YouTube XML (srv3 does not combine with segment)"}, 'videos': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Video ids or URLs, up to 4000. Duplicates are collapsed.'}, 'segment': {'type': 'integer', 'maximum': 5000, 'minimum': 20, 'description': "Max characters per segment, for every video in the job. Raise it to 500-1500 when the transcripts are going into embeddings or retrieval. Left out, an auto-generated track is cut into ~180-character segments and a manual one keeps its author's own lines — so pass this when the whole job has to come back at one size."}, 'video_metadata': {'type': 'boolean', 'description': "Include each video's title, channel and duration alongside its transcript. Replaces a get_video_info call per video and costs nothing extra."}, 'idempotency_key': {'type': 'string', 'description': 'Optional. Resubmitting the same list with the same key returns the SAME job instead of opening a second one and charging twice.'}}, 'additionalProperties': False}
Output schema
{'type': 'object', 'properties': {'count': {'type': 'integer'}, 'job_id': {'type': 'string'}, 'status': {'type': 'string'}, 'credits': {'type': 'object'}}, 'additionalProperties': True}
Recent tool changes
Similar MCP servers
Social Fetch
Retrieves public content and metadata from social networks, music services, Facebook Marketplace, events, profiles, posts, commen…
Heista
Analyzes video advertising, builds brand intelligence profiles, researches markets, and generates advertising scripts and creativ…
VarynForge
Supports SEO research and content planning through niche analysis, competitor and keyword research, opportunity discovery, and wr…
Tmdb
Provides TMDB-based movie, television, and people discovery, metadata, credits, recommendations, videos, and trend-related entert…
AfterLaunch: the agentic growth marketing engine
Runs growth-marketing workflows covering SEO, AI-search visibility, competitor analysis, content planning, distribution channels,…
Setlist Fm
Provides setlist.fm concert research by artist, venue, city, country, and date, including artist records, concert histories, and …
Watchmode
Searches streaming catalogs and availability across regions, services, genres, networks, titles, and release dates.
Vimeo
Searches and retrieves public Vimeo videos, channels, categories, and related metadata.