oh-my-cassette
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| cassette_ingest_mediaA | Ingest a trusted local media file from the active host project or an explicitly configured media root. Generates a cryptographically random session_id when omitted. |
| cassette_list_assetsA | List media assets isolated to one Cassette session. |
| cassette_timelineA | Read the live Cassette timeline as a bounded text digest (CTL). Call this before any statement about project state — never answer from memory. contact_sheet=true also tiles the stored clip posters into one image (zero render) and saves it locally. Present the returned contact_sheet_uri as the thumbnail link. In Hermes TUI, label it as saved locally and output MEDIA: on its own line; use the URL-encoded URI, never the raw contact_sheet_path, because raw paths may contain spaces. |
| cassette_editA | Surgical no-LLM timeline edit through the manual-editor command lane (requires CASSETTE_DIRECT_EDIT=1). Use for small named changes (trim, text, delete, undo) after reading cassette_timeline; big or creative briefs go through cassette_run_job. input is always {"payload": {...}}. Pass expected_version from the last timeline read; tool_name 'undo' with input.cursorSequence rewinds the shared operation history. |
| cassette_make_promptC | Build a complete Cassette edit prompt from a natural-language instruction and session assets. |
| cassette_match_bgmC | Match and optionally register a Free To Use background-music asset for a session. |
| cassette_match_exact_bgmB | Match an exact song and artist, optionally download it, and register it with the session. |
| jamendo_music_matcherC | Search Jamendo with validated fixed-form music preferences and optionally register a result. |
| cassette_answer_questionC | Classify a Cassette question using question mode, or resume an interrupted job using validated job_id and response fields. |
| cassette_run_jobA | Run one Cassette edit turn and return when it is settled. This call IS the wait: it streams progress notifications while the agent works and answers with the terminal envelope (succeeded / needs_user / review_required / exported / failed). Pass message as the user's words verbatim. Exactly one cassette_run_job call per user turn: after any settled result, return control to the user. Never start a corrective, retry, or follow-up run in the same user turn, even if you think the edit could be improved. Do not poll cassette_job_status after a settled result; that tool is only for resuming a job whose call was interrupted. Pass wait=false only to deliberately detach the turn into the background. If an explicit export request returns phase=review_required, the user has already authorized export: inspect the attached timeline and call cassette_review_completion in this same assistant turn. Do not ask for redundant confirmation, and do not start another cassette_run_job. |
| cassette_job_statusA | Re-attach to a job whose cassette_run_job call did not return — host restart, cancellation, or a turn deliberately started with wait=false. Call it once and act on the phase; it is not a progress loop. wait_for_change_sec gives an unsettled job up to 30 seconds to reach its next phase before answering. |
| cassette_review_completionB | Resolve a review-required completion. Rendering starts only for an explicit, validated decision=export. For a cassette_run_job(export=true) triggered by the user's explicit export request, review the attached timeline and call this immediately in the same assistant turn; do not ask the user to authorize export again merely because the Cassette agent's prose claims rendering is unavailable. |
| cassette_cancel_jobB | Request cooperative cancellation of a persisted Cassette job. |
| cassette_configA | On-demand model picker for the session. Call only when the user asks to view or change the Cassette model. With only session_id it returns the current choice and available options; pass model (id or label) and/or thinking_level to change them. The choice persists for the session and applies from the next cassette_run_job turn. Default: GPT-5.6 Luna with xhigh thinking. |
| cassette_loginA | Sign this machine in to Cassette, or have a replacement password emailed. Pass email plus the generated password from the user's Cassette email. Cassette passwords are always server-generated, never chosen — ask the user for theirs, never invent one. If they no longer have it, confirm with them first, then pass request_new_password=true with confirm_replace=true: that replaces the account password on every machine they use and emails a new one. Credentials are verified before anything is written, so a wrong password leaves an existing working setup untouched. |
| cassette_jamendo_setupA | Validate and privately store this machine's own Jamendo Client ID for read-only music matching. Before calling, explain that the user creates a read-only application at https://devportal.jamendo.com/, no Client Secret is needed, and pasting the Client ID places it in the conversation transcript. Ask for their Client ID; never invent one and never ask for a Client Secret. A failed validation preserves existing configuration. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Cassette-Editor/oh-my-cassette'
If you have feedback or need assistance with the MCP directory API, please join our Discord server