Сервер 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. Остальные примеры соответствуют форматам удалённых серверов, описанным в документации самих клиентов.
| Поле | Значение |
|---|---|
| URL | https://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 и возвращает всю страницу результатов, разбитую по типам.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
q | string | да | Произвольный поисковый запрос — точно в том виде, как его ввёл бы пользователь |
sortBy | string | По умолчанию — relevance. Также доступны date, views, rating и popularity | |
date | string | Период загрузки относительно текущего времени | |
length | string | Диапазон длительности, например under4 | |
videoType | string | Ограничение по типу контента | |
filters__ | array | Флаги функций, которые можно комбинировать | |
sp | string | Исходный токен YouTube sp, скопированный из URL поиска. Без предупреждения переопределяет sortBy, date, videoType, length и filters__, поэтому при передаче токена оставьте эти параметры пустыми | |
paginationToken | string | Значение pagination.nextPageToken из предыдущего ответа | |
gl / hl / deviceType | string | Двухбуквенные коды страны и языка, а также тип устройства |
Страница результатов разделена на блоки 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
Возвращает данные об одном видео по его идентификатору.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
v | string | да | 11-символьный идентификатор видео из параметра v= |
gl / hl / deviceType | string | Двухбуквенные коды страны и языка, а также тип устройства |
Ответ содержит поля 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, по одной вкладке за запрос.
| Параметр | Тип | Обязательный | Примечания |
|---|---|---|---|
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, в котором указывается некорректное поле. Данные не загружаются, плата не взимается. В сообщении указано поле, но не допустимые значения, поэтому сверяйтесь с таблицами параметров выше.
Успешный вызов, который ничего не нашёл, чаще всего вводит пользователей в заблуждение. В этом случае приходит обычный результат со значением 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 через PyPI | hasdata-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.