XMemo
XMemo is a privacy-first, user-owned persistent memory system for AI agents, enabling storage, retrieval, and management of memories across sessions. Here's what you can do:
Core Memory Operations
Remember / Store: Save durable facts, preferences, instructions, or project details
Recall / Search: Retrieve relevant memories by natural-language query (
recall,recall_context,search_memory)Update: Correct, revise, or reclassify existing memories (
update_memory)Delete / Restore: Soft-delete (
forget_memory), permanently delete (forget,delete_current_memory), or recover memories (restore_memory)Explain: Understand why a memory exists or matched a query (
explain_memory)
Expense & Ledger Tracking
Record expenses/income (
add_expense), view transaction history (list_ledger_transactions), and get monthly spending summaries (get_monthly_ledger_summary)
TODO & Task Management
Create (
create_memory_todo), list (list_memory_todos), and complete (complete_memory_todo) tasks or action items
Timeline & Events
Log milestones, decisions, or handoff notes (
record_event) and review them (get_timeline)
Session & State Management
Save working state (
update_state), create session snapshots before handoffs (create_restart_snapshot), and restore them (restore_restart_snapshot)
Decision Tracking
Record unresolved decisions with options (
create_pending_decision), list them (list_pending_decisions), and resolve them (resolve_decision)
Analytics & Stats
View memory overviews, aggregate stats, recent activity, and analyze text patterns across memories (
memory_overview,memory_stats,memory_activity,analyze_memory_text)
Version Control & Conflict Management
View edit history (
list_memory_versions), find and resolve conflicting memories (list_memory_conflicts,resolve_memory_conflict), and redact sensitive content (redact_memory)
Administration & Maintenance
Verify connection status (
get_mcp_identity), run lifecycle management to expire/archive stale memories (run_lifecycle), review audit logs (query_audit_events), and evaluate recall quality (run_recall_eval)
@xmemo/client is the official control plane for connecting AI tools to
XMemo. It makes setup repeatable, keeps credentials out of
project files, and gives every supported client a consistent path to durable,
user-owned memory.
The package is deliberately small: the CLI runtime, safe client configuration, behavior profiles, XMemo skills, and marketplace metadata. Server code, databases, deployment files, logs, and internal operations remain outside the npm distribution.
Architecture
Package | |
Primary command |
|
Local MCP command |
|
Hosted MCP |
|
Runtime | Node.js 20 or later |
License | MIT |
Related MCP server: flux7-memory
Why XMemo CLI
One control plane — login, diagnostics, configuration, profiles, updates, and smoke checks share one predictable interface.
Private by design — generated project configuration references a credential; it never embeds the credential value.
Native where it matters — OpenClaw and Hermes use dedicated memory integrations instead of duplicating the same capability through MCP.
Portable everywhere else — hosted Streamable HTTP MCP and local stdio cover modern editors, terminals, and agent runtimes.
Safe automation — supported setup and removal paths offer preview, dry-run, or explicit confirmation before making changes.
Small supply-chain surface — the npm package is governed by an explicit file allowlist and release provenance.
Quick start
npm install -g @xmemo/client
xmemo login
xmemo doctor
xmemo setup codex
xmemo statusReplace codex with your client. Preview a configuration before writing it:
xmemo setup cursor --dry-runStart withxmemo login, xmemo doctor, and xmemo setup <client>.
Hand-edit MCP configuration only when a client has no verified setup path.
Supported integrations
Client | Recommended command | Connection |
Codex |
| Hosted MCP + behavior profile |
Cursor |
| Hosted MCP + Bearer Token + behavior profile |
Copilot CLI |
| Local authenticated proxy |
Gemini CLI |
| Hosted MCP + OAuth |
Antigravity |
| Hosted MCP + OAuth |
OpenClaw |
| Native memory plugin + Skill |
Hermes |
| Native memory provider |
Kiro |
| Hosted MCP + Bearer Token |
Grok |
| Hosted MCP |
Other MCP clients |
| Generated template |
The client registry also covers Windsurf, Cline, Continue, Claude Desktop,
Claude Code, Kimi Code, Zed, JetBrains, OpenCode, Qwen, Trae, and compatible
MCP hosts. Run xmemo mcp list for the current machine-readable catalog.
Connection modes
Hosted MCP
The recommended universal path is the XMemo Streamable HTTP endpoint:
https://xmemo.dev/mcpOAuth-capable clients complete authentication in the browser. Other clients
reference XMEMO_KEY without copying its value into repository files.
Generic configuration shape:
{
"mcpServers": {
"XMemo": {
"type": "streamable-http",
"url": "https://xmemo.dev/mcp",
"headers": {
"Authorization": "Bearer ${XMEMO_KEY}"
}
}
}
}Client configuration keys differ; prefer xmemo setup <client> over copying
this generic example directly.
Local stdio MCP
xmemo-mcp is the dedicated stdio entry point for marketplaces and clients
that launch a local process. Safe discovery exposes 20 tools, three prompts,
and two documentation resources without a token. Tool execution still requires
authentication.
After a global installation:
xmemo-mcpInstall-free MCP configuration:
{
"mcpServers": {
"XMemo": {
"command": "npx",
"args": [
"-y",
"--package",
"@xmemo/client@latest",
"xmemo-mcp"
]
}
}
}xmemo mcp serve is equivalent when the CLI is already installed.
Native integrations
OpenClaw and Hermes have dedicated memory providers. Their default setup avoids installing a second, duplicate XMemo tool surface.
# Native OpenClaw plugin + XMemo Skill
xmemo setup openclaw
# Native Hermes memory provider
xmemo setup hermesAdd hosted MCP only when an explicit fallback is desired:
xmemo setup openclaw --with-mcp
xmemo setup hermes --with-mcpUse --mcp-only to skip the native integration and install only the hosted MCP
fallback.
Authentication
Browser login
Recommended for personal accounts:
xmemo login
xmemo auth statusThe CLI uses the hosted device-login flow, waits for browser approval, and
asks once before storing the issued credential unencrypted in the current
user's XMemo config directory. The exact path is shown before approval, file
permissions are restricted where the operating system supports it, and the
credential value is never printed. Prefer XMEMO_KEY or a managed secret store
on shared systems.
For non-interactive automation, record the same decision explicitly:
xmemo login --allow-plaintextExisting token
Pipe an existing token through stdin so it does not appear in command history:
printf '%s\n' 'your-token' | xmemo token add --from-stdin --allow-plaintext
xmemo token status --verifyPowerShell:
$xmemoToken = Read-Host "XMemo token"
$xmemoToken | xmemo token add --from-stdin --allow-plaintext
Remove-Variable xmemoTokenFor CI and managed workstations, expose XMEMO_KEY through the platform's
secret manager. Do not commit it to .env, MCP configuration, logs, issue
reports, or chat transcripts.
Command reference
xmemo --version
xmemo update
xmemo update --dry-run
xmemo doctor
xmemo discovery show
xmemo status
xmemo privacyxmemo login
xmemo auth status
xmemo auth-status --verify
xmemo token status --verify
xmemo token add --from-stdin --allow-plaintext
xmemo env example --shell bashxmemo setup <client>
xmemo setup <client> --dry-run
xmemo setup --all
xmemo setup openclaw [--with-mcp|--mcp-only]
xmemo setup hermes [--with-mcp|--mcp-only]xmemo memory add --content "Remember this" --path notes/example --json
xmemo memory search "example" --json
xmemo context recall "resume this task" --include-knowledge --json
xmemo state save --current-task "ship the client" --next-action "run tests" --json
xmemo state restore --json
xmemo restart snapshot --json
xmemo restart restore --snapshot-id <snapshot-id> --json
xmemo knowledge add --base <base-id> --file ./guide.pdf --title "Guide" --json
xmemo knowledge search "setup" --base <base-id> --json
xmemo knowledge read <item-id> --json > knowledge-view.json
xmemo knowledge update <item-id> --text "Updated" --from knowledge-view.json --publish --yes --json
xmemo dream preview --wait --json
xmemo dream show <run-id> --json > dream-view.json
xmemo dream apply <run-id> --item <candidate-id> --from dream-view.json --yes --json
xmemo cloud-skill list --json
xmemo cloud-skill add --file ./SKILL.md --json
xmemo cloud-skill show <skill-id> --json > skill-view.json
xmemo cloud-skill update <skill-id> --from skill-view.json --file ./SKILL.md --json
xmemo cloud-skill run <skill-id> --input ./args.json --from skill-view.json --yes --jsonAll direct service commands support a single machine-readable JSON envelope.
Knowledge update, Dream apply, and Cloud Skill run use the readReceipt from a
saved read/show result so the CLI never silently substitutes a newer revision.
Set XMEMO_KNOWLEDGE_BASE_ID for a non-interactive default knowledge base.
For a long knowledge item, continue the same fixed revision with
xmemo knowledge read <item-id> --from knowledge-view.json --offset <n>.
Run xmemo doctor --services --json for read-only Knowledge, Dream, and Cloud
Skill diagnostics; it deliberately does not claim write or production readiness.
Cloud Skill add/update already target the safe create-only and content-CAS
contracts. They fail with SERVER_CONTRACT_REQUIRED on older services and do
not fall back to legacy upsert routes. Binary Knowledge item updates similarly
require a new version of the same server Document; use --document and
--document-version after that version has been uploaded.
The normal login scopes remain unchanged. Request additional service scopes explicitly when needed, for example:
xmemo login --scopes memory:read,memory:write,memory:restore,knowledge:read,knowledge:writexmemo mcp serve
xmemo mcp list
xmemo mcp config --client generic
xmemo mcp add <client> --write
xmemo mcp proxy
xmemo profile install <client>
xmemo profile status <client>
xmemo profile uninstall <client>
xmemo smoke --client codexxmemo uninstall <client> --dry-run
xmemo uninstall <client> --yes
xmemo uninstall --all --dry-run
xmemo uninstall --all --yes --profilesOnly XMemo-owned entries and marker-scoped behavior profiles are removed. Unrelated MCP servers, credentials, and device identity remain intact.
Run xmemo help or xmemo <command> --help for complete, version-matched
options.
Client notes
xmemo setup codex
xmemo smoke --client codex
xmemo setup cursorBoth setup paths write a user-scoped MCP entry and can install a marker-scoped
memory behavior profile. Use --no-profile to configure MCP only. Cursor's
public marketplace plugin remains OAuth-first and contains no bearer-token
configuration.
xmemo setup gemini
xmemo setup antigravityThese clients use hosted MCP OAuth. Their generated configuration carries no token value; restart the client and complete the browser login on first use.
xmemo login
xmemo setup openclaw
openclaw xmemo statusThe setup command installs or updates @xmemo/openclaw-memory, installs the
XMemo Skill, reuses the shared XMemo credential, and checks plugin status.
xmemo login
xmemo setup hermesThe setup command installs or updates hermes-xmemo, configures the native
provider, and synchronizes the user-scoped XMemo credential with Hermes.
xmemo login
xmemo setup copilot
xmemo mcp proxyCopilot CLI receives a local proxy entry. The proxy reads the credential from user-scoped storage, adds identity metadata, and forwards requests to hosted MCP without writing secrets into Copilot configuration.
Security by default
Control | Default behavior |
Telemetry | No CLI analytics or usage telemetry |
Credential output | Token values are never printed |
Project files | Generated configuration references secrets; it does not embed them |
Discovery |
|
Identity | One stable, non-secret agent-instance ID is stored outside git |
Writes | Setup supports preview/dry-run; broad removal requires confirmation |
Local credential storage | Interactive login asks first; non-interactive writes require |
Package contents | An npm |
Credential precedence and compatibility aliases are documented by:
xmemo env example --shell bash
xmemo privacyFor private or self-hosted deployments, set XMEMO_URL or pass
--url <service-url>. MEMORY_OS_URL remains a compatibility alias.
Package boundary
Published to npm:
bin/
docs/assets/
src/
skills/
plugins/kiro/
plugins/xmemo/
README.md
LICENSENot published:
.github/
docs/analysis/
docs/architecture/
test/
coverage/
server code
database migrations
deployment files
logs and local stateDevelopment
npm install
npm run release:check
npm run lint
npm test
npm run pack:dry-runBefore proposing a release, run the complete package gate:
npm run prepublishOnlyThe local stdio server can be inspected directly:
node bin/mcp-stdio.jsRelease model
Normal releases are produced by GitHub Actions from the exact tagged commit, not from a mutable branch checkout or a developer workstation:
develop → CLI version sync → test → cli-v tag → GitHub Actions → npm publish --provenanceThe CLI package and hosted MCP service intentionally have separate version streams:
CLI/npm version:
package.json,package-lock.json, and the npm package entry inserver.json.Hosted MCP/Registry version: the top-level
server.json.versionandlhm.plugin.json. This version follows the deployed XMemo service.
node scripts/check-release-version.mjs verifies both contracts. A
cli-vX.Y.Z tag must equal the CLI/npm version and publishes only npm. The
MCP Registry is published separately with the Publish MCP Registry metadata
workflow using mcp-vX.Y.Z, which must equal the hosted MCP/Registry version.
The separate npm publish workflow is manual recovery only, so creating a
GitHub Release cannot publish twice.
Documentation and support
Canonical service documentation lives at xmemo.dev/docs. This repository documents the client; the pages below document the hosted service it connects to.
Quickstart | |
MCP overview and per-client setup | |
Tool reference ( | |
REST API | |
Troubleshooting | |
Machine-readable index |
License
MIT © 2025–2026 Yonro
Available Tools
28 toolscomplete_memory_todoComplete XMemo memory TODOAInspect
Marks a TODO/action item completed when the user says a saved task is done, resolved, or no longer needed; its exact memory reference is shown by list_memory_todos.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional completion note. | |
| todo_id | Yes | The memory TODO/action-item ID to complete. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish that this is a mutating, non-destructive, non-idempotent operation, and the description does not contradict them. It adds the semantic that the TODO is 'marked completed' and points to list_memory_todos for the ID, but it does not disclose side effects such as whether completed TODOs vanish from active lists, whether repeated completion errors, or whether the action is reversible. The added context is useful but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single well-structured sentence that packs the operation, trigger, and cross-reference without wasted words. It is front-loaded with the verb and resource, making it immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter mutation with an output schema and reasonable annotations, the description covers the core purpose, trigger, and ID sourcing. It lacks explicit mention of post-completion state or alternatives, but those gaps are minor and the overall package is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides 100% coverage for both parameters (todo_id and note), so the baseline is 3. The description adds value by explaining that the todo_id is the exact memory reference shown by list_memory_todos, which helps the agent correctly obtain the ID before calling the tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Marks'), identifies the exact resource ('a TODO/action item'), and includes the user trigger ('when the user says a saved task is done, resolved, or no longer needed'). It clearly distinguishes this from sibling tools like create_memory_todo and list_memory_todos by focusing on the completion action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('when the user says a saved task is done, resolved, or no longer needed') and references list_memory_todos as the source for the exact memory reference, implying a look-then-complete workflow. It does not explicitly exclude alternatives like update_project_todo, but the narrow purpose makes the intended usage clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_memory_todoCreate XMemo memory TODOAInspect
Creates a TODO/action item in XMemo with an optional due time when the user asks to save a task, follow-up, action item, or reminder-style item to revisit at a later time.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | work |
| due_at | No | Optional due time for a memory TODO/action item, preferably ISO 8601. | |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false, so the write nature is covered. The description adds that it creates a todo with optional due time, but doesn't disclose other behavioral traits like return format, idempotency, or side effects. With annotations present, the added value is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the core action ('Creates a TODO/action item'), and includes the key trigger context. No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return values need no explanation. The description, annotations, and full parameter schema cover the essential use case. Could be more complete with explicit notes on when not to use, but for a simple create tool it is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, and every parameter has a description. The tool description does not add additional meaning beyond the schema, so the baseline of 3 is appropriate. It mentions 'optional due time' which maps to due_at, but no further enrichment.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it creates a TODO/action item in XMemo, with optional due time, and specifies the trigger context (user asks to save a task, follow-up, action item, or reminder). This distinguishes it from sibling tools like complete_memory_todo or list_memory_todos.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides clear context: 'when the user asks to save a task, follow-up, action item, or reminder-style item to revisit at a later time.' This gives a clear usage trigger, though it doesn't explicitly mention alternatives or exclusion cases, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_restart_snapshotCreate Restart SnapshotAInspect
Save active state, recent events, TODOs, and pending decisions for restart. Call this before handoff or when context may be lost.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | work |
| state_key | No | Working-state key to save, snapshot, or restore, such as active_task. | active_task |
| session_id | No | Optional session identifier associated with the event, timeline query, or snapshot. | |
| ttl_seconds | No | Time-to-live in seconds for working state or restart snapshot records. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| decision_limit | No | Maximum number of pending decisions to include in a restart snapshot. | |
| reminder_limit | No | Maximum number of TODO/reminder items to include in a restart snapshot. | |
| timeline_limit | No | Maximum number of recent timeline events to include in a restart snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint=false and destructiveHint=false, so no contradiction. The description adds that it saves specific categories of data, but doesn't disclose side effects like overwriting existing snapshots or persistence behavior beyond what schema parameters imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences deliver the core purpose and usage timing without any filler. The structure is front-loaded with the action, then the when-to-use guidance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 optional parameters, a full output schema, and schema descriptions cover all parameters. The description explains what the snapshot contains and when to invoke it, which is adequate. It could mention the restore counterpart, but that's not essential.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All 9 parameters have comprehensive descriptions in the schema, covering scope, bucket, state_key, session_id, TTL, etc. The tool description adds no additional parameter semantics, so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Save active state, recent events, TODOs, and pending decisions for restart' with a specific verb and resource. It distinguishes itself from sibling tools like restore_restart_snapshot by focusing on the creation aspect.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'Call this before handoff or when context may be lost,' providing clear timing guidance. It doesn't mention exclusions or alternatives, but the context is sufficient for most use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
explain_memoryExplain XMemo memoryARead-onlyIdempotentInspect
Explains why a memory exists or matched a query whenever the user asks why something was saved there or why it was retrieved.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Natural-language question or search text. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| output_json | No | Return a machine-readable JSON response instead of a human-readable summary. | |
| include_embedding | No | Whether to include embedding/vector metadata in the returned explanation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, providing safety information. The description adds the two explanation modes (existence vs. retrieval match) but does not disclose additional behavioral traits such as how explanations are generated or any limitations. This is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence that front-loads the core action and scope. No wasted words or redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple, read-only tool with complete schema coverage, an output schema, and clear annotations, the description is largely sufficient. It could be slightly more complete by mentioning that it is complementary to recall/search tools, but the current text covers the essential use case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all four parameters clearly. The description adds no extra parameter-level meaning, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: explaining why a memory exists or matched a query. This is a specific verb+resource definition that distinguishes it from sibling tools like recall (retrieval) and update_memory (modification).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit context for when to use the tool ('whenever the user asks why something was saved there or why it was retrieved'). However, it does not mention any when-not scenarios or alternative tools by name, so it falls short of full guideline coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
forgetForget XMemo memory or TODOADestructiveInspect
Delete one memory, TODO, or Ledger transaction by current/latest, an exact memory reference, an exact TODO ID from list_memory_todos, or an exact transaction ID from list_ledger_transactions. The default is a recoverable soft delete that restore_memory can undo; mode='hard' is permanent and unrecoverable and may be used only after the user explicitly confirms permanent deletion. Resolve ambiguous targets before deleting.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deletion mode: soft or soft_delete is the recoverable default; hard or hard_delete is permanent and unrecoverable and may be used only after explicit user confirmation. | soft |
| reason | No | Optional user-facing reason for the deletion. | |
| target | No | The memory to forget: current or an exact memory ID shown by search. | current |
| memory_id | No | Exact XMemo memory reference shown by search or recall. | |
| query_hint | No | Input value for the Forget tool. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| replacement_content | No | Replacement text to store when redacting or replacing deleted memory content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond the annotations: it explains that the default is a recoverable soft delete reversible by restore_memory, while mode='hard' is permanent and unrecoverable, requiring explicit user confirmation. This goes well beyond the destructiveHint annotation by detailing nuances and recovery options.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: it opens with the core action and resource, then details targeting and deletion modes, and closes with a cautionary instruction. Every sentence adds value, and it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, an output schema, and supportive annotations), the description covers the essential aspects: what is deleted, how to target, the deletion modes, and the prerequisite to resolve ambiguity. It leverages the schema and annotations to avoid redundancy, leaving no major gaps for selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description enriches the schema by clarifying that targets can be 'current/latest', an exact memory reference, a TODO ID from list_memory_todos, or a transaction ID from list_ledger_transactions, which is more specific than the schema's target description. However, it does not explain the vague query_hint parameter, leaving a minor gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's action ('Delete one memory, TODO, or Ledger transaction') with specific targeting options, distinguishing it from sibling tools like restore_memory and list_memory_todos. It uses a specific verb with resource and scope, making the purpose immediately clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use the tool (to delete a memory, TODO, or ledger transaction) and how to specify targets (exact memory reference, TODO ID from list_memory_todos, transaction ID from list_ledger_transactions). It also warns to resolve ambiguous targets and restricts hard delete to after explicit user confirmation, effectively saying when not to use it without confirmation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mcp_identityCheck XMemo connectionARead-onlyIdempotentInspect
Checks XMemo connection status and the currently connected account/agent when the user asks whether XMemo is connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds value by specifying what the tool actually returns (connection status, connected account/agent), which the annotations do not cover.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence that states the core purpose, trigger condition, and output. Every phrase earns its place with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params, output schema present, annotations covering safety), the description fully captures what the agent needs to know: what it does and when to invoke it. No additional context is necessary.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description cannot add parameter-specific meaning. Baseline of 4 applies for no-parameter tools; the description correctly avoids inventing parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific verb 'Checks' and resource 'XMemo connection status and the currently connected account/agent'. It also includes the user trigger context, distinguishing this from all sibling memory/ledger/todo tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'when the user asks whether XMemo is connected', providing a clear usage context. It does not mention alternatives, but no sibling tool serves this connection-check purpose, so explicit exclusion is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_project_contextGet project contextARead-onlyIdempotentInspect
Read one authorized project's bounded context pack: state, TODOs, decisions, timeline, recent memories, and optional durable recall. Requires memory:read; it does not mutate project memories, and access is audit-logged. Use an exact project_id for a whole-project snapshot; otherwise use recall_context. max_items/max_tokens bound the whole pack; recent_hours affects only timeline; durable_query requires include_durable_context.
| Name | Required | Description | Default |
|---|---|---|---|
| bucket | No | Accessible bucket filter; % includes all accessible buckets. | % |
| team_id | No | Optional exact authorized team focus; other team rows are excluded. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| max_items | No | Whole-pack item budget from 1 to 1000. | |
| max_tokens | No | Whole-pack approximate token budget from 1 to 50000. | |
| project_id | Yes | Exact authorized project ID; project names are not accepted. | |
| output_json | No | True returns the full structured pack; false returns a text summary. | |
| recent_hours | No | Timeline lookback from 1 to 8760 hours; other sections are unaffected. | |
| durable_query | No | Query only for durable recall; ignored when include_durable_context is false. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. | |
| include_durable_context | No | Include semantic durable recall; false omits that section. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds meaningful context: requires memory:read permission, does not mutate project memories, access is audit-logged. It also clarifies the effect of parameters on the returned pack, enhancing transparency of behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the primary purpose, followed by permission/behavior notes and parameter guidance. Every sentence carries essential information with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 11-parameter tool with an output schema, the description covers purpose, auth requirements, behavioral guarantees, parameter relationships, and points to the sibling alternative. With an output schema present, return values don't need description. Comprehensive for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
While the schema documents all parameters (100% coverage), the description adds cross-parameter semantics: max_items/max_tokens bound the whole pack, recent_hours affects only timeline, durable_query requires include_durable_context. This adds value beyond individual parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads a bounded context pack for one project, listing its contents (state, TODOs, decisions, timeline, recent memories, optional durable recall). It distinguishes itself from sibling tools by specifying exact project_id for a whole-project snapshot and recommending recall_context otherwise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage guidance: use with exact project_id for whole-project snapshot, otherwise use recall_context. Also explains parameter scoping (max_items/max_tokens bound whole pack, recent_hours affects only timeline, durable_query requires include_durable_context), which clarifies when to adjust each parameter.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timelineGet memory timelineARead-onlyIdempotentInspect
Read authorized timeline events newest first. Requires memory:read and makes no memory changes. Use it for recent history or session resumption; use recall_context for semantic multi-memory context. limit is clamped to 1-500; session_id and event_type are exact filters.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum events to return; values are clamped to 1-500. | |
| scope | No | Optional authorized scope; blank uses the token default. | |
| bucket | No | Accessible bucket filter; % includes all accessible buckets. | % |
| event_type | No | Optional exact event type after lowercase normalization. | |
| session_id | No | Optional exact session ID filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral details beyond annotations: requires memory:read permission, makes no memory changes, clamps limit to 1-500, and exact filters for session_id and event_type. The readOnlyHint and idempotentHint annotations are consistent, so no contradiction.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the primary action, and every sentence adds meaningful value (purpose, permissions, alternatives, parameter behavior). No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the readOnly annotations, output schema, and the sibling tool context, the description fully covers the key aspects: purpose, ordering, permissions, parameter constraints, and use cases. Nothing critical is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and parameter descriptions already explain limit clamping and exact filters. The description repeats these constraints without adding new semantic information, so it meets but does not exceed the baseline for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reads timeline events newest first, distinguishing it from siblings like recall_context. The verb 'Read' and resource 'timeline events' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to use this tool ('recent history or session resumption') and when to use the alternative ('recall_context for semantic multi-memory context'). This provides direct usage guidance and differentiates from sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memory_conflictsList Memory ConflictsARead-onlyIdempotentInspect
List conflicting/inconsistent memories. Call this when the user/admin asks to review unresolved conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| output_json | No | Return a machine-readable JSON response instead of a human-readable summary. | |
| unresolved_only | No | Whether to show only unresolved memory conflicts. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide readOnlyHint: true, idempotentHint: true, and destructiveHint: false, covering the safety profile. The description adds minimal behavioral context beyond 'conflicting/inconsistent', such as the default focus on unresolved conflicts. It does not contradict annotations, but adds limited additional transparency about response behavior or side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loads the primary purpose. Every sentence earns its place: the first states what the tool does, and the second gives the usage trigger. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description is sufficiently complete. The output schema exists, annotations cover safety, and all parameters are documented in the schema. The description adds the necessary context for when to use the tool, making it fully functional for an agent to select and invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with each parameter (limit, output_json, unresolved_only) having clear descriptions. The description's phrase 'review unresolved conflicts' aligns with the unresolved_only parameter but does not add meaning beyond what the schema already provides. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'List conflicting/inconsistent memories.' The verb 'List' and the specific resource 'conflicting/inconsistent memories' make the purpose unambiguous, and it distinguishes itself from sibling tools like 'resolve_memory_conflict' which handles resolution rather than listing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Call this when the user/admin asks to review unresolved conflicts.' This clearly indicates when to use the tool, though it does not explicitly name alternative tools or exclusions. It offers strong contextual direction for a common use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memory_todosList XMemo memory TODOsARead-onlyIdempotentInspect
Lists open or completed TODO/action items as a concise text answer when the user asks how many tasks, follow-ups, or saved action items are currently pending or completed; do not use it to open, browse, filter, or manage the visual TODO workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | % |
| due_before | No | Only show memory TODO/action items due before this time. | |
| item_status | No | Optional memory TODO/action-item status filter. | open |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds useful behavioral context by stating the output is a 'concise text answer' and that it covers 'open or completed' item statuses. It does not go deep into pagination or response details, but with annotations covering safety, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, highly informative sentence that front-loads the main action and includes a conditional usage note. Every clause earns its place, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity, the presence of a full output schema, and annotations guaranteeing safety, the description is mostly complete. It covers the core use case and exclusions, but does not explicitly mention how to set filters like due_before or item_status, which are left to the schema. Still, this is adequate for a list tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the parameter descriptions in the schema fully document each parameter. The tool description adds no additional parameter semantics, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists open or completed TODO/action items as a concise text answer, with a specific verb and resource. It also distinguishes itself from the visual TODO workspace, making its scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use the tool ('when the user asks how many tasks, follow-ups, or saved action items are currently pending or completed') and explicitly states what not to use it for ('do not use it to open, browse, filter, or manage the visual TODO workspace'). However, it does not name alternative tools, leaving a slight gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_memory_versionsList Memory VersionsARead-onlyIdempotentInspect
Show version history for a memory. Call this when the user asks for previous content or changes over time.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| output_json | No | Return a machine-readable JSON response instead of a human-readable summary. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds the specific action 'Show version history,' which is consistent and provides behavioral context beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with no extraneous words. Front-loaded with purpose and usage, making it efficient for an AI agent to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple tool with two parameters and an output schema, the description covers the essential purpose and usage. It lacks a mention of the output format, but the output schema handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with clear descriptions for both parameters. The description does not add any additional meaning beyond what the schema already provides, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Show version history for a memory' with a specific verb and resource. It distinguishes from sibling tools by focusing on historical versions rather than current content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says when to call: 'when the user asks for previous content or changes over time.' Does not mention when not to use or provide alternatives, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_statsShow XMemo memory statisticsARead-onlyIdempotentInspect
Shows aggregate statistics for all saved XMemo memories — counts by type, source, location, and optional time range when the user asks for counts, breakdowns, or distributions.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| since | No | Only include memories or activity on or after this ISO 8601 timestamp. | |
| top_n | No | Maximum number of aggregate groups to return. | |
| until | No | Only include memories or activity on or before this ISO 8601 timestamp. | |
| group_by | No | Optional grouping: none, month, agent, location, memory_type, type, source, path, bucket, day, or comma-separated advanced fields. | |
| memory_type | No | Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %. | % |
| output_json | No | Return a machine-readable JSON response instead of a human-readable summary. | |
| path_filter | No | Memory path filter; % matches all paths. | % |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so safety is covered. The description adds behavioral context by clarifying that it returns aggregate counts, not raw memories, and supports time-range filtering. This aligns with annotations and adds value beyond the structured fields.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, front-loaded with the primary action and resource. It wastes no words and includes the key trigger condition. This is exemplary conciseness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity, 8 optional parameters, full schema coverage, output schema presence, and comprehensive annotations, the description is complete. It conveys the purpose, the kind of output (aggregate stats), and the invocation context. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds high-level meaning by mentioning groupings (type, source, location) and optional time range, which reinforces the semantics of the group_by and since/until parameters. It does not introduce new details but synthesizes the parameter intent.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Shows aggregate statistics for all saved XMemo memories — counts by type, source, location'. It specifies the resource (XMemo memories) and the action (show aggregate statistics), and the mention of optional time ranges and groupings distinguishes it from sibling tools like recall_context or get_timeline.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear use case: 'when the user asks for counts, breakdowns, or distributions'. This tells the agent when to invoke the tool. It does not explicitly name alternative tools for different scenarios, but the context is sufficient for selection among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_profile_mutationPropose Profile MutationBInspect
Propose a profile mutation under the proposals bucket at path 'profile.{field}'.
| Name | Required | Description | Default |
|---|---|---|---|
| field | Yes | Input value for the Propose Profile Mutation tool. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| value | Yes | Input value for the Propose Profile Mutation tool. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is a write operation (readOnlyHint=false) and not idempotent. The description adds the 'proposals bucket' context, suggesting a staged proposal workflow, but does not explain what 'propose' entails (e.g., whether approval is needed, whether it is directly applied, or what happens on success/failure). It provides some value beyond annotations but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is one concise, front-loaded sentence. It states the primary action and resource without unnecessary filler. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 7 parameters, a proposal mechanism, and a complex conceptual model (proposals bucket, profile paths), the description is too sparse. It does not explain the proposal workflow, the relationship between 'field' and 'value', or how this interacts with memory. While an output schema exists, the description still leaves major operational gaps for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 100% schema description coverage, the descriptions for the required parameters 'field' and 'value' are tautological ('Input value for the Propose Profile Mutation tool.'), adding no real meaning. The tool description hints at the path template but does not define allowed field names or value formats. The optional parameters have somewhat better descriptions (e.g., scope, team_id), but key semantics are missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Propose'), the resource ('profile mutation'), and adds a specific location ('proposals bucket at path profile.{field}'). This distinguishes it from sibling tools like propose_write and propose_todo_mutation, which target different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives. The description implies it is for profile changes, but it does not explain when to choose this over propose_write, update_memory, or other siblings, nor mention any exclusions or necessary conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_todo_mutationPropose Todo MutationAInspect
Propose a todo mutation under the proposals bucket at path 'todos/{action}'.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| action | Yes | Usage action or audit-event action filter, depending on the tool. | |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate this is not read-only (readOnlyHint=false), and the description adds the storage location ('proposals bucket' and 'todos/{action}'). However, it does not disclose what happens when a proposal is made, whether it is actually applied, or any side effects or approval flow.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that front-loads the tool's purpose and path template. Every word contributes meaning, with no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is minimal for a tool with 7 parameters, an output schema, and many siblings. It lacks context on the proposal lifecycle, what 'propose' means in practice, and how this differs from other proposal and todo tools. It is adequate but leaves important gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents parameter meanings. The description only adds the 'todos/{action}' path template, which gives slight context for the 'action' parameter but does not compensate for the generic schema descriptions of 'content' or other parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('propose') and resource ('todo mutation'), and further specifies the storage path 'todos/{action}'. This clearly distinguishes it from sibling tools like propose_write and propose_profile_mutation, which target other resource types.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'under the proposals bucket' implies this is for proposing rather than applying mutations directly, but there is no explicit guidance on when to use this tool versus alternatives like create_memory_todo or update_project_todo. No exclusions or alternative tool names are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
propose_writePropose WriteAInspect
Propose a write operation (memory, todo, profile etc.) when direct modifications are denied due to tier-gating.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | proposals |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by clarifying that this operation is a 'proposal' rather than a direct modification, and it identifies the tier-gating trigger. Annotations already indicate readOnlyHint=false and destructiveHint=false, so the description supplements with the proposal semantics without contradicting the structured data.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that immediately identifies the action and context. It is front-loaded with the verb 'Propose' and contains zero wasted words, making it highly concise and readable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the detailed input schema and the presence of an output schema, the description adequately covers purpose and usage. It explains when to use the tool and what it proposes, which is sufficient for a generic proposal tool. It does not describe the proposal lifecycle (e.g., approval or queuing), but this is likely captured by the output schema, so the description is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% description coverage for all 8 parameters, so the schema already handles parameter semantics. The tool description adds little parameter-specific meaning beyond listing resource types (memory, todo, profile), which aligns with the baseline score of 3 for high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Propose a write operation (memory, todo, profile etc.)' with a specific verb and resource types. It also provides a trigger condition ('when direct modifications are denied due to tier-gating'), which gives context. However, it does not explicitly distinguish itself from the sibling tools propose_todo_mutation and propose_profile_mutation, missing the highest bar for differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'when direct modifications are denied due to tier-gating.' This is a clear usage context. It does not name alternative tools or state when not to use it, so it falls short of the 'explicit when/when-not/alternatives' criterion for a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_auditQuery AuditARead-onlyIdempotentInspect
Advanced audit query. source='events' queries action/time/target audit events (for normal users prefer memory_activity); source='consolidation' inspects consolidation/lifecycle/reflection audit records (admin). Consolidates the legacy query_audit_events/query_consolidation_audit tools.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| since | No | Only include memories or activity on or after this ISO 8601 timestamp. | |
| until | No | Only include memories or activity on or before this ISO 8601 timestamp. | |
| action | No | Usage action or audit-event action filter, depending on the tool. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | |
| offset | No | Number of matching records to skip for pagination. | |
| source | No | Optional source filter for system statistics. | events |
| target_id | No | Optional audit target ID to filter audit events. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is covered. The description adds valuable context beyond annotations by explaining the meaning of the two source modes and that consolidation source is admin-only. It also mentions the consolidation of legacy tools, which implies a broader behavior scope. This is meaningful additional context that helps the agent understand the tool's behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with 'Advanced audit query', and every clause earns its place. The first sentence packs the core purpose and both modes, while the second sentence notes the consolidation of legacy tools. There is zero redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 9 parameters but all are fully described in the schema, and an output schema exists, so return value details are not needed. The description covers the two usage modes, the admin requirement for consolidation, and the preferred alternative for normal users. This is complete for a complex query tool with rich structured metadata.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% parameter description coverage, so the baseline is 3. The description adds semantic value by explicitly explaining the 'source' parameter's allowed values ('events' and 'consolidation') and their meanings, which the schema does not (schema merely says 'Optional source filter for system statistics'). This goes beyond what the schema provides, making the description more helpful for correctly selecting source.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool is an advanced audit query with two distinct source modes: 'events' for action/time/target audit events and 'consolidation' for lifecycle/reflection records. It differentiates itself from the sibling memory tools and even references a preferred alternative (memory_activity). The verb is precise ('queries', 'inspects') and the resource scope is explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells users when to use this tool: for audit events when source='events' and for consolidation/lifecycle audit records (admin-only). It also provides a clear exclusion: 'for normal users prefer memory_activity'. Additionally, it notes that this tool consolidates legacy query_audit_events/query_consolidation_audit tools, informing users migrating from those. This is explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_memoryRead MemoryARead-onlyIdempotentInspect
Read one exact authorized XMemo memory in character windows. Use a memory ID returned by recall or search, then continue long content with next_offset. Embeddings are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum content characters in this page; defaults to 4000. | |
| offset | No | Zero-based character offset into this memory's content; defaults to 0. | |
| memory_id | Yes | Exact XMemo memory reference returned by recall or search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds behavioral context by explaining pagination with next_offset, the fact that it reads exactly one memory, and that embeddings are never returned. This enriches the agent's understanding of what to expect and what not to request.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first states the core purpose and scope, the second provides usage guidance and a behavioral limitation. There is zero filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With output schema present and all parameters well-documented, the description covers the essential aspects: what the tool does, when to use it, how pagination works, and a key limitation. Sibling tools like recall are implicitly differentiated by the explicit prerequisite of an ID from recall or search.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already documents all three parameters with descriptions (100% coverage). The description adds workflow context: memory_id must come from recall or search, offset is used to continue pagination via next_offset, and limit controls page size. This clarifies the relationship between parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('read') and identifies the resource ('XMemo memory'), specifies the scope ('exact authorized'), and describes the pagination approach ('character windows'). It clearly distinguishes from sibling tools like recall (which searches) by requiring a memory ID from recall or search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides explicit prerequisite guidance: use a memory ID returned by recall or search. It also explains how to handle long content via next_offset. While it doesn't explicitly name alternative tools for exclusion, the workflow is clear and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recallRecall XMemo memoryARead-onlyIdempotentInspect
Recall a few relevance-ranked memories before answering, with path/type controls and optional working-memory preference. Use it for a quick best-effort lookup; use recall_context when the answer needs a bounded multi-memory context pack.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| query | Yes | Natural-language question or search text. | |
| explain | No | Whether to include retrieval explanation details with search or recall results. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| memory_type | No | Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %. | % |
| path_filter | No | Memory path filter; % matches all paths. | % |
| prefer_working | No | Whether to prioritize working/session-state memories in retrieval. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds behavioral context beyond these annotations: results are 'relevance-ranked,' and the tool supports 'path/type controls and optional working-memory preference.' It also implies a best-effort retrieval strategy. This is meaningful, though it doesn't detail output structure or edge cases.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is exactly two sentences and is highly efficient. The first sentence conveys the core action and key features; the second provides usage differentiation. No filler or redundancy, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only retrieval tool with a well-covered schema and declared output schema, the description is sufficient. It explains what the tool does, when to use it, and how it differs from the closest sibling. The presence of an output schema means return values need not be described. Minor gaps such as not explaining the 'explain' parameter are covered by the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides descriptions for all 8 parameters (100% coverage), so the baseline is 3. The description's mention of 'path/type controls' and 'working-memory preference' maps to path_filter, memory_type, and prefer_working, but adds no new semantic detail beyond the schema. Each parameter already has a clear description, so the description adds no extra value here.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Recall a few relevance-ranked memories before answering,' specifying the resource (memories) and the action (recall). It also distinguishes itself from the sibling tool recall_context by contrasting quick best-effort lookup with a bounded multi-memory context pack. This goes beyond a simple restatement of the title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicit usage guidance is provided: 'Use it for a quick best-effort lookup; use recall_context when the answer needs a bounded multi-memory context pack.' This directly tells the agent when to prefer this tool over the most relevant alternative, satisfying the dimension fully.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_contextBuild XMemo contextARead-onlyIdempotentInspect
Build a read-only, bounded context pack from multiple relevant memories. Use it when an answer needs several memory items or scoped/path-filtered context; use recall for a quick best-effort lookup or get_project_context for a whole-project snapshot. max_items/max_tokens bound output: memories that do not fit are omitted and reported, so raise max_tokens or use recall when you need the records themselves.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Candidate-result limit; 0 derives it from the item/token budgets. | |
| query | Yes | Natural-language query used to rank memories for the context pack. | |
| scope | No | Optional authorized scope; blank uses the token default. | |
| bucket | No | Accessible bucket filter; % includes all accessible buckets. | % |
| team_id | No | Optional exact authorized team filter. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| max_items | No | Maximum memories rendered in the context pack. | |
| max_tokens | No | Approximate token budget for the rendered context pack. | |
| memory_type | No | Memory type filter; auto searches the normal mixed set. | auto |
| output_json | No | True returns the full structured pack; false returns rendered context text. | |
| path_filter | No | Case-insensitive memory-path pattern; % matches all paths. | % |
| prefer_working | No | True prioritizes active working/session-state signals. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description discloses that memory items that do not fit the bounds are omitted and reported, and advises raising max_tokens or using recall if the records themselves are needed. This adds real behavioral context not present in the structured annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core purpose, then weaves in usage guidance and a behavioral caveat. Every clause earns its place; no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 13 parameters and an output schema, the description covers the essential context: what the tool does, when to use it, how bounds behave, and how it differs from siblings. The output schema handles return format details, so the description doesn't need to describe them. It's complete for this complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds meaning by explaining that max_items/max_tokens bound the output and that omitted items are reported, which ties these parameters to observable behavior. This goes slightly beyond the schema's field-level descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb+resource: 'Build a read-only, bounded context pack from multiple relevant memories.' It clearly distinguishes from siblings by explicitly naming recall and get_project_context as alternatives with different purposes. This makes the tool's unique role immediately obvious.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description states exactly when to use this tool: 'when an answer needs several memory items or scoped/path-filtered context.' It also provides exclusions and alternatives: 'use recall for a quick best-effort lookup or get_project_context for a whole-project snapshot.' This is explicit, actionable guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
record_eventRecord EventAInspect
Record a significant session event, milestone, decision, or handoff note useful for reconstructing recent work. Not for durable facts/preferences (use remember).
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | work |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| event_type | No | Timeline event type, such as event, milestone, decision, or handoff. | event |
| session_id | No | Optional session identifier associated with the event, timeline query, or snapshot. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate it is a write operation (readOnlyHint=false) and non-destructive. Description adds no further behavioral context (e.g., side effects, permissions). Adequate but no extra value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences, front-loaded with verb and purpose. No wasted words. Every sentence serves a distinct purpose (what it does, what it doesn't).
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters (1 required), output schema exists, and many sibling tools, the description is sufficiently complete. It clarifies the tool's niche without needing longer explanation. Slightly lacking on what exactly 'record' means in terms of storage/retrieval, but acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so parameters are fully documented. Description adds no additional meaning beyond the schema. Baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states verb 'Record' and specific resources: 'significant session event, milestone, decision, or handoff note'. Explicitly distinguishes from sibling 'remember' by noting it is not for durable facts/preferences.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-not-to-use ('Not for durable facts/preferences') and suggests alternative ('use remember'). Also hints at context ('useful for reconstructing recent work').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rememberRemember in XMemoAInspect
Save durable information for future recall; skip transient chat. Existing Projects paths attach automatically. The create_project compatibility input may create a missing project only when explicitly enabled. Use add_expense for financial records and create_memory_todo for actionable work.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | public |
| dedupe | No | Whether to check for and merge likely duplicate memories before saving. | |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| device_id | No | Optional client-supplied device identifier for attribution. | |
| memory_id | No | Exact XMemo memory reference shown by search or recall. | |
| confidence | No | Confidence score for the saved or updated memory, from 0.0 to 1.0. | |
| expires_at | No | Optional ISO 8601 expiration timestamp for the memory. | |
| importance | No | Importance score for the saved or updated memory, from 0.0 to 1.0. | |
| memory_type | No | Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %. | auto |
| device_label | No | Optional human-readable device label for attribution. | |
| semantic_key | No | Optional stable key for one evolving fact: changed body upserts it, the same normalized body is idempotent; metadata_json.semantic_key_mode='merge_metadata' preserves the body while merging metadata. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| create_project | No | Create a missing formal project from a valid Projects / <Project Name> path. Defaults to false; enable only when the user explicitly asks. | |
| embedding_json | No | Optional JSON array or object containing a precomputed embedding; leave blank for normal use. | |
| provenance_json | No | Optional JSON object string describing memory source, evidence, or attribution. | {} |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, idempotentHint=false), the description discloses useful behavioral details: 'Existing Projects paths attach automatically' and that create_project 'may create a missing project only when explicitly enabled.' These are not present in the annotations and add meaningful context for the agent. However, it does not cover other behavioral aspects like deduplication or mutation details, but the bar is lowered given the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four short sentences, purpose-first, with no filler. Every sentence adds value: the main purpose, a behavioral note, a compatibility caveat, and explicit alternative routing. It is concise and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 20 parameters and full schema coverage plus an output schema, the description does not need to enumerate parameters. It provides the essential context: durable vs. transient, auto-attachment behavior, and sibling tool alternatives. It could mention the default dedupe behavior or that it can also update existing memories, but the coverage is sufficient for a tool with a rich schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds a small amount of parameter behavior by explaining the create_project compatibility input's gating, but it mostly restates what the schema already says. No additional syntax or format details are given for required parameters like content or path beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Save durable information for future recall'—a specific verb and resource—and explicitly contrasts with transient chat. It also distinguishes from sibling tools by directing financial records to add_expense and actionable work to create_memory_todo, clarifying the tool's scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance ('Save durable information for future recall') and when-not-to-use guidance ('skip transient chat', 'Use add_expense for financial records and create_memory_todo for actionable work'). It also notes the create_project compatibility input should only be enabled when explicitly requested, providing a clear usage boundary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_memory_conflictResolve Memory ConflictADestructiveInspect
Resolve a listed memory conflict. Call this only when the user/admin explicitly chooses a resolution strategy.
| Name | Required | Description | Default |
|---|---|---|---|
| conflict_id | Yes | Exact memory-conflict ID returned by list_memory_conflicts. | |
| merge_content | No | Merged memory content to apply when resolving a conflict with a merge strategy. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| winning_memory_id | No | Memory ID that should win when resolving a conflict. | |
| resolution_strategy | No | Conflict resolution strategy, such as mark_conflict, keep_existing, replace, or merge. | mark_conflict |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the agent knows this is a destructive write operation. The description adds the 'only when user/admin explicitly chooses' constraint, which is useful behavioral context, but it doesn't detail what 'resolve' means in terms of memory data changes or that it may overwrite/merge memory entries beyond what the schema hints at.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences; the first states the purpose, the second adds a critical usage condition. No redundant or extraneous content, and the key information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the extensive schema (100% parameter coverage) and annotations (destructiveHint=true), the description is sufficient for invocation. It could benefit from noting the destructive impact on memory, but the annotations already cover that, and the output schema likely explains return values, so the description itself is adequately complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% with descriptions for all five parameters, including the meaning of resolution_strategy, winning_memory_id, and merge_content. The description adds no parameter-specific detail beyond the schema, so a baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'resolve' with the resource 'memory conflict', clearly distinguishing it from sibling tools like list_memory_conflicts. It also qualifies that the conflict must be 'listed', indicating a prerequisite derived from the listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states 'Call this only when the user/admin explicitly chooses a resolution strategy', providing a clear condition for invocation and excluding automatic use. It doesn't name alternatives, but the condition itself guides selection and implies the agent should wait for explicit user/admin direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_memoryRestore XMemo memoryAInspect
Restore a previously deleted memory. Call this only when the user explicitly asks to restore or undo a deletion.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional user-facing reason for the deletion. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description indicates the tool restores a previously deleted memory, which is a behavioral trait. Annotations already declare destructiveHint=false, and the description adds context about user intent. However, it does not detail what happens to the restored memory (e.g., ID reuse, content restoration) or any permissions needed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences with no unnecessary words. It front-loads the purpose and usage condition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (3 parameters, annotations present, output schema exists), the description adequately covers the core purpose and usage context. The output schema handles return value details, so no further elaboration is needed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
All parameters have descriptions in the schema (100% coverage). The description adds the phrase 'shown by search or recall' for memory_id, which is helpful. For 'reason' and 'metadata_json', descriptions are generic, so the added value is marginal.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Restore') and the resource ('a previously deleted memory'). It distinguishes from sibling tools like 'forget' and 'remember' by specifying the restore operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'Call this only when the user explicitly asks to restore or undo a deletion.' This clearly indicates when to use the tool, though it does not explicitly mention alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
restore_restart_snapshotRestore Restart SnapshotADestructiveInspect
Resume previous work from a saved snapshot. Call this when the user asks to resume/restart or after context loss.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | work |
| state_key | No | Working-state key to save, snapshot, or restore, such as active_task. | |
| snapshot_id | No | Exact restart snapshot memory ID to restore. | |
| ttl_seconds | No | Time-to-live in seconds for working state or restart snapshot records. | |
| restore_state | No | Whether restore_restart_snapshot should restore the saved working-state record. | |
| source_session_id | No | Session ID whose saved restart snapshot should be restored. | |
| target_session_id | No | Session ID to associate with restored state and restore events. | |
| record_restore_event | No | Whether to write a timeline event after restoring a restart snapshot. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, so the safety profile is covered. The description adds the context of resuming after interruption but does not detail side effects like recorded restore events or state overwriting. It does not contradict the annotations, and with annotations present, the minimal behavioral disclosure is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose, and contains no filler. Every word adds value: it states what the tool does and when to invoke it.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (9 parameters, output schema, destructive annotation), the description provides the essential purpose and usage trigger. The schema and output schema fill in the technical details, so the description is sufficient for an agent to decide when to call it, though it could have briefly mentioned the need for a snapshot ID or the related create_restart_snapshot tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema already fully documents all 9 parameters. The description adds no parameter-level semantics beyond the schema, which is acceptable because the schema is self-sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool resumes previous work from a saved snapshot, with the verb 'Resume' and resource 'saved snapshot'. This distinguishes it from sibling tools like create_restart_snapshot, which creates snapshots, and restore_memory, which handles general memory restoration.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit guidance: 'Call this when the user asks to resume/restart or after context loss.' This is a clear trigger condition, though it does not mention when not to use it or name alternatives explicitly beyond the implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_memoryUpdate XMemo memoryADestructiveInspect
Updates the content, location, or type of a specific saved memory when the user asks to correct, revise, move, or reclassify it. An exact reference identifies the record.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | |
| status | No | Memory status filter or update value, such as active, archived, deleted, or %. | |
| content | No | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| confidence | No | Confidence score for the saved or updated memory, from 0.0 to 1.0. | |
| expires_at | No | Optional ISO 8601 expiration timestamp for the memory. | |
| importance | No | Importance score for the saved or updated memory, from 0.0 to 1.0. | |
| memory_type | No | Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %. | |
| semantic_key | No | Optional stable key for one evolving fact: changed body upserts it, the same normalized body is idempotent; metadata_json.semantic_key_mode='merge_metadata' preserves the body while merging metadata. | |
| metadata_json | No | Optional JSON object string with extra metadata for the operation. | {} |
| merge_metadata | No | Whether to merge new metadata with existing metadata instead of replacing it. | |
| provenance_json | No | Optional JSON object string describing memory source, evidence, or attribution. | {} |
| detect_conflicts | No | Whether to detect possible conflicts with existing memories during an update. | |
| merge_provenance | No | Whether to merge new provenance with existing provenance instead of replacing it. | |
| supersession_reason | No | Reason the updated memory supersedes older content. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the agent knows this is a write/update operation. The description adds valuable behavioral context by specifying that updates can affect 'content, location, or type' and that an 'exact reference' (memory_id) is required to identify the record. This goes beyond raw annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loads the core action, and every phrase earns its place. It avoids fluff, restating the title, or repeating schema details. The structure is efficient and immediately informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with a rich schema and output schema, the description is sufficiently complete to guide usage. It conveys the essential context (when to use, what it updates) and the need for an exact reference. It does not describe return values, but the presence of an output schema makes that unnecessary. A minor omission is explicit mention of potential side effects like conflict detection or supersession, but these are evident from the parameter names.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides 100% coverage with descriptions for all 18 parameters. The description does not add parameter-specific details beyond what the schema already offers, but it does map 'content', 'location', and 'type' to likely parameters (content, path, memory_type). Since the schema is thorough, a baseline of 3 is appropriate; the description's mention adds only marginal value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('updates') and the target resource ('a specific saved memory'), and distinguishes this tool from siblings like 'remember' (create), 'forget' (delete), and 'read_memory' by specifying it handles corrections, revisions, moves, or reclassifications. This unambiguously identifies the tool's unique role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use the tool: 'when the user asks to correct, revise, move, or reclassify it.' This provides clear contextual triggers. However, it does not explicitly mention when not to use it or name alternatives (e.g., use 'remember' for entirely new memories), so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_decisionUpdate Project DecisionAInspect
Transition a project decision. action must be one of: resolve, supersede, reopen. resolution is required for action='resolve'. new_context (and optionally options_json/impact_level/resolution_note) is required for action='supersede'. Consolidates the legacy resolve/supersede/reopen_project_decision tools.
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Usage action or audit-event action filter, depending on the tool. | |
| project_id | Yes | Optional project identifier to filter the Ledger or TODO workspace. | |
| resolution | No | Chosen resolution text for a pending decision. | |
| decision_id | Yes | Exact pending-decision ID returned by list_pending_decisions. | |
| new_context | No | Input value for the Update Project Decision tool. | |
| impact_level | No | Input value for the Update Project Decision tool. | |
| options_json | No | JSON array of candidate options for a pending decision. | [] |
| resolution_note | No | Input value for the Update Project Decision tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate readOnlyHint=false, destructiveHint=false, and idempotentHit=false. The description adds meaningful behavioral context by detailing transition semantics and required parameters for each action. It does not disclose potential side effects or authorization requirements, but it does not contradict annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core verb and resource, and each sentence adds essential information: purpose, action variations, required parameters, and consolidation note. There is no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the action-specific requirements well, and an output schema exists so return values need not be explained. However, it does not clarify the roles of the required decision_id and project_id, and it leaves unresolved the schema's misleading project_id description (marked optional but required). For a complex 8-parameter tool, this is a minor but notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool description provides critical conditional parameter semantics that are not present in the schema: it enumerates allowed action values and specifies which parameters are required for each action. This goes well beyond the generic schema descriptions (e.g., action is described as 'Usage action or audit-event action filter'), making the actual invocation logic clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Transition a project decision' and immediately specifies the three allowed actions (resolve, supersede, reopen), clearly defining the tool's scope. The closing note about consolidating legacy tools distinguishes it from previous separate tools, so purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when each action is appropriate via action-specific requirement notes ('resolution is required for action=resolve', 'new_context ... required for action=supersede'), and the consolidation note explicitly tells the agent this tool replaces the legacy resolve/supersede/reopen_project_decision tools. It does not compare with unrelated sibling tools, but the guidance is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_project_todoUpdate Project TodoAInspect
Transition a project TODO's status. action must be one of: accept, assign, block, unblock, complete, cancel. assignee_agent_id is required for action='assign'; reason is required for action='block' (optional for cancel); note is optional for action='complete'. Consolidates the legacy accept/assign/block/unblock/complete/cancel_project_todo tools.
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Optional completion note. | |
| action | Yes | Usage action or audit-event action filter, depending on the tool. | |
| reason | No | Optional user-facing reason for the deletion. | |
| todo_id | Yes | The memory TODO/action-item ID to complete. | |
| project_id | Yes | Optional project identifier to filter the Ledger or TODO workspace. | |
| assignee_agent_id | No | Input value for the Update Project Todo tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate non-read-only, non-idempotent, non-destructive. The description adds action-specific constraints and explicitly says it is a consolidation of legacy tools, which clarifies its behavioral scope. It does not detail failure modes or side effects, but the status transition semantics are sufficiently clear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences cover the purpose, action list, per-action requirements, and legacy replacement. Every sentence is information-dense with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (multiple conditional actions), the description is thorough. An output schema exists, so return values need no explanation. It lacks explicit mention of error cases or idempotency, but annotations and the action rules provide a complete picture for an AI agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds significant meaning beyond the schema. It defines the allowed action values (absent from schema enums), specifies conditional required parameters (assignee_agent_id for assign, reason for block), and clarifies the optional note for complete. The schema descriptions are generic or even misleading (reason mentions 'deletion'), so the description compensates fully.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Transition a project TODO's status', using a specific verb and resource. It enumerates the exact action values (accept, assign, block, unblock, complete, cancel) and differentiates from the legacy tools it consolidates.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly names the legacy tools it replaces ('Consolidates the legacy accept/assign/block/unblock/complete/cancel_project_todo tools'), telling the agent to use this tool instead. It also provides per-action requirements (e.g., assignee_agent_id for assign, reason for block, note for complete), defining when to use each action.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_stateUpdate working stateADestructiveInspect
Create or replace one scoped working-state record for resuming a task, next action, or blocker. Requires memory:write; it versions that state slot and refreshes its expiry without deleting other memories. Use remember for durable facts or record_event for history. Provide content or a structured state field; ttl_seconds=0 means no expiry.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Scope containing the working-state slot; blank uses the token default. | |
| bucket | No | Bucket containing the working-state slot; defaults to work. | work |
| content | No | Free-form state body; otherwise provide at least one structured state field. | |
| state_key | No | Normalized state slot; the same owner, bucket, scope, and key updates that slot. | active_task |
| next_action | No | Next action; used to build the state body when content is blank. | |
| ttl_seconds | No | Expiry in seconds from 0 to 2592000; 0 means no expiry. | |
| current_task | No | Current task; used to build the state body when content is blank. | |
| metadata_json | No | JSON object merged into the working-state metadata. | {} |
| blocked_reason | No | Blocker; used to build the state body when content is blank. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds context beyond the annotations by noting the memory:write permission requirement, that it versions the state slot, refreshes expiry, and does not delete other memories. This complements the destructiveHint: true and readOnlyHint: false annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is four sentences long, each serving a distinct purpose: purpose, behavior, alternatives, and parameter guidance. It is front-loaded and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, usage guidance, side effects, and permission requirements. It does not mention return values, but the presence of an output schema mitigates the need. It is sufficiently complete for a mutation tool with rich schema annotations.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 100% schema description coverage, the schema already explains all parameters. The description adds minimal extra meaning by advising to 'Provide content or a structured state field,' which groups the parameters conceptually but does not go beyond the schema's detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Create or replace one scoped working-state record' and gives the intended use (resuming a task, next action, blocker). It also names alternatives, clearly distinguishing it from sibling tools like remember and record_event.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit when-to-use guidance: 'Use remember for durable facts or record_event for history.' This tells the agent exactly when to prefer this tool over its alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target distinct actions on specific resources (memories, todos, ledger, projects, proposals), making them easy to tell apart. A few potentially overlapping pairs exist (e.g., remember vs. update_memory, recall vs. recall_context), but their descriptions clarify intended use.
The majority follow a consistent verb_noun snake_case pattern (list_memory_todos, create_restart_snapshot, update_project_decision). A few exceptions like 'remember', 'recall', 'forget', and 'memory_stats' deviate slightly, but the overall convention remains predictable.
With 30 tools, the server exceeds the comfortable range for an MCP toolset. Many tools are highly specialized (e.g., propose_todo_mutation, resolve_memory_conflict, list_memory_versions), which can overwhelm agents and make selection difficult, even though the domain is broad.
The surface covers full lifecycle operations for memories and todos, plus ledger, audit, conflict resolution, versioning, and snapshots. Minor gaps exist (e.g., no direct ledger update tool, no simple 'list all memories' tool), but agents can work around them using recall or stats.
Maintenance
Related MCP Connectors
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Person-owned AI memory that learns, not just stores — portable context for any MCP client.
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Related MCP Servers
- AlicenseBqualityAmaintenancePersistent memory engine for AI coding agents. Single Go binary, zero runtime dependencies, MCP-native. Stores, searches, and deduplicates memories across sessions using embedded SQLite with hybrid FTS + semantic search, memory decay, relation graph, and token-budget context assembly.1021MIT
- AlicenseNot gradedqualityCmaintenanceGoverned multi-agent memory for AI agents. Hybrid markdown + SQLite store with full-text search, vector retrieval, and LLM reranking. Three transports: MCP stdio, HTTP JSON-RPC, and MCP SSE. One Go binary1Apache 2.0
- AlicenseNot gradedqualityDmaintenanceSelf-hosted semantic memory for AI agents. Save worklogs, decisions, and notes via MCP, then recall them across sessions by meaning rather than keyword. Backed by Postgres + pgvector with local embeddings (multilingual-e5-base).1MIT

mem0-mcpofficial
AlicenseAqualityCmaintenanceSelf-hosted Mem0 MCP server integrating Qdrant, Neo4j, and Ollama for semantic memory search, graph entity relationships, and memory management via OpenMemory API.64MIT
Appeared in Searches
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/yonro/memory-os-cli'
If you have feedback or need assistance with the MCP directory API, please join our Discord server