Skip to content
Content
MCP

cassette

Ships with oh-my-cassette: 你的随身 AI 剪辑搭档 | Pocket AI co-editor for video montage — AI video editing plugin & MCP server for Claude Code, Codex, Hermes & OpenCode

From plugin
oh-my-cassette
2001 skill1 MCP

Claude Code

> /plugin marketplace add Cassette-Editor/oh-my-cassette
> /plugin install oh-my-cassette@cassette-editor

Security report

Found

Low risk

  • Known flaws

    None known

  • Signed build

    Yes

    Build provenance published

  • Maintained

    Nov 1, 2026

    Last push

  • Licence

    MIT

  • Runs as

    uvx

    On your machine

  • Deprecated

    No

Signals from public registries, not an audit. Checked Nov 11, 2026.

oh-my-cassette README

Oh My Cassette

Edit video by talking to the Cassette agent from Claude Code, Codex, OpenCode or Hermes. A small MCP bridge on PyPI. The editing tools come from the Cassette MCP service, so they stay current without a plugin update.

PyPI

MIT

Discord

中文


One Claude Code session: import five 4K films and a song, ask for a 30-second teaser, revise it, export it

One Claude Code session, typed as you see it. Five 4K travel films (10½ minutes of footage) and a song go in, a four-sentence brief and a one-line revision go to the Cassette agent word for word, and a 30-second 1080p MP4 lands in cassette-exports/. Waits are fast-forwarded: in real time the import took 4½ minutes, the first cut 9½, the revision 3½ and the export 1.

Cut a 30-second teaser for Turkey from these five films, on the beat of Pamgaea.mp3. Open on a hot-air balloon lighting up at dawn in Cappadocia, travel from the ancient ruins to the sea, name each place when it first appears, and end on the misty lake with the title TURKEY.

The ruins part drags. Keep only the two best Ephesus shots, and put the camel right after the balloons.

Frames of the teaser it made: the balloon at dawn, the camel, two Ephesus shots, the Datça coast, the misty lake with the title TURKEY

Watch the teaser it made (MP4, 30 s, with sound). Footage and music credits are below.

Install in 30 seconds

You need uv (it fetches Python and the package on first start) and ffmpeg to import video.

# Claude Code
claude plugin marketplace add Cassette-Editor/oh-my-cassette
claude plugin install oh-my-cassette@cassette-editor
# Codex
codex plugin marketplace add https://github.com/Cassette-Editor/oh-my-cassette.git
codex plugin add oh-my-cassette@cassette-editor
# Hermes
hermes mcp add cassette --command uvx --args oh-my-cassette==0.6.0

OpenCode and any other MCP host: see Install below. Run uvx oh-my-cassette==0.6.0 login and complete the email-code sign-in in your browser. Then restart your agent if it cannot refresh its tool list, and say:

Start a new Cassette project and import the clips in ./footage, then cut a 30-second travel video with a title at the start.

Upgrading from 0.4

0.5 is a rewrite. The 0.4 plugin carried its own editing runtime, music search and Hermes gateway; 0.5 is a thin bridge to the Cassette MCP service, and the tools your agent sees are the service's.

  • Sign in again with uvx oh-my-cassette==0.6.0 login. 0.4 passwords and tokens are not used.
  • Tools are new. Projects, editing turns, questions, plans, undo, media, analysis and export come from the service, with their own descriptions; the 0.4 tool names (cassette_run_job, cassette_ingest_media, cassette_match_bgm, …) are gone. Reinstall the plugin, or point your host config at uvx oh-my-cassette==0.6.0.
  • Projects live in your Cassette account, the same ones you open on the web or in Cassette for Mac, and the editor link each answer carries opens the project you are working on. 0.4 sessions do not carry over.
  • Hermes is a plain MCP host now; remove the 0.4 gateway plugin.

Projects and retention

A project the bridge starts is a cloud project that Cassette deletes, with its media, after three idle days; every use pushes that back, and each answer says when it is due (retention_expires_at). Exported files are already on your machine in cassette-exports/ and stay there. A project made in Cassette for Mac is kept, and the bridge can open, edit and export it while that Mac is online, but its media are imported in the app.

Overview

Oh My Cassette connects your coding agent to the Cassette editing agent. It is a local stdio MCP server that relays to the Cassette MCP service (CASSETTE_MCP_URL), which in turn calls the Cassette backend:

Claude Code / Codex / OpenCode / Hermes  ──stdio──▶  oh-my-cassette  ──HTTP──▶  Cassette MCP service  ──▶  Cassette backend
  • The tools are the service's. Whatever it lists (projects, editing turns, questions, undo, export) is what your agent sees, with the service's own descriptions and workflow instructions. When Cassette changes, the tools change with it; the plugin does not need a release.
  • The bridge adds only what needs your machine. Local files named in a call are prepared and uploaded first (only from the workspace, media types only): video is transcoded with ffmpeg into the renditions the service declares, and audio or images it does not take as they are get converted. Each file uploads while the next one is prepared, in parts, four transfers at a time; a file whose upload was interrupted picks up its earlier import when you import it again. Exported files are downloaded into cassette-exports/. The workspace identity travels with each call so the service can remember a project per directory.
  • Long work never times out the host. Every call waits a bounded time; slow local preparation answers preparing and keeps going in the background, and the next identical call picks it up.
  • It survives deploys. It reconnects on its own, sends a call that names its request again when the connection drops or the service turns it away, resumes interrupted downloads, reports bridge.* errors with a retryable flag (and retry_after_seconds when the service said when), and, while the service is unreachable or refuses the token, lists a single cassette_bridge_status tool that says why.

The rules between the plugin and the service are defined in src/oh_my_cassette/contract.py; oh-my-cassette check verifies a service against them.

Requirements

  • An invited Cassette account and a Cassette MCP service that implements contract v1. Check it with uvx oh-my-cassette==0.6.0 check --url <endpoint>. While the service is unreachable or refuses the token, only cassette_bridge_status is listed.
  • uv 0.5 or newer. uvx oh-my-cassette==0.6.0 resolves Python 3.11 or newer by itself.
  • ffmpeg (with ffprobe) to import video: brew install ffmpeg, sudo apt install ffmpeg or winget install ffmpeg. Video is transcoded on your machine before it uploads. A build with zscale also tone-maps HDR footage properly.

Which formats a tool accepts, and how files are prepared before upload, is declared by the service (video, audio and image types at most).

Configuration

Sign in once with oh-my-cassette login, using the Cassette account of your projects: the browser asks for the emailed code and your consent. One sign-in reaches every project of the account, whether it was made on the web or in Cassette for Mac. A project whose media lie on a Mac opens in the app on that Mac; reading its pictures or sound and exporting it need that Mac online, and its media are imported there. Login, status and logout use your operating-system keyring; no token needs to be copied. Environment variables below are optional overrides.

VariableDefaultMeaning
CASSETTE_MCP_URLthe saved connection, otherwise https://mcp.trycassette.online/mcpExplicit MCP endpoint override.
CASSETTE_AUTH_TOKENunsetAdvanced bearer-token override. Normally use login; the same account, scope and resource checks apply. Never place it in shared configuration.
CASSETTE_WORKSPACEthe directory the host starts the server inWhere relative paths resolve, where local files may come from, and the directory the service may remember a project for. A host that starts the server in the whole disk or your home folder gives it no files to read until you set this, or CASSETTE_ALLOWED_ROOTS.
CASSETTE_ALLOWED_ROOTSunsetExtra directories local files may come from (:-separated; ; on Windows).
CASSETTE_DOWNLOAD_DIR<workspace>/cassette-exportsWhere exported files are saved. The default must stay inside the workspace: a cassette-exports symlink leading elsewhere is refused.
CASSETTE_MAX_UPLOAD_MB / CASSETTE_MAX_DOWNLOAD_MB4096 / 16384Size limits per file.
CASSETTE_UPLOAD_ANY_TYPEoffAllow non-media uploads when a tool accepts them.
CASSETTE_LOCAL_WAIT_SEC240How long one call waits for local preparation and upload before it answers preparing.
CASSETTE_FFMPEG / CASSETTE_FFPROBEfrom PATHThe ffmpeg and ffprobe programs used to prepare local media.
CASSETTE_TEMP_DIRthe system temp directoryWhere each upload makes its own private directory (oh-my-cassette-job-*) for prepared files until they are uploaded.
CASSETTE_CONNECT_TIMEOUT_SEC10How long to wait for the service when connecting.
CASSETTE_MCP_HOSTunsetThe host name sent to the service when the host does not identify itself.
OH_MY_CASSETTE_LOGWARNINGLog level on stderr.

Install

Claude Code

Plugin (recommended): the two commands at the top. The plugin uses the connection saved by oh-my-cassette login and starts uvx oh-my-cassette==0.6.0 with a 10-minute tool timeout.

Project scope without the plugin: copy .mcp.json into your project, or run:

claude mcp add --transport stdio cassette -- uvx oh-my-cassette==0.6.0

The skill lives in skills/cassette-video-edit/SKILL.md and ships with the plugin.

Codex

Plugin: the two commands at the top (.codex-plugin/plugin.json declares the server inline with tool_timeout_sec: 600 and passes the CASSETTE_* variables through from your shell). Or add the server directly:

codex mcp add cassette -- uvx oh-my-cassette==0.6.0

OpenCode

Add to opencode.json (project or ~/.config/opencode/opencode.json):

{
  "mcp": {
    "cassette": {
      "type": "local",
      "command": ["uvx", "oh-my-cassette==0.6.0"],
      "timeout": 600000
    }
  }
}

Then copy the skill so OpenCode loads it:

@cassette-editor
Ships withoh-my-cassette
2001 skill1 MCP
Get the whole plugin

Stars on GitHub

Momentum

stars in total
200
Star history of Cassette-Editor/oh-my-cassette on GitHub, a chart by star-history.com

More MCP servers from other plugins.

prompts.chat

prompts.chat

MCP

Ships with promptschat: f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open…

@gh-f@gh-fInstall MCP
emdash-docs

emdash-docs

MCP

Ships with emdash: A full-stack TypeScript CMS built on Astro. EmDash takes the ideas that made WordPress dominant --…

emdash1d14k
@emdash-cms@emdash-cmsInstall MCP
codegraph

codegraph

MCP

Ships with webiny-js: Open-source content platform. Self-hosted on AWS serverless. Built as a TypeScript framework you extend…

webiny-jstoday8.1k
@webiny@webinyInstall MCP
drawio

drawio

MCP

Ships with drawio-mcp: The official draw.io MCP (Model Context Protocol) server that enables LLMs to create and open diagrams in…

@jgraph@jgraphInstall MCP

Questions about cassette.

Which coding agents can use cassette?
cassette works in any agent that reads an MCP config file: Claude Code, Codex, Cursor, Gemini CLI, GitHub Copilot, OpenCode and Windsurf. Each agent reads it from its own file; this page names the file for each one.
How do I add cassette to Claude Code?
Run these in order, one at a time. 1. In Claude Code: /plugin marketplace add Cassette-Editor/oh-my-cassette 2. In Claude Code: /plugin install oh-my-cassette@cassette-editor
Is cassette safe to install?
Low risk. Signals from public registries, not an audit.