Create videos and documents with AI, keeping everything editable as you build
Clueso lets you build videos and documents by describing what you need. Create clips, add text, images, animations and voiceover, then export. Everything stays editable so you can refine as you go.
Try asking Muse: "Create a 3-minute tutorial video with voiceover by describing the steps and letting Clueso handle the layout and timing"
Source: Found in the official MCP Registry (io.clueso/video) · First listed September 25, 2026
Each bar is one check, every 15 minutes. Green means it answered. Last checked 2 min ago.
What Muse can see: It does not ask you to sign in, so it cannot see your accounts. It only sees what Muse sends it from your request.
Before it acts: Read what Muse plans to do before you approve it, and remove the app from Muse when you stop using it.
musedirectory.ai is not part of Meta. More about how Muse handles your information
Not in Muse's Connectors list yet, but Muse can still use it. Copy the request below and paste it into Muse. Muse asks before it shares anything with the app's site. Meta does not review apps used this way, so only use ones you trust. We tested this in the Muse app on September 24, 2026: Muse used an app's link directly this way and returned a live answer.
https://connect.clueso.io/mcpNot in Muse's Connectors list yet. Muse can still use it: its page gives you a request to paste into Muse.
Clueso is a remote MCP server, so any assistant that can add a custom connector by link can use it. Same link, same tools.
In ChatGPT, open Settings, then Connectors (called Apps & Connectors on some accounts).
Under Advanced settings, switch on Developer mode. That is what lets you add a connector by link.
Choose Create, give it a name, paste the link as the MCP server URL, and save. If it needs a sign-in, ChatGPT asks for it here.
Start a chat, open the tools menu, pick the connector, and ask. ChatGPT asks before it runs a tool the first time.
Custom connectors need a paid ChatGPT plan, and on Team, Enterprise and Edu accounts only an admin can add them. Our "Working" label means the server answered us; it cannot tell whether your plan lets you add it. All connectors that work in ChatGPT
In Claude, open Settings, then Connectors.
Choose Add custom connector, give it a name, and paste the link.
If it needs a sign-in, Claude sends you to it. Then turn the connector on in a chat from the tools menu and ask.
Custom connectors are available on paid Claude plans; on Team and Enterprise accounts an admin may need to add them. Our "Working" label means the server answered us; it cannot tell whether your plan lets you add it. All connectors that work in Claude
https://connect.clueso.io/mcpResponse time at the last check: 105ms. Worked in 100% of checks over 30 days.
Screened, no issues found
Screening looks for known threats and hidden instructions at the time of the check, and runs again weekly and whenever the tool list changes. It cannot see the server's code, so only connect what you need and review what Muse asks to do. How screening works.
get_design_guideClueso's design guide, the HTML animation pages guide and the Director's skills. Ask for everything you need in ONE call. Each select entry is a section path or plain words; words search all three and return the best few, each labelled with the path that selects it exactly. get_dread_animationRead an HTML animation's page site (index.html, CSS, JS) like a repository. Read-only. • project_id alone → this project's animations, with which element shows which revision. • element_id (+ project_id) or animation → the summary: pages with their parameters, actions and cues; fedit_animationChange an HTML animation's site: ONE revision, linted, checked and probed. A passing save with project_id moves that project's uses; a failing one is kept but moves nothing; your next edit continues from it. Saves return a contact sheet (preview: false skips it); preview: true | create_projectCreate a new blank Clueso project. Returns the projectId and initialClipId — the project starts with one blank clip already at index 0 (default short duration). Use update_clips to resize/retitle clip 0, add_clips(kind='blank') to append more clips, add_elements to place content,update_projectUpdate a project's metadata: rename, change description, move to a different folder, or change aspect ratio. Only fields you provide are changed. To move a project to the workspace root, pass folder_id="" (or "root"). Aspect ratio: pass any "W:H" (positive integers). The canvas iduplicate_projectClone an entire project — every clip, voiceover, asset, and metadata field — into a fresh project. The copy has its own S3 namespace, so changes or deletions to the source never affect the duplicate. Defaults: - new_title omitted → "{source title} (copy)" when no folder_id is givexport_projectExport the project as a video. Exports spend the workspace's export minutes (the user's paid allowance), so only export when the user asked for one, never as a step of your own (to get audio or a merged file, say). Two calls. The first starts nothing: it returns what the export cget_exportRead a project's video export: its status and, once done, its link. Call it when the user asks for the link or the status, not to wait on an export you just started (the user gets that in the editor's Exports tab, so start it, say so, and stop). Pass exactly one of `export_id` (tget_media_jobFetch the outcome of a media job (an article GIF, a frame grab) that did not finish inline: the tool that started it returned { job_id, status: "processing" }. Waits for it rather than returning immediately, so one call is usually enough — set `wait_seconds` to how long you are wget_recording_activityStatus of this workspace's auto-recordings, and how many recording generations this billing cycle has used. The same view as the Recordings page in the Clueso app. Returns { usage, rows, total, truncated }. `usage` is { cycle_start, cycle_end, generations_used, generations_limit get_embedGet a project's embeddable video player: `embed_url` (permanent) and `embed_code` (a ready-to-paste <iframe>, the same snippet the editor's Share → Embed copies). Use it to put a Clueso video in a website, help center or LMS lesson. Returns { project_id, published, embed_url?, emcreate_folderCreate a folder in the workspace, optionally inside another folder, to organize projects. Returns { folder_id, name, parent_folder_id, already_existed }. If a folder with the same name (case-insensitive) already exists in that parent, it is returned with already_existed=true instfindFind any resource by `type`; filter by `query` (name substring unless noted) or exact `id`. Returns {type, count, items: [{id, name, type, ...}]} (+ total, has_more for projects/folders); pass ids straight to the consuming tool. Any `duration` is in SECONDS (= add_audio source_duswitch_workspaceSwitch the active workspace. The choice sticks for this client until you change it again — including across reconnects — so every later call operates in the new workspace. Use find(type='workspaces') to see available options.get_projectGet a summary of a project: canvas dimensions, per-clip summary (ids, indices, durations, element counts, voiceover_volume), and `audio_tracks` — every music/SFX entry on the project flattened to the same wire shape `add_audio` accepts (id, src, name, source_duration, guide_startget_clipRead one clip: elements (canvas px), voiceover (text, voice, duration, voiceover_volume), background, transition (null if none). Three independent axes: - `select` shapes the JSON. Full reads are large (word timings and type_data dominate); ask only for what you need. - `element_update_clipsUpdate clips in ONE call (always batch): background, transition, duration, title, hidden, position, voiceover_volume, video_styling (video clips), after_clip, subtitle_settings. - duration: sets the clip's length WITHOUT rescaling anything (unlike generating speech, which rescaleremove_clipRemove a clip from the project by index. Cannot remove the last remaining clip. Interactive links to the removed clip are cleared: any button, question/results logic or form that jumped to it now continues, and a clip whose end action jumped to it plays the next clip. After removsplit_clipSplit a video clip into two clips at the given timestamp. The left clip keeps the original clip ID; the right clip gets a new ID and is inserted immediately after. Elements spanning the split point are duplicated into both clips with adjusted timing. Exception: a question, resultcaptionsRead and edit a clip's CAPTIONS (subtitles) — what they say, where one caption ends and the next begins, when each shows, captions not tied to the voiceover, and translation. Captions are built from the clip's voiceover words: each caption is a run of words, addressed by its `staduplicate_clipClone one clip — within the same project, or **from another project** — into a target project. - Same project: pass `target_project_id` and `source_clip_id` (omit `source_project_id`). - Cross-project: pass `target_project_id`, `source_project_id`, `source_clip_id`. The source cladd_clipsCreate new clips on a project. One tool, four sources: - kind="blank": empty slide clips you'll populate with add_elements / generate_media. Pass `clips: [{title?, duration?}, ...]`. Note: create_project already creates clip 0; calling with N blank entries gives N+1 clips total. get_element_schemaReturn the schema for an element type's type_data, as TypeScript declarations. Call this before add_elements / update_elements when you don't already know the field shape for the element_type you're placing. By default it is compact: every field with its type and a one-line note,add_elementsAdd elements to one or more clips in ONE call (always batch). Items apply in order; one result per item (partial success ok). type_data shape: get_element_schema. - `defaults`: hoist what repeats (clip_index, element_type, font_setting, alignment…); items carry only what differs.update_elementsUpdate elements across one or more clips in ONE call (always batch). Items apply in order; partial success ok. clip_index not needed (element_id is project-unique). - Per item: position/timing fields, and/or type_data with element_type (settable fields: get_element_schema mode 'uremove_elementsRemove many elements across one or more clips in a single tool call. One entry per element ({clip_index, element_id}). Concurrency: parallel-safe (conflict domain: the individual element) — same as update_elements. Each removal is a granular element_remove patch scoped to that elreorder_elementsReorder the elements inside a clip. List position IS the z-index — later entries in `ordered_element_ids` render on top of earlier ones. You MUST pass the full set of element IDs currently in the clip. The handler rejects partial lists so a reorder can never silently drop an elemupdate_groupsTransform, keyframe, rename, nest or lock GROUPS. A group moves, scales, rotates and fades as ONE unit without touching children's stored positions: a camera push instead of building the layout twice. - Address by `group_id` (from get_clip select:['groups'], or returned by add_elremove_from_projectRemove an element, a group or an audio track from a project. - target="element": removes an element (requires element_id, or element_ids for several). clip_index is optional — the element is located by id; pass it only as a hint - target="group": removes a GROUP node (requires cladd_audioAdd a music track or sound effect that plays as a project-level audio layer over all clips. Does NOT consume a clip slot. Use this for background music or a soundtrack that should play under the existing timeline. Sound for an HTML animation goes here, not in its page: guide_starupdate_audioMutate fields on an existing music/SFX track by id. Read existing tracks via `get_project.audio_tracks` — the per-entry shape there matches this tool's args, so you can flip a knob (volume, fades, timing, loop) and write it back without losing the track's id. Only fields you passextract_audioThe editor's "Extract Audio": a clip's own audio — the recording's sound on a video clip, or its generated voiceover — becomes a separate audio track (returns music_id), and the clip goes silent. - The track starts where the clip starts and plays at normal speed. Shape it with upvoiceover_batchSet voiceover text and/or generate speech for many clips in ONE call. Per entry: "set_text" (clip_index + text), "generate_speech" (async TTS; wait: true blocks until it lands), "set_and_generate" (both). Entries apply in order, one result each; all text lands in one save, TTS ruauto_syncRun the agentic auto-sync pipeline on a clip with a source recording: detects natural sync points (UI changes, narrated steps) and inserts sync-marker nodes into its transcript. Required before voiceover TTS on video clips (clueso://docs/sync-points). Skips (no run): "audio_extraadd_sync_pointInsert one sync marker on a clip's transcript. Use this when: - The user is explicit about WHERE the camera should pause / cut (e.g. "sync the word 'submit' to 4.2s of the demo"). - `auto_sync` ran but missed a step you care about. How matching works: - `word`: case-insensitive, upload_fileUpload files to Clueso. Pick a mode by client and where the file lives: - `files` (ChatGPT only): the user's attachments, filled by ChatGPT; pass them instead of asking for a re-upload. - `file_name` (default for agents/scripts: Claude Code, Cursor, Claude Desktop): returns an upcheck_uploadsFetch all files the user uploaded via the hosted upload page. Returns one mcp_upload_id per file — pass each to the appropriate tool (add_clips, add_article_media, etc.). Call this once after the user confirms they are done uploading; the token covers all files they dropped on thgenerate_mediaGenerate an AI image or a canvas-code-based animation directly into a clip. - kind="image": text-to-image. Pass `prompt`. Optional: `animation_setting` (entry/exit — set it HERE, see below), `style_id` (from find type='image_gen_style_packs'), `reference_image_url` or `mcp_uploadanalyze_audioAnalyze an audio file. Modes: - transcript: Speech-to-text with word-level timestamps — returns `{language, full_text, words}` where each word is `{word, start_ms, end_ms, punctuated_word}`. ⚠ MILLISECONDS here; get_clip's `voiceover_words` gives the same words in SECONDS as `{woget_articleGet the article content as markdown. Screenshots appear as <SCREENSHOT {id}> placeholders, and things markdown can't show (an embedded video, a pasted image) as <EMBED {id}> placeholders. Returns the markdown text, a list of screenshot IDs and the article_version to pass to updathttps://connect.clueso.io/mcpNot in Muse's Connectors list yet, but Muse can still use it. Paste this into Muse: "Use Clueso to help me. It is a free service with an MCP server at https://connect.clueso.io/mcp. It does not need an API key. Ask me before you share anything with it." Muse asks before it shares anything with the app's site. Meta does not review apps used this way, so only use ones you trust. We tested this in the Muse app on September 24, 2026: Muse used an app's link directly this way and returned a live answer.
At the last check (November 13, 2026, 15:01 UTC) the endpoint was working, answering in 105ms. Over the last 7 days it answered 100% of health checks. It is checked every 15 minutes.
It was screened on September 25, 2026 with the result "screened, no issues found". Screening checks the domain against threat feeds and reads the tools for hidden instructions and requests for passwords or card numbers. It cannot see the server's code, so grant only the access you need.
It exposes 40 tools, including get_design_guide, read_animation, edit_animation, create_project. For example, you could ask Muse: "Create a 3-minute tutorial video with voiceover by describing the steps and letting Clueso handle the layout and timing"
This listing was added from public sources (Found in the official MCP Registry (io.clueso/video)). If you build Clueso, claim it to correct the details and get your badge.
Paste this on your site or README. It always shows the latest check.
<a href="https://musedirectory.ai/connector/clueso"><img src="https://musedirectory.ai/badge/clueso.svg" alt="Clueso on musedirectory.ai" width="236" height="40"></a>