@hasdata/youtube-mcp 1.0.6 → 1.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -14
- package/index.mjs +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@ A hosted Model Context Protocol (MCP) server that gives Claude, Cursor, Windsurf
|
|
|
7
7
|
**1,000 free credits every month, no card required**, which is 100 YouTube calls.
|
|
8
8
|
|
|
9
9
|
```
|
|
10
|
-
https://mcp.hasdata.com/
|
|
10
|
+
https://mcp.hasdata.com/mcp?apis=youtube
|
|
11
11
|
```
|
|
12
12
|
|
|
13
13
|
[](https://glama.ai/mcp/servers/HasData/youtube-mcp)
|
|
@@ -44,7 +44,7 @@ The server URL is the same for every client. We run it hands-on in Claude Code a
|
|
|
44
44
|
|
|
45
45
|
| Field | Value |
|
|
46
46
|
| :--- | :--- |
|
|
47
|
-
| URL | `https://mcp.hasdata.com/
|
|
47
|
+
| URL | `https://mcp.hasdata.com/mcp?apis=youtube` |
|
|
48
48
|
| Transport | HTTP, streamable |
|
|
49
49
|
| Auth header | `x-api-key: HASDATA_API_KEY` |
|
|
50
50
|
|
|
@@ -54,7 +54,7 @@ Clients with OAuth support can add the same URL as a connector and sign in witho
|
|
|
54
54
|
<summary><b>Claude Code</b></summary>
|
|
55
55
|
|
|
56
56
|
```bash
|
|
57
|
-
claude mcp add --transport http youtube "https://mcp.hasdata.com/
|
|
57
|
+
claude mcp add --transport http youtube "https://mcp.hasdata.com/mcp?apis=youtube" \
|
|
58
58
|
--header "x-api-key: HASDATA_API_KEY"
|
|
59
59
|
```
|
|
60
60
|
|
|
@@ -63,7 +63,7 @@ claude mcp add --transport http youtube "https://mcp.hasdata.com/api/mcp?apis=yo
|
|
|
63
63
|
<details>
|
|
64
64
|
<summary><b>Claude Desktop</b></summary>
|
|
65
65
|
|
|
66
|
-
Settings, then Connectors, then Add custom connector, then paste `https://mcp.hasdata.com/
|
|
66
|
+
Settings, then Connectors, then Add custom connector, then paste `https://mcp.hasdata.com/mcp?apis=youtube` and sign in.
|
|
67
67
|
|
|
68
68
|
For the config-file route, Claude Desktop loads only local (stdio) servers, so it reaches a remote server through a stdio launcher. The `@hasdata/youtube-mcp` package is that launcher, and it reads the key from the environment. Add this to `claude_desktop_config.json`:
|
|
69
69
|
|
|
@@ -104,7 +104,7 @@ Python instead of Node? Swap the launcher for the PyPI package, which `uvx` runs
|
|
|
104
104
|
{
|
|
105
105
|
"mcpServers": {
|
|
106
106
|
"youtube": {
|
|
107
|
-
"url": "https://mcp.hasdata.com/
|
|
107
|
+
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
|
|
108
108
|
"headers": { "x-api-key": "HASDATA_API_KEY" }
|
|
109
109
|
}
|
|
110
110
|
}
|
|
@@ -122,7 +122,7 @@ Python instead of Node? Swap the launcher for the PyPI package, which `uvx` runs
|
|
|
122
122
|
{
|
|
123
123
|
"mcpServers": {
|
|
124
124
|
"youtube": {
|
|
125
|
-
"serverUrl": "https://mcp.hasdata.com/
|
|
125
|
+
"serverUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
|
|
126
126
|
"headers": { "x-api-key": "HASDATA_API_KEY" }
|
|
127
127
|
}
|
|
128
128
|
}
|
|
@@ -138,7 +138,7 @@ Python instead of Node? Swap the launcher for the PyPI package, which `uvx` runs
|
|
|
138
138
|
{
|
|
139
139
|
"mcpServers": {
|
|
140
140
|
"youtube": {
|
|
141
|
-
"url": "https://mcp.hasdata.com/
|
|
141
|
+
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
|
|
142
142
|
"type": "streamableHttp",
|
|
143
143
|
"headers": { "x-api-key": "HASDATA_API_KEY" },
|
|
144
144
|
"disabled": false
|
|
@@ -159,7 +159,7 @@ Python instead of Node? Swap the launcher for the PyPI package, which `uvx` runs
|
|
|
159
159
|
"servers": {
|
|
160
160
|
"youtube": {
|
|
161
161
|
"type": "http",
|
|
162
|
-
"url": "https://mcp.hasdata.com/
|
|
162
|
+
"url": "https://mcp.hasdata.com/mcp?apis=youtube",
|
|
163
163
|
"headers": { "x-api-key": "HASDATA_API_KEY" }
|
|
164
164
|
}
|
|
165
165
|
}
|
|
@@ -175,7 +175,7 @@ Python instead of Node? Swap the launcher for the PyPI package, which `uvx` runs
|
|
|
175
175
|
|
|
176
176
|
```toml
|
|
177
177
|
[mcp_servers.youtube]
|
|
178
|
-
url = "https://mcp.hasdata.com/
|
|
178
|
+
url = "https://mcp.hasdata.com/mcp?apis=youtube"
|
|
179
179
|
|
|
180
180
|
[mcp_servers.youtube.headers]
|
|
181
181
|
"x-api-key" = "HASDATA_API_KEY"
|
|
@@ -192,7 +192,7 @@ url = "https://mcp.hasdata.com/api/mcp?apis=youtube"
|
|
|
192
192
|
{
|
|
193
193
|
"mcpServers": {
|
|
194
194
|
"youtube": {
|
|
195
|
-
"httpUrl": "https://mcp.hasdata.com/
|
|
195
|
+
"httpUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
|
|
196
196
|
"headers": { "x-api-key": "HASDATA_API_KEY" }
|
|
197
197
|
}
|
|
198
198
|
}
|
|
@@ -227,10 +227,17 @@ Prompts, not code. Paste one in and the agent picks the tool itself. Each is ann
|
|
|
227
227
|
|
|
228
228
|
Search takes YouTube's own filter tokens, and an agent narrows by duration, upload date and content type without post-processing. Transcripts arrive with the list of available language tracks, which lets the agent pick one without guessing.
|
|
229
229
|
|
|
230
|
-
Paging costs a call each time. A research prompt that searches, pages twice, then pulls three transcripts is six calls and 60 credits. The
|
|
230
|
+
Paging costs a call each time. A research prompt that searches, pages twice, then pulls three transcripts is six calls and 60 credits. The free tier goes further on narrow questions than on open-ended crawls.
|
|
231
231
|
|
|
232
232
|
## Tools
|
|
233
233
|
|
|
234
|
+
| Tool | What it returns |
|
|
235
|
+
| --- | --- |
|
|
236
|
+
| `hasdata_youtube_channel_getYoutubeChannel` | Channel identity (title, description, avatar, banner, country, join date), subscriber and total-view counts, social links, and the items on the requested tab (videos…. 10 credits a call |
|
|
237
|
+
| `hasdata_youtube_search_getYoutubeSearchResults` | Searches YouTube for a query and returns the full results page split into `videoResults` (videoId, title, views, length, publish date, chapters, channel info, extensions…. 10 credits a call |
|
|
238
|
+
| `hasdata_youtube_transcript_getYoutubeTranscript` | The timed transcript (subtitles) of a YouTube video by its 11-character `videoId`. 10 credits a call |
|
|
239
|
+
| `hasdata_youtube_video_getYoutubeVideo` | Title, thumbnail, raw + normalized views and likes, `lengthSeconds`, publish date, category, keywords/tags, `isFamilySafe` / `isUnlisted` flags, the uploading channel…. 10 credits a call |
|
|
240
|
+
|
|
234
241
|
Four tools, all read-only. Samples below are trimmed from real calls, and the numbers in them move as YouTube updates. Read them as shapes. Each tool name links to its endpoint reference, which carries the full field list.
|
|
235
242
|
|
|
236
243
|
The samples are the payload, not the whole response. A `tools/call` result carries one text block, and that text is itself JSON holding `url`, `status`, `text` and `json`, with the scraped data under `json`. From a raw JSON-RPC response the path is `result.content[0].text`, parsed, then `.json`. A chat client unwraps that for you and code talking to the endpoint directly does not.
|
|
@@ -387,9 +394,9 @@ Every YouTube tool costs **10 credits per successful call**. Response size does
|
|
|
387
394
|
|
|
388
395
|
The free tier is **1,000 credits every month with no card**, which is 100 YouTube calls. It renews with the billing cycle, so a low-volume agent runs on the free tier indefinitely.
|
|
389
396
|
|
|
390
|
-
Paid plans start at **$
|
|
397
|
+
Paid plans start at **$59 a month** for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from **$2.95 per 1,000 calls** on the entry plan to **$1.19** on Basic and **$0.83** across the Growth tiers. Current figures live on the [pricing page](https://hasdata.com/prices?utm_source=github&utm_medium=syndication&utm_campaign=youtube-mcp).
|
|
391
398
|
|
|
392
|
-
Your plan also sets concurrency. The free tier allows 1 request at a time, Startup
|
|
399
|
+
Your plan also sets concurrency. The free tier allows 1 request at a time, Startup 5, Basic 15, and the Growth tiers run from 50 to 500. Handle the overflow case defensively in anything unattended, because an agent that fans out will reach the ceiling before you do.
|
|
393
400
|
|
|
394
401
|
A request that comes back non-200 is not billed. A successful call that finds nothing is still a call.
|
|
395
402
|
|
|
@@ -416,7 +423,7 @@ Against the official **YouTube Data API v3**:
|
|
|
416
423
|
| Transcripts of videos you do not own | `captions.download` "requires the user to have permission to edit the video", per [Google's reference](https://developers.google.com/youtube/v3/docs/captions/download) | Yes, with the language list |
|
|
417
424
|
| Chapters in search results | No | Yes |
|
|
418
425
|
| Views and likes in search results | Absent, and a second `videos.list` call returns them as strings | Display string and integer in the same response |
|
|
419
|
-
| Cost | Free inside the daily quota | Paid past the
|
|
426
|
+
| Cost | Free inside the daily quota | Paid past the free tier, 10 credits a call |
|
|
420
427
|
| Writes and private data | Uploads, playlists, comments and your own analytics over OAuth | Read-only, public data only |
|
|
421
428
|
|
|
422
429
|
The last two rows matter. If the daily quota covers your volume and you own the channel you are querying, the official API is the cheaper answer and you should take it.
|
package/index.mjs
CHANGED
|
@@ -6,7 +6,7 @@ import { spawn } from 'node:child_process';
|
|
|
6
6
|
import { createRequire } from 'node:module';
|
|
7
7
|
import { dirname, join } from 'node:path';
|
|
8
8
|
|
|
9
|
-
const URL = 'https://mcp.hasdata.com/
|
|
9
|
+
const URL = 'https://mcp.hasdata.com/mcp?apis=youtube';
|
|
10
10
|
const key = process.env.HASDATA_API_KEY;
|
|
11
11
|
if (!key) {
|
|
12
12
|
process.stderr.write('HASDATA_API_KEY is not set. Create a free key at https://app.hasdata.com and set HASDATA_API_KEY.\n');
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hasdata/youtube-mcp",
|
|
3
3
|
"mcpName": "com.hasdata/youtube",
|
|
4
|
-
"version": "1.0.
|
|
4
|
+
"version": "1.0.8",
|
|
5
5
|
"description": "MCP server for YouTube data (search, video, channel, transcript) through HasData's hosted API. No Google Cloud project, no YouTube Data API key. 1,000 free credits every month.",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"bin": {
|