Skip to main content
Glama
HasData

YouTube MCP Server

by HasData

YouTube MCP サーバー

Claude、Cursor、Windsurf、その他のMCPクライアントに4つの読み取り専用YouTubeツールを提供する、ホスト型Model Context Protocol(MCP)サーバーです。YouTubeの検索、動画・チャンネルデータの読み取り、文字起こし(トランスクリプト)の取得が可能で、Google CloudプロジェクトもYouTube Data APIキーも不要です。

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

tool contract MCP Tools License

目次

Related MCP server: YouTube MCP Server

必要なもの

カスタムヘッダーでストリーミングHTTPに対応したMCPクライアントと、ダッシュボードから無料で作成できるHasData APIキーが必要です。それ以外は何もいりません。これはリモートサーバーです。インストールするパッケージも、実行するコンテナも、フローの中にGoogleアカウントも一切ありません。

クイックスタート

サーバーURLはすべてのクライアントで共通です。以下の設定はClaude Code、Claude Desktop、Cursor、Windsurf、Clineでテスト済みです。

フィールド

URL

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

トランスポート

HTTP、ストリーミング対応

認証ヘッダー

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ではフィールド名が url ではなく serverUrl になります:

{
  "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に関する最も視聴された動画を10本見つけて、そのうちトップの動画の文字起こしを取得し、ツール呼び出しについて述べている主張を3つ挙げてください。

呼び出し2回、20クレジット。

@GoogleDevelopers チャンネルを調べてください。公開しているタブを一覧し、直近の5本のアップロードを要約して、繰り返し登場するトピックを教えてください。

呼び出し2回、20クレジット。未確認のタブを読むには追加の呼び出しが必要です。タブの一覧は最初のレスポンス内に含まれるためです。

この動画ID、dQw4w9WgXcQ を調べてください。統計情報を取得し、関連動画のうち同じチャンネルからのものを確認してください。

呼び出し1回、10クレジット。関連動画は同じレスポンスに含まれます。

YouTubeで「web scraping tutorial」をアップロード日順で検索し、4分未満の動画のみに絞り込んで、チャプターがある結果にはそのタイトルを教えてください。

呼び出し1回、10クレジット。

この動画のドイツ語の文字起こしが存在すれば取得し、利用可能な言語を教えてください。

呼び出し1回、10クレジット。

検索はYouTube独自のフィルタートークンを受け付け、エージェントは後処理なしで動画の長さ、アップロード日、コンテンツタイプで絞り込みます。文字起こしには利用可能な言語トラックの一覧が付属するため、エージェントは推測せずに言語を選択できます。

ページングは呼び出しごとにクレジットを消費します。検索して2回ページングし、3本の文字起こしを取得する調査プロンプトは、呼び出し6回・60クレジットになります。無料トライアルは、広範なクロールよりも絞り込んだ質問でより長く使えます。

ツール

4つのツール、すべて読み取り専用です。以下のサンプルは実際の呼び出しから抜粋したもので、数値はYouTubeの更新に応じて変わります。形として読んでください。各ツール名はエンドポイントのリファレンスにリンクしており、完全なフィールド一覧が記載されています。

サンプルはペイロードであり、レスポンス全体ではありません。tools/call の結果には1つのテキストブロックが含まれ、そのテキスト自体が urlstatustextjson を保持するJSONで、スクレイピングされたデータは json の下にあります。生のJSON-RPCレスポンスからは、パスは result.content[0].text をパースし、その中の .json です。チャットクライアントはこれを自動的に展開しますが、エンドポイントに直接接続するコードでは手動で行う必要があります。

YouTube検索結果の取得

hasdata_youtube_search_getYoutubeSearchResults

YouTubeを検索し、結果タイプごとに分割された結果ページ全体を返します。

パラメータ

必須

備考

q

string

はい

ユーザーが入力するのとまったく同じ自由形式のクエリ

sortBy

string

デフォルトは relevance。その他 dateviewsratingpopularity

date

string

現在からのアップロード期間

length

string

動画の長さの区分。例: under4

videoType

string

1つのコンテンツタイプに制限

filters__

array

機能フラグ。組み合わせ可能

sp

string

検索URLからコピーした生のYouTube sp トークン。警告なしに sortBydatevideoTypelengthfilters__ を上書きするため、トークンを渡すときはこれらを空にしてください

paginationToken

string

前回のレスポンスの pagination.nextPageToken

gl / hl / deviceType

string

2文字の国コードと言語コード、およびデバイス

結果ページは videoResultsshortsResultsinlineShortsResultsplaylistResultschannelResultsshelves に分割され、有料掲載は adsResultssponsoredResults に含まれます。どのブロックが現れるかはクエリに依存し、報告するものがないブロックは空ではなく存在しません。反復処理の前にキーの存在をテストしてください。searchInformation には合計数が含まれ、pagination.nextPageTokenpaginationToken としてフィードバックします。広告がオーガニック配列に混ざることはありませんが、スキップすべき広告ブロックが2つあります。

{
  "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 }
}

ここで2点注目すべき点があります。views1.6M views という表示文字列の隣にあるパース済みの整数で、サフィックスパーサーは不要です。また chapters は動画自体だけでなく検索結果にも含まれますが、一部の動画にしかありません。

検索エンドポイントのリファレンスには、エンドポイントが受け付けるすべての sp トークンと filters__ トークンが記載されています。

YouTube動画データの取得

hasdata_youtube_video_getYoutubeVideo

IDによる単一動画の取得。

パラメータ

必須

備考

v

string

はい

v= の11文字の動画ID

gl / hl / deviceType

string

2文字の国コードと言語コード、およびデバイス

titlethumbnailchannelpublishedDatelengthSecondscategoryisFamilySafeisUnlisted に加え、relatedVideosendScreenVideoskeywordscaptionsmusicsocialLinks の各配列を返します。description はオブジェクトで、全文を content に保持し、すべてのリンクとハッシュタグが startIndexlengthtexturl を持つ links 配列を含みます。text フィールドには作者が書いたとおりのリンクが保持され、url にはYouTubeのリダイレクトラッパーが保持されます。これは説明文からスポンサーやアフィリエイトの宛先を抽出する場合に重要です。

以下のサンプルをコピーする前に、ツールごとにパース済みフィールドの名前を確認してください。検索とチャンネルの結果では、パース済みの数値が views に、表示文字列が viewsOriginal に入ります。このレスポンスでは逆で、文字列が views に、数値が extractedViews に入り、likessubscribers でも同じ逆転が起こります。これを間違えると、ここでは 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

IDまたはハンドルによるチャンネルの取得。一度に1つのタブを取得します。

パラメータ

必須

メモ

channelId

string

はい

正規のUC…IDまたは@ハンドル

tab

string

デフォルトはfeatured。その他にvideosshortsstreamsplaylistspostscommunitypodcastsreleasesaboutstoreがあります。レスポンス内のavailableTabsではなく、このリストから値を指定してください

paginationToken

string

前回のレスポンスのトークン

gl / hl / deviceType

string

2文字の国コードと言語コード、およびデバイス

デフォルトのタブでは、channelInfofeaturedVideosectionsが返ります。他のタブでは、それぞれに応じた形で返ります。channelInfoには、ハンドル、アバター、バナー、説明文、チャンネルキーワード、チャンネルのrssUrlが含まれるため、ポーリングしなくてもチャンネルを視聳し続けることができます。

下のサンプルのavailableTabs配列には表示ラベルが入っており、これらはtabが受け付ける値ではありません。HomeLiveCoursesSearchはどのパラメータ値にも対応しておらず、残りは小文字にする必要があります。このリストを読んで各エントリを処理するエージェントは、最初のエントリで失敗します。

{
  "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文字の動画ID

languageCode

string

必要なトラックのBCP-47コード

type

string

自動生成トラックの場合はasrに設定します

言語を信頼する前に、レスポンスのselectedを確認してください。動画にないlanguageCodeを要求しても、失敗も空の返却もされず、静かにデフォルトのトラックにフォールバックします。リスト内のすべてのエントリにはlanguageNamelanguageCodeが含まれており、同じ言語が2回(人間が作成したものと、typeasrに設定されたもの)出現することがあります。

{
  "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で応答し、失敗は結果内にisErrortrueに設定され、理由がテキストとして含まれます。エージェントは、ステータス行を期待するようなメッセージを読み取ります。

間違ったキーは、接続エラーではなくツール出力として表面化します。 tools/listは空でないキーを受け入れ、4つすべてのツールを返すため、クライアントはハンドシェイクを完了して緑色を表示します。その後、最初のツール呼び出しがisError: trueとテキストHasData API error: 401 Unauthorizedを返します。フローのそれより前では問題が報告されないため、この文字列に注意してください。

キーの欠落は、唯一の実際のHTTPエラーです。 認証はすべてのツールの前に実行され、接続自体が401で失敗します。CORSヘッダーは存在するため、ブラウザクライアントは不透明なネットワークエラーではなくステータスを読み取ります。

ツールのスキーマを壊す引数は、スクレイピングになる前に拒否されます。 サーバーはisError: trueとテキストMCP error -32602: Input validation errorで応答し、問題のあるフィールドを指定します。何もフェッチされず、課金もされません。メッセージはフィールドを指定しますが、受け入れ可能な値は指定しないため、上記のパラメータテーブルが参考になります。

成功して何も見つからない呼び出しは、人々を悩ませるケースです。 これは通常の結果として届き、requestMetadata.statusokに設定され、データキーが単に欠落しています。結果が空だったことを本文に示すものはありません。エラーではなく、必要なフィールドをテストしてください。

プラットフォームが拒否する識別子は400を返しrequestMetadata.statuserrorに設定されます。存在しないチャンネルハンドルは、これを見る一般的な方法です。

データを運ぶ結果には、サポートで引用する価値のあるrequestMetadata.idも含まれます。

料金、無料枠、制限

すべてのYouTubeツールは、呼び出しが成功するたびに10クレジットかかります。レスポンスサイズによって価格が変わることはありません。検索結果の完全な1ページは、動画が1つのページと同じコストです。

無料トライアルはカード不要で30日間1,000クレジットで、YouTube呼び出し100回分です。その後、アクティブなアカウントは、残高が100を下回るたびに毎日100クレジットがチャージされ続けるため、低ボリュームのエージェントは無料枠で無期限に実行できます。

有料プランは月額49ドルからで、200,000クレジット(20,000回の呼び出し)です。単価は量に応じて下がり、エントリープランでは1,000回の呼び出しあたり2.45ドル、Businessでは0.99ドル、Growthでは0.83ドル、最大の高ボリュームプランでは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のようなプロバイダー名と、google_maps_searchのような個々のAPI名を受け取ります。スペルミスのある名前は無視されます。すべての名前が間違っている場合、リクエストは400で失敗し、本文には認識できなかったものと有効な値のすべてがリストされます。パラメータを省略すると、同じエンドポイントが57すべてのHasDataツールを公開します。

比較

公式のYouTube Data API v3と比較します。

YouTube Data API v3

このサーバー

セットアップ

Google CloudプロジェクトとAPIキー

1つのキーと1つのURL

検索割り当て

Googleのスタートガイドによると、1日あたり「デフォルトのクォータ割り当てはsearch.list呼び出し100回」

プランのクレジット、1回の呼び出しにつき10

所有していない動画の文字起こし

Googleのリファレンスによると、captions.downloadは「動画を編集する権限がユーザーにあることを要求する」

可能。言語リスト付き

検索結果のチャプター

いいえ

はい

検索結果の再生回数といいね

なし。2回目のvideos.list呼び出しで文字列として返される

同じレスポンスで表示文字列と整数の両方

コスト

日次クォータ内では無料

トライアル終了後は有料、1回の呼び出しにつき10クレジット

書き込みとプライベートデータ

OAuthを介したアップロード、プレイリスト、コメント、独自の分析

読み取り専用、公開データのみ

最後の2行が重要です。日次クォータがボリュームをカバーし、クエリするチャンネルを所有している場合は、公式APIの方が安価な選択肢であるため、それを利用する必要があります。

他のほとんどのYouTube MCPサーバーは文字起こしのみを処理します。これは、検索、エンゲージメント番号を含む動画の読み取り、チャンネルタブのウォークスルーも行うため、エージェントは2番目のサーバーなしで調査パス全体を実行できます。

このサーバーが行わないこと。 コメント、チャンネル管理、アップロード、分析、プライベートデータはありません。サインアウトした訪問者に表示されるものを読み取ります。

よくある質問

公式のYouTube MCPサーバーはありますか?

Googleは公開していません。YouTubeにはファーストパーティのMCPサーバーはありません。すべてのオプションは、YouTube Data API v3または公開ページの周りに他の誰かが構築したものです。これはHasDataによって維持されており、公開ページを読み取るため、Googleの資格情報は不要です。

YouTube MCPサーバーとは何ですか?

YouTubeデータをAIクライアントが呼び出せるツールとして公開するサーバーです。クライアントはModel Context Protocolを介してツール呼び出しを送信し、サーバーはデータをフェッチして構造化JSONを返し、モデルは結果を処理してHTMLページを見ることはありません。これは4つのツールを公開し、リモートで実行されます。クライアントはURLに接続し、ローカルプロセスを開始しません。

YouTube APIキーやGoogle Cloudプロジェクトは必要ですか?

いいえ。唯一の資格情報はHasDataキーです。作成するGoogle Cloudプロジェクトも、記入するクォータフォームも、OAuth同意画面もありません。ツールはYouTubeの公開ページを読み取り、YouTube Data APIを読み取るわけではないからです。

何かをホストまたは実行する必要がありますか?

いいえ。これはストリーミング可能なHTTP上のリモートMCPサーバーです。インストールするもの、起動しておくコンテナ、再起動するプロセスはありません。

データはライブですか、それともキャッシュされていますか?

ライブです。各呼び出しはリクエスト時にページをフェッチし、独自のrequestMetadata.idを持ちます。2つの同一の呼び出しは2つの別々のフェッチであり、保存されたコピーの再生ではありません。再生回数やいいねなどのカウンターはページを追跡するため、ページが動くにつれて動きます。

YouTubeがレイアウトを変更したらどうなりますか?

お客様側では何もありません。変更を追跡し、レスポンススキーマを安定させているため、フィールド名と型は変わりません。値のないフィールドは、存在してnullになるのではなく、アイテムに存在しません。オプションのフィールドはデフォルトで読み取ってください。

他のHasData APIと一緒に使用できますか?

はい。apisパラメータはリストを受け取り、?apis=youtube,google_serpはエージェントに4つのYouTubeツールとGoogle検索を提供します。パラメータを削除すると、すべてを取得できます。

すべての動画の文字起こしを取得できますか?

動画に文字起こしがある場合に限り、availableTranscriptsはリクエストする前の存在を通知します。

キーを貼り付ける代わりにOAuthでサインインできますか?

はい、サポートしているクライアントであれば可能です。Claude DesktopとCursorは、エンドポイントをコネクタとして追加してサインインできます。無人エージェントとスクリプトはx-api-keyヘッダーを使用します。

コンプライアンスと個人データ

HasData は公開されているデータのみにアクセスします。プラットフォフォームの利用規約が自動アクセスを制限する場合があり、お客様自身のコンプライアンスはお客様の責任です。収集するデータに個人情報が含まれる場合は、GDPR、CCPA、またはお住まいの地域の同等の規則に基づく正当な根拠があることを確認してください。

HasData リンク

製品ページとリクエストビルダー

YouTube Scraper API

サーバードキュメント

MCP サーバードキュメント

1つのサーバーにある全57ツール

HasData/hasdata-mcp

クライアントのチュートリアル

MCP クライアントと統合

その他すべてのスクレイピング

YouTube Scraper API とその他54

プランとクレジット料金

プランとクレジット料金

キーと使用状況

HasData ダッシュボード

開発

このリポジトリは、リモートサーバーの設定とドキュメントです。ビルド手順はなく、コンテナ化するものもありません。

test/ 内のテストは、ツールのコントラクトを検証します。これは、ここにコミットなしで壊れる可能性のある部分です。?apis=youtube が正確に4つのツールを返すこと、各ツールが必須パラメータを宣言していること、名前が変更されていないこと、使用中のキーが実際に受け入れられることを確認します。最後のチェックは実際にツールを呼び出し、10クレジットかかります。これは、正しい理由で失敗するカナリアの価格です。

# macOS and Linux
HASDATA_API_KEY=your_key_here npm test

# Windows PowerShell
$env:HASDATA_API_KEY="your_key_here"; npm test

同じスイートは、プッシュのたびにCIで実行され、毎週1回スケジュールされます。これは、上流のツールリストが誰もこのリポジトリに触れずに変更される可能性があるためです。失敗は、ツールリストが移動したか、キーが機能しなくなったか、エンドポイントに到達できなかったことを意味します。アサーションメッセージは、どれかを示します。

貢献

ツールテーブルとレスポンスサンプルの修正が最も役立ちます。これは、ドリフトする部分です。呼び出しと呼び出し結果を含めてください。フォークからのプルリクエストは、キーなしでスイートを実行し、ライブチェックは赤にならずにスキップします。

ライセンス

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