losslesscut-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| LOSSLESSCUT_PORT | No | Port of LosslessCut's HTTP API (can also be set with the --port <n> option). The host is always 127.0.0.1 and can't be changed. | 8080 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Controls a running LosslessCut desktop app through its local HTTP API, and analyses media files locally with FFmpeg. LosslessCut must be started with --http-api. Only use file paths the user gave you. To find what to cut, look at the media first: media_info, contact_sheet or view_frames to see it, detect_scenes, detect_silence, detect_black, audio_levels and keyframes. Then cut: set_segments loads exact segments in one step (preferred), or use add_segment/set_cut_points. Then export_file. The LosslessCut API cannot read app state (open file, segments, playhead), so keep track of what you did.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| check_connectionB | Checks that LosslessCut is running with its HTTP API enabled and reachable on 127.0.0.1. |
| open_filesA | Opens one or more media files (or a .llc project file) in LosslessCut. Paths must be absolute paths the user gave you; never invent or guess paths. Several files are loaded into the batch list. If a file is already open, LosslessCut asks the user what to do, so call close_file first. |
| seekB | Moves the playhead of the open file to a time. Works with the default "timecode with decimal fraction" timecode format in LosslessCut. |
| set_cut_pointsB | Sets the start and/or end of the current segment by seeking to each time and pressing "set cut start"/"set cut end". If the playhead is after the current segment, LosslessCut creates a new segment instead. |
| add_segmentA | Adds a new segment from start to end. If the file only has its initial full-length segment, LosslessCut replaces it with this one. Call it several times to cut out several parts. |
| select_segmentsB | Changes which segments are selected. Only selected segments are exported. |
| jump_to_segmentB | Makes another segment the current one and moves the playhead to its start. |
| export_fileA | Exports the selected segments of the open file with the current LosslessCut export settings. If the export options dialog is enabled, it is confirmed automatically. Returns the output paths when wait is true. |
| wait_for_exportA | Waits until the current or next export finishes and returns the exported file paths. |
| close_fileA | Closes the current file in LosslessCut. If "ask before closing" is enabled in its settings, the user has to confirm in the app. |
| list_actionsA | Lists the LosslessCut keyboard actions that run_action accepts, grouped by category. |
| run_actionA | Runs one LosslessCut keyboard action by name, for example "togglePlayResetSpeed", "splitCurrentSegment" or "toggleStripAudio". Only actions from list_actions are allowed. Actions in the "dialog" group open a dialog the user must complete in the app. |
| set_segmentsA | Loads an exact list of segments for a media file in one step and opens it in LosslessCut. It writes the LosslessCut project file next to the media ("-proj.llc"); an existing project file is first renamed to a .bak backup. The currently open file is closed first. Prefer this over add_segment for precise cuts. |
| check_toolsA | Reports whether FFmpeg and FFprobe, which the analysis tools use, are available. |
| media_infoB | Duration, container, streams (codecs, resolution, fps, audio channels, languages) and chapters of a media file. |
| view_framesA | Returns video frames as images so you can see the content. Give exact times, or a count of evenly spaced frames within start/end. |
| contact_sheetA | One image with a grid of evenly spaced frames, to scan a whole video (or a part) cheaply. Returns the time of each tile, left to right, top to bottom. Zoom in later with a smaller start/end or view_frames. |
| detect_scenesB | Finds cuts and scene changes in the video with FFmpeg. Lower threshold finds more changes. |
| detect_silenceA | Finds silent parts and the parts with sound (speech, music) between them. Useful to remove pauses or split at gaps. |
| detect_blackB | Finds black parts of the video, such as fades, breaks between programmes or ad breaks. |
| audio_levelsB | Loudness over time (EBU R128, LUFS) in windows, the loudest moments (laughter, applause, shouting, drops) and the overall loudness. |
| keyframesA | Lists video keyframes. Lossless cuts start cleanly at keyframes, so use this to choose cut points or to see where a cut will snap. Pass "near" to get the keyframes around given times. |
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 22 tools
Most tools target clearly distinct operations (analysis, navigation, editing, export, diagnostics). There is mild overlap among the segment tools (set_cut_points, add_segment, set_segments) and the two frame tools (view_frames, contact_sheet), but descriptions explicitly contrast them and explain when to prefer one over the other.
The dominant pattern is verb_noun (open_files, add_segment, set_cut_points, export_file, run_action, view_frames, check_tools). A few tools are noun-only (audio_levels, media_info, contact_sheet, keyframes), which is a minor deviation but still readable and consistent with a stable snake_case convention.
At 22 tools it sits on the higher end of the ideal range, but each tool maps to a concrete, non-redundant capability spanning analysis, navigation, segment editing, export, and diagnostics. Nothing appears padded or duplicative, so the count is justified for a full media-cutting workflow.
The surface covers the whole lossless-cutting lifecycle: open/close, analysis (silence, black, scenes, audio levels, keyframes, frames), segment creation and selection, export with waiting, and generic action/diagnostics escape hatches. Minor gaps remain, such as reading back the current segment list or a merge/concat operation, but core workflows have no dead ends.