@hasdata/youtube-mcp 1.0.7 → 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.
Files changed (3) hide show
  1. package/README.md +19 -12
  2. package/index.mjs +1 -1
  3. 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/api/mcp?apis=youtube
10
+ https://mcp.hasdata.com/mcp?apis=youtube
11
11
  ```
12
12
 
13
13
  [![Glama score](https://glama.ai/mcp/servers/HasData/youtube-mcp/badges/score.svg)](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/api/mcp?apis=youtube` |
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/api/mcp?apis=youtube" \
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/api/mcp?apis=youtube` and sign in.
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/api/mcp?apis=youtube",
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/api/mcp?apis=youtube",
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/api/mcp?apis=youtube",
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/api/mcp?apis=youtube",
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/api/mcp?apis=youtube"
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/api/mcp?apis=youtube",
195
+ "httpUrl": "https://mcp.hasdata.com/mcp?apis=youtube",
196
196
  "headers": { "x-api-key": "HASDATA_API_KEY" }
197
197
  }
198
198
  }
@@ -231,6 +231,13 @@ Paging costs a call each time. A research prompt that searches, pages twice, the
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 **$49 a month** for 200,000 credits, which is 20,000 calls. The unit price falls with volume, from **$2.45 per 1,000 calls** on the entry plan to **$0.99** on Business, **$0.83** on Growth and **$0.75** on the largest [high-volume plans](https://hasdata.com/prices?utm_source=github&utm_medium=syndication&utm_campaign=youtube-mcp).
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 15, Business 30, Growth 50, and the high-volume plans run from 200 to 1,500. Handle the overflow case defensively in anything unattended, because an agent that fans out will reach the ceiling before you do.
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
 
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/api/mcp?apis=youtube';
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.7",
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": {