Skip to main content
Glama
HasData

YouTube MCP Server

by HasData

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

tool contract MCP Tools License

Содержание

Related MCP server: YouTube MCP Server

Что вам нужно

Клиент MCP, который поддерживает streamable HTTP с пользовательскими заголовками. Ключ HasData API из панели управления — его можно создать бесплатно. Больше ничего не нужно. Это удалённый сервер. Не нужно устанавливать пакет, запускать контейнер, и во всём процессе нет ни одного аккаунта Google.

Быстрый старт

URL сервера одинаков для всех клиентов. Проверено на конфигурациях ниже с Claude Code, Claude Desktop, Cursor, Windsurf и Cline.

Поле

Значение

URL

https://mcp.hasdata.com/api/mcp?apis=youtube

Транспорт

HTTP, streamable

Заголовок авторизации

x-api-key: your_key_here

Клиенты с поддержкой 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 и возвращает всю страницу результатов, разделённую по типу результатов.

Параметр

Тип

Обязателен

Примечания

q

строка

да

Произвольный текстовый запрос, как его ввёл бы пользователь

sortBy

строка

relevance по умолчанию, а также date, views, rating и popularity

date

строка

Окно загрузки относительно текущего момента

length

строка

Группа длительности, например under4

videoType

строка

Ограничение одним типом контента

filters__

массив

Флаги функций, можно комбинировать

sp

строка

Сырой токен YouTube sp, скопированный из URL поиска. Переопределяет sortBy, date, videoType, length и filters__ без предупреждения, поэтому оставьте их пустыми, когда передаёте токен

paginationToken

строка

Значение pagination.nextPageToken из предыдущего ответа

gl / hl / deviceType

строка

Двухбуквенные коды страны и языка, а также устройство

Страница результатов разделена на 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

Одно видео по идентификатору.

Параметр

Тип

Обязателен

Примечания

v

строка

да

11-символьный идентификатор видео из v=

gl / hl / deviceType

строка

Двухбуквенные коды страны и языка, а также устройство

Возвращает 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), по одной вкладке за раз.

Параметр

Тип

Обязательный

Примечания

channelId

string

да

Канонический идентификатор UC… или @handle

tab

string

По умолчанию featured, плюс videos, shorts, streams, playlists, posts, community, podcasts, releases, about и store. Берите значение из этого списка, а не из availableTabs в ответе

paginationToken

string

Токен из предыдущего ответа

gl / hl / deviceType

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

Транскрипт видео с таймкодами.

Параметр

Тип

Обязательный

Примечания

v

string

да

11-символьный идентификатор видео

languageCode

string

Код BCP-47 нужной дорожки

type

string

Установите asr для автоматически сгенерированной дорожки

Проверяйте 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 вызовов search.list в день», согласно руководству по началу работы Google

Кредиты вашего плана, 10 за вызов

Транскрипты видео, которые вам не принадлежат

captions.download «требует, чтобы у пользователя было разрешение на редактирование видео», согласно справочнику Google

Да, со списком языков

Главы в результатах поиска

Нет

Да

Просмотры и лайки в результатах поиска

Отсутствуют, а второй вызов videos.list возвращает их в виде строк

Строка отображения и целое число в одном ответе

Стоимость

Бесплатно в пределах дневной квоты

Платно после пробного периода, 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

Страница продукта и конструктор запросов

YouTube Scraper API

Документация сервера

Документация MCP-сервера

Все 57 инструментов на одном сервере

HasData/hasdata-mcp

Пошаговые руководства для клиентов

Клиенты и интеграции MCP

Всё остальное, что мы парсим

YouTube Scraper API и ещё 54

Тарифы и стоимость кредитов

Тарифы и стоимость кредитов

Ключи и использование

Панель управления HasData

Разработка

Этот репозиторий содержит конфигурацию и документацию для удалённого сервера. Здесь нет шага сборки и нечего контейнеризировать.

Тесты в 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.

A
license - permissive license
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

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/HasData/youtube-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server