capture-mcp
v0.1.0
Published
MCP server for InstaKast (Beast Creative screencast tool) — drive your recording library from Claude Code or any MCP client.
Readme
capture-mcp
A Model Context Protocol server that exposes the Capture screencast workspace (Beast Creative) to Claude Code, letting you script your library from the terminal:
"Take my last recording, download it to ~/edit/, then write a Remotion script that adds a Beast Creative intro card + outro card + burns the transcript captions in, render it as MP4, and upload it back to Capture as a new recording."
Install
cd "/Users/macbook/Projects/Beast Apps/capture-mcp"
npm install
npm run buildThat produces ./dist/index.js (the MCP entry point).
Wire it into Claude Code
Open your Claude Code MCP config — usually ~/.claude/claude_code_config.json or
the equivalent for your install.
For users (npx — no clone needed)
Once the package is published (see "Publishing" below), anyone can connect with just their own InstaKast email + password — no repo, no local build:
{
"mcpServers": {
"instakast": {
"command": "npx",
"args": ["-y", "capture-mcp"],
"env": {
"CAPTURE_EMAIL": "[email protected]",
"CAPTURE_PASSWORD": "<your-instakast-password>"
}
}
}
}Each user signs in as themselves; Supabase row-level security scopes every action to that user's own library. One user can never see or touch another's recordings.
Local dev (running from this repo)
{
"mcpServers": {
"instakast": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/capture-mcp/dist/index.js"],
"env": {
"CAPTURE_EMAIL": "[email protected]",
"CAPTURE_PASSWORD": "<your-instakast-password>"
}
}
}
}Restart Claude Code. You should see "instakast" in the MCP tool list.
Publishing
The package is publish-ready (bin, files, and a prepublishOnly build).
It's unscoped (capture-mcp) so no npm org is needed. To make the npx config
above work for everyone:
npm login # one-time, interactive (browser + 2FA)
npm publish # runs the build, then publishes capture-mcpThe
instakastkey in the configs above is just a local label — users can name it anything. Only the package name (capture-mcp) must match what's published.
Optional env vars
| Var | Default | Use |
|---|---|---|
| CAPTURE_SUPABASE_URL | https://qbdxtnyulltjiaeyjuxv.supabase.co | Override Supabase project URL |
| CAPTURE_SUPABASE_ANON_KEY | bundled | Override Supabase anon key |
| CAPTURE_SITE_URL | https://capture.beastcreative.co | Where share URLs point |
Tools
| Tool | Purpose |
|---|---|
| list_recordings | Recent recordings, filterable by folder + search |
| list_folders | Your custom folders (in addition to reserved inbox / archive) |
| get_recording | Full metadata + a 1-hour signed video URL |
| get_transcript | Timestamped Whisper segments (or joined plaintext) |
| download_recording | Download MP4 to a local path (default ~/Downloads/capture/) |
| upload_recording | Upload a local MP4 as a new recording (the Remotion-loop unlock) |
| rename_recording | Change the title |
| move_recording | Move to a folder id |
| set_public | Toggle public/private share |
| set_allow_download | Toggle whether public viewers can download |
| set_notes | Set notes shown on the public share page |
| transcribe | Trigger Whisper (auto-fires on Capture saves; this is for retries) |
| share_url | Compute the /c/<id> URL for a recording |
| delete_recording | Delete row + blob + poster |
| attach_angles | Register a local folder of multi-cam angle files with a recording (for use with capture-studio) |
| list_angles | Show what angle folders are attached to which recordings |
All tools enforce RLS — you can only modify recordings you own.
Example prompts (once wired)
- "List my last 5 recordings."
- "Get the transcript for rec_8x2k and summarise it."
- "Download my latest recording to ~/edit/raw.mp4."
- "Make rec_8x2k public, set notes to 'Follow-up call', and copy me the share URL."
- "After I render this, upload
/tmp/edited.mp4to Capture as 'Onboarding review — edited'."
Studio multi-cam editing
The capture-studio sibling project (../capture-studio/) provides the Remotion-based
multi-cam editor that pairs with this MCP. Workflow:
attach_angles(recording_id, folder_path)— register a local folder of GoPro / B-cam angle filesdownload_recording(recording_id, dest_path)— pull the main recording to diskcapture-sync(in capture-studio) — compute audio-sync offsets between anglescapture-studio render plan.json— render the multi-cam edit to MP4upload_recording(file_path)— push the edited result back to Capture as a new recording
Then the full loop becomes one Claude prompt:
"Edit my latest capture with the angles in
~/capture-angles/<rec_id>/. Cut every 10 s on sentence boundaries."
See capture-studio/README.md for the full studio workflow.
Auth notes
The MCP signs in once with email/password at startup; the JWT is held in memory
and auto-refreshed by @supabase/supabase-js. Restarting Claude Code or this
process triggers a fresh sign-in. No tokens are written to disk.
To run as a different account, swap the env vars.
