Released October 12, 2026.
This release made the leed CLI and the Operator MCP easier for AI agents to find their way around. Agents can now search the CLI for the right command and read the description of just that one command, and every CLI failure exits with a code that says what kind of problem it is. On the MCP side, tool names were made consistent, and search index changes now publish like any other setting.
New features
Find and run CLI commands with less reading
Until now an agent that wanted to learn the leed CLI had to read its whole machine-readable description, about 1.2 MB, at once. That description is now split up. An agent searches for a command in plain language, reads the description of the one it picked, and then runs it.
leed cli search "upload an image"
leed schema asset upload --jsonleed cli search returns up to five matching commands, best first. It understands everyday words such as “add”, “rename” or “show”, and copes with typos. Quote the whole task as one argument. leed schema with no command now returns a compact index of every command. With a command name, in either asset upload or asset.upload form, it returns that command’s arguments, its own options, the shape of its result and the follow-up commands it can suggest. Neither command makes a network call. The help text for every command group now opens with these two commands, so an agent finds them without being told.
Exit codes that say what went wrong
Most failures used to exit 1. Every failure now exits with a code for its kind, and the error in --json output carries the same exit value and a retryable flag.
| Exit | Meaning | What to do |
|---|---|---|
| 0 | Done | Continue, following next if present |
| 1 | Unclassified | Read the error |
| 2 | Usage | Fix the command |
| 3 | Precondition not met | Run next if present, otherwise follow the hint |
| 4 | Transient | Retry with backoff |
| 5 | Needs a person | Stop and ask, for example to sign in or to confirm |
A command interrupted with Ctrl-C exits 130.
Results name the next command
A result can now carry next: the command to run to finish what was started, or to fix a failure, already filled in with the environment, company and ids from the run. For example, a successful leed site validate suggests leed site commit, and a successful leed site push suggests leed deployments status. Each suggestion says whether an agent can run it or a person has to, as with signing in.
Preview any change with --dry-run
Every command that changes something in your site checkout or in the CMS now accepts --dry-run, or says why it cannot. A dry run reads what it needs, changes nothing, never asks for confirmation, and adds a plan to the result listing the requests and file changes a real run would make. A few commands are exempt, such as sign-in commands, leed site build and leed import apply, whose plan is leed import status.
Learn more: CLI Troubleshooting and Exit Codes, Machine-Readable Output, CLI Command Reference.
Improvements
Search index changes can be published
A changed search index never appeared in Pending Changes, so it could not be published through any documented route. It now shows up there, in leed settings pending and in list_pending_changes, and publishes like any other setting.
Learn more: Publishing Changes, Search for Your Documentation.
Deleting a URL path can no longer remove a page’s own address
Deleting a URL path used to remove whatever row it was given, including a published page’s own address. It now deletes redirect aliases only. It always refuses a page’s current address, and refuses a page’s reserved next address unless the page has been deleted.
Learn more: MCP Tools: Site Structure, Aliases and Redirects.
Operator MCP tool names
An audit of the Operator MCP and assistant tools renamed those whose names did not match what they do. The tools behave as before under their new names.
| Old name | New name |
|---|---|
get_page_markdown | get_page_body |
fill_page_markdown | set_page_body |
apply_page_markdown_ops | update_page_body |
update_page_draft | update_page_metadata |
create_page | reserve_page |
create_page_draft | create_page_from_markdown |
get_page_type_schema | get_page_type |
list_pending_settings_changes | list_pending_changes |
publish_pending_settings_changes | publish_pending_changes |
publish_page | publish_page_now |
schedule_pages | schedule_pages_by_id |
schedule_pages_by_source | schedule_pages_by_source_id |
search_pages | search_posts |
search_docs | search_documentation |
get_analytics (assistant) | get_analytics_chart |
query_analytics | get_analytics |
create_contact | create_engage_contact |
update_contact | update_engage_contact |
import_contacts | import_engage_contacts |
export_contacts | export_engage_contacts |
upsert_distribution | set_page_distribution |
update_distribution | update_distribution_by_id |
get_company | get_company_overview |
remove_autolink | delete_autolink |
get_broken_links | list_broken_links |
get_form_fills | list_form_fills |
label_assets | change_asset_labels |
list_page_state | list_page_sync_state |
publish_menu and publish_form were removed: publish_pending_changes takes the items to publish, so one tool now covers menus, forms and every other setting. publish_pending_changes and publish_page_now are now available over MCP as well as in the assistant, and schedule_pages_by_id is now available in the assistant as well as over MCP. Each asks for confirmation before it changes anything.
Learn more: Operator MCP Tool Index, MCP Tools: Publishing, Distribution and Users.