XMemo
Server Details
XMemo is a user-owned Memory OS for AI agents, providing a shared, persistent memory layer across AI assistants, IDEs, CLIs, tools, projects, and sessions.
It enables ChatGPT, Claude, Codex, Cursor, Gemini, and other supported AI clients to access authorized long-term context without requiring users to repeatedly explain their preferences, project decisions, or previous work.
Beyond basic memory storage and retrieval, XMemo supports semantic search, contextual recall, memory updates and corrections, source attribution, version history, project-scoped context, task tracking, and governed memory lifecycle management.
Identity-aware access controls, scoped authorization, and memory isolation help users manage which agents and workflows can access their information. XMemo also provides advanced capabilities for structured knowledge, reusable procedures, and memory consolidation through its broader Memory OS platform.
Connect through hosted MCP with OAuth or bearer-token authentication, or integrate directly through REST APIs and supported client tools. Memory remains available across authorized clients and sessions, with user-controlled access, export, and deletion.
Website: https://xmemo.dev Documentation: https://xmemo.dev/docs
- Status
- Healthy
- Uptime
- 99.2% over 73 days
- OAuth
- Works in Glama
- Last Tested
- Transport
- Streamable HTTP · MCP 2025-11-25
- URL
- Repository
- yonro/memory-os-cli
- GitHub Stars
- 12
- Server Listing
- XMemo
TDQS
Scored across 35 tools
Several retrieval/context tools overlap conceptually (recall, recall_context, read_memory, search_knowledge, get_project_context, get_timeline), though their descriptions attempt to draw clear boundaries. TODO-related tools (list_memory_todos, create_memory_todo, update_project_todo, propose_todo_mutation) and relationship tools also require careful reading to distinguish. Descriptions help, but the set still has meaningful ambiguity for an agent choosing among similar memory-access paths.
Most names use snake_case, but the verb pattern is mixed: create_*, get_*, list_*, update_* coexist with bare verbs like recall, remember, forget, and noun-first names like memory_relationships and memory_stats. The convention is readable but not fully predictable across the 35-tool surface.
With 35 tools, the surface is heavy for a memory server and includes many niche/admin operations such as proposal tools, audit queries, snapshots, and multiple recall variants. While the domain is broad, the count exceeds a well-scoped set and invites cognitive overload.
The tool set covers the memory lifecycle well: create/read/update/delete/restore, versions, conflicts, relationships, audit, timeline, project context, TODOs, snapshots, and cloud skills. Minor gaps exist around cloud-skill lifecycle operations (no explicit update/delete tool) and bulk operations, but core workflows are well supported.
Available Tools
35 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. Relevant 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 declare readOnlyHint=false, destructiveHint=false and idempotentHint=false, so the safety profile is covered; the description usefully adds what content is captured. It does not say whether a second call supersedes or appends to an existing snapshot, how long the snapshot lives, or that state_key lets you target a particular working-state entry — the kind of context annotations cannot convey.
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 sentences, zero waste, with the capture contents front-loaded ahead of the trigger condition. Nothing is repeated from the name or title.
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?
Annotation coverage plus an output schema means the description need not restate safety or return shape; all parameters are optional with defaults, so the tool is callable with no arguments.
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 per-parameter descriptions and defaults for all 9 optional parameters, so the schema does the heavy lifting. The description's mention of TODOs, pending decisions and recent events implicitly maps to reminder_limit, decision_limit and timeline_limit, but says nothing about scope, bucket, session_id, ttl_seconds or metadata_json beyond the schema text.
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?
States a specific verb (save) and enumerates the resource contents it captures: active state, recent events, TODOs, pending decisions. This tells an agent it is a composite snapshot rather than a single-key write like update_state or remember, but it never names those siblings or restore_restart_snapshot to sharpen the boundary.
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?
'Relevant before handoff or when context may be lost' gives a concrete trigger condition for use. It stops short of when-not guidance or naming restore_restart_snapshot as the counterpart that reads the snapshot back, so the agent must infer the save/restore pairing from names alone.
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; requires explicit user confirmation of permanent deletion. Ambiguous targets are resolved 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; requires explicit user confirmation of permanent deletion. | 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?
Annotations only declare destructiveHint=true and idempotentHint=false; the description adds the crucial default (soft, recoverable), the undo path (restore_memory), and the confirmation requirement for hard deletes. It does not say what happens to linked relationships or whether hard delete is available for all target types, which limits it below a 5.
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 tight sentences, front-loaded with the actionable delete targets before the mode/recoverability rules. The first sentence is dense but every clause carries routing information; 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?
An output schema exists so return values need not be described, and the description covers the high-risk pieces: recoverability, permanence, confirmation, and ambiguity handling. Remaining gaps are secondary behaviors such as effects on memory links or which target types support hard deletion.
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 baseline is 3. The description goes further by explaining how target values are obtained ('current/latest', exact memory reference, exact IDs from list_memory_todos / list_ledger_transactions) and by naming mode='hard' explicitly, but it says nothing about query_hint, replacement_content, or metadata_json.
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?
States a specific verb (delete) and enumerates the exact resource types (memory, TODO, Ledger transaction) plus how each target is addressed. It names the sibling tools that produce the required references (list_memory_todos, list_ledger_transactions), so it is distinguishable from restore_memory and update_memory without opening a schema.
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?
Gives clear routing context: default soft delete is recoverable via restore_memory, mode='hard' is permanent and needs explicit user confirmation, and ambiguous targets are disambiguated before deletion. It does not contrast against other mutating siblings like update_memory or remove_memory_relationship, so the exclusion guidance is incomplete.
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.
link_memoriesLink MemoriesBInspect
Create a Free explicit link between two visible personal Memories in the same owning store/space.
| Name | Required | Description | Default |
|---|---|---|---|
| edge_kind | No | Input value for the Link Memories tool. | references |
| to_memory_id | Yes | Input value for the Link Memories tool. | |
| from_memory_id | Yes | Input value for the Link Memories tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose this is a non-read-only, non-idempotent, non-destructive write, so the safety profile is covered. The description usefully adds the same-store/space and visibility preconditions, but says nothing about behavior on duplicate links (relevant given idempotentHint=false) or whether 'explicit' differs from implicitly inferred links.
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?
One sentence, front-loaded with the verb and resource, with no filler. The capitalized 'Free' is ambiguous and slightly muddies an otherwise clean line, and the preconditions are packed in without losing clarity.
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 write operation with no output schema, the definition covers the core action and its preconditions but omits what the call returns, whether duplicate links error or are created, and how edge_kind choices behave. Adequate to call, incomplete to call confidently.
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 nominally 100%, but the per-parameter text is boilerplate ('Input value for the Link Memories tool'), so the schema adds little real meaning. The description indirectly maps to the two memory-id params via 'between two visible personal Memories' but never explains edge_kind or its default value of 'references', leaving it opaque.
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?
States a specific verb (Create) and resource (an explicit link between two Memories) with clear scope constraints (same owning store/space, visible, personal). Siblings like remove_memory_relationship and update_memory_relationship imply a relationship family, but the description never names them, so the agent gets no direct sibling contrast.
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 usage context is only implied by preconditions ('two visible personal Memories in the same owning store/space') rather than stated as when-to-use. There is no guidance on when to link versus update_memory_relationship / memory_relationships, nor what to do when a link already exists.
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. Relevant 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 declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered structurally. The description adds nothing beyond that beyond the notion of 'unresolved conflicts', which the schema default on unresolved_only already implies. Adequate but not additive.
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 compact sentences, purpose front-loaded, no filler. Every phrase 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?
A read-only list tool with rich annotations, a full output schema, and 100% parameter coverage needs little prose to be callable correctly. The only gap is not routing the agent between this and resolve_memory_conflict, which is a usage rather than completeness issue.
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% for all three parameters (limit, output_json, unresolved_only), so the schema carries the semantics. The description's mention of 'unresolved conflicts' mildly reinforces unresolved_only but adds no format, pagination, or default guidance 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?
States a specific verb and resource: 'List conflicting/inconsistent memories.' That is unambiguous about what the tool returns. It does not distinguish itself from the sibling resolve_memory_conflict, which an agent could easily confuse with a listing tool, so it falls short of a 5.
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?
'Relevant when the user/admin asks to review unresolved conflicts' gives a clear trigger condition. It does not say when to prefer resolve_memory_conflict over this listing, nor does it note what to do after finding conflicts, so the exclusions/alternatives side is missing.
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. Relevant 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, idempotentHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered structurally. The description adds no behavioral detail beyond purpose — nothing about ordering, how many versions are returned, or whether the current version is included. With annotations carrying the load, this is adequate but thin.
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, purpose front-loaded, zero filler or restatement of the title. Every clause contributes either what the tool does or when to reach for 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?
An output schema exists, so return-value explanation is unnecessary, and both parameters are fully described in-schema. What remains unstated is minor but real: ordering of versions and whether the latest/current revision is part of the list, which an agent may need to interpret results.
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 both parameters (memory_id, output_json) are documented in-schema, including that memory_id is the "Exact XMemo memory reference shown by search or recall." The description adds no further parameter meaning, so the 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?
States a specific verb+resource: "Show version history for a memory." An agent can immediately tell this is a read of historical revisions rather than the current record. It does not explicitly contrast with siblings like read_memory or restore_memory, which keeps it from a 5.
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?
Gives a clear triggering condition: "Relevant when the user asks for previous content or changes over time." This maps intent to tool selection well. It stops short of naming when not to use it (e.g., use read_memory for current content), so no exclusions or explicit alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_relationshipsMemory RelationshipsARead-onlyIdempotentInspect
Read explicit personal links for one visible Memory; no automated analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| cursor | No | Opaque cursor for loading the next TODO Board page. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered elsewhere. The description adds that results are limited to explicit links on a visibility-scoped memory, which is genuinely useful context, but it says nothing about pagination behavior, ordering, or what happens when no links exist.
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 tight sentence with the scope constraint front-loaded and no filler. It is arguably over-compressed for a tool with pagination, but no sentence is wasted.
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 tool with full schema coverage and annotations that carry the safety profile, the description covers the essential scoping. Since there is no output schema, a brief word on what a returned relationship looks like would have closed the remaining 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?
Schema description coverage is 100%, so memory_id, limit, and cursor are already documented in the schema; the baseline is therefore 3. The description reinforces that the lookup targets a single visible Memory, but adds no format, cursor, or limit semantics beyond what the schema provides.
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?
States a specific verb ("Read") and resource ("explicit personal links for one visible Memory"), which distinguishes it from write-side siblings such as link_memories and remove_memory_relationship. It does not, however, name those siblings or otherwise explicitly route the agent, so it falls just short of a 5.
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 clause "no automated analysis" implies this tool returns only human/agent-authored links rather than inferred ones, which is a useful usage boundary. But there is no explicit when-to-use, when-not-to-use, or named alternative, so usage is only implied rather than stated.
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 | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates. | |
| top_n | No | Maximum number of aggregate groups to return. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically. | |
| 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, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered. The description adds only the scope of aggregation ('all saved memories') and the optional time range, without disclosing behaviors such as top_n truncation of groups or what an unbounded window defaults to. Adequate but thin against an already-rich annotation set.
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?
One sentence, front-loaded with the core capability, with zero redundant text. The tail clause blends purpose and usage guidance, but nothing is wasted and nothing important is buried.
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, rich annotations, and 100% schema coverage across 8 optional params, the description only needs to establish purpose and trigger, which it does. A note on group truncation via top_n or default time-window behavior would make it fully self-sufficient.
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 docs are unusually detailed (RFC 3339 formats, half-open interval semantics, heuristic fallback for since/until). The description's mention of grouping by type, source, location and time range loosely maps to group_by/memory_type/since/until but adds no syntax or behavior beyond the schema. 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 names a specific verb ('Shows') and resource ('aggregate statistics for all saved XMemo memories') and enumerates the aggregate dimensions (type, source, location, time range), which clearly separates it from retrieval siblings like read_memory or recall. It stops short of naming an alternative tool explicitly, so it lands just under the top tier.
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 states the triggering intent plainly: 'when the user asks for counts, breakdowns, or distributions.' That is a concrete when-to-use condition. It gives no when-not condition or named alternative (e.g. use recall for individual memories), which keeps it from a 5.
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
Query audit records within the caller's authorized memory scope. source='events' selects action/time/target events; source='consolidation' selects consolidation/lifecycle/reflection history. This does not grant cross-user or system administration access.
| 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 | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically. | |
| 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, idempotentHint, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description contributes the meaningful extra constraint that this does not grant cross-user or admin access. It says nothing about result volume, pagination semantics, or the 90-day span limit that lives only in the schema.
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 short sentences, front-loaded with purpose and scope, then the source semantics, then the access boundary. No filler and nothing buried.
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?
An output schema exists and nine parameters are fully documented, so the description needn't explain returns. It covers scope, source modes, and the access boundary, but leaves the agent to discover pagination (limit/offset defaults) and the since/until window rules from the schema alone.
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 baseline would be 3, but the description adds real semantics for the source parameter that the schema obscures ('source' is described generically as a 'source filter for system statistics'). Clarifying that 'events' returns action/time/target events while 'consolidation' returns consolidation/lifecycle/reflection history is genuine value beyond the structured field.
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?
States a specific verb and resource ('Query audit records') plus the scoping constraint ('within the caller's authorized memory scope'), and enumerates the two source modes. It doesn't differentiate from nearby siblings like get_timeline or explain_memory, so an agent must infer which one to reach for.
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 source='events' vs source='consolidation' split gives implied usage guidance for choosing a record class. However, there is no explicit statement of when to use this tool versus the audit-adjacent siblings (get_timeline, memory_stats, explain_memory), and no prerequisites are spelled out.
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 or Document in character windows.
Use a bare memory ID (e.g. returned by recall or search) for the initial read (offset 0). The response includes 'revision' (e.g. '<memory_id>@v') and 'version'. To continue reading long content across multiple pages (when 'has_more' is True), callers MUST pass the returned 'revision' as memory_id along with 'next_offset'. This pins continuation pages to that exact snapshot and prevents torn reads if concurrent updates occur between requests. Querying with a bare memory ID always resolves to the latest active version (head), which is unpinned and subject to version tearing across updates. A Document item's reference ('document:') reads the whole Document the same way. For a Document, 'anchor' (a heading path) with 'ordinal' (1 = its first chunk) starts the page at that section; continue with 'next_offset' and no anchor. 'version' pins like a revision; a Document that changed since returns version_changed=true and no content, so restart at offset 0. Embeddings are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum content characters in this page; defaults to 4000. | |
| anchor | No | Optional Document heading path to start the page at; leave offset at 0. | |
| offset | No | Zero-based character offset into this memory's content; defaults to 0. | |
| ordinal | No | Which chunk carrying the anchor to start at (1 = first); defaults to 1. | |
| version | No | Optional version pin, the same as a '@v<version>' revision. | |
| memory_id | Yes | Exact XMemo memory reference or 'document:<id>' 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?
Beyond the readOnly/idempotent annotations, the description discloses critical behavior: bare IDs resolve to latest head and are unpinned, revision-pinned continuation prevents torn reads, and version_changed forces restart. It also states that embeddings are never returned. This is exactly the kind of behavioral context the annotations cannot provide.
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 dense but well front-loaded, starting with the core operation and then explaining continuation and pinning. Every paragraph carries necessary behavioral detail about revisions, offsets, anchors, and Documents. There is little wasted language for a tool with this much continuation semantics.
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 rich annotations, full schema description coverage, and output schema, the description covers the remaining gaps an agent needs: revision pinning, Document anchor behavior, version mismatch handling, and the no-embeddings guarantee. No essential call behavior is omitted for this complexity level.
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 the baseline is 3, but the description adds cross-parameter meaning: memory_id can be a bare ID, revision, or document reference; anchor pairs with ordinal; version pins like a revision. The only ambiguity is that it refers to 'next_offset' while the schema parameter is named 'offset', which could cause a minor lookup mismatch.
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 states a specific verb and resource: reading one exact authorized XMemo memory or Document in character windows. It clearly distinguishes this precise-read tool from recall/search discovery tools by noting that IDs are returned by recall or search. An agent can identify the operation without opening the schema.
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 gives clear usage context: use a bare memory ID for the initial read, then use the returned revision with next_offset to continue long content. It also explains Document anchor/ordinal starts and version pinning. It does not explicitly state exclusions against siblings such as recall, but the discovery-versus-exact-read split is strongly implied.
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. Unscoped by default: it searches all of your buckets; pass bucket to search only that bucket (never widened by fallback). 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. | |
| since | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically. | |
| bucket | No | Bucket of your own memories to search; % (default) searches all buckets. An explicit bucket is never widened by fallback. | % |
| explain | No | Whether to include retrieval explanation details with search or recall results. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| query_mode | No | Optional query intent: 'topic' (default) or 'activity_log'. Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. 'activity_log' requires explicit bounded 'since' and 'until' timestamps. 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass. | |
| time_order | No | Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Set 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting. | |
| 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. | % |
| owner_timezone | No | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| prefer_working | No | Whether to prioritize working/session-state memories in retrieval. | |
| reference_time | No | Optional ISO 8601 reference time snapshot for deterministic evaluation. Leave blank to use the real clock; setting this does not replace owner_timezone for calendar day boundaries. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. | |
| temporal_axis_mode | No | Optional temporal axis resolution policy: 'created_at' (Scheme A), 'updated_at' (Scheme B), or 'split_filter_created_order_updated' (Scheme C). | |
| hypothetical_answer | No | Optional hypothetical answer or semantic expansion of the query, used to improve matching. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety bar is low, and the description adds real behavior: results are relevance-ranked and few in number, default search spans all buckets, and an explicit bucket disables fallback widening. It does not discuss result volume limits or when ranking may be overridden by time ordering, but the output schema covers the return shape.
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 purpose, then default scoping, then sibling routing. Every sentence carries distinct information and none is padded.
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 17-parameter retrieval tool with an output schema, the description covers purpose, default scope, the bucket override, and the sibling boundary — the decisions an agent must get right before calling. Time-window and query_mode behavior is left to the schema, which documents it well, so the remaining gap is minor.
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 17 parameters thoroughly, including time semantics and query_mode. The description echoes the high-level knobs (path/type controls, working-memory preference) and the bucket fallback rule, which largely restates the schema rather than adding new meaning — the 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 states a specific verb and resource ("recall a few relevance-ranked memories") plus the operating scope ("before answering", path/type controls, working-memory preference). It also names the sibling it is not — recall_context — so an agent can distinguish the two without opening either schema.
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 gives an explicit selection rule: "Use it for a quick best-effort lookup; use recall_context when the answer needs a bounded multi-memory context pack." It also documents the bucket-scoping decision (unscoped by default; pass bucket to narrow, never widened by fallback), leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recall_cloud_skillRecall Cloud SkillARead-onlyIdempotentInspect
Recall reusable Cloud Skills, instructions, or sub-resources saved in XMemo. Supports Level 0 discovery by query, Level 1 root recall, and Level 2 resource recall with pinned revision_id.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | Input value for the Recall Cloud Skill tool. | |
| query | No | Natural-language question or search text. | |
| resource | No | Input value for the Recall Cloud Skill tool. | |
| skill_id | No | Input value for the Recall Cloud Skill tool. | |
| revision_id | No | Input value for the Recall Cloud Skill tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, non-destructive read with no open-world access. The description adds the tiered retrieval structure, which is useful behavioral context, but says nothing about failure behavior (e.g., missing skill/revision) or result shape. With annotations covering the safety profile, a 3 is appropriate.
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 tight sentences with no filler; the core purpose is front-loaded and the level taxonomy follows immediately. Every clause 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?
An output schema exists, so return values need not be described. However, the description rests on undefined jargon (Level 0/1/2, XMemo) and never clarifies which parameter drives which level, leaving the agent to guess the required inputs for root vs resource recall.
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 nominally 100%, but four of five parameter descriptions are boilerplate ('Input value for the Recall Cloud Skill tool'), so the schema adds little real meaning. The description partially compensates by tying query to Level 0 and revision_id to Level 2 pinning, but leaves slug, skill_id, and resource unexplained.
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 states a specific verb+resource ('Recall reusable Cloud Skills, instructions, or sub-resources saved in XMemo'), which is clear. It does not explicitly differentiate itself from close siblings like recall, recall_context, or read_memory, so an agent must infer the distinction.
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 outlines three retrieval modes (Level 0 discovery by query, Level 1 root recall, Level 2 resource recall with pinned revision_id), which implies when each invocation style applies. However, it names no alternative tool and gives no when-not guidance, so the routing logic is left to inference.
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. | |
| since | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically. | |
| 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. | |
| query_mode | No | Optional query intent: 'topic' (default) or 'activity_log'. Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. 'activity_log' requires explicit bounded 'since' and 'until' timestamps. 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass. | |
| time_order | No | Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Set 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting. | |
| 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. | % |
| owner_timezone | No | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| prefer_working | No | True prioritizes active working/session-state signals. | |
| reference_time | No | Optional ISO 8601 reference time snapshot for deterministic evaluation. Leave blank to use the real clock; setting this does not replace owner_timezone for calendar day boundaries. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. | |
| temporal_axis_mode | No | Optional temporal axis resolution policy: 'created_at' (Scheme A), 'updated_at' (Scheme B), or 'split_filter_created_order_updated' (Scheme C). | |
| hypothetical_answer | No | Optional hypothetical answer or semantic expansion of the query, used to improve matching. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, so the safety profile is covered. The description adds genuinely useful behavior: output is bounded, over-budget memories are omitted and reported, and the remedy is raising max_tokens or switching to recall. It does not mention other edge behaviors such as the activity_log fail-closed case, but those are handled by the schema.
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 with no waste: purpose first, routing second, budget semantics third. Every sentence carries decision-relevant information for an agent.
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 21-parameter tool, the description covers the decision axes an agent needs: when to choose it, which siblings to prefer, and how output bounding works. The schema and the output schema carry the remaining parameter and return-value detail.
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 the baseline is 3. The description goes beyond the schema by explaining the practical consequence of max_items/max_tokens: what gets dropped and how it is reported, which helps an agent set those two budgets correctly.
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 states a specific verb and resource ('Build a read-only, bounded context pack from multiple relevant memories') and explicitly contrasts it with sibling tools ('recall' for quick lookup, 'get_project_context' for a whole-project snapshot). An agent can pick this tool without opening the schema.
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 names the when-to-use condition ('when an answer needs several memory items or scoped/path-filtered context') and names both alternatives with the conditions that favor them. It also gives an escalation path when results are truncated ('raise max_tokens or use recall').
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.
remove_memory_relationshipRemove Memory RelationshipBInspect
Remove only an explicit personal association, preserving both Memories and a retry receipt.
| Name | Required | Description | Default |
|---|---|---|---|
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| relationship_id | Yes | Input value for the Remove Memory Relationship tool. | |
| expected_version | Yes | Optimistic-concurrency version read from the current record; a stale value is rejected with VERSION_CONFLICT. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations establish this is a non-destructive, non-idempotent write, and the description adds genuinely useful context beyond them: what is removed (the association only) and what survives (both Memories plus a retry receipt). This explains why destructiveHint is false for a 'remove' operation and touches on retry 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?
A single front-loaded sentence with no filler or repetition; the constraint 'only an explicit personal association' leads and the preservation guarantee follows. It is efficient, though very terse relative to the operation's concurrency semantics.
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 3-parameter mutation tool with annotation coverage, the description states the key behavioral contract (association removed, memories preserved). It does not address permission requirements or what the retry receipt contains, but with no output schema and full schema coverage this is adequate rather than rich.
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 nothing about memory_id, relationship_id, or expected_version beyond what the schema already documents, and the schema itself covers the VERSION_CONFLICT behavior.
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 gives a specific verb ('Remove') and resource ('an explicit personal association'), and the qualifier 'only' plus 'preserving both Memories' clarifies this is not a memory deletion, which separates it from siblings like forget or restore_memory. It stops short of naming an alternative outright.
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 when-to-use or when-not-to-use guidance and no named alternative (e.g., update_memory_relationship or link_memories). The phrase 'only an explicit personal association' hints at a scope restriction but leaves the selection decision entirely to inference.
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. Intended only for 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, readOnlyHint=false and non-idempotent, so the danger is signposted structurally. The description adds the meaningful governance constraint that a human must pick the strategy, but it never says which memories are destroyed, whether resolution is reversible, or that the default strategy is mark_conflict.
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, both load-bearing: the first states the action, the second states the precondition. No filler and the action 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 destructive, non-idempotent mutation with five parameters and no enum on resolution_strategy, the description says nothing about what consequences a resolution has on the conflicting memories or which strategies are lossy. Because an output schema exists, return values need not be described, but the destructive semantics are a substantial omission.
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 all five parameters including strategy names are already documented in structured form. The description adds nothing beyond the word 'listed' pointing at conflict_id, so the 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?
Names a specific verb (resolve) and resource (memory conflict), and the qualifier 'listed' signals the conflict must already exist rather than be created here, which distinguishes it from list_memory_conflicts. It stops short of saying what 'resolving' actually does to the underlying memories.
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?
'Intended only for when the user/admin explicitly chooses a resolution strategy' is a real precondition and an exclusion, not just a restatement. It does not name list_memory_conflicts as the required discovery step in the description (that only appears in the schema) or say what to do when no strategy is chosen.
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. Intended only for 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 annotations already declare the safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false), so the description does not need to restate them. It adds the useful explicit-request policy, but it says nothing about preconditions (what happens if the memory was never deleted), what is actually restored (versions, links, metadata), or the consequences of the non-idempotent flag.
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, zero filler, and the core action is front-loaded before the usage restriction. Nothing could be removed without losing meaning.
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?
An output schema and annotations are present, so return values and safety are covered elsewhere, and all three parameters are documented in the schema. The remaining gap is failure behavior and precondition detail for a non-idempotent restore, which is a moderate rather than critical omission.
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 memory_id, reason, and metadata_json. The description adds no further parameter semantics; at best it hints that a previously deleted memory_id is expected. Baseline 3 applies when the schema carries the load.
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 gives a specific verb and resource: 'Restore a previously deleted memory.' This implicitly distinguishes it from the inverse operation (forget/remove), but it never names that sibling, so the differentiation is inferred rather than stated.
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?
'Intended only for when the user explicitly asks to restore or undo a deletion' is an explicit gate: it states the exact condition that should select this tool and implicitly excludes speculative or proactive use. That is stronger guidance than most siblings offer.
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 SnapshotBDestructiveInspect
Resume previous work from a saved snapshot. Relevant 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 declare destructiveHint=true and idempotentHint=false, meaning this operation overwrites current state; the description never mentions that restoring will replace existing working state, nor is it reversible, nor what happens to a session that already has state. With annotations carrying the safety flag, the bar is lower, but a destructive state-overwriting tool deserves at least a warning about what gets replaced.
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, front-loaded with the action and followed by the trigger context; no filler. It is arguably too terse for a nine-parameter destructive tool, but nothing is wasted.
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?
An output schema exists and the input schema is fully described, but the description is silent on core behavior: which snapshot is picked when snapshot_id and source_session_id are both empty, what the restore_state/record_restore_event flags actually do in combination, and the destructive consequence of the restore. For a destructive tool with nine optional parameters, this leaves the agent under-informed.
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 nine parameters, including snapshot_id, restore_state, record_restore_event, and the source/target session IDs. The description adds no parameter meaning at all, which is acceptable at baseline 3 but a missed opportunity to explain precedence (e.g. snapshot_id vs source_session_id).
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?
Clear verb+resource: it resumes prior work by restoring a saved restart snapshot. It does not differentiate itself from close siblings like restore_memory or create_restart_snapshot, so the agent still has to infer which one to use.
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 gives a trigger condition ('when the user asks to resume/restart or after context loss'), which is more than most tools offer. But it never says when NOT to use it, nor names restore_memory or create_restart_snapshot as alternatives, so routing between the closely-named siblings is left implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_cloud_skillSave Cloud SkillAInspect
Save a reusable procedure, rule, or SOP as a Cloud Skill in XMemo for future recall across connected AI agents.
Supports two usage modes (API Evolution Note: additive parameter 'url'):
Direct creation: Provide non-empty 'name' and 'instructions'.
Remote import: Provide 'url' (ClawHub slug/URL, GitHub repo/tree/raw URL, or direct HTTPS zip/markdown).
| Name | Required | Description | Default |
|---|---|---|---|
| url | No | Input value for the Save Cloud Skill tool. | |
| name | No | Project display name for project/create. | |
| slug | No | Input value for the Save Cloud Skill tool. | |
| publish | No | Input value for the Save Cloud Skill tool. | |
| description | No | Project description for project/create. | |
| instructions | No | Input value for the Save Cloud Skill tool. | |
| components_json | No | Input value for the Save Cloud Skill tool. | [] |
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=false, openWorldHint=false, idempotentHint=false, destructiveHint=false, so the write/no-side-effect-on-third-parties profile is covered elsewhere. The description adds that skills persist in XMemo and are recallable across connected agents, which is useful visibility context. However, it is silent on the notable behaviors an agent would want to know: publish defaults to true (what does publishing do?), and whether re-saving the same slug/name overwrites an existing skill.
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?
Front-loaded statement of purpose followed by a compact two-item mode list — no padding. The 'API Evolution Note: additive parameter' framing is slightly awkward phrasing for a definition but carries real information about backward compatibility.
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?
An output schema exists, so return values need not be described, and the two creation modes are covered. Still, for a 7-parameter, non-idempotent write tool with all parameters optional and none required, the definition omits what happens with the publish flag, slug collisions/overwrite behavior, and the components_json structure — meaningful gaps for correct 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 nominally 100%, but most schema descriptions are placeholders ('Input value for the Save Cloud Skill tool.'), so the description's detail on url (ClawHub slug/URL, GitHub repo/tree/raw, or direct HTTPS zip/markdown) genuinely compensates. Against that, slug, publish, description, and components_json get no semantic explanation anywhere, so the tool is only half-explained. Baseline 3 fits.
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?
Specific verb+resource: 'Save a reusable procedure, rule, or SOP as a Cloud Skill in XMemo', plus the persistence scope ('future recall across connected AI agents'). It is clear what the tool does, but it never names the obvious sibling counterpart recall_cloud_skill or contrasts against remember/propose_write, so sibling differentiation is left to inference.
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 enumerates two usage modes with the parameter conditions that select each ('Direct creation: Provide non-empty name and instructions'; 'Remote import: Provide url'), which is real routing guidance. It does not state when *not* to use this tool or when a sibling (e.g. remember) is the better choice.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_knowledgeSearch XMemo KnowledgeARead-onlyIdempotentInspect
Search authorized personal Knowledge Base content over published current revisions, or read one exact item/revision with bounded pagination. Requires knowledge:read.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Search retrieval mode: 'hybrid' (default), 'lexical', 'semantic', or 'rrf'. | hybrid |
| alpha | No | Hybrid score weighting factor between lexical (0.0) and semantic (1.0); defaults to 0.5. | |
| query | No | Natural-language question or search text. | |
| offset | No | Zero-based character offset for an addressed read; defaults to 0. | |
| limit_chars | No | Maximum addressed-read characters from 1 to 10000; defaults to 4000. | |
| max_results | No | Maximum query results from 1 to 50; defaults to 10. | |
| knowledge_base_id | No | Optional exact personal Knowledge Base ID used to narrow a query search. | |
| knowledge_item_id | No | Exact authorized Knowledge item ID for an addressed read. | |
| knowledge_revision_id | No | Exact immutable revision ID; provide knowledge_item_id as its parent. |
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 the safety profile is covered. The description adds useful behavioral context beyond annotations: it operates 'over published current revisions,' supports 'bounded pagination,' and requires the 'knowledge:read' permission. This addresses auth needs and scope, which annotations do not convey.
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, dense sentence that front-loads the primary purpose ('Search authorized personal Knowledge Base content') and then covers the secondary addressed-read mode and the auth requirement. Every phrase earns its place, with no filler or repetition of schema content.
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 is complex with 9 parameters and two distinct modes, and an output schema is present. The description gives a reasonable overview but does not explicitly connect query to search mode or knowledge_item_id/knowledge_revision_id to addressed read mode. It is adequate for orientation but leaves the agent to infer mode-parameter relationships from the schema, so there is a clear completeness 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?
Schema description coverage is 100%, so the baseline is 3. The description mentions 'bounded pagination' and 'exact item/revision,' which loosely maps to offset, limit_chars, knowledge_item_id, and knowledge_revision_id, but it does not add syntax or decision details beyond what the schema already provides. No parameter is left undocumented, but the description also does not enhance parameter understanding.
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 and resource: 'Search authorized personal Knowledge Base content' and 'read one exact item/revision.' It clearly identifies the tool as a Knowledge Base search/read operation, which distinguishes it from memory-focused siblings like recall and read_memory. However, it does not explicitly name or contrast sibling tools, so it stops just short of full 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 implies usage by describing two modes: searching published current revisions and performing an addressed read with bounded pagination. This gives an agent a sense of when to call the tool, but it provides no explicit alternatives, exclusions, or guidance on choosing between search and addressed read modes. Sibling tools exist for related memory operations, but no comparison is made.
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_memory_relationshipUpdate Memory RelationshipAInspect
Edit an explicit personal link kind using the last read version; stale edits conflict.
| Name | Required | Description | Default |
|---|---|---|---|
| edge_kind | Yes | Input value for the Update Memory Relationship tool. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| relationship_id | Yes | Input value for the Update Memory Relationship tool. | |
| expected_version | Yes | Optimistic-concurrency version read from the current record; a stale value is rejected with VERSION_CONFLICT. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, destructiveHint=false, idempotentHint=false and openWorldHint=false, so safety profile is covered. The description adds the optimistic-concurrency behavior (a stale version conflicts), which is genuine extra context, but it does not say what the edit affects, whether it is reversible, or what a successful result looks like.
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 with no filler, front-loading the action and appending the concurrency constraint. Every clause 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?
For a non-idempotent mutation tool with no output schema, the description covers the concurrency contract but leaves gaps: the relationship between memory_id and relationship_id is unstated, valid edge_kind values are undocumented (no enums, and the schema text for edge_kind is a placeholder), and success behavior is not described.
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; expected_version is already fully documented in the schema as an optimistic-concurrency value with VERSION_CONFLICT. The description's 'link kind' and 'last read version' merely restate the schema and add no format or validity detail (e.g. allowed edge_kind values).
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?
States a specific verb (Edit) and a resource (an explicit personal link kind), which maps to the relationship/edge_kind model. It does not distinguish itself from siblings such as link_memories, remove_memory_relationship, or memory_relationships, and 'link kind' is looser phrasing than the tool's actual relationship concept.
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 clause 'using the last read version; stale edits conflict' implies the required pre-read workflow and the failure mode, which is useful usage context. However, no alternative tool is named and there is no explicit when-not guidance (e.g. use link_memories to create, remove_memory_relationship to delete).
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'.
| 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 decision ID from an existing project decision or saved pending choice. | |
| new_context | No | New context for decision/supersede. | |
| 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 declare the write/safety profile (readOnly=false, destructive=false, idempotent=false), so the description's added value is the state-machine disclosure: this tool transitions among three named states with different per-action requirements. It stops short of describing the side effects of supersede/reopen beyond the required inputs.
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, zero waste, front-loaded with the core verb and immediately followed by the valid action set. Every sentence carries information the agent needs.
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?
An output schema exists, so return values need no explanation, and annotations cover safety. The description completes the picture for the resolve/supersede paths, but leaves the reopen path's required inputs unstated relative to an 8-parameter 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 coverage is 100%, so the baseline is 3, but the description adds real semantic value by mapping conditional dependencies (resolution -> resolve; new_context plus optional options_json/impact_level/resolution_note -> supersede) that the flat schema does not express. It does not clarify what action='reopen' consumes.
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?
States a specific verb (transition) plus resource (project decision) and enumerates the exact actions: resolve, supersede, reopen. This is far more than a restatement of the title, though it never explicitly positions itself against siblings like update_project_todo or the proposal 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?
Provides genuine conditional guidance -- resolution is required for action='resolve' and new_context for action='supersede' -- which tells the agent how to invoke each mode. However it gives no when-to-use-this-vs-alternatives guidance and never mentions what 'reopen' requires or when each transition is appropriate.
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'.
| 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 declare the write/mutation profile (readOnlyHint=false, non-idempotent, non-destructive). The description usefully adds the closed action set and the conditional parameter requirements per action, but says nothing about irreversibility, permission requirements, or what happens to dependent state on cancel/block.
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 dense sentences, front-loaded with the core purpose followed by the action contract. No filler, though the per-action conditionals are packed into a single run-on sentence that could be enumerated more readably.
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 not be described, and the action/parameter contract is fully specified. Gaps remain around state-transition legality (which actions are valid from which current status) and side effects on the project, but the definition is sufficient 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?
Schema coverage is 100%, but several schema descriptions are misleading copy-paste artifacts (reason described as 'for the deletion', action described generically as a filter). The description corrects this by specifying which parameters are required for which action values, adding genuine semantics 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?
States a specific verb (Transition) and resource (project TODO's status), which distinguishes it from read-oriented siblings like list_memory_todos or get_project_context. It does not explicitly name which sibling to prefer (e.g. complete_memory_todo or propose_todo_mutation), so it stops short of full sibling 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 enumerates the valid action values and the per-action prerequisites, which implies when each mode applies. However, it never states when to use this tool versus complete_memory_todo, propose_todo_mutation, or create_memory_todo, so the routing decision is left to inference.
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.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
- Changed
forget1 field changed- changed
Input schema / properties / mode / descriptionPrevious value: -"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."New value: +"Deletion mode: soft or soft_delete is the recoverable default; hard or hard_delete is permanent and unrecoverable; requires explicit user confirmation of permanent deletion."
- Changed
memory_stats2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
query_audit2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall5 fields changed- changed
Input schema / properties / hypothetical_answer / descriptionPrevious value: -"Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query."New value: +"Optional hypothetical answer or semantic expansion of the query, used to improve matching." - changed
Input schema / properties / query_mode / descriptionPrevious value: -"Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass."New value: +"Optional query intent: 'topic' (default) or 'activity_log'. Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. 'activity_log' requires explicit bounded 'since' and 'until' timestamps. 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass." - changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / time_order / descriptionPrevious value: -"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting."New value: +"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Set 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall_context5 fields changed- changed
Input schema / properties / hypothetical_answer / descriptionPrevious value: -"Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query."New value: +"Optional hypothetical answer or semantic expansion of the query, used to improve matching." - changed
Input schema / properties / query_mode / descriptionPrevious value: -"Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass."New value: +"Optional query intent: 'topic' (default) or 'activity_log'. Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. 'activity_log' requires explicit bounded 'since' and 'until' timestamps. 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass." - changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Set this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Relative and natural language time expressions are given as absolute timestamps in the user's local time. If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / time_order / descriptionPrevious value: -"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting."New value: +"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Set 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Set this when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Natural language end bounds are given as absolute timestamps with timezone offsets. If omitted, the window is open-ended on the upper side or derived heuristically."
1 tool update
- Changed
read_memory4 fields changed- added
Input schema / properties / anchorAdded value: +{ + "default": "", + "description": "Optional Document heading path to start the page at; leave offset at 0.", + "type": "string" +} - changed
Input schema / properties / memory_id / descriptionPrevious value: -"Exact XMemo memory reference returned by recall or search."New value: +"Exact XMemo memory reference or 'document:<id>' returned by recall or search." - added
Input schema / properties / ordinalAdded value: +{ + "default": 1, + "description": "Which chunk carrying the anchor to start at (1 = first); defaults to 1.", + "type": "integer" +} - added
Input schema / properties / versionAdded value: +{ + "anyOf": [ + { + "type": "integer" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Optional version pin, the same as a '@v<version>' revision." +}
1 tool update
- Changed
recall1 field changed- added
Input schema / properties / bucketAdded value: +{ + "default": "%", + "description": "Bucket of your own memories to search; % (default) searches all buckets. An explicit bucket is never widened by fallback.", + "title": "Bucket", + "type": "string" +}
1 tool update
- Changed
recall2 fields changed- changed
Input schema / properties / hypothetical_answer / descriptionPrevious value: -"Input value for the Recall tool."New value: +"Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query." - changed
Input schema / properties / temporal_axis_mode / descriptionPrevious value: -"Input value for the Recall tool."New value: +"Optional temporal axis resolution policy: 'created_at' (Scheme A), 'updated_at' (Scheme B), or 'split_filter_created_order_updated' (Scheme C)."
5 tool updates
- Added
link_memories - Added
memory_relationships - Added
remove_memory_relationship - Added
update_memory_relationship - Changed
update_project_decision1 field changed- changed
Input schema / properties / decision_id / descriptionPrevious value: -"Exact pending-decision ID returned by list_pending_decisions."New value: +"Exact decision ID from an existing project decision or saved pending choice."
1 tool update
- Changed
save_cloud_skill4 fields changed- added
Input schema / properties / instructions / defaultAdded value: +"" - added
Input schema / properties / name / defaultAdded value: +"" - added
Input schema / properties / urlAdded value: +{ + "default": "", + "description": "Input value for the Save Cloud Skill tool.", + "title": "Url", + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "name", - "instructions" -]
41 tool updates
- Removed
analyze_memory_text - Added
complete_memory_todo - Added
create_memory_todo - Added
create_restart_snapshot - Changed
explain_memory3 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / include_embeddingAdded value: +{ + "default": false, + "description": "Whether to include embedding/vector metadata in the returned explanation.", + "title": "Include Embedding", + "type": "boolean" +} - added
Input schema / properties / output_jsonAdded value: +{ + "default": false, + "description": "Return a machine-readable JSON response instead of a human-readable summary.", + "title": "Output Json", + "type": "boolean" +}
- Changed
forget4 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / metadata_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string with extra metadata for the operation.", + "title": "Metadata Json", + "type": "string" +} - added
Input schema / properties / query_hintAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Input value for the Forget tool.", + "title": "Query Hint" +} - added
Input schema / properties / replacement_contentAdded value: +{ + "default": "", + "description": "Replacement text to store when redacting or replacing deleted memory content.", + "title": "Replacement Content", + "type": "string" +}
- Changed
get_mcp_identity1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Added
get_project_context - Removed
get_project_summary - Added
get_timeline - Removed
ledger - Added
list_memory_conflicts - Added
list_memory_todos - Added
list_memory_versions - Removed
memory_overview - Added
memory_stats - Removed
open_ledger - Removed
open_project_workspace - Removed
open_todo_board - Removed
project - Added
propose_profile_mutation - Added
propose_todo_mutation - Added
propose_write - Added
query_audit - Changed
read_memory1 field changed- removed
Input schema / additionalPropertiesRemoved value: -false
- Changed
recall10 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / agent_idAdded value: +{ + "default": "", + "description": "Optional client-supplied agent label for memory attribution.", + "title": "Agent Id", + "type": "string" +} - added
Input schema / properties / agent_instance_idAdded value: +{ + "default": "", + "description": "Optional stable, non-secret agent instance ID for per-client attribution.", + "title": "Agent Instance Id", + "type": "string" +} - added
Input schema / properties / explainAdded value: +{ + "default": false, + "description": "Whether to include retrieval explanation details with search or recall results.", + "title": "Explain", + "type": "boolean" +} - added
Input schema / properties / memory_typeAdded value: +{ + "default": "%", + "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.", + "title": "Memory Type", + "type": "string" +} - added
Input schema / properties / owner_timezoneAdded value: +{ + "default": "", + "description": "The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.", + "title": "Owner Timezone", + "type": "string" +} - added
Input schema / properties / path_filterAdded value: +{ + "default": "%", + "description": "Memory path filter; % matches all paths.", + "title": "Path Filter", + "type": "string" +} - added
Input schema / properties / prefer_workingAdded value: +{ + "default": false, + "description": "Whether to prioritize working/session-state memories in retrieval.", + "title": "Prefer Working", + "type": "boolean" +} - added
Input schema / properties / reference_timeAdded value: +{ + "default": "", + "description": "Optional ISO 8601 reference time snapshot for deterministic evaluation. Leave blank to use the real clock; setting this does not replace owner_timezone for calendar day boundaries.", + "title": "Reference Time", + "type": "string" +} - added
Input schema / properties / temporal_axis_modeAdded value: +{ + "default": "", + "description": "Input value for the Recall tool.", + "title": "Temporal Axis Mode", + "type": "string" +}
- Added
recall_cloud_skill - Changed
recall_context14 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / agent_idAdded value: +{ + "default": "", + "description": "Optional client-supplied agent label for memory attribution.", + "type": "string" +} - added
Input schema / properties / agent_instance_idAdded value: +{ + "default": "", + "description": "Optional stable, non-secret agent instance ID for per-client attribution.", + "type": "string" +} - added
Input schema / properties / bucketAdded value: +{ + "default": "%", + "description": "Accessible bucket filter; % includes all accessible buckets.", + "type": "string" +} - added
Input schema / properties / limitAdded value: +{ + "default": 0, + "description": "Candidate-result limit; 0 derives it from the item/token budgets.", + "type": "integer" +} - added
Input schema / properties / memory_typeAdded value: +{ + "default": "auto", + "description": "Memory type filter; auto searches the normal mixed set.", + "type": "string" +} - added
Input schema / properties / output_jsonAdded value: +{ + "default": false, + "description": "True returns the full structured pack; false returns rendered context text.", + "type": "boolean" +} - added
Input schema / properties / owner_timezoneAdded value: +{ + "default": "", + "description": "The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.", + "type": "string" +} - added
Input schema / properties / path_filterAdded value: +{ + "default": "%", + "description": "Case-insensitive memory-path pattern; % matches all paths.", + "type": "string" +} - added
Input schema / properties / prefer_workingAdded value: +{ + "default": true, + "description": "True prioritizes active working/session-state signals.", + "type": "boolean" +} - added
Input schema / properties / reference_timeAdded value: +{ + "default": "", + "description": "Optional ISO 8601 reference time snapshot for deterministic evaluation. Leave blank to use the real clock; setting this does not replace owner_timezone for calendar day boundaries.", + "type": "string" +} - added
Input schema / properties / scopeAdded value: +{ + "default": "", + "description": "Optional authorized scope; blank uses the token default.", + "type": "string" +} - added
Input schema / properties / team_idAdded value: +{ + "default": "", + "description": "Optional exact authorized team filter.", + "type": "string" +} - added
Input schema / properties / temporal_axis_modeAdded value: +{ + "default": "", + "description": "Optional temporal axis resolution policy: 'created_at' (Scheme A), 'updated_at' (Scheme B), or 'split_filter_created_order_updated' (Scheme C).", + "type": "string" +}
- Added
record_event - Changed
remember18 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / agent_idAdded value: +{ + "default": "", + "description": "Optional client-supplied agent label for memory attribution.", + "title": "Agent Id", + "type": "string" +} - added
Input schema / properties / agent_instance_idAdded value: +{ + "default": "", + "description": "Optional stable, non-secret agent instance ID for per-client attribution.", + "title": "Agent Instance Id", + "type": "string" +} - added
Input schema / properties / bucketAdded value: +{ + "default": "public", + "description": "Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads.", + "title": "Bucket", + "type": "string" +} - added
Input schema / properties / confidenceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Confidence score for the saved or updated memory, from 0.0 to 1.0.", + "title": "Confidence" +} - added
Input schema / properties / dedupeAdded value: +{ + "default": true, + "description": "Whether to check for and merge likely duplicate memories before saving.", + "title": "Dedupe", + "type": "boolean" +} - added
Input schema / properties / device_idAdded value: +{ + "default": "", + "description": "Optional client-supplied device identifier for attribution.", + "title": "Device Id", + "type": "string" +} - added
Input schema / properties / device_labelAdded value: +{ + "default": "", + "description": "Optional human-readable device label for attribution.", + "title": "Device Label", + "type": "string" +} - added
Input schema / properties / embedding_jsonAdded value: +{ + "default": "", + "description": "Optional JSON array or object containing a precomputed embedding; leave blank for normal use.", + "title": "Embedding Json", + "type": "string" +} - added
Input schema / properties / expires_atAdded value: +{ + "default": "", + "description": "Optional ISO 8601 expiration timestamp for the memory.", + "title": "Expires At", + "type": "string" +} - added
Input schema / properties / importanceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Importance score for the saved or updated memory, from 0.0 to 1.0.", + "title": "Importance" +} - added
Input schema / properties / memory_idAdded value: +{ + "default": "", + "description": "Exact XMemo memory reference shown by search or recall.", + "title": "Memory Id", + "type": "string" +} - added
Input schema / properties / memory_typeAdded value: +{ + "default": "auto", + "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.", + "title": "Memory Type", + "type": "string" +} - added
Input schema / properties / metadata_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string with extra metadata for the operation.", + "title": "Metadata Json", + "type": "string" +} - added
Input schema / properties / provenance_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string describing memory source, evidence, or attribution.", + "title": "Provenance Json", + "type": "string" +} - added
Input schema / properties / scopeAdded value: +{ + "default": "", + "description": "Optional scope that narrows memory access; leave blank for the token default.", + "title": "Scope", + "type": "string" +} - added
Input schema / properties / semantic_keyAdded value: +{ + "default": "", + "description": "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.", + "title": "Semantic Key", + "type": "string" +} - added
Input schema / properties / team_idAdded value: +{ + "default": "", + "description": "Optional team/workspace identifier for team-scoped memory access.", + "title": "Team Id", + "type": "string" +}
- Added
resolve_memory_conflict - Changed
restore_memory2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / metadata_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string with extra metadata for the operation.", + "title": "Metadata Json", + "type": "string" +}
- Added
restore_restart_snapshot - Added
save_cloud_skill - Added
search_knowledge - Removed
search_memory - Removed
todo - Changed
update_memory16 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - added
Input schema / properties / bucketAdded value: +{ + "default": "", + "description": "Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads.", + "title": "Bucket", + "type": "string" +} - added
Input schema / properties / confidenceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Confidence score for the saved or updated memory, from 0.0 to 1.0.", + "title": "Confidence" +} - added
Input schema / properties / detect_conflictsAdded value: +{ + "default": true, + "description": "Whether to detect possible conflicts with existing memories during an update.", + "title": "Detect Conflicts", + "type": "boolean" +} - added
Input schema / properties / expires_atAdded value: +{ + "default": "", + "description": "Optional ISO 8601 expiration timestamp for the memory.", + "title": "Expires At", + "type": "string" +} - added
Input schema / properties / importanceAdded value: +{ + "anyOf": [ + { + "type": "number" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Importance score for the saved or updated memory, from 0.0 to 1.0.", + "title": "Importance" +} - changed
Input schema / properties / memory_type / descriptionPrevious value: -"Optional memory type/category for user-facing updates, such as semantic, episodic, or procedural."New value: +"Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %." - added
Input schema / properties / merge_metadataAdded value: +{ + "default": true, + "description": "Whether to merge new metadata with existing metadata instead of replacing it.", + "title": "Merge Metadata", + "type": "boolean" +} - added
Input schema / properties / merge_provenanceAdded value: +{ + "default": true, + "description": "Whether to merge new provenance with existing provenance instead of replacing it.", + "title": "Merge Provenance", + "type": "boolean" +} - added
Input schema / properties / metadata_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string with extra metadata for the operation.", + "title": "Metadata Json", + "type": "string" +} - added
Input schema / properties / provenance_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string describing memory source, evidence, or attribution.", + "title": "Provenance Json", + "type": "string" +} - added
Input schema / properties / scopeAdded value: +{ + "default": "", + "description": "Optional scope that narrows memory access; leave blank for the token default.", + "title": "Scope", + "type": "string" +} - added
Input schema / properties / semantic_keyAdded value: +{ + "default": "", + "description": "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.", + "title": "Semantic Key", + "type": "string" +} - added
Input schema / properties / statusAdded value: +{ + "default": "", + "description": "Memory status filter or update value, such as active, archived, deleted, or %.", + "title": "Status", + "type": "string" +} - added
Input schema / properties / supersession_reasonAdded value: +{ + "default": "", + "description": "Reason the updated memory supersedes older content.", + "title": "Supersession Reason", + "type": "string" +} - added
Input schema / properties / team_idAdded value: +{ + "default": "", + "description": "Optional team/workspace identifier for team-scoped memory access.", + "title": "Team Id", + "type": "string" +}
- Added
update_project_decision - Added
update_project_todo - Added
update_state
2 tool updates
- Changed
project2 fields changed- removed
Input schema / allOfRemoved value: -[ - { - "if": { - "properties": { - "entity": { - "not": { - "const": "project" - } - } - }, - "required": [ - "entity" - ] - }, - "then": { - "required": [ - "project_id" - ] - } - } -] - removed
Input schema / oneOfRemoved value: -[ - { - "properties": { - "action": { - "const": "create" - }, - "entity": { - "const": "project" - }, - "project_id": { - "maxLength": 0 - } - }, - "required": [ - "entity", - "action", - "name" - ], - "title": "Project create" - }, - { - "anyOf": [ - { - "required": [ - "content" - ] - }, - { - "required": [ - "tags" - ] - }, - { - "required": [ - "patch" - ] - } - ], - "properties": { - "action": { - "const": "update" - }, - "entity": { - "const": "memory" - } - }, - "required": [ - "entity", - "action", - "memory_ref", - "expected_version" - ], - "title": "Memory update" - }, - { - "properties": { - "action": { - "const": "set_review_due" - }, - "entity": { - "const": "memory" - } - }, - "required": [ - "entity", - "action", - "memory_ref", - "expected_version" - ], - "title": "Memory review due" - }, - { - "properties": { - "action": { - "enum": [ - "create", - "resolve", - "reopen", - "supersede" - ] - }, - "entity": { - "const": "decision" - } - }, - "required": [ - "entity", - "action" - ], - "title": "Decision mutation" - }, - { - "anyOf": [ - { - "required": [ - "uri" - ] - }, - { - "properties": { - "provider_ref": { - "pattern": "^https://[^\\s/]+", - "type": "string" - } - } - } - ], - "properties": { - "action": { - "const": "link" - }, - "entity": { - "const": "document" - }, - "uri": { - "pattern": "^https://[^\\s/]+", - "type": "string" - } - }, - "required": [ - "entity", - "action", - "provider", - "provider_ref", - "title" - ], - "title": "Document link" - }, - { - "properties": { - "action": { - "enum": [ - "update_metadata", - "set_availability", - "unlink" - ] - }, - "entity": { - "const": "document" - }, - "resource_type": { - "maxLength": 0 - } - }, - "required": [ - "entity", - "action" - ], - "title": "Document edit or unlink" - }, - { - "properties": { - "action": { - "enum": [ - "link", - "update_metadata", - "set_availability", - "unlink" - ] - }, - "entity": { - "const": "conversation" - } - }, - "required": [ - "entity", - "action" - ], - "title": "Conversation mutation" - }, - { - "properties": { - "action": { - "const": "save" - }, - "entity": { - "const": "settings" - } - }, - "required": [ - "entity", - "action" - ], - "title": "Settings mutation" - } -]
- Changed
todo1 field changed- removed
Input schema / allOfRemoved value: -[ - { - "if": { - "properties": { - "action": { - "const": "create" - } - }, - "required": [ - "action" - ] - }, - "then": { - "anyOf": [ - { - "required": [ - "content" - ] - }, - { - "required": [ - "title" - ] - } - ], - "not": { - "anyOf": [ - { - "required": [ - "project_id", - "metadata_json" - ] - }, - { - "required": [ - "project_id", - "scope" - ] - }, - { - "required": [ - "project_id", - "bucket" - ] - }, - { - "required": [ - "todo_id" - ] - }, - { - "required": [ - "status" - ] - }, - { - "required": [ - "note" - ] - } - ] - }, - "required": [ - "client_mutation_id" - ] - } - }, - { - "if": { - "required": [ - "status" - ] - }, - "then": { - "not": { - "anyOf": [ - { - "required": [ - "title" - ] - }, - { - "required": [ - "content" - ] - }, - { - "required": [ - "project_id" - ] - }, - { - "required": [ - "priority" - ] - }, - { - "required": [ - "due_at" - ] - } - ] - } - } - }, - { - "if": { - "properties": { - "action": { - "const": "complete" - } - }, - "required": [ - "action" - ] - }, - "then": { - "not": { - "anyOf": [ - { - "required": [ - "title" - ] - }, - { - "required": [ - "content" - ] - }, - { - "required": [ - "project_id" - ] - }, - { - "required": [ - "priority" - ] - }, - { - "required": [ - "due_at" - ] - }, - { - "required": [ - "status" - ] - } - ] - } - } - }, - { - "if": { - "properties": { - "action": { - "const": "update" - } - }, - "required": [ - "action" - ] - }, - "then": { - "required": [ - "todo_id", - "expected_version", - "client_mutation_id" - ] - } - }, - { - "if": { - "not": { - "properties": { - "action": { - "const": "list" - } - }, - "required": [ - "action" - ] - } - }, - "then": { - "not": { - "anyOf": [ - { - "required": [ - "search" - ] - }, - { - "required": [ - "query" - ] - } - ] - } - } - } -]
5 tool updates
- Changed
analyze_memory_text2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
memory_overview2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall3 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / time_order / descriptionPrevious value: -"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting."New value: +"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall_context3 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / time_order / descriptionPrevious value: -"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting."New value: +"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
search_memory3 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint in any language (e.g., today, yesterday, last week, last month, recently, Aug 1, Aug 10 to Sep 1, since Monday, before Sep 15, in Q3). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / time_order / descriptionPrevious value: -"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting."New value: +"Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', 'newest first', or recency, or 'asc' for chronological order ('oldest first') in any language. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting." - changed
Input schema / properties / until / descriptionPrevious value: -"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window in any language (e.g., yesterday end of day, by Aug 10, Aug 10 to Sep 1). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
5 tool updates
- Changed
analyze_memory_text2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"Only include memories or activity on or after this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"Only include memories or activity on or before this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
memory_overview2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"Only include memories or activity on or after this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"Only include memories or activity on or before this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Input value for the Recall tool.", + "title": "Hypothetical Answer", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "title": "Query Mode", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "title": "Since", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "title": "Time Order", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "title": "Until", + "type": "string" +}
- Changed
recall_context5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query.", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "type": "string" +}
- Changed
search_memory5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Input value for the Search Memory tool.", + "title": "Hypothetical Answer", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "title": "Query Mode", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "title": "Since", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "title": "Time Order", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "title": "Until", + "type": "string" +}
3 tool updates
- Changed
ledger24 fields changed- removed
Input schema / properties / account_hintRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Hint", - "type": "string" -} - removed
Input schema / properties / account_labelRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Label", - "type": "string" -} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction", - "subscription_create", - "subscription_edit", - "subscription_transition" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction" +] - removed
Input schema / properties / amount_modeRemoved value: -{ - "default": "fixed", - "description": "Input value for the Ledger tool.", - "title": "Amount Mode", - "type": "string" -} - removed
Input schema / properties / as_ofRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "As Of", - "type": "string" -} - removed
Input schema / properties / cadenceRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Cadence", - "type": "string" -} - removed
Input schema / properties / current_period_started_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Current Period Started On", - "type": "string" -} - changed
Input schema / properties / description / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Project description for project/create." - removed
Input schema / properties / ended_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Ended On", - "type": "string" -} - removed
Input schema / properties / expected_amountRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Expected Amount", - "type": "string" -} - removed
Input schema / properties / interval_countRemoved value: -{ - "default": 1, - "description": "Input value for the Ledger tool.", - "title": "Interval Count", - "type": "integer" -} - removed
Input schema / properties / interval_unitRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Interval Unit", - "type": "string" -} - removed
Input schema / properties / next_charge_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Next Charge On", - "type": "string" -} - removed
Input schema / properties / notesRemoved value: -{ - "default": "", - "description": "Freeform notes explaining recall feedback or corrections.", - "title": "Notes", - "type": "string" -} - changed
Input schema / properties / patch / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Memory/update alias: content and/or tags." - removed
Input schema / properties / plan_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Name", - "type": "string" -} - removed
Input schema / properties / plan_tierRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Tier", - "type": "string" -} - removed
Input schema / properties / renewal_modeRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Renewal Mode", - "type": "string" -} - removed
Input schema / properties / review_lead_daysRemoved value: -{ - "default": 0, - "description": "Input value for the Ledger tool.", - "title": "Review Lead Days", - "type": "integer" -} - removed
Input schema / properties / review_todo_opt_inRemoved value: -{ - "default": false, - "description": "Input value for the Ledger tool.", - "title": "Review Todo Opt In", - "type": "boolean" -} - removed
Input schema / properties / service_keyRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Key", - "type": "string" -} - removed
Input schema / properties / service_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Name", - "type": "string" -} - removed
Input schema / properties / subscription_idRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Id", - "type": "string" -} - removed
Input schema / properties / subscription_statusRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Status", - "type": "string" -}
- Changed
project2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / title / descriptionPrevious value: -"Title for decision/document/conversation mutations."New value: +"Title for decision, document, or conversation mutations."
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -1500New value: +8000
3 tool updates
- Changed
ledger24 fields changed- added
Input schema / properties / account_hintAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Account Hint", + "type": "string" +} - added
Input schema / properties / account_labelAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Account Label", + "type": "string" +} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction", + "subscription_create", + "subscription_edit", + "subscription_transition" +] - added
Input schema / properties / amount_modeAdded value: +{ + "default": "fixed", + "description": "Input value for the Ledger tool.", + "title": "Amount Mode", + "type": "string" +} - added
Input schema / properties / as_ofAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "As Of", + "type": "string" +} - added
Input schema / properties / cadenceAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Cadence", + "type": "string" +} - added
Input schema / properties / current_period_started_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Current Period Started On", + "type": "string" +} - changed
Input schema / properties / description / descriptionPrevious value: -"Project description for project/create."New value: +"Input value for the Ledger tool." - added
Input schema / properties / ended_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Ended On", + "type": "string" +} - added
Input schema / properties / expected_amountAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Expected Amount", + "type": "string" +} - added
Input schema / properties / interval_countAdded value: +{ + "default": 1, + "description": "Input value for the Ledger tool.", + "title": "Interval Count", + "type": "integer" +} - added
Input schema / properties / interval_unitAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Interval Unit", + "type": "string" +} - added
Input schema / properties / next_charge_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Next Charge On", + "type": "string" +} - added
Input schema / properties / notesAdded value: +{ + "default": "", + "description": "Freeform notes explaining recall feedback or corrections.", + "title": "Notes", + "type": "string" +} - changed
Input schema / properties / patch / descriptionPrevious value: -"Memory/update alias: content and/or tags."New value: +"Input value for the Ledger tool." - added
Input schema / properties / plan_nameAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Plan Name", + "type": "string" +} - added
Input schema / properties / plan_tierAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Plan Tier", + "type": "string" +} - added
Input schema / properties / renewal_modeAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Renewal Mode", + "type": "string" +} - added
Input schema / properties / review_lead_daysAdded value: +{ + "default": 0, + "description": "Input value for the Ledger tool.", + "title": "Review Lead Days", + "type": "integer" +} - added
Input schema / properties / review_todo_opt_inAdded value: +{ + "default": false, + "description": "Input value for the Ledger tool.", + "title": "Review Todo Opt In", + "type": "boolean" +} - added
Input schema / properties / service_keyAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Service Key", + "type": "string" +} - added
Input schema / properties / service_nameAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Service Name", + "type": "string" +} - added
Input schema / properties / subscription_idAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Subscription Id", + "type": "string" +} - added
Input schema / properties / subscription_statusAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Subscription Status", + "type": "string" +}
- Changed
project2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / title / descriptionPrevious value: -"Title for decision, document, or conversation mutations."New value: +"Title for decision/document/conversation mutations."
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -8000New value: +1500
2 tool updates
- Changed
ledger22 fields changed- removed
Input schema / properties / account_hintRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Hint", - "type": "string" -} - removed
Input schema / properties / account_labelRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Label", - "type": "string" -} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction", - "subscription_create", - "subscription_edit", - "subscription_transition" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction" +] - removed
Input schema / properties / amount_modeRemoved value: -{ - "default": "fixed", - "description": "Input value for the Ledger tool.", - "title": "Amount Mode", - "type": "string" -} - removed
Input schema / properties / as_ofRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "As Of", - "type": "string" -} - removed
Input schema / properties / cadenceRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Cadence", - "type": "string" -} - removed
Input schema / properties / current_period_started_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Current Period Started On", - "type": "string" -} - removed
Input schema / properties / ended_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Ended On", - "type": "string" -} - removed
Input schema / properties / expected_amountRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Expected Amount", - "type": "string" -} - removed
Input schema / properties / interval_countRemoved value: -{ - "default": 1, - "description": "Input value for the Ledger tool.", - "title": "Interval Count", - "type": "integer" -} - removed
Input schema / properties / interval_unitRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Interval Unit", - "type": "string" -} - removed
Input schema / properties / next_charge_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Next Charge On", - "type": "string" -} - removed
Input schema / properties / notesRemoved value: -{ - "default": "", - "description": "Freeform notes explaining recall feedback or corrections.", - "title": "Notes", - "type": "string" -} - removed
Input schema / properties / plan_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Name", - "type": "string" -} - removed
Input schema / properties / plan_tierRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Tier", - "type": "string" -} - removed
Input schema / properties / renewal_modeRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Renewal Mode", - "type": "string" -} - removed
Input schema / properties / review_lead_daysRemoved value: -{ - "default": 0, - "description": "Input value for the Ledger tool.", - "title": "Review Lead Days", - "type": "integer" -} - removed
Input schema / properties / review_todo_opt_inRemoved value: -{ - "default": false, - "description": "Input value for the Ledger tool.", - "title": "Review Todo Opt In", - "type": "boolean" -} - removed
Input schema / properties / service_keyRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Key", - "type": "string" -} - removed
Input schema / properties / service_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Name", - "type": "string" -} - removed
Input schema / properties / subscription_idRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Id", - "type": "string" -} - removed
Input schema / properties / subscription_statusRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Status", - "type": "string" -}
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -1500New value: +8000
Publisher details
- Operator
- Yonro Co., Ltd. · Publisher source
- Operator website
- https://www.yonro.co.jp/ · Publisher source
- Vendor relationship
- First-party · Publisher source
- Documentation
- https://xmemo.dev/docs/mcp/overview · Publisher source
- Trust center
- Not available
- Restrictions
- An XMemo account and authentication are required to access the hosted MCP service. Standard memory capabilities are available through the Free plan. Supported OAuth clients can connect through the hosted MCP endpoint using browser-based authorization. Clients that do not support OAuth may use bearer-token authentication where supported. Access to memories and other resources is governed by the user's authorization, granted scopes, and applicable account permissions. Certain advanced capabilities may have additional availability, permission, or subscription requirements. Client compatibility depends on the supported MCP transport and authentication method. MCP endpoint: https://xmemo.dev/mcp · Publisher source
Related MCP Connectors
One memory for you and your AI agents, shared by ChatGPT, Claude, Gemini, Grok, Codex and Cursor.
A second brain for your AI agent. Shared memory for your team's AI agents, plus public and private knowledge bases — works with ChatGPT, Claude, Cursor and any MCP client.
Give your AI agent persistent, governed memory for every project. At task start it recalls the approved decisions, conventions, risks and architecture (semantic search, ranked by importance); at close it proposes what was learned as typed memories that you review and approve — governance, not a notes dump. Agents propose, humans govern: edits go back to pending and deletion is human-only by design. Connect Claude Code, Cursor, Claude Desktop or any MCP client in two minutes with just your API key — hosted (nothing to install) or locally via `uvx solucortex-mcp`. Built by SoluAI and dogfooded daily: SoluCortex is developed using its own living memory.
Universal memory for AI agents and tools. Save, organize and search context anywhere.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to share persistent memory by ingesting knowledge from sources like Obsidian, code, documents, web clips, and terminal sessions, then providing token-optimized search, context, classification, synthesis, and capture tools through MCP and REST APIs.14 npmMIT
- AlicenseAqualityDmaintenancePersistent memory API for AI agents — store, recall, and inject semantically-searchable context across sessions. EU-hosted, GDPR-compliant. Supports Claude, Cursor, Cline, and any MCP-compatible client.42MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI coding agents to maintain persistent, cross-session memory of codebase architecture, naming conventions, and decisions through MCP tools. Eliminates repetitive project re-explanation by automatically injecting stored context into every session with local-first SQLite storage and optional team sharing capabilities.4MIT
- AlicenseNot gradedqualityDmaintenanceProvides a persistent, vendor-neutral memory layer that allows AI tools and agents to share context and knowledge across different platforms while maintaining local data ownership. It enables users to store, recall, and manage structured memories through hybrid semantic search and automated context assembly.11 npmApache 2.0
Glama MCP Gateway
Add one secure layer between your agents and this server.