Skip to content

MCP tools

All fourteen tools, their scope, and what each one does.

Fourteen tools in three scopes.

docs_treedocs:read

List every page path, as the branch would look if committed now: published content plus your staged changes. Pass no branch to see published content.

docs_readdocs:read

Read one page as its source Markdown, including any change staged on the branch.

Always read before writing. This is what stops an agent overwriting its own uncommitted edits. The source is not what a reader sees: {{name}} is a variable, and a snippet is an include.

docs_searchdocs:read

Find pages by their words. Ranked, not semantic and not substring.

Every word you give has to appear, so search content words rather than a sentence: webhook retries, not how do I configure retries for webhooks. Small misspellings are tolerated.

docs_logdocs:read

Commit history, newest first, optionally for one page. Each line ends with where that revision came from: editor, api, import, rollback, or git for a commit pushed outside Staleless.

docs_diffdocs:read

Unified diff of everything staged on a branch. Show this to a human and let them read it before calling docs_commit.

docs_stageddocs:read

List what is staged on a branch and not yet committed.

docs_lintdocs:read

Check the branch: frontmatter schema, canonical formatting, dead internal links, duplicate or missing navigation entries, and orphan pages. docs_commit runs this and refuses on any non-formatting problem.

Nothing in this group creates a git object.

docs_branchdocs:write

Create or select a change request, anchored to the current published head. One branch per topic, named draft/<who>/<slug>.

docs_writedocs:write

Stage a page create or update. This does not commit.

Content is normalised to canonical Markdown as it is stored, so what you stage is exactly what gets committed.

docs_movedocs:write

Stage a page move or rename. Update nav.yaml and add a redirect in the same branch, or docs_commit will refuse.

docs_deletedocs:write

Stage a page deletion. Remove it from nav.yaml in the same branch, or docs_commit will refuse.

docs_unstagedocs:write

Discard one staged change. The published content is untouched.

docs_commitdocs:commit

Turn everything staged on the branch into one real git commit.

Runs docs_lint first and refuses if it reports a content problem. Fails if somebody else moved the branch: re-read, restage, retry. Does not publish.

docs_pushdocs:commit

Push the branch and open or update its pull request, then return the link for a human to review.

Merging is deliberately not available to a machine.

nav.yaml, variables.yaml, search.yaml, redirects.yaml, glossary.yaml and style.yaml are read and written by the same tools. They are YAML rather than prose, so they are not put through the Markdown canonicaliser.

Warning

Never write a site file by pasting Markdown-formatted YAML. Indentation matters, and a tuning file nobody can parse is ignored silently so that it cannot break search.