Skip to main content
ClaudeWave

MCP server for the AppsGolem YouTube cutter API — cut YouTube clips programmatically, or let an AI agent do it. npx appsgolem-mcp

MCP ServersOfficial Registry0 stars0 forksTypeScriptMITUpdated today
ClaudeWave Trust Score
87/100
Trusted
Passed
  • Open-source license (MIT)
  • Actively maintained (<30d)
  • Clear description
  • Documented (README)
Last scanned: 8/25/2026
Install in Claude Code / Claude Desktop
Method: NPX · appsgolem-mcp
Claude Code CLI
claude mcp add appsgolem-mcp -- npx -y appsgolem-mcp
claude_desktop_config.json (Claude Desktop)
{
  "mcpServers": {
    "appsgolem-mcp": {
      "command": "npx",
      "args": ["-y", "appsgolem-mcp"],
      "env": {
        "APPSGOLEM_API_KEY": "<appsgolem_api_key>"
      }
    }
  }
}
1. Run the command above in your terminal (Claude Code), or paste the JSON config into claude_desktop_config.json (Claude Desktop).
2. Replace any <placeholder> values with your API keys or paths.
3. Restart Claude. The MCP server and its tools appear automatically.
Detected environment variables
APPSGOLEM_API_KEY
Use cases

MCP Servers overview

# appsgolem-mcp (Node / TypeScript)

[![npm](https://img.shields.io/npm/v/appsgolem-mcp)](https://www.npmjs.com/package/appsgolem-mcp)

An [MCP](https://modelcontextprotocol.io) 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.

## Requirements

- Node.js >= 18 (uses the global `fetch`).
- An AppsGolem API key (`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.

## Install / connect (no manual install)

`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`):

```json
{
  "mcpServers": {
    "appsgolem": {
      "command": "npx",
      "args": ["-y", "appsgolem-mcp"],
      "env": { "APPSGOLEM_API_KEY": "ag_live_…" }
    }
  }
}
```

**Claude Code** — one command:

```bash
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.

## Configuration

| 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. |

## Pricing

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.**

---

## Tools

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.)

### 1. `cut_youtube_video`

Cut 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:

```json
{
  "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`):

```json
{
  "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).

### 2. `get_cut_status`

Check 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):

```json
{ "id": "e48db1a2-…", "state": "queued", "credits_reserved": 1, "created_at": "…" }
```

States progress `accepted → queued → produced → delivered`, or
`failed → refunded` on error.

### 3. `get_account_balance`

Return the API account's spendable credit balance and current hourly cap. No
parameters.

**Returns**

```json
{ "balance": 412, "hourly_cap": 60 }
```

---

## Modes

| `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` |

---

## Example prompts

Because the agent picks the parameters from your request, you drive it in plain
language:

- *"Cut 0:30 to 1:15 from https://youtu.be/dQw4w9WgXcQ in 1080p."* →
  `cut_youtube_video(url, start="0:30", end="1:15")`
- *"Grab the audio of that video from 2:00 to 5:00 as an mp3."* →
  `mode="audio_only", audio_format="mp3"`
- *"Make a vertical short of the 10:00–10:45 highlight."* →
  `mode="short", start="10:00", end="10:45"`
- *"Turn 0:05–0:12 into a GIF."* → `mode="gif"`
- *"Extract a contact sheet of frames every 5 seconds from 1:00 to 2:00."* →
  `mode="frames", interval_ms=5000, sheet=true`
- *"Stitch 0:10–0:20 and 1:00–1:10 into one clip."* →
  `clips=[{start:"0:10",end:"0:20"},{start:"1:00",end:"1:10"}], stitch=true`
- *"Do a fast, stream-copy cut of 0:00–0:30."* → `fast=true`
- *"How many API credits do I have left?"* → `get_account_balance()`

---

## Result & error shapes

Every result from a handler is a plain object (MCP argument-validation
failures are the exception — see the Tools note above). On failure the objec

What people ask about appsgolem-mcp

What is apancyborg/appsgolem-mcp?

+

apancyborg/appsgolem-mcp is mcp servers for the Claude AI ecosystem. MCP server for the AppsGolem YouTube cutter API — cut YouTube clips programmatically, or let an AI agent do it. npx appsgolem-mcp It has 0 GitHub stars and its last recorded update is dated 2026-08-24.

How do I install appsgolem-mcp?

+

You can install appsgolem-mcp by cloning the repository (https://github.com/apancyborg/appsgolem-mcp) or following the README instructions on GitHub. ClaudeWave also provides quick install blocks on this page.

Is apancyborg/appsgolem-mcp safe to use?

+

Our security agent has analyzed apancyborg/appsgolem-mcp and assigned a Trust Score of 87/100 (tier: Trusted). See the full breakdown of passed checks and flags on this page.

Who maintains apancyborg/appsgolem-mcp?

+

apancyborg/appsgolem-mcp is maintained by apancyborg. The last recorded GitHub activity is dated 2026-08-24, with 0 open issues.

Are there alternatives to appsgolem-mcp?

+

Yes. On ClaudeWave you can browse similar mcp servers at /categories/mcp, sorted by popularity or recent activity.

Deploy appsgolem-mcp to your cloud

Ship this repo to production in minutes. Each platform spins up its own environment with editable env vars.

Maintain this repo? Add a badge to your README

Drop the badge into your GitHub README to show it's tracked on ClaudeWave. Each badge links back to this page and reflects the live Trust Score.

Featured on ClaudeWave: apancyborg/appsgolem-mcp
[![Featured on ClaudeWave](https://claudewave.com/api/badge/apancyborg-appsgolem-mcp)](https://claudewave.com/repo/apancyborg-appsgolem-mcp)
<a href="https://claudewave.com/repo/apancyborg-appsgolem-mcp"><img src="https://claudewave.com/api/badge/apancyborg-appsgolem-mcp" alt="Featured on ClaudeWave: apancyborg/appsgolem-mcp" width="320" height="64" /></a>

More MCP Servers

appsgolem-mcp alternatives