Skip to content

MCP Tools

All 9 tools available to any MCP client connected to the Recall MCP server (recall-memory).


FTS5 keyword search across all memory tables. Use before asking the user to repeat anything.

Use table when you need a hard filter to one record type. Use bias_type when you want one type to appear first but still want useful matches from other tables.

Parameters

Name Type Required Default Description
query string yes — Search query. FTS5 supports AND, OR, NOT, prefix*, "exact phrase"
project string no — Filter results to a specific project name
table string no — Hard-filter search to one table: messages, loa, decisions, learnings, breadcrumbs
bias_type string no — Softly boost one table type in ranking without filtering other matches. Same allowed values as table; prefer table when you need only one type.
limit number no 10 Maximum number of results to return

Returns: Matching records as text: table, id, project, created time, a content preview, and Record Provenance (verbatim, user_authored, extracted, derived, or unknown for legacy rows that predate provenance). A global query with zero keyword hits and no table filter retries hybrid search.

// Only decisions
memory_search({ query: "kubernetes auth", project: "my-app", table: "decisions", limit: 10 })

// Prefer decisions, but keep matching learnings/messages/LoA/breadcrumbs
memory_search({ query: "kubernetes auth", project: "my-app", bias_type: "decisions", limit: 10 })

When to bias: use bias_type: "decisions" for “what did we decide,” "learnings" for “what did we learn,” "breadcrumbs" for “where did we leave off,” "loa" for LoA extracts (Automatic-capture or Curated), and "messages" for raw conversation traces.


Combined keyword + semantic search, unless ~/.agents/Recall/config.json has a query key. A named or command win returns that text. A local win stays on the configured mode (semantic, keyword, or hybrid). See architecture.

Parameters

Name Type Required Default Description
query string yes — Natural language search query
project string no — Filter results to a specific project name
limit number no 10 Maximum number of results to return

Returns: Formatted text. The default hybrid path includes fused relevance scores and Record Provenance; configured query harnesses return their selected mode’s output.

memory_hybrid_search({ query: "how did we handle rate limiting", project: "my-app" })

memory_recall

Get recent context — LoA entries, decisions, and breadcrumbs. Good for orienting at the start of a session.

Parameters

Name Type Required Default Description
limit number no 5 Number of recent entries to return per category
project string no — Filter results to a specific project name

Returns: Recent records grouped by category: Library of Alexandria entries, decisions, and breadcrumbs — each annotated with its Record Provenance.

memory_recall({ limit: 5, project: "my-app" })

context_for_agent

Call this before spawning any agent via the Task tool. Uses the configured query harness when that key is present, otherwise hybrid search.

Parameters

Name Type Required Default Description
agent_task string yes — The task or prompt you plan to give the agent
project string no — Current project name for filtering

Returns: Formatted context block for the agent prompt. The configured local modes (keyword, semantic) return search hits for the task only. The hybrid path also adds recent LoA titles and active decisions, and says whether local memory looks sufficient or Brave search is recommended.

context_for_agent({ agent_task: "Refactor the auth middleware", project: "my-app" })

memory_add

Add structured records during a session. Use this to capture decisions, learnings, and work-in-progress breadcrumbs as they happen.

For memory_add and recall add, learning tags pass through the same scrubber as record text before insertion into SQLite: recognized secrets become [REDACTED:<kind>], and invisible or bidirectional Unicode controls are stripped. The tool response or CLI output reports the kinds redacted. The scrubber recognizes specific credential patterns; it cannot guarantee removal of every secret.

Never submit API keys, tokens, passwords, or credential-bearing snippets to memory writes or session dumps. Redact them before recording (for example, [REDACTED:api-key]), because stored records can resurface in future sessions’ L0/L1 context. Before dumping a session that touched credentials, say so and confirm with the user.

Parameters

Name Type Required Default Description
type string yes — Record type: "decision", "learning", or "breadcrumb"
content string yes — Main content
detail string no — Additional detail — reasoning for decisions, solution steps for learnings
project string no — Project name
tags string no — Comma-separated tags (applies to learnings)
confidence string no — Confidence level: "high", "medium", or "low" — applies to decisions and learnings
importance number no 5 Importance on a 1-10 scale. Surfaces higher-importance records earlier in L1 at session start. LoA has a floor of 5. (Added in v0.7.0.)

Returns: Confirmation with the new record’s id and table.

Records created through memory_add are automatically stamped with Record Provenance user_authored. There is intentionally no provenance parameter — provenance is write-path metadata, not a caller claim (see adr/0001-record-provenance-automatic-write-path-metadata.md).

memory_add({ type: "decision", content: "Use PostgreSQL over MySQL", detail: "Better JSON support and JSONB indexing" })
memory_add({ type: "learning", content: "bun:sqlite uses $param syntax", detail: "Not :param like better-sqlite3", tags: "bun,sqlite" })
memory_add({ type: "breadcrumb", content: "Auth refactor in progress — do not touch middleware until complete" })
memory_add({ type: "decision", content: "Ship onboarding first", importance: 9 })

memory_stats

Get database statistics including record counts per table and total database size. No parameters.

Returns: Sessions, messages, LoA entries, decisions, learnings, breadcrumbs, and total database size on disk.

memory_stats()

loa_show

Show a full Library of Alexandria entry. The body is the fabric_extract column (name, not the writer). For entry types, see LoA terminology.

Parameters

Name Type Required Default Description
id number yes — LoA entry ID (use memory_search or memory_recall to find IDs)

Returns: Full LoA record including title, extract body, and metadata. Do not assume every entry is Fabric extract_wisdom.

loa_show({ id: 1 })

memory_dump

Persist an explicitly supplied conversation session into SQLite. Claude, OpenCode, and Pi have native transcript discovery; other hosts must supply visible messages instead of relying on an assumed private transcript format.

Parameters

Name Type Required Default Description
title string yes — Descriptive title for this session dump
project string no — Override the auto-detected project name
session_id string no generated Stable session identifier supplied by the host
source string no mcp Host source: claude, opencode, pi, codex, grok, jcode, omp, cursor, or mcp
messages array no — Explicit { role, content, timestamp? } messages. Required when the host has no native transcript adapter.
skip_fabric boolean no true Skip the fabric Extractor and write a basic summary

Returns: The session ID, source, imported message count, and LoA entry ID when a summary was created.

memory_dump({
  title: "Auth middleware refactor — JWT validation approach",
  project: "my-app",
  source: "codex",
  messages: [
    { role: "user", content: "Refactor the auth middleware" },
    { role: "assistant", content: "Implemented JWT validation" }
  ]
})

memory_dump is an explicit operation, not lifecycle auto-capture. MCP has no portable event contract for session stop, session start, or pre-compaction.

Message scrubbing follows the shared Session Dump contract. Inside omp, use the native recall_dump tool for the live branch.

When session_id already belongs to lifecycle capture, a dump from the same source is supplemental: Recall preserves lifecycle-owned rows and their automatic summary. A conflicting source is rejected rather than taking over the session.


decision_update

Update the status of an existing decision. Use this to mark decisions as superseded (replaced by a newer decision) or reverted (rolled back because it was wrong).

Parameters

Name Type Required Default Description
id number yes — Decision ID to update
action string yes — Status transition: "supersede" or "revert"

Returns: Confirmation with the updated decision’s id and new status.

decision_update({ id: 42, action: "supersede" })
decision_update({ id: 17, action: "revert" })

When to Use Each Tool

Scenario Tool
Starting a new session memory_recall
User asks about past work memory_search or memory_hybrid_search
Before spawning a sub-agent context_for_agent
Recording an architectural decision memory_add with type: "decision"
Capturing a technical insight memory_add with type: "learning"
Marking work-in-progress state memory_add with type: "breadcrumb"
Marking a decision as replaced or rolled back decision_update
End of session memory_dump
Viewing an LoA entry loa_show
Quick database health check memory_stats

Type to search…

↑↓ navigate↵ selectEsc close