Skip to content

Tool reference

These pages are generated from the same registry /api/mcp serves from tools/list (filtered by the same scope the endpoint applies), so they describe the wire surface rather than a parallel account of it. There are currently 51 tools.

Editory’s in-app chat runs on this registry too, and has a few more tools than you’ll see here: ones that draw buttons and dropzones in its own window, or deep-link into its wizard. Those are withheld from MCP rather than advertised and then found useless.

Tool What it does
| `scrape_article` | Fetch and extract an article from a URL (title, text, authors, and the photos published with it). | | `generate_script` | Start generating a social-video script, either from existing reporting (an article URL, pasted text, or an uploaded document) or, with `brief`, from a story the user describes and wants written for them. | | `get_script` | Fetch a script's status, text, and the photos scraped from its source article. | | `edit_script` | Ask the script-editing agent to revise a script conversationally (tone, length, structure, hook, CTA). | | `update_script` | Replace a script's text verbatim. | | `create_video_from_script` | Create a narrated video from a script: synthesizes an AI voiceover, runs the b-roll/captions/graphics pipeline, and renders the final mp4, all in the background. | | `create_video_from_upload` | Edit a video the user attached in this conversation: runs the same pipeline as create_video_from_script over their own footage, with whichever layers they asked for. | | `watch_video` | Look at a video the user attached: returns a timestamped list of beats (what is on screen, and any words shown on screen) plus whether it has its own sound. | | `get_generation_status` | Batch-check progress of script generations and/or video jobs. | | `get_video_edit_state` | Read a video cut's structure so you can change it: its tracks, the ids of every b-roll clip / graphic / music item, the caption style, and the graphics theme. | | `edit_video` | Change a video cut by editing its manifest: add or swap b-roll, music and sound effects, caption look/size/position, lanes on/off, mix levels, graphic copy, brand colours, transition style, retiming or removing an overlay. | | `redo_narration` | Change what the AI narration on a narrated upload SAYS, or the voice saying it, and keep everything else about the cut. | | `list_presets` | List the user's saved presets/templates of a given type (name + id + which is the default). | | `list_voices` | List AI narration voices (ElevenLabs catalogue). | | `list_recent` | List the user's recent scripts or videos, for requests like "make a video from my last script". | | `search` | Search the user's Editory scripts and videos by keyword. | | `fetch` | Retrieve the full contents of one Editory script or video, using an id returned by search. | | `generate_music` | Generate a background music bed from a description of the vibe (e.g. | | `generate_sound_effect` | Generate a short sound effect from a description (e.g. | | `find_broll` | Find stock footage for a description, from the same libraries the pipeline uses. | | `list_newsrooms` | List the user's newsrooms: id, name, whether automation is running, which organization it is shared with, and how many series and sources each has. | | `get_newsroom` | Read one newsroom in full: its name and website, the master on/off switch, the source mode, every data source, every series with its schedule and channels, and the six style pointers resolved to names. | | `create_newsroom` | Create a new newsroom. | | `update_newsroom` | Change a newsroom's own settings: its name, its website, which organization it is shared with, its six style pointers (script style, speaker style, voiceover, video format, brand kit, captions), its pinned layout template, whether automated videos use the article's lead photo, which aspect ratios its videos render in, whether performance auto-optimisation is on, and the narration voice rotation. | | `update_newsroom_settings` | Turn a newsroom's publishing on or off, turn its story collection on or off, and set where its stories come from: the source mode (urls, news-api, scripts, themes), the News API key, and the News API category filter. | | `delete_newsroom` | Archive a newsroom. | | `list_series` | List a newsroom's series with their schedules, channels, filters and last run. | | `create_series` | Add a content series to a newsroom: a distinct strand with its own schedule, filters and style (e.g. | | `update_series` | Change anything about one series: name, on/off, schedule (frequency, times of day, timezone), which articles it takes (classification prompt/mode and keyword filters) or a knowledge base to make evergreen videos from instead, the script direction it writes under, where it publishes (Instagram, email), and its own style pointers, which override the newsroom's. | | `delete_series` | Archive a series. | | `list_data_sources` | List the URLs a newsroom pulls stories from, with the extraction strategy each one locked in and its current health. | | `add_data_source` | Point a newsroom at a website. | | `update_data_source` | Pause, resume or rename one of a newsroom's data sources. | | `remove_data_source` | Remove a data source from a newsroom for good. | | `list_style_library` | List the style rows a newsroom can be pointed at: brand kits, caption presets, voiceover templates, script styles, speaker styles, video formats, or layout templates. | | `create_brand_kit_from_website` | Read a publisher's website and build a brand kit from it (colours, fonts and logo), then optionally point a newsroom (or one series) at it. | | `update_series_feed` | Turn a series' public RSS/MRSS feed on or off, or rebuild it now. | | `run_newsroom_now` | Fire a newsroom (or one series) immediately instead of waiting for its schedule. | | `list_newsroom_runs` | What a newsroom has actually produced recently: one row per article, with its script and video status and any failure reason. | | `update_auto_optimization` | Turn performance-driven auto-optimisation on or off for a newsroom or one series, and choose which settings it is allowed to vary. | | `get_newsroom_performance` | How a newsroom's published posts are doing: its top posts against the account's own norm, and what auto-optimisation has learned so far. | | `list_knowledge_bases` | List a newsroom's knowledge bases: the evergreen subjects (a product, a person, a place) it can make videos about from a brief rather than from news. | | `get_knowledge_base` | Read one knowledge base in full: its brief (what it is, who it's for, the key facts, how to talk about it, what never to say, and which fields a person edited), every angle with whether it is switched on and how often it has been used, its sources with their reading status (never their text), the series that use it and the last videos made from it. | | `create_knowledge_base` | Create an empty knowledge base in a newsroom for one evergreen subject. | | `add_knowledge_source` | Add a source to a knowledge base: a WEBSITE (read in the background, a minute or more for a whole site; the brief is rewritten when it finishes) or PASTED TEXT (stored now; the brief is rewritten straight away). | | `remove_knowledge_source` | Remove a source from a knowledge base for good (its text goes with it) and rewrite the brief without it. | | `update_knowledge_base` | Change a knowledge base: rename it, edit brief fields (a field you set is marked as edited and is kept word for word on every rebuild), switch angles on or off, add the user's own angle, remove an angle the user wrote, or turn "keep it current" (a weekly re-read of its websites) on or off. | | `rebuild_knowledge_brief` | Rewrite a knowledge base's brief from all of its sources (about a minute, in the background). | | `find_knowledge_angles` | Ask for up to five NEW angles on a knowledge base's subject, written from its brief and added to its list (about ten seconds). | | `write_knowledge_hooks` | Write three opening hooks for a video from a knowledge base, scored, with Editory's pick marked. | | `start_knowledge_video` | Start a video from a knowledge base with the hook the user chose from write_knowledge_hooks: the script is written from the brief alone and opens on that hook, and (unless video is false) the AI-narrated video is made from it straight after, in the background. |

Every tool declares an outputSchema on tools/list, and every successful tools/call returns the result twice: as structuredContent (a JSON object conforming to that schema) and as the same object serialized into a text block, which is what clients that predate structured content read.

{
"jsonrpc": "2.0",
"id": 2,
"result": {
"content": [{ "type": "text", "text": "{\"card\":\"video_job\",\"job_id\":\"…\"}" }],
"structuredContent": {
"card": "video_job",
"job_id": "…",
"status": "pending",
"plan_only": true,
"links": { "video": "https://editory.news/videos/…" }
}
}
}

Each tool’s Returns table lists the top-level fields, and marks the ones present on every successful call. Nested structure (the tracks and items inside get_video_edit_state’s summary, say) is in the schema itself rather than the table; your client already has it.

Two things worth knowing about the shape:

  • links is added by the endpoint, not by the tool. It carries the Editory page for whatever the result is about, and it is the only way a user can watch a cut, press Render, or read a script. Pass it on.
  • A failed call carries no structuredContent. The error payload is a different shape, so it arrives in the text block with isError: true; see Errors.

Tools are invoked with the standard MCP tools/call method. Your client almost certainly does this for you; this is what it looks like on the wire.

{
"jsonrpc": "2.0",
"id": 2,
"method": "tools/call",
"params": {
"name": "generate_script",
"arguments": {
"source": "https://example.com/article",
"duration_seconds": 60,
"tone": "conversational"
}
}
}

A tool that fails returns a result with isError: true and a structured payload rather than a JSON-RPC error, so a model can read what went wrong and correct itself. See Errors.