HasData YouTube
Search YouTube and read video, channel and transcript data as JSON. No Google Cloud project.
Should I use this
Quality & Safety
Findings (8)
- LOWin hasdata_youtube_channel_getYoutubeChannel
- LOWin hasdata_youtube_channel_getYoutubeChannel
- LOWin hasdata_youtube_search_getYoutubeSearchResults
- LOWin hasdata_youtube_search_getYoutubeSearchResults
- LOWin hasdata_youtube_transcript_getYoutubeTranscript
- LOWin hasdata_youtube_transcript_getYoutubeTranscript
- LOWin hasdata_youtube_video_getYoutubeVideo
- LOWin hasdata_youtube_video_getYoutubeVideo
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"youtube": {
"command": "npx",
"args": [
"@hasdata/youtube-mcp"
]
}
}
}Runnable packages
1.0.9stdio1.0.9stdioRemote endpoints
https://mcp.hasdata.com/api/mcp?apis=youtubestreamable-httphttps://mcp.hasdata.com/mcp?apis=youtubestreamable-httpWhat it can do
Tool inventory
Tools (4)
🟢hasdata_youtube_channel_getYoutubeChannel(channelId, tab, gl, hl, deviceType, ...)
Get YouTube Channel Data Fetches a YouTube channel by its ID (`UC…`) or handle (`@name`) and returns structured data for any channel tab — `featured`/Home, `videos`, `shorts`, `streams`, `playlists`, `posts`, `podcasts`, `releases`, `store` (desktop only), `about`. Returns channel identity (title, description, avatar, banner), subscriber count, country, join date, total-view count and social links (on the `about` tab), and the items on the requested tab (videos with views and publish date, playlists, posts, podcasts, etc.). Use to monitor competitor channels, build creator/brand directories, track posting cadence and growth signals, or feed `videoId` into the YouTube Video / Transcript endpoints.
Input Schema
{
"type": "object",
"properties": {
"channelId": {
"type": "string",
"description": "YouTube channel identifier — either the canonical channel ID (`UC…`, 24 chars) or the public handle starting with `@` (e.g. `@PewDiePie`). Legacy `/c/<custom>` and `/user/<name>` URL slugs are also accepted."
},
"tab": {
"type": "string",
"enum": [
"featured",
"videos",
"shorts",
"streams",
"playlists",
"posts",
"community",
"podcasts",
"releases",
"about",
"store"
],
"description": "Channel tab to scrape. Each tab returns a different content shape:\n- `featured` (default) — channel Home page (channel trailer + curated rows)\n- `videos` — uploaded long-form videos\n- `shorts` — Shorts feed\n- `streams` — past and upcoming live streams\n- `playlists` — created and saved playlists\n- `posts` / `community` — community posts\n- `podcasts` — podcast episodes\n- `releases` — music releases\n- `about` — channel description, links, stats\n- `store` — channel merch\n"
},
"gl": {
"type": "string",
"description": "The two-letter country code for the country you want to limit the search to. Provide one exact documented value (245 allowed), e.g. `ac`, `af`."
},
"hl": {
"type": "string",
"description": "The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`."
},
"deviceType": {
"type": "string",
"enum": [
"desktop",
"mobile"
],
"description": "Device type for the request."
},
"paginationToken": {
"type": "string",
"description": "Token returned in the previous response to fetch the next page of results."
}
},
"required": [
"channelId"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢hasdata_youtube_search_getYoutubeSearchResults(q, gl, hl, deviceType, sp, ...)
Get YouTube Search Results Searches YouTube for a query and returns the full results page split into `videoResults` (videoId, title, views, length, publish date, chapters, channel info, extensions like 4K/CC), `channelResults` (channelId, handle, subscribers, verified flag), `shortsResults` / `inlineShortsResults`, themed `shelves` (e.g. 'People also watched', 'Latest from <creator>'), `adsResults` and `sponsoredResults` (advertiser, landing URL, position), plus `searchInformation.totalResults`. Each block preserves its `positionOnPage` so the original layout is reconstructable. Use for competitor and topic monitoring, brand-mention tracking, ad-placement intelligence, creator discovery, trend research, or to feed `videoId` / `channelId` into the YouTube Video, Channel, or Transcript endpoints.
Input Schema
{
"type": "object",
"properties": {
"q": {
"type": "string",
"description": "Free-text search query, exactly as a user would type it into the YouTube search box."
},
"gl": {
"type": "string",
"description": "The two-letter country code for the country you want to limit the search to. Provide one exact documented value (245 allowed), e.g. `ac`, `af`."
},
"hl": {
"type": "string",
"description": "The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`."
},
"deviceType": {
"type": "string",
"enum": [
"desktop",
"mobile"
],
"description": "Device type for the request."
},
"sp": {
"type": "string",
"description": "Raw YouTube `sp` filter token, copied verbatim from a YouTube search URL (e.g. `EgIQAQ%253D%253D`). When provided, it overrides `sortBy`, `date`, `videoType`, `length`, and `filters[]`. Use only if you need a YouTube-side filter that this API does not expose as a structured parameter."
},
"sortBy": {
"type": "string",
"enum": [
"relevance",
"popularity",
"rating",
"date",
"views"
],
"description": "Sort order applied to the results page. `relevance` (default) — best match for the query; `date` — newest first; `views` — most viewed first; `rating` — highest rated first; `popularity` — trending/most popular."
},
"date": {
"type": "string",
"enum": [
"hour",
"today",
"week",
"month",
"year"
],
"description": "Limit results to videos uploaded within this time window relative to now."
},
"videoType": {
"type": "string",
"enum": [
"video",
"shorts",
"channel",
"playlist",
"movie"
],
"description": "Restrict results to a single YouTube content type — regular videos, Shorts, channels, playlists, or movies."
},
"length": {
"type": "string",
"enum": [
"under4",
"between420",
"plus20"
],
"description": "Filter by video duration bucket:\n- `under4` — under 4 minutes\n- `between420` — 4 to 20 minutes\n- `plus20` — over 20 minutes\n"
},
"filters__": {
"type": "array",
"items": {
"type": "string",
"enum": [
"hd",
"subtitles",
"cc",
"d3",
"live",
"bought",
"k4",
"d360",
"location",
"hdr",
"vr180"
]
},
"description": "Feature flags to require on results. Multiple values are combined with AND (every flag must apply).\n\n- `hd` — HD quality\n- `k4` — 4K quality\n- `hdr` — HDR\n- `subtitles` — has subtitles/closed captions\n- `cc` — Creative Commons license\n- `d3` — 3D video\n- `d360` — 360° video\n- `vr180` — VR180 video\n- `live` — currently live\n- `bought` — purchased/paid content\n- `location` — has a geographic location tag\n"
},
"paginationToken": {
"type": "string",
"description": "Token returned in the previous response to fetch the next page."
}
},
"required": [
"q"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢hasdata_youtube_transcript_getYoutubeTranscript(v, languageCode, type)
Get YouTube Video Transcript Returns the timed transcript (subtitles) of a YouTube video by its 11-character `videoId`. `languageCode` selects the track (e.g. `en`, `de-DE`, `pt-BR`); `type=asr` requests the auto-generated speech-recognition track. Each segment in `transcript[]` carries `startMs`, `endMs`, `snippet`, and a formatted `startTimeText`. The response also includes `availableTranscripts[]` listing every track on the video (language name + code, `type: asr` for auto-generated, `selected: true` for the one returned) so callers can discover what else is available. Use to feed a video's spoken content into RAG/LLM pipelines, generate summaries or chapter outlines, build searchable archives, run translation or accessibility workflows, or analyze talking points across a creator's catalog (pair with the YouTube Channel endpoint to enumerate videos, then fetch transcripts).
Input Schema
{
"type": "object",
"properties": {
"v": {
"type": "string",
"description": "11-character YouTube video ID — the value of the `v=` query parameter in a watch URL (e.g. `dQw4w9WgXcQ` for `https://www.youtube.com/watch?v=dQw4w9WgXcQ`)."
},
"languageCode": {
"type": "string",
"description": "BCP-47 / YouTube language code of the transcript track to return (e.g. `en`, `de`, `en-US`, `pt-BR`). Must match a track that the video actually has. When omitted, the video's default language track is returned."
},
"type": {
"type": "string",
"enum": [
"asr"
],
"description": "Set to `asr` to fetch the YouTube auto-generated (speech-recognition) track. Omit to fetch the human-authored track for `languageCode` when one exists."
}
},
"required": [
"v"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢hasdata_youtube_video_getYoutubeVideo(v, gl, hl, deviceType)
Get YouTube Video Data Fetches a single YouTube video by its 11-character `videoId`. Returns title, thumbnail, raw + normalized views and likes, `lengthSeconds`, publish date, category, keywords/tags, `isFamilySafe` / `isUnlisted` flags, the uploading channel (id, link, subscribers, avatar), the full description with parsed links and hashtags, available `captions` tracks (with `kind: asr` for auto-generated), Content-ID `music` matches (song/artist/album), creator `socialLinks`, and the `relatedVideos`, `endScreenVideos`, and `relatedShorts` rails. Use to enrich a video URL with metadata, monitor view/like growth, extract music or sponsor/affiliate links, gather features for recommender or RAG pipelines, or detect caption tracks before calling the YouTube Transcript endpoint.
Input Schema
{
"type": "object",
"properties": {
"v": {
"type": "string",
"description": "11-character YouTube video ID — the value of the `v=` query parameter in a watch URL (e.g. `dQw4w9WgXcQ` for `https://www.youtube.com/watch?v=dQw4w9WgXcQ`)."
},
"gl": {
"type": "string",
"description": "The two-letter country code for the country you want to limit the search to. Provide one exact documented value (245 allowed), e.g. `ac`, `af`."
},
"hl": {
"type": "string",
"description": "The two-letter language code for the language you want to use for the search. Provide one exact documented value (159 allowed), e.g. `af`, `ak`."
},
"deviceType": {
"type": "string",
"enum": [
"desktop",
"mobile"
],
"description": "Device type for the request."
}
},
"required": [
"v"
],
"additionalProperties": false,
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence