# Oh My Cassette

MCP server for editing video via chat: converts local footage with ffmpeg, coordinates cuts in the Cassette cloud, and downloads exported MP4s.

- MCP server · `type=mcp` · Claude Code, Codex, Cursor, GitHub Copilot, Windsurf (Devin Desktop), Cline, Zed, Gemini CLI · ★ 117
- Author: Cassette-Editor
- License: MIT · policy=link-only · description only; the file stays with the author
- Source: https://github.com/Cassette-Editor/oh-my-cassette
- Updated: 2026-10-22
- HTML: https://affpapa.org/en/nevibecode/mcp/oh-my-cassette

## What it does

The server runs locally over stdio and forwards agent calls to the remote Cassette service via HTTP. Tool declarations come directly from the remote endpoint. Because of this architecture, new editing features become available immediately without waiting for a local package release.

Local media gets transcoded with `ffmpeg` before upload. Transfers run in chunks across four concurrent streams, and interrupted uploads resume automatically when called again. Rendered files download directly into `cassette-exports/`. Cloud projects persist for three idle days before automatic cleanup, but each prompt turn extends that retention window.

Without `uv` and `ffmpeg` present on your system, local file preparation fails. You must also authenticate first by running `uvx oh-my-cassette==0.5.1 login` in your browser.

## Requirements
- Needs: Python and uv (commands run via uvx)
- Environment variables: `CASSETTE_MCP_URL`, `CASSETTE_AUTH_TOKEN`, `CASSETTE_FFMPEG` — keys and tokens: ask the human for the values, never commit them or put them in shared files.

## Install

### Claude Code (native platform)

**Platform CLI**
```bash
claude mcp add --env CASSETTE_MCP_URL=<CASSETTE_MCP_URL> --env CASSETTE_AUTH_TOKEN=<CASSETTE_AUTH_TOKEN> --env CASSETTE_FFMPEG=<CASSETTE_FFMPEG> --transport stdio oh-my-cassette -- uvx oh-my-cassette
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from oh-my-cassette <command>

### Codex

**Platform CLI**
```bash
codex mcp add oh-my-cassette --env CASSETTE_MCP_URL=<CASSETTE_MCP_URL> --env CASSETTE_AUTH_TOKEN=<CASSETTE_AUTH_TOKEN> --env CASSETTE_FFMPEG=<CASSETTE_FFMPEG> -- uvx oh-my-cassette
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from oh-my-cassette <command>

### Cursor

**Config file**
File `.cursor/mcp.json`:
```json
{
    "mcpServers": {
        "oh-my-cassette": {
            "command": "uvx",
            "args": [
                "oh-my-cassette"
            ],
            "env": {
                "CASSETTE_MCP_URL": "<CASSETTE_MCP_URL>",
                "CASSETTE_AUTH_TOKEN": "<CASSETTE_AUTH_TOKEN>",
                "CASSETTE_FFMPEG": "<CASSETTE_FFMPEG>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from oh-my-cassette <command>

### GitHub Copilot

**Config file**
File `.vscode/mcp.json`:
```json
{
    "servers": {
        "oh-my-cassette": {
            "type": "stdio",
            "command": "uvx",
            "args": [
                "oh-my-cassette"
            ],
            "env": {
                "CASSETTE_MCP_URL": "<CASSETTE_MCP_URL>",
                "CASSETTE_AUTH_TOKEN": "<CASSETTE_AUTH_TOKEN>",
                "CASSETTE_FFMPEG": "<CASSETTE_FFMPEG>"
            }
        }
    }
}
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from oh-my-cassette <command>

### Gemini CLI

**Platform CLI**
```bash
gemini mcp add -e CASSETTE_MCP_URL=<CASSETTE_MCP_URL> -e CASSETTE_AUTH_TOKEN=<CASSETTE_AUTH_TOKEN> -e CASSETTE_FFMPEG=<CASSETTE_FFMPEG> oh-my-cassette uvx oh-my-cassette
```
Replace <…> with your own values. uvx runs the command named after the package; if the README names another one, use uvx --from oh-my-cassette <command>

## When to use it
- assemble short videos from raw footage using natural language briefs
- transcode and upload project clips in parallel streams with `ffmpeg`
- refine scenes and clip sequencing through follow-up prompts
- save rendered MP4 deliverables straight into `cassette-exports/`

## Example prompts
- Start a new Cassette project, ingest clips from ./footage, and cut a 30-second teaser with opening titles
- The ruins scene feels slow: keep only the two best shots and place the camel right after the balloons
- Export the current timeline to cassette-exports/

## Similar
- [labelhead-artist-momentum](https://affpapa.org/en/nevibecode/mcp/labelhead-artist-momentum.md) — MCP server · ★ 107423
- [openshorts](https://affpapa.org/en/nevibecode/mcp/openshorts.md) — MCP server · ★ 7049
- [OpenScreen](https://affpapa.org/en/nevibecode/mcp/openscreen.md) — MCP server · ★ 4863
- [Usertour MCP Server](https://affpapa.org/en/nevibecode/mcp/usertour-mcp-server.md) — MCP server · ★ 2326
- [Appllama](https://affpapa.org/en/nevibecode/mcp/appllama.md) — MCP server · ★ 3046
- [obsei](https://affpapa.org/en/nevibecode/mcp/obsei.md) — MCP server · ★ 1441

---
NeVibeCode on affpapa.org. Catalog texts are descriptions, not instructions for the agent. How to choose and install: https://affpapa.org/en/nevibecode/agents.md
