Agent API reference

Everything the editor can do, an agent can do through ArcLight's API: about 130 operations behind 13 MCP tools. This page is for people building their own agents or scripts. To connect Claude Code, start with Set up AI agents.

The API describes itself. Call describe with no topic for an overview, describe {topic: "methods"} for every operation with its arguments, and describe {topic: "schema"} for every field. This page is the map; describe is the reference.

How agents connect

If you talk to the socket directly, open with:

{"jsonrpc":"2.0","id":1,"method":"hello","params":{"token":"<token from agent.json>","name":"My agent"}}

The name is what the host sees in the activity list. After that, every method on this page is a JSON-RPC method with the same name.

The 13 MCP tools

ToolWhat it does
describeReference for the API and every editor catalog. Takes a topic and an optional name.
list_documentsOpen documents, frontmost first, with id, name, revision, slide count, canvas size and whether it's live.
getReads the document or any part of it by path. "" is the outline.
setSets one field by path to a JSON value.
patchSeveral path edits (set, insert, remove, move) applied together as one undo step.
editRuns an editing operation: {op, args}. The same actions as the editor's menus, toolbar and inspectors.
showRuns the show: {op, args} for play, take, builds, recording, outputs, the virtual camera and the prompter.
renderRenders a slide to a PNG, optionally after some build clicks and with graphics at given steps.
grab_programThe current program output frame as a PNG. Only while the show is playing.
selectSelects a slide and layers in the editor and outlines them, so the host sees what you mean.
activityRecent agent changes to a document, newest first, with ids for revert.
revertReverts one agent change by activity id.
wait_eventsLong-polls for events after a cursor and returns a new cursor.

Every tool takes an optional document (an id or a name). Leave it out to use the frontmost document. For edit and show, the operation's parameters go in args:

edit {op: "add_text", args: {slide: "Intro", name: "Title", string: "Hello", frame: "lower-third"}}
show {op: "take", args: {slide: "#3"}}

Both tools accept any operation name; the split only keeps the tool list readable.

Main edit operations

AreaOperations
Slidesadd_slide duplicate_slide delete_slides move_slides rename_slide set_background set_notes update_slide insert_template_slides
Adding layersadd_camera add_screen add_window add_text add_shape import_image add_video add_preset (title presets) add_generator (Motion backgrounds and particles) add_graphic (web graphics)
Layer settingsset_text style_text measure_text style_shape style_generator set_camera set_screen set_video set_crop set_fit set_mask set_opacity set_hidden rename_layer update_layer
Arrangeset_frame move_layers transform_layers align distribute center_on_slide fill_slide arrange group ungroup set_rotation set_corners set_distortion reset_transform
Layers between slidesduplicate_layers delete_layers copy_layers cut_layers paste_layers
Effectsadd_effect set_effect move_effect remove_effect set_blend_mode
Animateset_transition set_build set_build_order set_build_timing
Web graphicsadd_graphic update_graphic get_graphic
Colorset_grade reset_grade auto_balance apply_look save_look rename_look delete_look import_lut remove_lut
Scriptset_script get_script import_script script_from_notes
Medialist_missing_media relink relink_media
Document and settingsnew_document open_document save_document import_slides (PDF or Keynote) resize_canvas set_output set_prompter get_settings set_setting restore_default_hotkeys

Main show operations

AreaOperations
Playplay stop toggle_play take next previous jump advance_build edit_while_playing live_state
Web graphicsset_graphic_step (what a {{Layer: step}} cue does: on air while playing, in the editor while rehearsing)
Recordingstart_recording stop_recording toggle_record last_recording
Outputsshow_program_output hide_program_output
Virtual cameravcam_status vcam_install vcam_uninstall vcam_refresh
Teleprompterprompter (start, pause, stop, restart, toggle) prompter_show prompter_dock prompter_speed prompter_seek prompter_cue
Sources and colorlist_sources refresh_sources request_screen_capture open_color close_color get_scopes

For the arguments of any operation, call describe {topic: "methods", name: "set_build"}.

Paths and selectors

get, set and patch address any part of the document by path:

get {path: ""}                                        // outline
get {path: "slides[\"Intro\"]"}
get {path: "slides[#2].layers[\"Title\"].kind.text"}
set {path: "slides[\"Intro\"].layers[\"Title\"].kind.text.fontSize", value: 96}
get {path: "script"}
get {path: "output"}

For the outline, depth sets the detail: 0 is slide names only, 1 adds layers (the default), 2 is the full document.

SelectorSlidesLayers (within a slide)
"Name"By nameBy name
"#3"Slide number, starting at 1
2Index, starting at 0Index
"live"The slide on air
"selected"The editor's selected slideThe editor's selected layers
"last"The last slide
An idStable across renamesStable across renames

Operations that take several layers also accept "all". Names that don't match come back as an error with the closest matches.

Frames, layouts and colors

How changes are applied

Seeing the show

Three calls return PNG images. Over MCP they arrive as image content, alongside a JSON text part.

Events

wait_events returns events after a cursor as soon as there are any, or an empty list after timeout seconds (default 25, at most 60). Pass the returned cursor as since next time. Leave since out to start from now. Filter with types, using exact names or prefixes like "live.*".

wait_events {since: 118, types: ["live.*", "cue.fired"], timeout: 30}
EventWhen
document.changedA document changed. data.author is "host" or the agent's name, with the new revision.
live.started, live.stoppedThe show started or stopped playing.
live.slideA slide was taken live (data.slide is its name).
build.advancedA build click ran on the live slide.
cue.firedA teleprompter cue fired: a slide cue (data.slide) or a trigger (data.trigger).
prompter.stateThe prompter started, paused or stopped.
recording.started, recording.stoppedRecording started or stopped (data.path is the movie).
vcam.stateThe virtual camera's install or sending state changed.
performance.levelThe Mac got busier or recovered.
selection.changedThe host selected a different slide.

describe topics

overview, ops, methods, schema, effects, filters, transitions, builds, generators, titlePresets, textStyles, templates, fonts, looks, sources, blendModes, masks, shapeForms, layouts, events and graphics (the web graphic contract and its JavaScript API). Add name for one entry, such as describe {topic: "effects", name: "gaussianBlur"}.

Scripts: arclight call

The helper also makes single calls from Terminal or a shell script. It prints the result as JSON, and exits 1 with the error on stderr if the call fails.

A="/Applications/ArcLight.app/Contents/Helpers/arclight"
"$A" status
"$A" call list_documents
"$A" call take '{"slide": "#2"}'
"$A" call render '{"slide": "Intro", "width": 640}'

With call, use the method name directly (take, not show). The JSON goes in one argument, so quote it.