MCP and agents
flickies serves a Model Context Protocol endpoint at /v1/mcp on the same port as REST, so a function-calling LLM (LibreChat, Cursor, Claude with an MCP connector) can drive the whole pipeline. The transport is streamable HTTP, stateless, with JSON responses. The bearer token, rate limit and request ids apply exactly as on REST.
The endpoint itself answers at /v1/mcp/. A request to /v1/mcp gets a 307 redirect there. A client that follows redirects (curl with -L, for example) works either way; for one that does not, configure the URL with the trailing slash.
The server is built in src/flickies/mcp_server.py.
Tools
| Tool | Arguments | Same as |
|---|---|---|
list_engines | none | GET /v1/engines, plus loaded_engine, without last_used_secs_ago |
info | file_path or file_url | POST /v1/video/info |
lipsync | face_path/face_url, audio_path/audio_url, engine (default latentsync-1.5), restore_face (default false), output_path | POST /v1/video/lipsync |
restore | file_path/file_url, output_path | POST /v1/video/restore |
transcode | file_path/file_url, output_format, video_codec, audio_codec, crf, preset, fps, gif_options, output_path | POST /v1/video/transcode |
trim | file_path/file_url, start_sec, end_sec, precise, output_path | POST /v1/video/trim |
concat | inputs_paths or inputs_urls, precise, output_path | POST /v1/video/concat |
scale | file_path/file_url, width, height, keep_aspect, output_path | POST /v1/video/scale |
mux_audio | video_path_or_url, audio_path_or_url, replace_existing_audio, output_path | POST /v1/video/mux_audio |
extract_audio | file_path/file_url, audio_format, output_path | POST /v1/video/extract_audio |
thumbnail_grid | file_path/file_url, rows (default 3), cols (default 4), cell_width, cell_height, output_path | POST /v1/video/thumbnail_grid |
Field meanings and defaults match the REST API. Video-producing tools return {"path": "<output_path>", "size": <bytes>}.
How MCP differs from REST
output_pathis required. The tools write only into the staging area. There is nooutput_url, noasync_joband no webhook; every call runs to completion before it answers.lipsynchonoursrestore_face. Withrestore_face: truethe tool runs GFPGAN over the result in place, which unloads the lipsync engine to load GFPGAN. Ifgfpganis not in the registry the restore step is skipped silently.- No file transfer. There is no upload or download tool. Stage inputs with
PUT /v1/files/{path}, pass afile_url, and fetch results withGET /v1/files/{path}. - Errors are tool errors, not HTTP statuses. Messages match the REST ones, for example
must provide exactly one of: file_path, file_urlor the non-commercial gate text.
Agent integrations
The repository ships a skill that teaches an agent the REST API. It works in any agent that reads .agents/skills/ (such as peen) and installs natively in the clients below. Each of them talks to a flickies server you already run, at an address the agent can reach.
Claude Code
claude plugin marketplace add psyb0t/agents
claude plugin install flickies@psyb0t
Claude Code asks for the flickies URL and, if auth is on, the token. The token is stored in your OS keychain.
Codex
codex plugin marketplace add psyb0t/agents
codex plugin add flickies@psyb0t
Installed from the marketplace, the skill is invoked as $flickies:flickies. Codex also picks the skill up with no install in any repository that contains .agents/skills/, where it is invoked as plain $flickies.
OpenClaw
The skill is published to ClawHub on every release:
openclaw skills install @psyb0t/flickies
For MCP clients that speak local stdio, the @psyb0t/flickies plugin is a small bridge that runs mcp-remote against $FLICKIES_URL/v1/mcp:
openclaw plugins install clawhub:@psyb0t/flickies
Then set FLICKIES_URL (for example http://localhost:8000, the bridge appends /v1/mcp) and FLICKIES_AUTH_TOKEN if the server needs one.
MCP Registry
flickies is listed in the official MCP Registry as io.github.psyb0t/flickies (server.json), pointing at the psyb0t/flickies image with the endpoint http://localhost:8000/v1/mcp.