YouTube MCP Server
YouTube MCP Server
A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf and any other MCP client four read-only YouTube tools. Search YouTube, read video and channel data, and pull transcripts, with no Google Cloud project and no YouTube Data API key.
https://mcp.hasdata.com/api/mcp?apis=youtube
Содержание
Related MCP server: YouTube MCP Server
Что вам нужно
Клиент MCP, который поддерживает streamable HTTP с пользовательскими заголовками. Ключ HasData API из панели управления — его можно создать бесплатно. Больше ничего не нужно. Это удалённый сервер. Не нужно устанавливать пакет, запускать контейнер, и во всём процессе нет ни одного аккаунта Google.
Быстрый старт
URL сервера одинаков для всех клиентов. Проверено на конфигурациях ниже с Claude Code, Claude Desktop, Cursor, Windsurf и Cline.
Поле | Значение |
URL |
|
Транспорт | HTTP, streamable |
Заголовок авторизации |
|
Клиенты с поддержкой OAuth могут добавить тот же URL как коннектор и войти, не помещая ключ в конфигурационный файл.
claude mcp add --transport http youtube "https://mcp.hasdata.com/api/mcp?apis=youtube" \
--header "x-api-key: your_key_here"Настройки, затем Коннекторы, затем Добавить пользовательский коннектор, затем вставьте https://mcp.hasdata.com/api/mcp?apis=youtube и войдите.
Для варианта с конфигурационным файлом добавьте это в claude_desktop_config.json:
{
"mcpServers": {
"youtube": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"headers": { "x-api-key": "your_key_here" }
}
}
}~/.cursor/mcp.json для каждого проекта или .cursor/mcp.json для одного:
{
"mcpServers": {
"youtube": {
"url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"headers": { "x-api-key": "your_key_here" }
}
}
}~/.codeium/windsurf/mcp_config.json. Windsurf называет поле serverUrl, а не url:
{
"mcpServers": {
"youtube": {
"serverUrl": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"headers": { "x-api-key": "your_key_here" }
}
}
}{
"mcpServers": {
"youtube": {
"url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"type": "streamableHttp",
"headers": { "x-api-key": "your_key_here" },
"disabled": false
}
}
}.vscode/mcp.json в рабочей области:
{
"servers": {
"youtube": {
"type": "http",
"url": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"headers": { "x-api-key": "your_key_here" }
}
}
}~/.codex/config.toml:
[mcp_servers.youtube]
url = "https://mcp.hasdata.com/api/mcp?apis=youtube"
[mcp_servers.youtube.headers]
"x-api-key" = "your_key_here"~/.gemini/settings.json:
{
"mcpServers": {
"youtube": {
"httpUrl": "https://mcp.hasdata.com/api/mcp?apis=youtube",
"headers": { "x-api-key": "your_key_here" }
}
}
}Примеры запросов
Это запросы, а не код. Вставьте один — и агент сам выберет инструмент. Каждый помечен количеством вызовов, потому что в MCP модель решает, сколько вызовов сделать, и каждый успешный вызов стоит 10 кредитов.
Найдите десять самых просматриваемых видео о Model Context Protocol за последний месяц, затем получите расшифровку лучшего и приведите три утверждения, которые в нём делаются о вызове инструментов.
Два вызова, 20 кредитов.
Возьмите канал @GoogleDevelopers. Перечислите вкладки, которые он публикует, затем обобщите последние пять загрузок и скажите, какие темы повторяются.
Два вызова, 20 кредитов. Просмотр вкладки, которую вы ещё не видели, требует второго вызова, потому что список вкладок приходит внутри первого ответа.
Возьмите этот идентификатор видео: dQw4w9WgXcQ. Получите его статистику, затем проверьте, какие из похожих видео относятся к тому же каналу.
Один вызов, 10 кредитов. Похожие видео приходят вместе с тем же ответом.
Найдите на YouTube «обучение веб-скрапингу», отсортированное по дате загрузки, только видео короче четырёх минут, и приведите названия глав для каждого результата, где они есть.
Один вызов, 10 кредитов.
Получите немецкую расшифровку этого видео, если она существует, и скажите, на каких языках она доступна.
Один вызов, 10 кредитов.
Поиск принимает собственные токены фильтров YouTube, и агент сужает выбор по длительности, дате загрузки и типу контента без постобработки. Расшифровки приходят вместе со списком доступных языковых дорожек, что позволяет агенту выбрать нужную, не угадывая.
Пагинация стоит один вызов каждый раз. Исследовательский запрос, который ищет, дважды листает страницы, а затем получает три расшифровки, — это шесть вызовов и 60 кредитов. Пробный период проходит дальше на узких вопросах, чем на открытых обходах.
Инструменты
Четыре инструмента, все только для чтения. Примеры ниже сокращены из реальных вызовов, и числа в них меняются по мере обновления YouTube. Воспринимайте их как формы. Каждое название инструмента ведёт к справочнику его конечной точки, где приведён полный список полей.
Примеры — это полезная нагрузка, а не весь ответ. Результат tools/call содержит один текстовый блок, и этот текст сам является JSON, содержащим url, status, text и json, а извлечённые данные находятся в json. В сыром JSON-RPC ответе путь — result.content[0].text, после разбора — .json. Чат-клиент разворачивает это за вас, а код, обращающийся к конечной точке напрямую, — нет.
Получение результатов поиска YouTube
hasdata_youtube_search_getYoutubeSearchResults
Выполняет поиск по YouTube и возвращает всю страницу результатов, разделённую по типу результатов.
Параметр | Тип | Обязателен | Примечания |
| строка | да | Произвольный текстовый запрос, как его ввёл бы пользователь |
| строка |
| |
| строка | Окно загрузки относительно текущего момента | |
| строка | Группа длительности, например | |
| строка | Ограничение одним типом контента | |
| массив | Флаги функций, можно комбинировать | |
| строка | Сырой токен YouTube | |
| строка | Значение | |
| строка | Двухбуквенные коды страны и языка, а также устройство |
Страница результатов разделена на videoResults, shortsResults, inlineShortsResults, playlistResults, channelResults и shelves, а платные размещения находятся в adsResults и sponsoredResults. Какие блоки появятся, зависит от запроса, и блок, которому нечего сообщить, отсутствует, а не пуст. Проверяйте наличие ключа перед перебором. searchInformation содержит общее количество, а pagination.nextPageToken — это то, что вы передаёте обратно как paginationToken. Реклама никогда не смешивается с органическими массивами, хотя их два, и их нужно пропустить.
{
"positionOnPage": 1,
"videoId": "GuTcle5edjk",
"title": "you need to learn MCP RIGHT NOW!! (Model Context Protocol)",
"viewsOriginal": "1.6M views",
"views": 1653824,
"length": "38:40",
"publishedDate": "11 months ago",
"extensions": ["4K"],
"chapters": [
{ "title": "Intro", "time": "0:00" },
{ "title": "Problem: LLMs Suck at Accessing Code", "time": "0:40" }
],
"channel": { "name": "NetworkChuck", "verified": true }
}Две вещи там заслуживают упоминания. views — это разобранное целое число рядом с отображаемой строкой 1.6M views, и ему не нужен парсер суффиксов. А chapters возвращаются внутри результатов поиска, а не только в самом видео, хотя они есть лишь у некоторых видео.
В справочнике конечной точки поиска перечислены все токены sp и filters__, которые принимает конечная точка.
Получение данных о видео YouTube
hasdata_youtube_video_getYoutubeVideo
Одно видео по идентификатору.
Параметр | Тип | Обязателен | Примечания |
| строка | да | 11-символьный идентификатор видео из |
| строка | Двухбуквенные коды страны и языка, а также устройство |
Возвращает title, thumbnail, channel, publishedDate, lengthSeconds, category, isFamilySafe и isUnlisted, а также массивы relatedVideos, endScreenVideos, keywords, captions, music и socialLinks. description — это объект, содержащий полный текст в content и массив links, где каждая ссылка и хэштег несут startIndex, length, text и url. Поле text хранит ссылку в том виде, в котором её написал автор, а url хранит обёртку перенаправления YouTube; это важно, если вы извлекаете из описаний спонсорские или партнёрские ссылки.
Читайте разобранное поле по имени для каждого инструмента, прежде чем копировать пример ниже. В результатах поиска и канала разобранное число находится в
views, а отображаемая строка — вviewsOriginal. Этот ответ инвертирует это: строка остаётся вviews, а число — вextractedViews; та же инверсия применяется кlikesиsubscribers. Если ошибиться,item.views > 100000здесь сравнивает строку и никогда не выбрасывает исключение.
{
"title": "Rick Astley - Never Gonna Give You Up (Official Video) (4K Remaster)",
"views": "1,806,075,152 views",
"extractedViews": 1806075152,
"likes": "19M",
"extractedLikes": 19344370,
"publishedDate": "Oct 24, 2009",
"lengthSeconds": 214,
"category": "Music",
"channel": { "name": "Rick Astley", "subscribers": "4.53M subscribers", "extractedSubscribers": 4530000 }
}Получение данных о канале YouTube
hasdata_youtube_channel_getYoutubeChannel
Канал по идентификатору или имени (handle), по одной вкладке за раз.
Параметр | Тип | Обязательный | Примечания |
| string | да | Канонический идентификатор |
| string | По умолчанию | |
| string | Токен из предыдущего ответа | |
| string | Двухбуквенные коды страны и языка, а также устройство |
На вкладке по умолчанию возвращаются channelInfo, featuredVideo и sections. Остальные вкладки возвращают собственную структуру. channelInfo содержит handle, аватар, баннер, описание, ключевые слова канала и его rssUrl — этого достаточно, чтобы продолжать следить за каналом без опроса.
Массив
availableTabsв примере ниже содержит отображаемые подписи, и это не те значения, которые принимаетtab.Home,Live,CoursesиSearchне соответствуют ни одному значению параметра, а остальные нужно привести к нижнему регистру. Агент, который читает список и обходит каждый элемент, споткнётся уже на первом.
{
"channelInfo": {
"channelId": "UC_x5XG1OV2P6uZZ5FSM9Ttw",
"name": "Google for Developers",
"handle": "@GoogleDevelopers",
"rssUrl": "https://www.youtube.com/feeds/videos.xml?channel_id=UC_x5XG1OV2P6uZZ5FSM9Ttw",
"isFamilySafe": true,
"availableTabs": ["Home", "Videos", "Shorts", "Live", "Courses", "Playlists", "Posts", "Search"]
}
}Получить транскрипт видео YouTube
hasdata_youtube_transcript_getYoutubeTranscript
Транскрипт видео с таймкодами.
Параметр | Тип | Обязательный | Примечания |
| string | да | 11-символьный идентификатор видео |
| string | Код BCP-47 нужной дорожки | |
| string | Установите |
Проверяйте
selectedв ответе, прежде чем доверять языку. ЗапросlanguageCode, которого нет в видео, не приводит ни к ошибке, ни к пустому ответу — он тихо переключается на дорожку по умолчанию. Каждая запись в списке содержитlanguageNameиlanguageCode, и один язык может встречаться дважды: один раз созданный человеком и один раз сtypeравнымasr.
{
"transcript": [
{ "startMs": 320, "endMs": 18800, "snippet": "[Music]", "startTimeText": "0:00" },
{ "startMs": 18800, "endMs": 21800, "snippet": "We're no strangers to", "startTimeText": "0:18" }
],
"availableTranscripts": [
{ "languageName": "English", "languageCode": "en" },
{ "languageName": "English", "languageCode": "en", "type": "asr", "selected": true },
{ "languageName": "German (Germany)", "languageCode": "de-DE" },
{ "languageName": "Japanese", "languageCode": "ja" }
]
}Ошибки и пути отказа
Ваш клиент почти никогда не видит HTTP-код ошибки от вызова инструмента. Слой MCP отвечает кодом 200 и помещает ошибку внутрь результата, с isError равным true и причиной в виде текста. Агент читает сообщение там, где вы могли бы ожидать строку статуса.
Неверный ключ проявляется как вывод инструмента, а не как неудачное подключение. tools/list принимает любой непустой ключ и возвращает все четыре инструмента, поэтому клиент завершает рукопожатие и показывает зелёный индикатор. Первый вызов инструмента затем возвращается с isError: true и текстом HasData API error: 401 Unauthorized. Следите за этой строкой, потому что ничто ранее в процессе не сообщает о проблеме.
Отсутствующий ключ — единственная настоящая HTTP-ошибка. Авторизация выполняется перед любым инструментом, и само подключение завершается с ошибкой 401. Заголовки CORS присутствуют, и браузерный клиент читает статус, а не непрозрачный сетевой сбой.
Аргумент, нарушающий схему инструмента, отклоняется до того, как станет скрейпом. Сервер отвечает с isError: true и текстом MCP error -32602: Input validation error, указывая на проблемное поле. Ничего не извлекается и ничего не списывается. Сообщение называет поле, но не допустимые значения, поэтому таблицы параметров выше — это справочник.
Вызов, который успешен и ничего не находит, — это случай, который сбивает с толку. Он приходит как обычный результат с requestMetadata.status равным ok, а ключ данных просто отсутствует. Ничто в теле не говорит о том, что результат был пустым. Проверяйте нужное поле, а не ошибку.
Идентификатор, который платформа отклоняет, возвращает 400 с requestMetadata.status равным error. Несуществующий handle канала — обычный способ это увидеть.
Результаты, содержащие данные, также содержат requestMetadata.id, который стоит процитировать в обращении в поддержку.
Цены, бесплатный тариф и лимиты
Каждый инструмент YouTube стоит 10 кредитов за успешный вызов. Размер ответа не меняет цену. Полная страница результатов поиска стоит столько же, сколько страница с одним видео.
Бесплатная пробная версия — 1000 кредитов на 30 дней без карты, что составляет 100 вызовов YouTube. После этого активный аккаунт продолжает получать 100 кредитов ежедневно, когда его баланс опускается ниже 100, так что агент с низким объёмом работает на бесплатном тарифе бессрочно.
Платные планы начинаются с 49 долларов в месяц за 200 000 кредитов, что составляет 20 000 вызовов. Цена за единицу снижается с объёмом: от $2,45 за 1000 вызовов на стартовом плане до $0,99 на Business, $0,83 на Growth и $0,75 на самых крупных высокообъёмных планах.
Ваш план также определяет параллельность. Бесплатная пробная версия допускает 1 запрос за раз, Startup — 15, Business — 30, Growth — 50, а высокообъёмные планы — от 200 до 1 500. Обрабатывайте случай переполнения защитно во всём, что работает без присмотра, потому что агент, который разветвляется, достигнет потолка раньше вас.
Запрос, который возвращается с кодом не 200, не тарифицируется. Успешный вызов, который ничего не находит, всё равно считается вызовом.
Выбор инструментов
Параметр запроса apis определяет, какие инструменты видит ваш агент. Меньше инструментов — меньше контекста тратится на определения инструментов и меньше шансов, что модель потянется не к тому.
?apis=youtube the four tools in this repo
?apis=youtube,google_serp add Google search
?apis=youtube,tiktok,instagram a social research bundleПараметр принимает имена провайдеров, такие как youtube, и отдельные имена API, такие как google_maps_search. Имена с опечатками игнорируются. Если все имена неверны, запрос завершается ошибкой 400, и в теле перечисляются и то, что не было распознано, и все допустимые значения. Уберите параметр — и та же конечная точка откроет все 57 инструментов HasData.
Сравнение
Против официального YouTube Data API v3:
YouTube Data API v3 | Этот сервер | |
Настройка | Проект Google Cloud и ключ API | Один ключ и один URL |
Лимит поиска | «стандартная квота в 100 вызовов | Кредиты вашего плана, 10 за вызов |
Транскрипты видео, которые вам не принадлежат |
| Да, со списком языков |
Главы в результатах поиска | Нет | Да |
Просмотры и лайки в результатах поиска | Отсутствуют, а второй вызов | Строка отображения и целое число в одном ответе |
Стоимость | Бесплатно в пределах дневной квоты | Платно после пробного периода, 10 кредитов за вызов |
Запись и приватные данные | Загрузки, плейлисты, комментарии и ваша собственная аналитика через OAuth | Только чтение, только публичные данные |
Последние две строки важны. Если дневной квоты хватает на ваш объём и вы владеете каналом, который запрашиваете, официальный API — более дешёвый ответ, и вам стоит его выбрать.
Большинство других MCP-серверов YouTube работают только с транскриптами. Этот также ищет, читает видео с их показателями вовлечённости и обходит вкладки каналов, так что агент выполняет целый исследовательский проход без второго сервера.
Чего этот сервер не делает. Никаких комментариев, никакого управления каналами, никаких загрузок, никакой аналитики, никаких приватных данных. Он читает то, что видит посетитель, вышедший из системы.
FAQ
Существует ли официальный MCP-сервер YouTube?
Google не публикует его. У YouTube нет собственного MCP-сервера. Каждый вариант создан кем-то другим — либо на основе YouTube Data API v3, либо на основе публичных страниц. Этот поддерживается HasData и читает публичные страницы, поэтому ему не нужны учётные данные Google.
Что такое MCP-сервер YouTube?
Сервер, который предоставляет данные YouTube как инструменты, которые может вызывать ИИ-клиент. Клиент отправляет вызов инструмента через Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а модель работает с результатом и никогда не видит страницу HTML. Этот сервер предоставляет четыре инструмента и работает удалённо. Клиент подключается к URL и не запускает локальный процесс.
Нужен ли мне ключ API YouTube или проект Google Cloud?
Нет. Единственное учётное данное — ваш ключ HasData. Не нужно создавать проект Google Cloud, заполнять форму квоты или проходить экран согласия OAuth, потому что инструменты читают публичные страницы YouTube, а не YouTube Data API.
Нужно ли мне что-то размещать или запускать?
Нет. Это удалённый MCP-сервер на streamable HTTP. Ничего устанавливать, не нужно держать контейнер тёплым, не нужно перезапускать процесс.
Данные живые или кэшированные?
Живые. Каждый вызов получает страницу в момент запроса и несёт собственный requestMetadata.id. Два одинаковых вызова — это два отдельных запроса, а не воспроизведение сохранённой копии. Счётчики, такие как просмотры и лайки, отслеживают страницу, поэтому они движутся вместе с ней.
Что произойдёт, когда YouTube изменит свой макет?
С вашей стороны ничего. Мы отслеживаем изменения и сохраняем стабильную схему ответа, поэтому имена полей и типы остаются на месте. Поле без значения отсутствует в элементе, а не присутствует и равно null. Читайте необязательные поля со значением по умолчанию.
Могу ли я использовать это вместе с другими API HasData?
Да. Параметр apis принимает список, и ?apis=youtube,google_serp даёт вашему агенту четыре инструмента YouTube плюс поиск Google. Уберите параметр — и получите всё.
Могу ли я получить транскрипт для любого видео?
Только там, где у видео есть транскрипт, и availableTranscripts сообщает вам, что существует, прежде чем вы спросите.
Могу ли я войти через OAuth вместо вставки ключа?
Да, в клиентах, которые это поддерживают. Claude Desktop и Cursor могут добавить конечную точку как коннектор и войти. Автоматические агенты и скрипты используют заголовок x-api-key.
Соблюдение требований и персональные данные
HasData работает только с общедоступными данными. Условия платформы могут ограничивать автоматический доступ, и вы несёте ответственность за их соблюдение. Если собираемые вами данные содержат персональную информацию, убедитесь, что у вас есть законное основание для её обработки в соответствии с GDPR, CCPA или эквивалентными нормами вашей юрисдикции.
Ссылки HasData
Страница продукта и конструктор запросов | |
Документация сервера | |
Все 57 инструментов на одном сервере | |
Пошаговые руководства для клиентов | |
Всё остальное, что мы парсим | |
Тарифы и стоимость кредитов | |
Ключи и использование |
Разработка
Этот репозиторий содержит конфигурацию и документацию для удалённого сервера. Здесь нет шага сборки и нечего контейнеризировать.
Тесты в test/ проверяют контракт инструментов — ту часть, которая может сломаться без коммита в этот репозиторий. Они проверяют, что ?apis=youtube возвращает ровно четыре инструмента, что каждый инструмент по-прежнему объявляет свой обязательный параметр, что ни одно имя не изменилось и что используемый ключ действительно принимается. Последняя проверка вызывает инструмент по-настоящему и стоит 10 кредитов — такова цена канарейки, которая может упасть по правильной причине.
# macOS and Linux
HASDATA_API_KEY=your_key_here npm test
# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm testТот же набор тестов запускается в CI при каждом пуше и раз в неделю по расписанию, потому что список инструментов вышестоящего сервиса может измениться, даже если никто не трогает этот репозиторий. Сбой означает, что список инструментов сдвинулся, ключ перестал работать или конечная точка оказалась недоступна, и сообщение проверки указывает, что именно.
Участие в разработке
Наиболее полезный вклад — исправления в таблицах инструментов и примерах ответов, потому что именно эти части расходятся с реальностью. Приложите выполненный вами запрос и полученный ответ. Пул-реквесты из форков запускают набор тестов без ключа, и живые проверки пропускаются, а не становятся красными.
Лицензия
MIT. См. LICENSE.
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
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables searching YouTube videos, retrieving and storing transcripts, and performing semantic search over video content without using the official YouTube API.29MIT
- AlicenseBqualityBmaintenanceA server that enables interaction with YouTube data through the Model Context Protocol, allowing users to search videos, retrieve detailed information about videos/channels, and fetch comments.1210815MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables AI assistants to access YouTube data in real-time, with capabilities for searching videos, analyzing channels, retrieving video details, and extracting transcripts.12MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing comprehensive read-only access to YouTube data, including video search, transcripts, and channel forensics. It features 16 specialized tools designed for content analysis and metadata retrieval in LLM applications.2
Related MCP Connectors
💯 The fastest YouTube transcript + YouTube search MCP for AI agents. Try for free.
Hosted MCP with 91 agent tools: X, domains, SEO, Maps, Trends, Search, YouTube, TikTok, and more.
Provide token-optimized, structured YouTube data to enhance your LLM applications. Access efficien…
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/HasData/youtube-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server