MCP tools
Onadit gives a connected agent 9 tools. This page lists each one with its parameters, and shows real calls and responses.
Which tool for which job#
| Job | Tool |
|---|---|
| Get context before a task | rift_context_pack |
| Look for something specific | rift_search |
| Filter past conversations by source, topic or date | rift_conversations_search |
| Read the full passage behind a result | rift_open_evidence |
| File a session or a note | rift_save |
| Record which passages a task used | rift_log_outcome |
| See what Onadit holds | rift_status |
| Inspect or reset what was recorded about a passage | rift_why_evidence, rift_forget_evidence_feedback |
Start with rift_context_pack. Go to rift_search when the pack comes back thin. Open a result before you rely on it.
rift_context_pack#
Returns a small bundle for a task: earlier decisions, constraints, example conversations and rule documents. It is summarised, never a raw transcript, and it never exceeds max_bytes.
| Parameter | Type | Default | Meaning |
|---|---|---|---|
task | string, required | A short description of the task. At most 1024 characters | |
cwd | string | The working directory. Narrows documents and rules to the matching project | |
max_bytes | integer | 6144 | A hard cap on the whole response. At most 16384 |
max_per_bucket | integer | 3 | Items per bucket. At most 10 |
since | ISO-8601 date | Only items indexed after this time |
{
"task": "Check the Mac installer on a clean machine before a release",
"cwd": "/Users/you/projects/rift",
"max_per_bucket": 2,
"max_bytes": 4096
}{
"task": "Check the Mac installer on a clean machine before a release",
"intent": "blended",
"decisions": [
{
"text": "2026-10-09 — Statement-recall delivery SHIP: #211/#212 merged, installed files match, capture runs are clean …",
"source": "tracker",
"source_path": "PROJECT_STATE.md:23",
"timestamp": "2026-10-09"
}
],
"constraints": [
{ "text": "Do not ship all … changes as a side effect", "source_path": "TODO.md:35" }
],
"examples": [
{
"id": "73403f50-d94b-4184-a2df-ffb2033450d8",
"title": "Rift release management, macOS installer …",
"source": "codex_cli",
"timestamp": "2026-09-30T15:57:49.995Z",
"content_bytes": 831796,
"passage": {
"text": "… Verified signatures, notarization, Gatekeeper, npm contents and matching installer hashes across public downloads. Inspected retained test logs and packaged fresh-install/upgrade evidence …",
"offset": 8363,
"matched": "4/7"
},
"expand": { "route": "/search", "params": { "id": "73403f50-…", "tier": "hot", "source_table": "conversations_hot", "detail": "full" } }
}
],
"rules": [
{
"id": "report_card:fresh-mac-gate-findings",
"title": "Fresh-Mac Install Gate — Findings Report (2026-05-04)",
"source_path": "reports/2026-05-04-fresh-mac-gate-findings.md"
}
],
"current_truth_caveat": "tracker-backed, not live-verified",
"total_bytes": 3866,
"truncated": true,
"degraded": false,
"project_scope": { "root": "/Users/you/projects/rift", "conversations": 221 }
}How to read it:
| Field | Meaning |
|---|---|
decisions, constraints | Short statements, each with the file and line, or the conversation, it came from |
examples | Past conversations. passage is the stretch that best matches the task, and matched says how many of the task's terms it contains. A low count is weak evidence |
rules | Documents that look like rules or reports for this project |
expand | What to pass to rift_open_evidence or rift_search to read the item in full |
truncated | true when items were dropped to stay under max_bytes |
degraded | true when search by meaning was tried and did not finish, so the pack was built from keyword results |
intent | How Onadit read the task: current_truth, reasoning_archive or blended |
A pack can also carry these fields, when they apply:
| Field | Meaning |
|---|---|
current_truth | Items from live files and trackers, each with its level of trust |
past_reasoning, older_memory | Older conversations and documents, kept apart from current state |
discounted | Items that may be stale, such as untracked or deleted files |
recommended_live_files | Files to read before trusting the pack |
conflicts | Items that disagree with each other |
other_projects | Matching documents from other projects, for reference only |
degraded_reason, mode | Why the pack is degraded, and "lexical" when it was built by keyword alone |
rift_search#
Ranked search across everything Onadit holds: conversations, documents and digests.
| Parameter | Type | Default | Meaning |
|---|---|---|---|
query | string | What to look for. Required unless you fetch by id | |
scope | string | all | all, conversations, documents, projects or clients |
cwd | string | The working directory. Narrows file results to the matching project. Conversations are not filtered by it | |
top_k | integer | 10 | How many results |
since | ISO-8601 date | Only results indexed after this time | |
client | string | Only results for 1 client name | |
detail | string | summary | summary, middle (the start and end of the text, about 2,000 to 4,000 tokens) or full |
id | string | With middle or full, fetch only this row. It never falls back to ranked search | |
tier | string | With id: hot, cold, digest, document or structured_doc. Copy it from a result's expand.params | |
source_table | string | With id: conversations_hot, conversations_cold, digests, structured_docs or structured_docs_local. Copy it from expand.params | |
content_bytes, content_tokens_estimate | integer | Accepted and ignored, so you can paste expand.params as it is |
{ "query": "why was Docker rejected for checking the Mac installer", "top_k": 3 }{
"results": [
{
"id": "73403f50-d94b-4184-a2df-ffb2033450d8",
"source": "codex_cli",
"title": "Contains detailed Rift release and review context: … macOS installer/app rollout …",
"score": 0.7449906571152327,
"retrieval_method": "hybrid",
"timestamp": "2026-09-30T15:57:49.995Z",
"tier": "hot",
"snippet": "… Creating an optimized production build … Compiled successfully in 728ms …",
"summary": "Contains detailed Rift release and review context: … notarization/download/npm verification, custom daemon env preservation fix, pilot guide updates …",
"content_bytes": 831796,
"content_tokens_estimate": 207949,
"expand": {
"route": "/search",
"params": {
"id": "73403f50-d94b-4184-a2df-ffb2033450d8",
"tier": "hot",
"source_table": "conversations_hot",
"detail": "full",
"stable_evidence_key": "conversation:codex_cli:73403f50-d94b-4184-a2df-ffb2033450d8"
}
}
}
],
"mode": "hybrid",
"degraded": false,
"cwd_matched": false
}This example is shown as it came back, and it is not a perfect answer: the top result is the right project and the right subject, but the snippet is build output, not the decision. That is why content_bytes is there. This conversation is 830 KB. Open it with detail: "middle" before you spend the tokens on full.
| Field | Meaning |
|---|---|
score | Keyword match and meaning on 1 scale, with a boost for recent work. See How retrieval works |
retrieval_method | How the row was found: by meaning (vector), by keyword, or both (hybrid) |
tier | hot for current conversations, cold for archived ones, digest or document |
content_bytes, content_tokens_estimate | The size of the full text, so you can decide whether to open it |
mode, degraded | mode is hybrid, or lexical when Search by meaning is off. degraded is true when search by meaning was tried and did not finish |
degraded_reason | Present when degraded is true |
cwd_matched, cwd_scope_applied_to | Whether cwd matched a folder Onadit indexes, and which kinds of result it narrowed |
A result can also carry content and content_truncated (with middle or full), matched_sections, duplicate_count when copies were folded into it, and chunk_count when it stands for several passages of 1 conversation.
rift_conversations_search#
Searches conversations only, with filters.
| Parameter | Type | Default | Meaning |
|---|---|---|---|
query | string, required | What to look for | |
source | string | all | claude_code, codex_cli, grok_cli, cursor_composer, gemini_cli, chatgpt_web, claude_web, grok_web, gemini_web or all |
domain | string | all | business, tech, personal, travel, health, finance, creative or all |
intent | string | all | research, decision, brainstorm, build, learn, troubleshoot or all |
quality | string | all | high, medium, low or all |
topic | string | A topic to match in full. Not case-sensitive | |
decision | string | A decision to match in full. Not case-sensitive | |
since | ISO-8601 date | Only results indexed after this time | |
top_k | integer | 10 | How many results |
detail | string | summary | summary covers current conversations and digests. full covers archived conversations and returns their text |
{ "query": "pricing", "source": "chatgpt_web", "intent": "decision", "top_k": 5 }rift_open_evidence#
Opens 1 result in full and records that it was opened.
| Parameter | Type | Meaning |
|---|---|---|
id | string, required | The id from a result's expand.params |
source_table | string, required | From expand.params: conversations_hot, conversations_cold, digests, structured_docs or structured_docs_local |
session_id | string, required | A stable ID for your session, so repeat opens are counted once |
intent | string, required | current_truth, reasoning_archive or blended. Use the intent of the pack the result came from |
detail | string | middle or full. Prefer middle |
rank_at_retrieval, result_count | integer | For a search result: its position, and how many results came back |
context_pack_bucket, position_in_bucket | string, integer | For a pack item: its bucket and its position in it |
query | string | The search query the result came from |
task | string | The context-pack task the result came from |
project | string | The project or folder this evidence helped |
tool_call_id | string | Your host's ID for this tool call |
{
"id": "73403f50-d94b-4184-a2df-ffb2033450d8",
"source_table": "conversations_hot",
"detail": "middle",
"session_id": "session-2026-10-09-a",
"intent": "blended",
"context_pack_bucket": "examples",
"position_in_bucket": 1
}The response has 2 parts: result, the opened item, and feedback, with stable_evidence_key (keep it for rift_log_outcome), event_written and duplicate. If the ID is not found, or matches rows in 2 tables, the call returns an error.
rift_save#
Files a session or a note. The save is queued and the call returns a job_id.
| Parameter | Type | Meaning |
|---|---|---|
source | string, required | claude_code, codex_cli or gemini_cli |
summary | string, required | A summary of the session |
content | string | The full transcript. Send it for any session of substance. A summary alone is not enough to find the session later |
decisions, key_outputs, topics | string arrays | What was decided, what was produced, what it was about |
domain | string | tech by default |
idempotency_key | string | A key that makes a repeated save a no-op. If you leave it out and send content, Onadit derives one from the content |
replace_idempotency_key | string | The key of an earlier save that this one replaces |
{
"source": "claude_code",
"summary": "Chose a clean macOS VM over Docker for the install check.",
"decisions": ["Docker is rejected for install checks: it cannot exercise the Mac-specific parts"],
"topics": ["installer", "release"],
"content": "User: … Assistant: …",
"idempotency_key": "claude_code:session-2026-10-09-a:v1"
}More in Save from an agent.
rift_log_outcome#
Records the outcome of a task and which passages you used for it. Passages that were returned but not used are not counted.
| Parameter | Type | Meaning |
|---|---|---|
session_id | string, required | The same ID you passed to rift_open_evidence |
summary | string, required | What the task came to |
intent | string, required | current_truth, reasoning_archive or blended |
cited_evidence | array | The passages you used. Each item takes the fields below |
task | string | The original request |
project | string | The project the outcome belongs to |
Each cited_evidence item needs stable_evidence_key, or id with source_table. Every field is optional on its own.
| Field | Type | Meaning |
|---|---|---|
stable_evidence_key | string | The key rift_open_evidence returned. Preferred |
id, source_table | string | The row, if you have no key |
source_path, source_id, parent_id, source, digest_id | string | Other ways to name the item, copied from the result |
rank_at_retrieval, result_count | integer | Its position in a search result list |
context_pack_bucket, position_in_bucket | string, integer | Its place in a context pack |
reason | string | Why it mattered |
{
"session_id": "session-2026-10-09-a",
"intent": "blended",
"task": "Check the Mac installer on a clean machine before a release",
"summary": "Used the clean-VM checklist from an earlier release session.",
"cited_evidence": [
{ "stable_evidence_key": "conversation:codex_cli:73403f50-d94b-4184-a2df-ffb2033450d8", "reason": "Listed the checks that were run last time" }
]
}The response has outcome_id, the summary, and for each cited item stable_evidence_key, event_written and duplicate.
These records are kept in a local log. They do not change ranking today.
rift_status#
Takes no parameters. Returns what Onadit holds and whether Capture is healthy.
{
"capture_diagnostics": {
"status": "ok",
"worker": "codex",
"preflight_ok": true,
"last_preflight_at": "2026-10-09T13:30:03.052Z",
"recent_capture_errors": 0
},
"memory_diagnostics": {
"counts": { "conversations": 6904, "digests": 0, "structured_docs": 0 },
"digests": {
"status": "unavailable_basic",
"summary": "No digests because AI enrichment is off, so no digest worker is registered."
},
"documents": {
"status": "source_empty",
"summary": "No structured documents because the active sources contain no supported files."
}
}
}rift_why_evidence#
Shows what has been recorded about 1 passage: how often it was opened or cited, and by which events.
Name the passage with stable_evidence_key, or source_path, or id together with source_table. The call fails without 1 of the 3.
| Parameter | Type | Meaning |
|---|---|---|
stable_evidence_key | string | The key rift_open_evidence returned |
id, source_table | string | The row and its table |
source_path | string | The file, for a document |
source_id, parent_id, source, digest_id | string | Other ways to name the item, copied from a result |
project | string | Only records for this project |
intent | string | Only records for this intent: current_truth, reasoning_archive or blended |
{ "stable_evidence_key": "conversation:codex_cli:73403f50-d94b-4184-a2df-ffb2033450d8" }rift_forget_evidence_feedback#
Clears what was recorded about 1 passage. It adds a reset event to the local log and deletes nothing, so the history stays readable.
It takes the same parameters as rift_why_evidence, plus 2:
| Parameter | Type | Meaning |
|---|---|---|
session_id | string | Your session ID |
reason | string | Why the record is being cleared |
The response has stable_evidence_key and event_written.
The resource#
Besides the 9 tools, the server offers 1 MCP resource: rift://rift-context.md, a short Markdown description of what Onadit holds on this Mac.
Last updated 12 October 2026. This page is also available as Markdown, and every page is listed in llms.txt.