---
name: fastclip
description: Make a clip of one chosen moment of a video with FastClip's MCP server. Import a YouTube, X, Twitch or Google Drive link (or find a video in the person's FastClip library), find the moment in the transcript, render an MP4 (original frame, or vertical 9:16 with burned-in captions) and give the person the download link. Use when someone asks to clip, cut, or make a Short, Reel or TikTok from a part of a video.
---

# FastClip

FastClip (https://fastclips.app) cuts one moment out of a long video and renders it as an MP4: the original frame, or vertical 9:16 (1080 × 1920) with word-by-word captions burned in. You work through FastClip's hosted MCP server, in the person's own FastClip account. The person chooses the moment. You find its exact start and end and make the clip.

Facts in this file were checked against FastClip's code on 2026-10-15.

## 1. Check the connection

If you have the tools `import_video`, `get_transcript` and `create_clip` from a server named fastclip, go to section 2.

If you do not, help the person connect. There are two ways.

**Sign-in (OAuth), no token.** Use it in an app where the person can add a custom remote MCP server by its address: Claude on the web and in the desktop app (a custom connector), ChatGPT in developer mode, Grok (a custom connector). The person adds the server URL `https://api.fastclip.it/mcp`. The app opens FastClip's sign-in. The person signs in and allows access; FastClip lists what the app can do. The person disconnects the app in Settings, then Agents: https://web.fastclips.app/settings/agents. Status: FastClip tested this sign-in end to end with a generic client, not yet from each of these apps, and FastClip is not in their directories yet. If the app cannot add a custom server by its address, use a token.

**Token**, for Claude Code, Codex, Cursor, VS Code and any client that sends a header:

1. The person signs in at https://web.fastclips.app (free, no credit card) and opens Settings, then Agents: https://web.fastclips.app/settings/agents. They create a token. FastClip shows it one time. It starts with `fc_`.
2. The token is a password. Ask the person to put it into the command or file themselves, in place of `YOUR_TOKEN`. Do not ask them to paste it into the chat.
3. Give the person the setup for their client:

- Claude Code (run in a terminal, then start a new Claude Code session):

```sh
claude mcp add --transport http --scope user fastclip https://api.fastclip.it/mcp --header "Authorization: Bearer YOUR_TOKEN"
```

- Codex (put the export line in the shell profile, then start Codex again):

```sh
export FASTCLIP_TOKEN="YOUR_TOKEN"
codex mcp add fastclip --url https://api.fastclip.it/mcp --bearer-token-env-var FASTCLIP_TOKEN
```

  Or in `~/.codex/config.toml`:

```toml
[mcp_servers.fastclip]
url = "https://api.fastclip.it/mcp"
bearer_token_env_var = "FASTCLIP_TOKEN"
```

- Cursor: open the install link, then replace `YOUR_TOKEN` in Cursor's MCP settings:

  cursor://anysphere.cursor-deeplink/mcp/install?name=fastclip&config=eyJ1cmwiOiJodHRwczovL2FwaS5mYXN0Y2xpcC5pdC9tY3AiLCJoZWFkZXJzIjp7IkF1dGhvcml6YXRpb24iOiJCZWFyZXIgWU9VUl9UT0tFTiJ9fQ%3D%3D

  Or add to `~/.cursor/mcp.json`:

```json
{
  "mcpServers": {
    "fastclip": {
      "url": "https://api.fastclip.it/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_TOKEN"
      }
    }
  }
}
```

- VS Code (agent mode): open the install link. VS Code asks for the token the first time the server starts and stores it securely:

  vscode:mcp/install?%7B%22name%22%3A%22fastclip%22%2C%22type%22%3A%22http%22%2C%22url%22%3A%22https%3A%2F%2Fapi.fastclip.it%2Fmcp%22%2C%22headers%22%3A%7B%22Authorization%22%3A%22Bearer%20%24%7Binput%3Afastclip-token%7D%22%7D%2C%22inputs%22%3A%5B%7B%22type%22%3A%22promptString%22%2C%22id%22%3A%22fastclip-token%22%2C%22description%22%3A%22FastClip%20token%22%2C%22password%22%3Atrue%7D%5D%7D

  Or run:

```sh
code --add-mcp '{"name":"fastclip","type":"http","url":"https://api.fastclip.it/mcp","headers":{"Authorization":"Bearer ${input:fastclip-token}"},"inputs":[{"type":"promptString","id":"fastclip-token","description":"FastClip token","password":true}]}'
```

- Any other client that can call a remote MCP server over Streamable HTTP and send a header: server URL `https://api.fastclip.it/mcp`, header `Authorization: Bearer YOUR_TOKEN`.

If you can run shell commands but cannot add an MCP server, call the server directly. The person sets `FASTCLIP_TOKEN` in your environment; every tool works the same way:

```sh
curl -s https://api.fastclip.it/mcp \
  -H "Authorization: Bearer $FASTCLIP_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_videos","arguments":{"limit":5}}}'
```

The tool result is JSON text in `result.content[0].text`. When `result.isError` is true, that JSON has `error` (a code) and `message` (what to do). A browser that opens https://api.fastclip.it/mcp gets a reference page with every tool and its JSON schema.

## 2. Make the clip

1. `import_video` with the link. If the person names a video without a link, use `list_videos` with `query`. Keep `video_id`. When `can_create_clips` is true, go on at once: you do not have to wait for `status: "ready"`.
2. `get_transcript` with `video_id` and `query`: distinctive words the speaker says at that moment. It is a keyword search, not a search by meaning. Then read around the best passage: `get_transcript` with `start` about 30 seconds before `match_start` and an `end` after it, to find where the thought begins and ends.
3. `create_clip` with `video_id`, `start` and `end` in seconds. Use `format: "vertical"` for Shorts, Reels and TikTok. Captions are on by default. For "a 45-second clip", make `end - start` about 45 and start at the beginning of a sentence.
4. `get_clip` with `clip_id`, every `retry_after_seconds` (about 10 seconds), until `status` is `"finished"`. If it is not finished after a few minutes, tell the person and give `app_url`.
5. Give the person `download_url` (the MP4) and `app_url` (the clip in FastClip, where they edit the title and the post text and post it). Anyone with `download_url` can open it, so give it only to the person.

Each successful `create_clip` uses one clip of the person's plan. Make the clip the person asked for. Do not make variations or batches nobody asked for. Before you clip a range again, `list_clips` shows the clips that exist.

## 3. Tools

All times are seconds from the start of the video.

### import_video

Adds a video from a link, or returns it if the account has it. Links: YouTube, X (Twitter) posts with a video, Twitch VODs and clips, Google Drive video files shared as "Anyone with the link". The same link never imports twice; calling again shows progress and retries a failed import. `status`: `ready`, `downloading`, `queued` (YouTube refuses downloads now; FastClip retries by itself) or `failed` (with the reason).

- `url` (string, required): the full link, starting with https://.

### list_videos

Lists the videos in the account, newest first, with `video_id`, title, channel, length and import status. New accounts hold a few sample videos.

- `query` (string, optional): text the title or the channel name contains.
- `limit` (integer 1 to 50, optional, default 20): how many videos.

### get_transcript

Reads what is said, with times. With `query`: up to 8 passages that contain the words, best first, each with `match_start`, `match_end` and about 45 seconds of text. Every significant word must be spoken within about 45 seconds of the others; one typo per word is tolerated. Without `query`: the lines from `start` to `end`, at most 10 minutes or 12,000 characters per call; `next_start` says where to continue. `status: "fetching"`: call again in about 15 seconds. `status: "unavailable"`: there is no transcript; use `get_moments` or ask the person for the times.

- `video_id` (string, required): from `import_video` or `list_videos`.
- `start` (number, optional): read or search from this time. Without it: from 0.
- `end` (number, optional): read or search up to this time. Without it: 10 minutes after `start`.
- `query` (string, optional): the words to look for.

### get_moments

Returns what FastClip knows about where to look: the uploader's chapters, YouTube's "Most replayed" peaks, the person's bookmarks, moments a model picked from the transcript, and loud moments. Empty lists are normal. Nothing here predicts how a clip will perform. Use it for "the best part", "the part I bookmarked", a chapter by name, or when there is no transcript.

- `video_id` (string, required).

### create_clip

Cuts `start` to `end` and renders the MP4 in the background. Returns `clip_id` and a status at once. The same range asked for again within two minutes returns the same clip. Works while the video is still importing.

- `video_id` (string, required).
- `start` (number, required): where the clip begins.
- `end` (number, required): where the clip ends; greater than `start`.
- `format` ("original" or "vertical", optional, default "original"): "vertical" is 9:16, 1080 × 1920; the frame follows faces when FastClip finds them.
- `captions` (boolean, optional, default true): burn in word-by-word captions in the person's caption style.
- `title` (string, optional): in the language of the video. Without one, FastClip writes one.

### get_clip

The state of a clip: `preparing`, `waiting_for_video`, `rendering` (with `progress_percent`), `finished`, `failed` (with the reason) or `not_finished`. A finished clip has `download_url`, `width`, `height`, `duration_seconds` and `app_url`.

- `clip_id` (string, required): from `create_clip` or `list_clips`.

### list_clips

Lists the clips in the account, newest first, with `clip_id`, video, range, status and `download_url` when finished.

- `video_id` (string, optional): only the clips of this video.
- `limit` (integer 1 to 50, optional, default 20): how many clips.

## 4. Limits

- A clip is 1 second to 5 minutes long.
- Each token or connected app: 120 requests a minute.
- Each account, in 10 minutes: 6 new videos, 60 `import_video` calls and 20 `create_clip` calls. A limit returns `rate_limited` with `retry_after_seconds`.
- The plan: clips and imports made by an agent count like the person's own. The free plan has 100 finished clips and 50 YouTube or upload imports in total, and up to 30 finished clips a day. At a plan limit, `import_video` or `create_clip` returns `limit_reached`; the person sees the plan in the app.
- Each account can have up to 10 tokens and up to 50 connected apps.

## 5. What FastClip cannot do

- Post a clip to a social network, change settings or delete anything through the agent. The person posts from `app_url` or downloads the MP4.
- Upload a file through the agent. The person uploads the file in the app (https://web.fastclips.app); then `list_videos` finds it.
- Cut a batch of clips by itself, or score clips for virality. The person chooses the moment.
- Search the transcript by meaning. Use words the speaker says.

## 6. Troubleshooting

- YouTube refuses the download (`status: "queued"`, or `failed` with YouTube's bot check): YouTube refuses many downloads from FastClip's servers. FastClip retries a queued import by itself for about a day, and the result says when. When `can_create_clips` is true, a clip created now is finished after the import succeeds. Faster: if the person has the video file (their own podcast or recording), they upload it in the app, and you clip the upload.
- `status: "failed"`: `message` gives the reason (private, members only, age-restricted, not finished, Drive file not shared). `import_video` with the same link tries again.
- HTTP 401: the token is missing, unknown or revoked, or the connected app was disconnected. The person creates a new token, or connects the app again, at https://web.fastclips.app/settings/agents.
- `video_not_found` or `clip_not_found`: the id is not in this account. Call `list_videos` or `list_clips`.
- No passage found: try fewer words, or other words the speaker would say, or read the transcript by time range.
- `invalid_range`: `end` must be greater than `start`.
