MCP YouTube Transcript
An MCP server retrieving transcripts of YouTube videos
作者提供的说明(英文原文)
Cut clips from YouTube videos in any format and get a direct download URL.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
APPSGOLEM_API_KEY, APPSGOLEM_API_BASE标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 claude_desktop_config.json
{
"mcpServers": {
"appsgolem": {
"command": "npx",
"args": [
"-y",
"appsgolem-mcp"
],
"env": {
"APPSGOLEM_API_KEY": "your-value",
"APPSGOLEM_API_BASE": "your-value"
}
}
}
}在终端中运行这条命令
claude mcp add appsgolem --env APPSGOLEM_API_KEY=your-value --env APPSGOLEM_API_BASE=your-value -- npx -y appsgolem-mcp运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"appsgolem": {
"command": "npx",
"args": [
"-y",
"appsgolem-mcp"
],
"env": {
"APPSGOLEM_API_KEY": "your-value",
"APPSGOLEM_API_BASE": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"appsgolem": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"appsgolem-mcp"
],
"env": {
"APPSGOLEM_API_KEY": "your-value",
"APPSGOLEM_API_BASE": "your-value"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
APPSGOLEM_API_BASE env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 apancyborg 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:APPSGOLEM_API_KEY
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.1.2)于2个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:MCP YouTube Transcript, Google Analytics MCP, BibiGPT YouTube Video Summarizer
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
An MCP server retrieving transcripts of YouTube videos
GA4 MCP server for AI agents: schema discovery, server-side aggregation, analysis-ready defaults.
AI video summarizer: summarize and transcribe YouTube, Bilibili, TikTok and podcast videos.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
An MCP server for the AppsGolem YouTube cutter API. It lets an AI agent (Claude Desktop, Claude Code, Cursor, …) cut clips from YouTube videos — in any format the web cutter supports — and get a direct download URL back. The REST logic lives in a small, dependency-light client (src/client.ts); src/server.ts is the thin MCP tool layer over it.
Get your API key → [appsgolem.com/agents](https://appsgolem.com/agents) — sign up, add prepaid
credits, and generate a key (
ag_live_…). That page also has copy-paste
setup for Claude Code, Codex, Cursor, and any MCP client, plus a prompt
cookbook.
fetch).ag_live_…) — get one at [appsgolem.com/agents](https://appsgolem.com/agents) (sign up → add credits → generate a key in your dashboard). Credits are prepaid; buy a pack or a subscription, no auto-renewal required.npx fetches and runs the server on demand — nothing to install globally.
Claude Desktop / Cursor — add to the client's MCP config (e.g. claude_desktop_config.json):
{
"mcpServers": { "appsgolem": { "command": "npx", "args": ["-y", "appsgolem-mcp"], "env": { "APPSGOLEM_API_KEY": "ag_live_…" } } } }
Claude Code — one command:
claude mcp add appsgolem -e APPSGOLEM_API_KEY=ag_live_… -- npx -y appsgolem-mcp
The server speaks MCP over stdio (the transport those clients use). A missing APPSGOLEM_API_KEY is not fatal at startup — the server still starts and advertises its tools; each call then returns a clear config_error telling you to set the key.
| Env var | Required | Default | Notes |
|---|---|---|---|
APPSGOLEM_API_KEY | yes | — | Your ag_live_… key. |
APPSGOLEM_API_BASE | no | https://appsgolem.com | Override for self-host / dev. |
1 produced clip = 1 credit. 2160p (4K) = 4 credits per clip — *except* audio_only, which stays 1. A source longer than 2 h adds +1 once per job, but only when its duration is known (the surcharge is skipped if the probe can't determine it). A batch/stitch of *N* clips costs *N* per-clip. Failed cuts are never billed.
The server exposes three tools. A call that passes MCP input-schema validation returns a structured result — the API's own JSON on success, or { "error": … } on any handler/API failure — and never raises a protocol-level error, so an agent always gets a usable object. (Invalid tool *arguments* are rejected by the MCP SDK before the handler runs, as a text-only isError result.)
cut_youtube_videoCut a clip (or a batch of clips) from a YouTube video. By default it waits until the clip is produced and returns its status (including a download_url once a download token is ready); set wait: false to submit and return immediately with the current job (its state is normally queued after dispatch).
Parameters
| Name | Type | Default | Notes |
|---|---|---|---|
url | string | — | Required. YouTube watch / share / youtu.be URL. Playlists are rejected. |
start | string | — | Clip start: "SS", "MM:SS", or "HH:MM:SS" (≤ 300 h). Omit when using clips. |
end | string | — | Clip end, same formats (≤ 300 h). Omit when using clips. |
resolution | string | 1080p | 144p · 240p · 360p · 480p · 720p · 1080p · 1440p · 2160p (4K; total cut ≤ 60 min). |
mode | string | video | video · audio_only · both · nosound · short · gif · frames (see Modes below). |
audio_format | string | — | The audio_only output format: mp3 · m4a · wav · flac (server defaults to mp3). both always produces MP3. |
bitrate | string | — | Lossy-audio bitrate 320 · 256 · 192 · 128 (default 320): MP3/M4A in audio_only, MP3 in both; ignored for WAV/FLAC. |
fast | boolean | false | Stream-copy (≈10× faster, keyframe-aligned); video / nosound / both only. Mutually exclusive with a non-1× speed — if both are set, fast wins and speed is forced to 1.0. |
speed | number | 1.0 | Playback speed 0.5 · 1 · 1.25 · 1.5 · 2. video / nosound / both / audio_only. |
interval_ms | integer | 2000 | frames sampling interval: 100 · 500 · 1000 · 2000 · 5000 · 10000 (non-sheet extraction is capped at 1,800 JPGs total across all clips). |
burn_ts | boolean | false | frames: burn the source timestamp onto each JPG. |
sheet | boolean | false | frames: return a single contact-sheet JPG (2–80 frames, single clip). Setting it disables burn_ts. |
clips | array | — | An array of 1–10 { start, end } ranges instead of start/end (an empty array is rejected). |
stitch | boolean | false | With 2+ clips, join them into one file (else a zip of clips); ignored for a single clip. video / audio_only / both / short / nosound. |
idempotency_key | string | — | A stable key (≤ 200 chars) so a retried request reuses the same job (sent as the Idempotency-Key header). |
wait | boolean | true | Poll until ready, up to the timeout_seconds polling deadline. |
timeout_seconds | integer | 300 | Polling deadline in seconds (default 300). It bounds the *polling* only — the initial submission and one in-flight status request (each up to a 30 s request timeout) can extend total wall-clock. |
Returns (`wait: true`, default) — the produced job status. download_url is present once a download token is available; if it isn't yet, poll again:
{
"id": "e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b", "state": "produced", "credits_reserved": 1, "created_at": "2026-08-22T12:00:00+00:00", "download_url": "https://appsgolem.com/v1/download/…/clip.mp4" }
Returns (`wait: false`) — the job immediately, with its current state (normally queued after dispatch) and no download_url yet; poll get_cut_status with the id (or fetch poll_url):
{
"id": "e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b", "state": "queued", "credits_reserved": 1, "poll_url": "/v1/cuts/e48db1a2-1c3d-4e5f-8a9b-0c1d2e3f4a5b" }
If the wait times out before the clip is ready, the result carries "still_processing": true and the job id — poll get_cut_status with that id. If the job reaches a terminal failure, the result is { "error": "cut_failed", "state": "failed" | "refunded", "id": … } (and no credit is charged).
get_cut_statusCheck a cut job by its id. Use it to poll a job started with cut_youtube_video(wait=false) or one that timed out.
| Name | Type | Notes |
|---|---|---|
job_id | string | Required. The job id (a UUID) returned by cut_youtube_video. |
Returns — the job's state; once produced/delivered it also carries a download_url when a download token is available (otherwise poll again):
{ "id": "e48db1a2-…", "state": "queued", "credits_reserved": 1, "created_at": "…" }
States progress accepted → queued → produced → delivered, or failed → refunded on error.
get_account_balanceReturn the API account's spendable credit balance and current hourly cap. No parameters.
Returns
{ "balance": 412, "hourly_cap": 60 }
mode | Output | Notable options |
|---|---|---|
video | Video file, no watermark — normally MP4; fast preserves the source container (e.g. WebM at high res) | resolution, fast, speed |
audio_only | mp3 / m4a / wav / flac | audio_format, bitrate, speed |
both | Video + MP3 together, as a zip (fast may preserve the video's source container) | bitrate, fast, speed |
nosound | Video with no audio track — normally MP4; fast preserves the source container | resolution, fast, speed |
short | Portrait 9:16 — AI smart-crop when applicable, else a letterbox-blur fallback whose exact aspect depends on the source (Shorts / Reels / TikTok) | resolution |
gif | Animated GIF (≤ 5 min; no multi-clip) | resolution |
frames | JPG stills | interval_ms, burn_ts, sheet |
Because the agent picks the parameters from your request, you drive it in plain language:
cut_youtube_video(url, start="0:30", end="1:15")mode="audio_only", audio_format="mp3"mode="short", start="10:00", end="10:45"mode="gif"mode="frames", interval_ms=5000, sheet=trueclips=[{start:"0:10",end:"0:20"},{start:"1:00",end:"1:10"}], stitch=truefast=trueget_account_balance()Every result from a handler is a plain object (MCP argument-validation failures are the exception — see the Tools note above). On failure the object has an error code (the tool call still succeeds):
error | When |
|---|---|
config_error | APPSGOLEM_API_KEY is missing. |
invalid_api_key | The key was rejected (401). |
invalid_job_id | job_id isn't a UUID. |
not_found | No such job for this account (404). |
cut_failed | The job reached failed/refunded (never billed). |
network_error | Connection/transport failure or request timeout. |
bad_request | The configured API base/path couldn't be built into a URL. |
http_error | A ≥400 response whose JSON body isn't an { error: … } object (carries status). |
bad_response | A success response whose body isn't a JSON object (array/scalar/null), or — with wait: true — a cut submission that came back without a usable job id. |
API-level errors — validation 400, 402 insufficient_credits, 404 not_found, 409 idempotency_conflict / duplicate_in_flight, 429 rate_limited, and 503 rate_limiter_unavailable / database_busy — are returned as the API's own error body plus a status field. A 429 also includes retry_after (seconds, from Retry-After) plus a reason (submission_cap · request_rate · poll_rate) so an agent can tell which limit it hit and back off correctly. A 503 is usually transient (retry after a short delay), but a persistent 503 is a server-side problem to report — not to retry indefinitely.
Status polling is not rate-limited for normal use — checking a job's progress never counts against your submissions/hour cap. You never need to throttle get_cut_status yourself: cut_youtube_video(wait=true) polls and paces for you (honoring the server's poll_after cadence and any Retry-After), so a single tool call handles even long jobs.
Produced download links expire after a bounded window (~72 hours by default on appsgolem.com; configurable per deployment) — fetch the file within it.
A relative download_url (the API returns
只显示了开头部分;其余内容请在仓库中阅读