API ВЕГА

Сервер YouTube MCP

Размещённый сервер Model Context Protocol (MCP), который предоставляет Claude, Cursor, Windsurf и любому другому MCP-клиенту четыре инструмента YouTube только для чтения. Ищите видео на YouTube, получайте данные о видео и каналах, загружайте расшифровки — без проекта Google Cloud и ключа YouTube Data API.

1 000 бесплатных кредитов каждый месяц, банковская карта не нужна — этого хватит на 100 вызовов YouTube.

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

Содержание

  • Что понадобится

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

  • Примеры запросов

  • Инструменты

  • Ошибки и сценарии сбоев

  • Цены, бесплатный тариф и ограничения

  • Выбор инструмента

  • Сравнение с аналогами

  • Часто задаваемые вопросы

  • Ссылки HasData

  • Разработка

  • Участие в проекте

  • Лицензия

Что понадобится

MCP-клиент с поддержкой streamable HTTP и пользовательских заголовков. Ключ API HasData, который можно бесплатно получить в панели управления. Больше ничего не нужно. Это удалённый сервер: достаточно указать URL и заголовок — запускать контейнер не потребуется, и аккаунт Google нигде не понадобится. Если ваш клиент поддерживает только stdio, воспользуйтесь лаунчером @hasdata/youtube-mcp (npm) или hasdata-youtube-mcp (PyPI).

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

URL сервера одинаков для всех клиентов. Мы проверили настройку в Claude Code и Claude Desktop. Остальные примеры соответствуют форматам удалённых серверов, описанным в документации самих клиентов.

ПолеЗначение
URLhttps://mcp.hasdata.com/mcp?apis=youtube
ТранспортHTTP, streamable
Заголовок авторизацииx-api-key: HASDATA_API_KEY

Клиенты с поддержкой OAuth позволяют добавить этот же URL в качестве коннектора и войти в систему, не сохраняя ключ в файле конфигурации.

Claude Code

claude mcp add --transport http youtube "https://mcp.hasdata.com/mcp?apis=youtube" \
  --header "x-api-key: HASDATA_API_KEY"

Claude Desktop

Откройте Settings, затем Connectors, выберите Add custom connector, вставьте https://mcp.hasdata.com/mcp?apis=youtube и войдите в систему.

Если вы настраиваете подключение через файл конфигурации, учтите: Claude Desktop загружает только локальные серверы (stdio), поэтому для подключения к удалённому серверу нужен stdio-лаунчер. Для этого предназначен пакет @hasdata/youtube-mcp: он считывает ключ из переменной среды. Добавьте в claude_desktop_config.json:

{
  "mcpServers": {
    "youtube": {
      "command": "npx",
      "args": ["-y", "@hasdata/youtube-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Предпочитаете Python вместо Node? Замените лаунчер на пакет из PyPI. uvx запустит его без предварительной установки:

{
  "mcpServers": {
    "youtube": {
      "command": "uvx",
      "args": ["hasdata-youtube-mcp"],
      "env": { "HASDATA_API_KEY": "YOUR_KEY" }
    }
  }
}

Cursor

Укажите ~/.cursor/mcp.json, чтобы подключение было доступно во всех проектах, или .cursor/mcp.json — только в одном:

{
  "mcpServers": {
    "youtube": {
      "url": "https://mcp.hasdata.com/mcp?apis=youtube",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Windsurf

Используйте файл ~/.codeium/windsurf/mcp_config.json. В Windsurf поле называется serverUrl, а не url:

{
  "mcpServers": {
    "youtube": {
      "serverUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Cline

{
  "mcpServers": {
    "youtube": {
      "url": "https://mcp.hasdata.com/mcp?apis=youtube",
      "type": "streamableHttp",
      "headers": { "x-api-key": "HASDATA_API_KEY" },
      "disabled": false
    }
  }
}

VS Code

Добавьте файл .vscode/mcp.json в рабочую область:

{
  "servers": {
    "youtube": {
      "type": "http",
      "url": "https://mcp.hasdata.com/mcp?apis=youtube",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Codex CLI

Файл ~/.codex/config.toml:

[mcp_servers.youtube]
url = "https://mcp.hasdata.com/mcp?apis=youtube"

[mcp_servers.youtube.headers]
"x-api-key" = "HASDATA_API_KEY"

Gemini CLI

Файл ~/.gemini/settings.json:

{
  "mcpServers": {
    "youtube": {
      "httpUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
      "headers": { "x-api-key": "HASDATA_API_KEY" }
    }
  }
}

Примеры запросов

Это запросы, а не код. Вставьте любой из них — агент сам выберет подходящий инструмент. Для каждого указано число необходимых вызовов: в MCP модель сама решает, сколько раз обращаться к инструментам, а каждый успешный вызов стоит 10 кредитов.

Найди десять самых просматриваемых видео о Model Context Protocol за последний месяц, затем загрузи расшифровку самого популярного и перечисли три утверждения в нём о вызове инструментов.

Два вызова, 20 кредитов.

Изучи канал @GoogleDevelopers. Перечисли его вкладки, затем кратко изложи содержание пяти последних публикаций и укажи, какие темы повторяются.

Два вызова, 20 кредитов. Чтобы просмотреть вкладку, которая ещё не загружалась, потребуется второй вызов: список вкладок приходит в первом ответе.

Проверь видео с идентификатором dQw4w9WgXcQ. Получи его статистику, а затем выясни, какие из связанных видео опубликованы на том же канале.

Один вызов, 10 кредитов. Сведения о связанных видео приходят в том же ответе.

Найди на YouTube видео по запросу "web scraping tutorial", отсортируй по дате загрузки, оставь только видео длительностью менее четырёх минут и перечисли названия глав для тех результатов, где они есть.

Один вызов, 10 кредитов.

Загрузи немецкую расшифровку этого видео, если она доступна, и перечисли языки, на которых она существует.

Один вызов, 10 кредитов.

Поиск использует фильтры YouTube, поэтому агент может отбирать результаты по длительности, дате загрузки и типу контента без дополнительной обработки. Вместе с расшифровкой приходит список доступных языковых дорожек — агент может выбрать нужную, не угадывая.

Каждый переход к следующей странице результатов требует отдельного вызова. Например, для исследовательского запроса, в котором выполняется поиск, дважды запрашивается следующая страница, а затем загружаются три расшифровки, понадобится шесть вызовов и 60 кредитов. Бесплатного тарифа хватает на конкретные вопросы лучше, чем на масштабный сбор данных.

Инструменты

ИнструментЧто возвращает
hasdata_youtube_channel_getYoutubeChannelДанные о канале (название, описание, аватар, баннер, страна, дата создания), число подписчиков и общее количество просмотров, ссылки на соцсети и содержимое запрошенной вкладки (видео…. 10 кредитов за вызов
hasdata_youtube_search_getYoutubeSearchResultsИщет видео на YouTube по запросу и возвращает полную страницу результатов, разделённых на videoResults (videoId, название, число просмотров, длительность, дата публикации, главы, данные канала, дополнительные поля…. 10 кредитов за вызов
hasdata_youtube_transcript_getYoutubeTranscriptРасшифровка (субтитры) видео на YouTube с временными метками. Для запроса нужен videoId из 11 символов. 10 кредитов за вызов
hasdata_youtube_video_getYoutubeVideoНазвание, миниатюра, исходные и нормализованные данные о просмотрах и отметках «Нравится», lengthSeconds, дата публикации, категория, ключевые слова и теги, флаги isFamilySafe / isUnlisted, сведения о канале, загрузившем видео…. 10 кредитов за вызов

Все четыре инструмента доступны только для чтения. Ниже приведены сокращённые образцы реальных вызовов; их числовые значения меняются по мере обновления данных YouTube. Используйте их как примеры структуры. Название каждого инструмента ведёт на справочную страницу его конечной точки с полным списком полей.

Образцы показывают только данные, а не весь ответ. Результат tools/call содержит один текстовый блок, в котором находится JSON с полями url, status, text и json; собранные данные находятся в json. В необработанном ответе JSON-RPC путь выглядит так: result.content[0].text, после чего текст нужно разобрать и обратиться к .json. Чат-клиент извлекает эти данные автоматически, а при прямом взаимодействии с конечной точкой в коде это нужно делать самостоятельно.

Получение результатов поиска на YouTube

hasdata_youtube_search_getYoutubeSearchResults

Выполняет поиск на YouTube и возвращает всю страницу результатов, разбитую по типам.

ПараметрТипОбязательныйПримечания
qstringдаПроизвольный поисковый запрос — точно в том виде, как его ввёл бы пользователь
sortBystringПо умолчанию — relevance. Также доступны date, views, rating и popularity
datestringПериод загрузки относительно текущего времени
lengthstringДиапазон длительности, например under4
videoTypestringОграничение по типу контента
filters__arrayФлаги функций, которые можно комбинировать
spstringИсходный токен YouTube sp, скопированный из URL поиска. Без предупреждения переопределяет sortBy, date, videoType, length и filters__, поэтому при передаче токена оставьте эти параметры пустыми
paginationTokenstringЗначение pagination.nextPageToken из предыдущего ответа
gl / hl / deviceTypestringДвухбуквенные коды страны и языка, а также тип устройства

Страница результатов разделена на блоки 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 возвращаются уже в результатах поиска, а не только в данных самого видео, хотя они есть лишь у некоторых роликов.

В справочнике по поисковому endpoint перечислены все токены sp и filters__, которые принимает endpoint.

Получение данных о видео на YouTube

hasdata_youtube_video_getYoutubeVideo

Возвращает данные об одном видео по его идентификатору.

ПараметрТипОбязательныйПримечания
vstringда11-символьный идентификатор видео из параметра v=
gl / hl / deviceTypestringДвухбуквенные коды страны и языка, а также тип устройства

Ответ содержит поля title, thumbnail, channel, publishedDate, lengthSeconds, category, isFamilySafe и isUnlisted, а также массивы relatedVideos, endScreenVideos, keywords, captions, music и socialLinks. Поле description — это объект с полным текстом в content и массивом links. Для каждой ссылки и хештега указаны startIndex, length, text и url. Поле text содержит ссылку в том виде, в котором её указал автор, а url — 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, по одной вкладке за запрос.

ПараметрТипОбязательныйПримечания
channelIdstringдаКанонический идентификатор UC… или @handle
tabstringПо умолчанию — featured. Также доступны videos, shorts, streams, playlists, posts, community, podcasts, releases, about и store. Выберите значение из этого списка, а не из availableTabs в ответе
paginationTokenstringТокен из предыдущего ответа
gl / hl / deviceTypestringДвухбуквенные коды страны и языка, а также тип устройства

Для вкладки по умолчанию ответ содержит 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

Возвращает расшифровку видео с временными метками.

ПараметрТипОбязательныйПримечания
vstringда11-символьный идентификатор видео
languageCodestringКод дорожки, которую нужно получить, в формате BCP-47
typestringУкажите 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, в котором указывается некорректное поле. Данные не загружаются, плата не взимается. В сообщении указано поле, но не допустимые значения, поэтому сверяйтесь с таблицами параметров выше.

Успешный вызов, который ничего не нашёл, чаще всего вводит пользователей в заблуждение. В этом случае приходит обычный результат со значением ok в requestMetadata.status, а ключ с данными просто отсутствует. В теле ответа не говорится, что результат пустой. Проверяйте наличие нужного поля, а не ошибки.

Если платформа отклоняет идентификатор, сервер возвращает код 400 и значение error в requestMetadata.status. Чаще всего это происходит, если указан несуществующий идентификатор канала.

В результатах, содержащих данные, также есть requestMetadata.id. Указывайте его при обращении в службу поддержки.

Стоимость, бесплатный тариф и ограничения

Каждый вызов инструмента YouTube стоит 10 кредитов, если он завершился успешно. Размер ответа не влияет на стоимость: полная страница результатов поиска стоит столько же, сколько страница с одним видео.

Бесплатный тариф предоставляет 1 000 кредитов в месяц без привязки карты — этого хватает на 100 вызовов YouTube. Кредиты обновляются с началом нового расчётного периода, поэтому агент с небольшим объёмом запросов может пользоваться бесплатным тарифом бессрочно.

Платные тарифы начинаются от $59 в месяц за 200 000 кредитов — этого хватит на 20 000 вызовов. При большем объёме цена за единицу снижается: с $2.95 за 1 000 вызовов на начальном тарифе до $1.19 на Basic и $0.83 на тарифах Growth. Актуальные цены указаны на странице тарифов.

Тариф также определяет допустимое число одновременных запросов. Бесплатный тариф позволяет выполнять 1 запрос за раз, Startup — 5, Basic — 15, а тарифы Growth — от 50 до 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. В теле ответа перечислены как нераспознанные названия, так и все допустимые значения. Если не указывать параметр, тот же endpoint предоставит доступ ко всем 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 обойдётся дешевле — используйте его.

Большинство других YouTube MCP-серверов предоставляет только транскрипты. Этот сервер также выполняет поиск, получает сведения о видео вместе с показателями вовлечённости и обходит вкладки каналов. Благодаря этому агент может провести исследование целиком, не подключая второй сервер.

Что этот сервер не поддерживает. Комментарии, управление каналами, загрузку видео, аналитику и личные данные. Он получает только ту информацию, которая доступна посетителю без авторизации.

Часто задаваемые вопросы

Существует ли официальный YouTube MCP-сервер?

Google не выпускает такой сервер. У YouTube нет собственного MCP-сервера. Все доступные решения созданы сторонними разработчиками и работают либо с YouTube Data API v3, либо с общедоступными страницами. Этот сервер поддерживается HasData и получает данные с общедоступных страниц, поэтому ему не нужны учётные данные Google.

Что такое YouTube MCP-сервер?

Это сервер, который предоставляет данные YouTube в виде инструментов, доступных для вызова AI-клиентом. Клиент отправляет вызов инструмента по протоколу Model Context Protocol, сервер получает данные и возвращает структурированный JSON, а модель работает с результатом, не обрабатывая страницу HTML. Этот сервер предоставляет четыре инструмента и работает удалённо: клиент подключается к URL, не запуская локальный процесс.

Нужны ли мне ключ YouTube API или проект Google Cloud?

Нет. Вам понадобится только ключ HasData. Создавать проект Google Cloud, заполнять форму для получения квоты или настраивать экран согласия OAuth не нужно: инструменты получают данные с общедоступных страниц YouTube, а не через YouTube Data API.

Нужно ли размещать или запускать что-либо самостоятельно?

Нет. Это удалённый MCP-сервер, работающий по потоковому HTTP. Ничего не нужно устанавливать, поддерживать активность контейнера или перезапускать процесс.

Данные обновляются в реальном времени или кэшируются?

Данные обновляются в реальном времени. Каждый вызов получает страницу на момент запроса и содержит собственный requestMetadata.id. Два одинаковых вызова — это два отдельных запроса, а не повторная выдача сохранённой копии. Счётчики просмотров и отметок «Нравится» отражают данные со страницы и меняются вместе с ними.

Что произойдёт, если YouTube изменит оформление страниц?

Вам ничего не придётся делать. Мы отслеживаем изменения и сохраняем стабильную схему ответа, поэтому названия и типы полей остаются прежними. Если у поля нет значения, оно отсутствует в объекте, а не присутствует со значением null. При чтении необязательных полей задавайте значение по умолчанию.

Можно ли использовать этот сервер вместе с другими API HasData?

Да. Параметр apis принимает список, поэтому ?apis=youtube,google_serp предоставляет агенту четыре инструмента YouTube и поиск Google. Если не указывать параметр, будут доступны все инструменты.

Можно ли получить транскрипт любого видео?

Только если у видео есть транскрипт. Поле availableTranscripts показывает доступные варианты до того, как вы запросите транскрипт.

Можно ли войти через OAuth вместо того, чтобы указывать ключ вручную?

Да, если клиент поддерживает OAuth. В Claude Desktop и Cursor endpoint можно добавить как connector и выполнить вход. Для автономных агентов и скриптов используется заголовок x-api-key.

Соблюдение требований и персональные данные

HasData получает только общедоступные данные. Условия использования платформы могут ограничивать автоматизированный доступ, и вы сами отвечаете за соблюдение применимых требований. Если собранные данные содержат персональную информацию, убедитесь, что у вас есть законное основание для её обработки согласно GDPR, CCPA или аналогичным правилам вашей юрисдикции.

Ссылки HasData

Страница продукта и конструктор запросовYouTube Scraper API
Документация сервераДокументация MCP-сервера
Все 57 инструментов в одном сервереHasData/hasdata-mcp
Руководства по клиентамКлиенты MCP и интеграции
Все остальные источники данных, которые мы собираемYouTube Scraper API и ещё 54
Тарифы и стоимость запросовТарифы и стоимость запросов
Ключи и статистика использованияПанель HasData
Запуск Node через npm@hasdata/youtube-mcp
Запуск Python через PyPIhasdata-youtube-mcp

Разработка

В этом репозитории находятся конфигурация и документация удалённого сервера. Сборка не требуется, как и создание контейнера.

Тесты в 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 при каждом push и раз в неделю по расписанию: список инструментов во внешнем сервисе может измениться, даже если никто не вносил правок в этот репозиторий. Ошибка означает, что изменился список инструментов, перестал работать ключ или недоступна конечная точка. Сообщение проверки укажет, в чём именно проблема.

Участие в проекте

Больше всего пользы принесут исправления таблиц инструментов и примеров ответов: именно эти части чаще всего устаревают. Укажите вызов, который вы выполнили, и полученный ответ. Pull request из форков запускают набор тестов без ключа, а проверки реальных вызовов пропускаются, чтобы не приводить к ошибке.

Лицензия

MIT. См. LICENSE.