> ## Documentation Index
> Fetch the complete documentation index at: https://docs.get-exo.com/llms.txt
> Use this file to discover all available pages before exploring further.

# MCP tool reference

> What each Exo MCP tool does, when an agent should reach for it, and the REST route that gives you the same capability.

The MCP tools and the REST API are two front doors onto one capability. An agent inside a session uses the tools. A backend you write uses the routes. Nothing is exclusive to either.

This page is the map between them, so you can prototype in a chat and ship against the API.

## The tools

### Reading

<AccordionGroup>
  <Accordion title="exo_context" icon="search">
    **What it does.** Retrieves the user's own context: past decisions, graph connections, and any conflicts with positions they held before.

    **When an agent calls it.** Before answering anything that references "my", "our", "we", "earlier", "last time" or "previously", and before asking a clarifying question the graph could already answer.

    | Argument          | Values                                                                                                   |
    | ----------------- | -------------------------------------------------------------------------------------------------------- |
    | `question`        | The question, or the intent you need context for.                                                        |
    | `mode`            | `query`, `identity`, `graph`, `insights`, `temporal`, `evolution`, `explain`, `compare`, `brain`, `team` |
    | `temporal_window` | A range such as `2026-Q1..2026-Q2`.                                                                      |
    | `detail`          | `lean`, `standard` (default), `full`.                                                                    |

    **Equivalent REST.** `POST /v1/retrieve` for `query`. `GET /v1/recall/identity`, `/graph`, `/insights` and `/temporal` for the matching modes. `POST /v1/brain/query` for `brain`.

    `mode: "compare"` puts two retrievals side by side. Phrase the question as "A vs B".
  </Accordion>

  <Accordion title="search" icon="list">
    **What it does.** Returns ranked results with ids, for `fetch` to expand.

    **Why it exists.** OpenAI's Deep Research contract recognises exactly two tools, `search` and `fetch`. Exo exposes both so ChatGPT's Deep research and Company knowledge surfaces work. Exo-aware clients should prefer `exo_context`, which assembles context, identity and contradictions in one call instead of two round trips.

    **Equivalent REST.** `POST /v1/retrieve`, or `POST /v1/search` for the cheaper primitive without the cognition layer.
  </Accordion>

  <Accordion title="fetch" icon="file-text">
    **What it does.** Returns the full content of one graph node, by the id `search` gave you.

    **Equivalent REST.** `GET /v1/recall/graph/node/{node_id}`.
  </Accordion>
</AccordionGroup>

### Writing

<AccordionGroup>
  <Accordion title="exo_capture" icon="bookmark">
    **What it does.** Records one conversation turn: what was asked, what was answered, the topics, the facts learned, the decisions made.

    **When an agent calls it.** After a substantive exchange. This is the mechanism by which the graph grows across sessions rather than only at import time.

    **Equivalent REST.** `POST /v1/ingest`.
  </Accordion>

  <Accordion title="exo_ingest" icon="upload">
    **What it does.** Saves content to the graph. Takes inline text, a list of file paths, or a single file path.

    **When an agent calls it.** When someone pastes a document, shares content, or says "remember this", "save this" or "note that".

    Import-grade files, `.json`, `.zip`, `.pdf` and `.docx`, go through the full parse pipeline. Other extensions are read as text and ingested inline.

    **Equivalent REST.** `POST /v1/ingest` for text, `POST /v1/ingest/batch` for many items, `POST /v1/import` for files.
  </Accordion>

  <Accordion title="exo_ingest_codebase" icon="folder">
    **What it does.** Walks a project, chunks source files on function and class boundaries, and ingests them so later questions about the codebase have something to read. Respects `.gitignore` and `.exoignore`, and only re-ingests files that changed.

    **Equivalent REST.** `POST /v1/ingest/batch`. Chunking on syntax boundaries is the tool's own work, not something the route does for you.
  </Accordion>

  <Accordion title="exo_edit" icon="pencil">
    **What it does.** Four actions on an existing memory: `find` to locate a node, `edit` to change its content, `correct` to supersede an old belief with a new one and keep the history, and `forget` to erase it.

    **When an agent calls it.** When someone says "that's wrong", "I changed my mind about", "actually it should be", or "forget that".

    **Equivalent REST.** `POST /v1/retrieve` for `find`, `PATCH /v1/graph/nodes/{id}` for `edit`, `POST /v1/graph/nodes/{id}/supersede` for `correct`, `DELETE /v1/graph/nodes/{id}` for `forget`.

    <Warning>
      `correct` and `forget` are not interchangeable. Correcting keeps the chain, so "what did they used to think?" still has an answer. Forgetting erases the content outright and cannot be undone, even by an undelete. Reach for `correct` unless the goal is genuinely erasure. See [Belief and supersession](/concepts/belief-and-supersession).
    </Warning>
  </Accordion>
</AccordionGroup>

### Reasoning and control

<AccordionGroup>
  <Accordion title="exo_scaffold_prompt" icon="sliders">
    **What it does.** Wraps a prompt in the subject's cognitive scaffold and returns the scaffold plus the focal nodes that shaped it. Backs the Claude Code session-start hook.

    **Equivalent REST.** `POST /v1/condition/scaffold`. For a full session prompt rather than a single wrapped prompt, `POST /v1/condition/session`. See [Conditioning your own agent](/guides/conditioning).
  </Accordion>

  <Accordion title="exo_decide" icon="git-branch">
    **What it does.** Weighs two options against evidence already in the graph, and reports evidence strength, drift rate, competing hypotheses and confidence.

    **Equivalent REST.** Two `POST /v1/retrieve` calls, one seeded with each option, compared on their `cognition` blocks. The tool does the comparison for you.
  </Accordion>

  <Accordion title="exo_configure" icon="settings">
    **What it does.** Adjusts how Exo personalises responses: voice mode (`mirror`, `professional`, `casual`, `default`), quality mode (`fast`, `balanced`, `thorough`) and autonomy (`conservative`, `balanced`, `autonomous`).

    **Equivalent REST.** `GET /v1/settings`, `PATCH /v1/settings`, `POST /v1/settings/reset`.
  </Accordion>

  <Accordion title="exo_purge" icon="trash-2">
    **What it does.** Wipes knowledge-graph layers for the current organization. Destructive and irreversible.

    Always run it with `dry_run=True` first. That returns the counts and a confirm token. Re-run with `dry_run=False` and the exact token to delete.

    **Equivalent REST.** `POST /v1/purge`, which is the same two-phase ceremony. Account-level tables such as API keys and settings are never touched by either. See [Forgetting and portability](/guides/forgetting).
  </Accordion>
</AccordionGroup>

## Quick map

| Tool                  | Equivalent REST route                                                          |
| --------------------- | ------------------------------------------------------------------------------ |
| `exo_context`         | `POST /v1/retrieve`, `GET /v1/recall/{type}`, `POST /v1/brain/query`           |
| `search`              | `POST /v1/retrieve` or `POST /v1/search`                                       |
| `fetch`               | `GET /v1/recall/graph/node/{node_id}`                                          |
| `exo_capture`         | `POST /v1/ingest`                                                              |
| `exo_ingest`          | `POST /v1/ingest`, `POST /v1/ingest/batch`, `POST /v1/import`                  |
| `exo_ingest_codebase` | `POST /v1/ingest/batch`                                                        |
| `exo_edit`            | `PATCH` / `DELETE /v1/graph/nodes/{id}`, `POST /v1/graph/nodes/{id}/supersede` |
| `exo_scaffold_prompt` | `POST /v1/condition/scaffold`                                                  |
| `exo_decide`          | `POST /v1/retrieve`, twice                                                     |
| `exo_configure`       | `GET` and `PATCH /v1/settings`                                                 |
| `exo_purge`           | `POST /v1/purge`                                                               |

<Note>
  "Equivalent" means the same capability, not a literal proxy. A tool may do work of its own on either side of the call, such as chunking a codebase on syntax boundaries or formatting a result for a model to read. Build against the routes when you want the raw payload.
</Note>

## Scopes still apply

A tool cannot do anything the key behind it is not allowed to do. An agent given a key scoped `read` plus `graph:write` can read, edit and supersede, and `exo_edit`'s `forget` action fails, because erasure needs `memory:forget`.

That is the recommended posture for a coding agent: let it correct its own mistakes, do not let it destroy content. See [Scopes](/scopes).

## Next

<Columns cols={2}>
  <Card title="Claude Code" icon="terminal" href="/integrations/claude-code">
    Connect a client and get these tools in your session.
  </Card>

  <Card title="Conditioning your own agent" icon="sliders" href="/guides/conditioning">
    Use the same identity in a model Exo does not host.
  </Card>
</Columns>
