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 | |
TDQS
Scored across 16 tools
Most tools have distinct responsibilities, but cassette_match_bgm, cassette_match_exact_bgm, and jamendo_music_matcher overlap heavily in the music-matching space and could be misselected. Also, cassette_answer_question and cassette_job_status both offer job-resumption paths, adding mild ambiguity.
The set mostly follows a consistent cassette_verb_noun pattern with snake_case, which is predictable and readable. Exceptions include jamendo_music_matcher lacking the cassette_ prefix and cassette_timeline being a noun instead of a verb, but these are minor deviations.
Sixteen tools is at the upper edge of the ideal range, but the count is justified by the server's scope: media ingestion, timeline editing, job lifecycle, music matching, configuration, and login. Each tool has a clear operational niche, though some trimming of the music matcher variants would tighten the set.
The server covers the core media-editing workflow well: ingest, list assets, read timeline, edit, run jobs, check status, review completion, and cancel. Minor gaps exist such as no explicit asset deletion or logout, but they do not create dead ends for the primary workflow.