Skip to main content
Glama

Server Details

Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.

Ownership verified
Status
Healthy
OAuth
Works in Glama
Last Tested
Transport
Streamable HTTP
URL
Repository
yonro/memory-os-cli
GitHub Stars
12
Server Listing
XMemo

Available Tools

19 tools
analyze_memory_textAnalyze XMemo memory textA
Read-onlyIdempotent
Inspect

Counts a word or phrase across XMemo memories, optionally grouped by day, month, agent, location, or type, when the user asks how often a given word or topic appears.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoRFC 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.
untilNoRFC 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.
phraseYesExact word or phrase to count across visible XMemo memories.
group_byNoOptional grouping: none, month, agent, location, memory_type, type, source, path, bucket, or day.none
match_modeNoHow to match phrase: exact, case_insensitive, or regex_lite.exact
max_examplesNoMaximum number of short snippets to include.
include_examplesNoWhether to include a few short matching memory snippets.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover readOnly, idempotent, and non-destructive behavior, so the description is not required to repeat safety information. It adds the count-and-group semantics but does ot disclose any further behavioral nuances such as timezone fallback, visibility limits, or example-snippet behavior; those live in the schema instead.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single front-loaded sentence states the action, scope, optional grouping, and the user trigger without waste. Every clause contributes either to selection or invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only counting/analytic tool, the description provides the essential selection and invocation context. The rich input schema, output schema, and annotations carry the remaining details, so nothing critical is missing at the decision level.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and each parameter already has detailed definitions and triggers, so the description does not need to compensate. It adds a small amount by refreshing the grouping concepts (day, month, agent, location, type), but that is largely redundant with the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Counts') and resource ('XMemo memories'), so the core purpose is unmistakable. It also includes the user-intent trigger ('when the user asks how often...'), which helps separate it from nearby tools like search_memory or recoll, though it does not explicitly name or contrast sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It starts a clear when-to-use condition: user asks how often a word or topic appears. This gives a solid usage signal and discourages using it for pure retrieval or listing. It does not explicitly mention when not to use it or name alternatives, so it stopes short of full routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

explain_memoryExplain XMemo memoryA
Read-onlyIdempotent
Inspect

Explains why a memory exists or matched a query whenever the user asks why something was saved there or why it was retrieved.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoNatural-language question or search text.
memory_idYesExact XMemo memory reference shown by search or recall.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety and side effects. The description adds the behavioral context of explaining memory rationale, but does not disclose additional traits such as output format or limitations; the output schema covers return structure. This is adequate given the strong annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that clearly states the action and condition. There is no redundancy or filler, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with robust annotations and an output schema. The description covers purpose and usage, the schema covers parameters, and the annotations cover safety. A minor gap is the lack of an explicit prerequisite that memory_id must come from a prior search/recall, but the schema property description already states that, so the overall context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Both parameters (memory_id and query) have descriptive schema entries providing full coverage at 100%. The tool description does not add extra parameter-level detail, 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.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb ('Explains') and resource ('why a memory exists or matched a query'). It distinguishes itself from sibling search/recall tools by focusing on the reasoning behind memory behavior rather than listing or retrieving memories.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives an explicit usage condition: 'whenever the user asks why something was saved there or why it was retrieved.' This clearly signals when to invoke, though it does not explicitly name alternative tools or exclusions, which would have made it a 5.

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 TODOA
Destructive
Inspect

Delete one memory, TODO, or Ledger transaction by natural target ('latest', 'current', an exact memory ID (with memory_id accepted as an equivalent exact-reference alias), an exact TODO ID from the current TODO listing, or an exact Ledger transaction ID from ledger(action='list')). Defaults to a recoverable soft delete (restore later with restore_memory); pass mode='hard' only after the user has explicitly confirmed a permanent, unrecoverable deletion in this conversation. Call this only when the user explicitly asks to delete a specific memory, TODO, or expense/income record; list/search or check activity first if the target is ambiguous.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoDeletion mode: soft or soft_delete is the recoverable default; hard or hard_delete is permanent and unrecoverable and may be used only after explicit user confirmation.soft
reasonNoOptional user-facing reason for the deletion.
targetNoThe memory to forget: current or an exact memory ID shown by search.current
memory_idNoExact XMemo memory reference shown by search or recall.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=false, destructiveHint=true), the description discloses important behavioral details: it defaults to a recoverable soft delete, mentions restore_memory as a recovery path, and warns that hard delete is permanent and unrecoverable, requiring explicit user confirmation. This adds significant value and aligns with the destructiveHint.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph, dense but not bloated. Every sentence contributes value: the action, the target types, the default behavior, the hard-delete caution, and the usage rule. It could be slightly more scannable with a list, but it remains efficient for the complexity involved.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's destructive nature and multiple targets/modes, the description covers all essential aspects: what it deletes, how targets are specified, the soft/hard mode distinction, recovery via restore_memory, and the prerequisite of explicit user confirmation for permanent deletion. Combined with the detailed schema and annotations, it is complete for an AI agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% description coverage for all 4 parameters. The description adds context by explaining valid target formats (exact memory ID, TODO ID from current listing, Ledger transaction ID) and clarifying the mode aliases (soft/soft_delete, hard/hard_delete). It enriches rather than merely repeats the schema, though the schema already does a good job.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Delete one memory, TODO, or Ledger transaction by natural target'. It specifies the verb (delete) and the resources (memory, TODO, Ledger transaction), and distinguishes itself from sibling tools like restore_memory and update_memory by focusing on deletion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

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: 'Call this only when the user explicitly asks to delete a specific memory, TODO, or expense/income record'. It also provides guidance for ambiguous targets ('list/search or check activity first') and warns against using hard delete without explicit confirmation. This is clear and actionable guidance.

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 connectionA
Read-onlyIdempotent
Inspect

Checks XMemo connection status and the currently connected account/agent when the user asks whether XMemo is connected.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the behavioral detail that the tool reports both connection status and the currently connected account/agent, which goes beyond the annotations and helps predict the tool's response. No contradictions exist.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no unnecessary words. It front-loads the core action ('Checks XMemo connection status') and then provides the usage trigger, making it easy to scan and understand.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, output schema provided, annotations covering safety), the description adequately covers the purpose, trigger, and expected output. The output schema presumably details return values, so no further description is needed. The description is fully 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.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and schema description coverage is trivially 100%. Even without parameters to document, the description adds meaning by clarifying what the tool checks and what information it exposes, meeting the baseline for parameterless tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Checks' to state the action on the XMemo connection, and clearly identifies the resource ('connection status') and the additional output ('currently connected account/agent'). This distinguishes it from all sibling tools, none of which handle connection checking, making the purpose immediately clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context by stating 'when the user asks whether XMemo is connected.' This gives a clear trigger for invocation. It does not explicitly mention alternatives or when-not-to-use scenarios, but no sibling tool offers a similar connection check, so the absence of exclusions is acceptable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_project_summaryProject quick summaryA
Read-onlyIdempotent
Inspect

Return a bounded quick-answer summary for one exact authorized project as concise text. Use this for brief status, blockers, progress, or next-action questions such as "how is this project doing" or "what is blocking this project". Do not use it to open, browse, or manage the project workspace; use open_project_workspace for that. When no exact project can be established, say so and guide the user to open Project Workspaces Home with open_project_workspace — never invent a multi-project summary. It never returns a raw context pack or a workspace resource.

ParametersJSON Schema
NameRequiredDescriptionDefault
focusNoProject summary focus: status, blockers, progress, next_actions, or work.status
project_idNoOptional project identifier to filter the Ledger or TODO workspace.

Output Schema

ParametersJSON Schema
NameRequiredDescription
focusYes
errorsYes
bulletsYes
projectYes
headlineNo
freshnessYes
availabilityYes
completenessYes
schemaVersionYes
domainCoverageYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint, idempotentHint, destructiveHint), the description adds behavior: it returns concise text, never a raw context pack or workspace resource, and when no exact project is established it says so and guides the user. This provides useful context without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Four sentences, each serving a distinct function: purpose, usage examples, exclusion/alternative, and fallback behavior. No redundancy, properly front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only summary tool with two optional parameters, the description covers purpose, usage, scope constraint, failure mode, and output type. Output schema and annotations handle the rest, making this complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters (focus and project_id) fully described. The description reinforces the single-project scope but adds no new parameter-level semantics, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: returning a bounded quick-answer summary for a single exact project as concise text. It distinguishes from siblings by explicitly naming the alternative for workspace management (open_project_workspace).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives explicit usage scenarios ('brief status, blockers, progress, or next-action questions') and explicitly says not to use it for opening/browsing/managing the workspace, naming the alternative. It also instructs how to handle ambiguous project references.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ledgerManage XMemo LedgerA
Destructive
Inspect

Manage Ledger transactions. For 'I paid 199 CNY for a membership', use ledger(action='add_expense'). For this-month totals, use action='summary' with months=1 and the user's real owner_timezone. Actions: add_expense, list, summary, overview, update_transaction.

ParametersJSON Schema
NameRequiredDescriptionDefault
itemNoThe purchased item or service, for example 2 watermelons or Nintendo Switch 2.
noteNoOptional completion note.
pathNoA simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel.finance/ledger/expenses
limitNoMaximum number of results to return.
patchNoMemory/update alias: content and/or tags.
queryNoNatural-language question or search text.
scopeNoOptional scope that narrows memory access; leave blank for the token default.
actionYesUsage action or audit-event action filter, depending on the tool.
amountNoPositive transaction amount as a number.
bucketNoMemory bucket or namespace to read from or write to; use % only for tools that support wildcard reads.
monthsNoNumber of recent ledger months to summarize.
offsetNoNumber of matching records to skip for pagination.
date_toNoOnly include ledger transactions on or before this YYYY-MM-DD date.
team_idNoOptional team/workspace identifier for team-scoped memory access.
agent_idNoOptional client-supplied agent label for memory attribution.
categoryNoOptional spending category, such as food, transport, or electronics.
currencyNoCurrency code or label, such as CNY, RMB, JPY, yen, or USD. For ledger search/list tools, leave blank unless the user explicitly requested one currency; labels are normalized to codes.
merchantNoOptional merchant or store name.
date_fromNoOnly include ledger transactions on or after this YYYY-MM-DD date.
device_idNoOptional client-supplied device identifier for attribution.
max_amountNoOnly include ledger transactions with amount less than or equal to this value.
min_amountNoOnly include ledger transactions with amount greater than or equal to this value.
project_idNoOptional project identifier to filter the Ledger or TODO workspace.
descriptionNoProject description for project/create.
output_jsonNoReturn a machine-readable JSON response instead of a human-readable summary.
device_labelNoOptional human-readable device label for attribution.
owner_timezoneNoThe user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.
payment_methodNoOptional payment method, such as card, cash, Alipay, or WeChat Pay.
transaction_idNoInput value for the Ledger tool.
expected_versionNoOptimistic-concurrency version read from the current record; a stale value is rejected with VERSION_CONFLICT.
transaction_dateNoTransaction date in YYYY-MM-DD. Leave blank to use today's UTC date.
transaction_typeNoOptional ledger type filter: expense, income, refund, or transfer.
agent_instance_idNoOptional stable, non-secret agent instance ID for per-client attribution.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already carry destructiveHint true and readOnlyHint false, so the agent knows this can mutate data. The desciption adds action-specific context, but it does not disclose what destruction or mutation can look like, such as whether update_transaction overwrites records or whether expected_version is required. With annotations present, the bar is lower, but the description adds little behavioral depth beyond listing actions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three s- sentences, examples front-loaded, no wasted prose. The opening 'Manage Ledger transactions' and the closing action list overlap slightly, but the overall structure is tight and scannable for an agent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 33 parameters and 5 actions, the description is under-specified for some actions: list, overview, update_transaction are only named, not explained. An agent gets good guidance for add_expense and summary, but little orientation for choosing among list/summary/overview or for performing updates. The output schema and high param coverage soften the gap, but not enough for a tool this complex.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is a 3. The description adds real parameter semantics by linking action='add_expense' to a natural-language utterance and by specifying months=1 plus the user's real owner_timezone for summary. This meaningfully helps an agent map intents to parameter values beyond what the schema states.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description identifies the resource (Ledger transactions) and lists the five supported actions, plus two concrete usage examples. 'Manage' is broad, but the examples and action list make the tool's purpose clear. It does not explicitly contrast with siblings like open_ledger, but the action enum disambiguates it sufficiently.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives explicit when-to-use guidance: add_expense for natural-language expense statements and summary for this-month totals with months=1 and owner_timezone. This goes beyond the schema. It does not state when to avoid ledg er or prefer open_ledger, so it lacks full exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

memory_overviewShow XMemo memory overviewA
Read-onlyIdempotent
Inspect

Show exactly one requested XMemo memory view. For a broad workspace snapshot, use only the default overview. Use section='stats' only for an explicitly requested count or breakdown, and section='activity' only for explicitly requested recent changes; do not combine sections for one overview request.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return.
sinceNoRFC 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.
top_nNoMaximum number of aggregate groups to return.
untilNoRFC 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.
sectionNoInput value for the Memory Overview tool.overview
group_byNoOptional grouping: none, month, agent, location, memory_type, type, source, path, bucket, or day.
memory_typeNoOptional memory type/category for user-facing updates, such as semantic, episodic, or procedural.%
activity_typeNoActivity filter: all, writes, deletions, restorations, reads, reminders, ledger, or timeline.all

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior4/5

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 goes beyond annotations by disclosing the one-view-per-request rule and the prohibition on combining sections, which is useful behavioral context not present in 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no filler. The purpose is front-loaded, and each sentence adds a distinct piece of information about scope and section usage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter read-only tool with a full output schema and 100% schema coverage, the description adds the critical one-view rule and section-selection guidance. It is slightly incomplete in not addressing when to prefer this tool over sibling memory tools, but that is a secondary gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description adds guidance on section selection but does not explain since/until or group_by, which the schema already handles. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a clear verb-resource pair ('Show exactly one requested XMemo memory view') and identifies the three section modes. It does not explicitly name sibling tools, but the purpose is unambiguous and distinct enough from read_memory or search_memory.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides explicit rules: default overview for a broad workspace snapshot, stats only for explicit count/breakdown requests, activity only for explicit recent-change requests, and no section combination. However, it does not contrast this tool against sibling memory tools, leaving some selection inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_ledgerOpen LedgerA
Read-onlyIdempotent
Inspect

Open the interactive Ledger for Net flow or external-service Renewal reminders. Use the compatibility value view=subscriptions for reminder intent; it does not mean an XMemo plan. Do not look for or invent a separate open_subscriptions tool. Use this when the user asks to open, browse, explore, or work with Ledger. The owner_timezone input must be the user's real IANA timezone; never guess UTC. For a quick text-only monthly total use ledger(action='summary'), and for transaction rows or item search use ledger(action='list'). Recording a transaction uses ledger(action='add_expense'). Existing transactions can be edited inside the widget; deletion stays in Chat and requires explicit confirmation.

ParametersJSON Schema
NameRequiredDescriptionDefault
viewNoLedger workspace mode: overview for transactions and Net flow, or subscriptions (compatibility value) for external-service renewal reminders.overview
periodNoLedger period preset: current_month, previous_month, last_3_months, last_6_months, year_to_date, or custom.current_month
searchNoOptional title search query for the board.
date_toNoOnly include ledger transactions on or before this YYYY-MM-DD date.
categoryNoOptional spending category, such as food, transport, or electronics.
currencyNoCurrency code or label, such as CNY, RMB, JPY, yen, or USD. For ledger search/list tools, leave blank unless the user explicitly requested one currency; labels are normalized to codes.
date_fromNoOnly include ledger transactions on or after this YYYY-MM-DD date.
project_idNoOptional project identifier to filter the Ledger or TODO workspace.
owner_timezoneYesThe user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.
transaction_typeNoOptional ledger type filter: expense, income, refund, or transfer.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, idempotentHint=true), the description adds valuable behavioral context: view=subscriptions is a compatibility value and does not imply an XMemo plan, owner_timezone must be the user's real IANA timezone and never guessed UTC, and existing transactions can be edited inside the widget while deletion stays in Chat requiring confirmation. These details clarify agent expectations without contradicting 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact yet information-dense, front-loading the primary purpose and then covering usage, disambiguation, and behavioral caveats. Every sentence serves a distinct disambiguation or instruction purpose, with no filler or repetition of schema fields beyond critical clarifications.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (10 parameters, many sibling tools, rich schema), the description is complete: it covers purpose, use cases, alternatives, special parameter semantics, timezone rules, and widget interaction behaviors. The output schema exists, so return value details are not needed. No significant gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with detailed parameter descriptions, so the baseline is 3. The description adds extra semantic clarity for view (clarifying subscription compatibility and XMemo warning) and owner_timezone (reinforcing real IANA timezone), which pushes it above baseline. However, most parameter meanings are already well-documented in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool opens the interactive Ledger for Net flow or Renewal reminders, with a specific verb and resource. It proactively distinguishes itself from a non-existent open_subscriptions tool and differentiates from sibling ledger tools by clarifying it is the entry point for opening/browsing the Ledger.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool ('when the user asks to open, browse, explore, or work with Ledger') and names alternatives: ledger(action='summary') for quick totals, ledger(action='list') for transaction rows/search, and ledger(action='add_expense') for recording. Also warns against inventing a separate open_subscriptions tool, providing clear when-not-to-use guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_project_workspaceOpen Project WorkspaceA
Read-onlyIdempotent
Inspect

Open the Project Workspace. With no project reference it always opens Project Workspaces Home — the caller's authorized project list — even when exactly one project is accessible. An exact project_id, or a project name/alias matching exactly one authorized project, opens that project's eight tabs (overview, memory, todo, decisions, documents, conversations, timeline, settings); multiple or no matches return Home with candidates or an honest no-match state. For a quick text-only status, blockers, or next-actions answer use get_project_summary. Explicit standalone TODO or Ledger intent keeps using open_todo_board or open_ledger.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectNoNatural-language project name or alias; resolved only within your authorized projects, never a global search.
project_idNoOptional project identifier to filter the Ledger or TODO workspace.
initial_tabNoProject Workspace tab to open first: overview, memory, todo, decisions, documents, conversations, timeline, or settings. Legacy ledger values open Overview; use open_ledger for the standalone Ledger.overview
source_modeNoPost-authorization presentation policy: focused on this project, or all_authorized sources.focused

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description reveals resolution rules: no reference always opens Home even with one accessible project, exact matches open the eight tabs, multiple/no matches return Home with candidates or no-match state, and legacy ledger values open Overview. This is valuable behavioral context not available in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense yet well-structured: it opens with the core action, then sequentially covers parameter resolution, tab enumeration, edge cases, and sibling differentiation. Every sentence contributes meaningful information, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (4 parameters, 8 tabs, multiple edge cases), the description is fully complete: it covers no-reference behavior, match resolution outcomes, tab list, legacy handling, and alternative tools. The presence of an output schema reduces the need to describe return values, and annotations cover safety, so the description fills all remaining gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 important meaning: it explains project resolution logic (exact project_id vs. unique name/alias), outcome on multiple/no matches, and the initial_tab legacy behavior. This enriches the schema parameter descriptions with practical consequences.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Open' with the resource 'Project Workspace' and lists the eight tabs, clearly distinguishing it from siblings like get_project_summary, open_todo_board, and open_ledger. It states exactly what the tool does: opens Home or a specific project's workspace.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit guidance is given for when to use alternatives: 'For a quick text-only status, blockers, or next-actions answer use get_project_summary. Explicit standalone TODO or Ledger intent keeps using open_todo_board or open_ledger.' The description also clarifies behavior with no project reference, making the usage context unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_todo_boardOpen TODO BoardA
Read-onlyIdempotent
Inspect

Open the interactive TODO Board workspace to view, browse, and manage tasks. The owner_timezone input must be the user's real IANA timezone; never guess UTC. Use this when the user wants to open, browse, filter, or work with their TODOs visually — e.g. "open my TODOs", "show the TODO board", "what should I focus on today", or "view this XMemo project's tasks". For a quick text-only answer such as "how many TODOs do I have", use todo(action='list') instead. Create, update, or complete TODOs with todo(action='create'|'update'|'complete'). When the user explicitly asks to delete a specific TODO, identify its exact ID and call forget(target=).

ParametersJSON Schema
NameRequiredDescriptionDefault
cursorNoOpaque cursor for loading the next TODO Board page.
searchNoOptional title search query for the board.
due_rangeNoOptional due-date range: overdue, today, this_week, later, or none.
project_idNoOptional project identifier to filter the Ledger or TODO workspace.
source_filterNoOptional source filter for the board.
status_filterNoOptional status filter for the board.
owner_timezoneYesThe user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.
assignee_filterNoOptional assignee or creator filter for the board.

Output Schema

ParametersJSON Schema
NameRequiredDescription
focusYes
countsYes
cursorYes
columnsYes
filtersYes
projectYes
summaryYes
surfaceYes
pinnedItemsYes
globalCountsYes
activeFiltersYes
filteredCountsYes
availableActionsYes
relationReadAvailableYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds the important behavioral constraint: 'The owner_timezone input must be the user's real IANA timezone; never guess UTC.' It also clarifies that mutations are handled elsewhere, avoiding the possibility of the 'manage tasks' phrase suggesting write actions. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but every sentence contributes: purpose, critical timezone note, use cases, and alternatives. It is front-loaded with the main purpose and structured clearly, though slightly wordy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has an output schema and thorough annotations, the description adequately covers when to use it, key behavioral constraints, and how it differs from siblings. It could mention pagination behavior but that is not necessary for a board-opening tool with output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so each parameter is already documented. The description repeats the owner_timezone requirement but adds no new parameter semantics beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb+resource: 'Open the interactive TODO Board workspace to view, browse, and manage tasks.' It clearly distinguishes from sibling tools by explaining that this is for visual/browse workflows while todo(action='list') is for quick text answers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicit usage guidance is provided: 'Use this when the user wants to open, browse, filter, or work with their TODOs visually' with examples, and explicit alternatives: 'For a quick text-only answer..., use todo(action='list') instead' and 'Create, update, or complete TODOs with todo(action='create'|'update'|'complete')' and deletion via 'forget'. This leaves no ambiguity about when to choose this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

projectManage XMemo projectA
Destructive
Inspect

Create or mutate an authorized project; use open_project_workspace or get_project_summary to read. Project create requires entity='project', action='create', and name, and omits project_id. Other actions require project_id. Memory update needs memory_ref (never memory_id) and expected_version; use top-level content/tags or patch.content/patch.tags, with conflicts rejected. Decision create needs context; transitions need decision_ref. Document link needs provider, provider_ref, title; resource_type is link-only. Conversation link needs provider, provider_ref, and title. Edits/unlinks need the matching ref and expected_version.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriNoHTTPS document URL for document/link.
nameNoRequired display name for project/create.
tagsNoReplacement memory tags for memory/update; max 20.
patchNoMemory/update alias: content and/or tags; dual values must match.
titleNoTitle for decision, document, or conversation mutations.
actionYesOperation valid for the selected entity.
entityYesProject resource family to mutate.
contentNoReplacement memory content for memory/update.
contextNoRequired context for decision/create.
excerptNoShort note for the link or metadata update, not a full transcript.
optionsNoDecision options for create or supersede.
decisionNoOptional decision statement for create.
providerNoProvider name for document/conversation link.
timezoneNoSettings IANA timezone; empty clears.
rationaleNoDecision rationale for create.
memory_refNoExact memory:<id> for memory mutations.
project_idNoExact authorized project ID; omit only for project/create.
resolutionNoResolution text for decision/resolve.
default_tabNoSettings tab: overview, memory, todo, decisions, documents, conversations, timeline, or settings.
descriptionNoOptional project/create description; max 2000 characters.
new_contextNoReplacement context for decision/supersede.
occurred_atNoConversation time in ISO 8601.
access_stateNoset_availability value: available, unavailable, or revoked.
date_displayNoSettings date format: locale or iso.
decision_refNoDecision ref for resolve, reopen, or supersede.
project_tagsNoDocument tags for link or metadata update.
provider_refNoProvider-native ref for document/conversation link.
source_labelNoDocument source label for link or metadata update.
resource_typeNodocument/link; omitted means document; otherwise rejected.
review_due_atNoISO 8601 time with timezone for memory/set_review_due; empty clears.
expected_versionNoCurrent record version for edits; stale writes fail.
resource_link_refNoDocument ref for edit, availability, or unlink.
client_mutation_idNoReplay key (1-128 chars) for idempotent writes.
linked_entity_refsNoConversation-linked public refs (not project IDs); each starts memory:, decision:, todo:, prl-, pcl-, or pwp-.
default_source_modeNoSettings source mode: focused or all_authorized.
conversation_link_refNoConversation ref for edit, availability, or unlink.

Output Schema

ParametersJSON Schema
NameRequiredDescription
okYes
recordYes
changesNo
staleTabsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish the safety posture (readOnlyHint=false, destructiveHint=true, idempotentHint=false), so the description need not restate mutation/destruction. It adds meaningful context beyond annotations: conflict semantics ('with conflicts rejected'), versioning requirements ('expected_version', 'stale writes fail'), and constraint pitfalls ('resource_type is link-only', 'never memory_id'). No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Roughly 110 words for a tool with 36 parameters and 8 schema variants — every sentence carries a distinct constraint and the core purpose is front-loaded. However, it is a single dense paragraph with heavy semicolon use, which reduces scannability when an agent needs to quickly locate the rule for a specific variant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Output schema exists, so return values need no explanation. The description covers all variants except the Settings mutation (entity='settings', action='save') and never mentions the idempotent replay key (client_mutation_id). Both are discoverable in the schema's oneOf branches and parameter descriptions, so the gap is minor, but for a tool this complex a complete walkthrough would include them.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 conditional selection semantics the flat schema doesn't convey: which parameters pair with which action, when project_id must be omitted, the memory_ref vs memory_id pitfall, and the top-level content/tags vs patch.content/patch.tags alternative. Some details duplicate schema descriptions (stale writes fail), but the selection logic and negative constraints are genuine added value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence 'Create or mutate an authorized project' states a specific verb and resource while explicitly distinguishing the tool from read paths: 'use open_project_workspace or get_project_summary to read.' The body enumerates the entity variants (project, memory, decision, document, conversation), so an agent can tell this is the project-scoped mutation surface rather than one of the many read/sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names the read alternatives and tells the agent when NOT to use this tool ('to read'). Per-variant selection rules are spelled out: 'Project create requires entity="project", action="create", and name, and omits project_id. Other actions require project_id.' Similar conditional guidance is given for memory, decision, document, and conversation mutations, leaving little to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

read_memoryRead MemoryA
Read-onlyIdempotent
Inspect

Read one exact authorized XMemo memory in character windows. Use a memory ID returned by recall or search, then continue long content with next_offset. Embeddings are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum content characters in this page; defaults to 4000.
offsetNoZero-based character offset into this memory's content; defaults to 0.
memory_idYesExact XMemo memory reference returned by recall or search.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Beyond the readOnlyHint, the description adds that the tool reads in character windows (pagination), only returns 'authorized' memories, uses exact IDs, and never returns embeddings. These are meaningful behavioral details not present in annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, front-loaded with the core purpose ('Read one exact authorized XMemo memory'), and every clause contributes useful information (authorization, pagination, embeddings). No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of annotations, a full output schema, and the tool's relatively simple read behavior, the description fully covers the essential context: pagination semantics, the need for an ID from recall/search, and the exclusion of embeddings. The agent can confidently use this tool without additional undocumented behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full descriptions for all three parameters (memory_id, offset, limit) with character-based semantics. The description adds a reference to next_offset for pagination, but this is also implied by the schema. No significant additional parameter meaning is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Read one exact authorized XMemo memory in character windows', which is a specific verb (read), resource (XMemo memory), and mode (character windows). This clearly distinguishes it from sibling tools like recall or search_memory that find memory IDs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly instructs to use a memory ID returned by recall or search, then continue long content with next_offset. This provides a clear workflow for when to use this tool (after finding the ID) and how to paginate, effectively differentiating it from alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recallRecall XMemo memoryA
Read-onlyIdempotent
Inspect

Recall the few most relevant saved memories before answering. This is a lightweight, unscoped lookup; use search_memory for a scoped lookup, or recall_context for a multi-item context pack.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return.
queryYesNatural-language question or search text.
sinceNoRFC 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.
untilNoRFC 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.
query_modeNoOptional 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.
time_orderNoSort 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.
hypothetical_answerNoInput value for the Recall tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by noting the lookup is lightweight, unscoped, and returns only the few most relevant memories, which helps the agent calibrate expectations beyond 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.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two tight sentences with no filler. It front-loads the core behavior, then immediately provides routing to alternatives, earning every word.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the rich input schema, detailed parameter descriptions, output schema, and safe annotations, the description provides sufficient high-level context. It covers what the tool does, its lightweight nature, and how it differs from the closest siblings, so an agent has what it needs to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

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 seven parameters in detail, including triggers, model responsibilities, and consequences. The description itself adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema carries the full burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Recall') and resource ('saved memories'), and clearly characterizes the operation as a lightweight, unscoped lookup returning the few most relevant results. It also distinguishes itself from sibling tools by naming search_memory and recall_context, so an agent can tell them apart without opening schemas.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool versus alternatives: use search_memory for a scoped lookup and recall_context for a multi-item context pack. It also frames the tool as something to run 'before answering,' giving clear contextual guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

recall_contextBuild XMemo contextA
Read-onlyIdempotent
Inspect

Build a read-only, bounded context pack from multiple relevant memories. Use it when an answer needs several memory items within max_items and max_tokens; use recall for a quick forgiving lookup or search_memory for strict targeted matching.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural-language query used to rank memories for the context pack.
sinceNoRFC 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.
untilNoRFC 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.
max_itemsNoMaximum memories rendered in the context pack.
max_tokensNoApproximate token budget for the rendered context pack.
query_modeNoOptional 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.
time_orderNoSort 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.
hypothetical_answerNoOptional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, and the description reinforces safety with 'read-only'. It adds the useful behavioral trait that the pack is bounded by max_items and max_tokens. The parameter descriptions further disclose consequence-style behavior (e.g., heuristic fallback when since is omitted, fail-closed for activity_log without bounds), though those live in the schema rather than the top-level description.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no filler. The core purpose is front-loaded, and the alternative routing follows immediately. Every clause earns its place, and the description avoids restating the title or schema contents.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For an 8-parameter tool with a rich schema, output schema, and strong annotations, the description is sufficient: it states the resource, scope, bounds, and sibling alternatives. The schema covers the remaining parameter mechanics, and the output schema removes the need to describe return values. Nothing an agent needs to decide when to call this tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

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 top-level description adds a small layer of meaning by explaining that the tool is appropriate when memory items fit 'within max_items and max_tokens', connecting those parameters to the tool's bounded-pack purpose. It doesn't repeat schema details, but provides selection-level context for the key bounds.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Build') with a clear resource ('read-only, bounded context pack from multiple relevant memories'). It distinguishes itself from siblings by explicitly naming recall and search_memory, so an agent knows this is the multi-memory bounded-pack tool, not the quick-lookup or strict-match tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit when-to-use: 'when an answer needs several memory items within max_items and max_tokens'. It also names the two alternatives and their distinguishing conditions: 'use recall for a quick forgiving lookup or search_memory for strict targeted matching'. This is exactly the routing guidance needed.

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. create_project is a deprecated ordinary-client compatibility input; model-routed project creation belongs to project(entity='project', action='create'). Use Ledger, not generic memory, for financial records.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYesA simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel.
contentYesText body to save, such as a memory, TODO/action item, event note, or state summary.
create_projectNoCreate a missing formal project from a valid Projects / <Project Name> path. Defaults to false; enable only when the user explicitly asks.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses that existing Projects paths attach automatically, which is not evident from annotations. Also flags create_project as deprecated compatibility input and clarifies proper routing. Annotations already establish read/write and destructiveness hints, so the description adds qualitative behavior beyond those.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, first sentence states purpose, second adds a behavioral detail, third contains two routing caveats. No redundant fluff; all information is actionable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists and annotations provide safety hints, the description effectively covers purpose, exclusions, parameter nuances, and routing alternatives. It is sufficient for an agent to decide when to invoke and how to use correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers 100%, but description adds meaning to create_project by labeling it 'deprecated ordinary-client compatibility input' and directing to project tool. Also notes automatic attachment for Projects paths, which clarifies the path parameter's behavior.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening phrase 'Save durable information for future recall' clearly identifies the tool's function. It distinguishes itself from transient chat and from Ledger for financial records, and mentions project creation routing, separating it from the project tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to skip transient chat, provides an alternative for financial records (Ledger), and clarifies that project creation should be routed to project(entity='project', action='create') rather than using create_project. This goes beyond merely implying usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

restore_memoryRestore XMemo memoryAInspect

Restore a previously deleted memory. Call this only when the user explicitly asks to restore or undo a deletion.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNoOptional user-facing reason for the deletion.
memory_idYesExact XMemo memory reference shown by search or recall.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds a key behavioral constraint ('previously deleted memory') and clarifies the intent ('undo a deletion'), which goes beyond the sparse annotations. However, it does not disclose potential error conditions, whether the operation is reversible, or what happens if the memory is already restored. With no meaningful annotations, the description carries the burden but remains thin on side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences: the first states the action, the second provides a usage condition. It is front-loaded, contains no redundant information, and every word earns its place. This is a model of concise, well-structured documentation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with a clear schema and output schema available, the description is largely sufficient. It explains the precondition and the exact trigger for use. It falls slightly short by not mentioning error scenarios or edge cases, but given the low complexity, this is a minor gap rather than a critical omission.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage with descriptions for both parameters: 'reason' and 'memory_id'. The description does not add any parameter-specific information, so it neither enhances nor detracts from the schema. Baseline of 3 is appropriate given the schema already fully documents the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Restore a previously deleted memory.' It specifies the resource (memory) and the action (restore), and distinguishes itself from siblings like 'forget' (deletion) and 'recall'/'search_memory' (retrieval). The title reinforces this but the description adds the 'previously deleted' qualifier, making the scope explicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The second sentence provides explicit guidance: 'Call this only when the user explicitly asks to restore or undo a deletion.' This directly tells the agent when to use the tool, and the 'only when' phrase acts as an exclusion for all other scenarios. It effectively communicates the when and when-not, leaving no ambiguity about alternative use cases.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_memorySearch XMemo memoriesA
Read-onlyIdempotent
Inspect

Search XMemo memories with strong-match semantics. Use it for a targeted lookup where weak matches must not be returned as answers; use recall for forgiving best-effort retrieval or recall_context for a bounded multi-memory context pack. To delete a memory, use forget.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return.
queryYesNatural-language question or search text.
sinceNoRFC 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.
untilNoRFC 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.
query_modeNoOptional 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.
time_orderNoSort 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.
hypothetical_answerNoInput value for the Search Memory tool.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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 safe read-only nature is covered. The description adds meaningful behavioral context beyond annotations by disclosing strong-match semantics and the fact that weak matches must not be surfaced as answers. This helps an agent predict strictness of retrieval behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three concise sentences with no filler. The primary purpose and matching semantics are front-loaded, followed by sibling routing and a deletion pointer. Every sentence earns its place and directly supports correct tool selection and invocation.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's seven-parameter complexity, the rich parameter descriptions in the schema, and the presence of an output schema, the description covers the essential selection and behavioral context. It identifies the core semantic distinction, names alternatives, and flags sibling tools. A small gap: it does not summarize the time-window or query-mode behaviors, but those are thoroughly explained in the schema parameter descriptions.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema itself fully documents all seven parameters, including triggers and model responsibilities for since, until, query_mode, and time_order. The description does not add parameter-level meaning beyond the schema, but it does not need to because the schema already carries that burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource ('Search XMemo memories') and clarifies the core semantic: strong-match, targeted lookup where weak matches must not be returned. It also names recall, recall_context, and forget as distinct sibling tools, so the agent can immediately tell this tool apart from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says when to use this tool: targeted lookup requiring strong matches. It also gives exact alternatives: use recall for forgiving best-effort retrieval, recall_context for a bounded multi-memory context pack, and forget for deletion. This gives clear routing guidance with no need for inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

todoManage XMemo TODOsA
Destructive
Inspect

Create, update, complete, list, or bulk soft-delete authorized TODOs. For action='list', provide the user's real IANA owner_timezone or use a saved owner profile timezone so due dates are honest. Use delete_all only after explicit user confirmation and pass confirm_delete_all=true; it clears every matching TODO and is recoverable. Delete one with forget(target=).

ParametersJSON Schema
NameRequiredDescriptionDefault
noteNoCompletion note or bulk-delete reason.
limitNoList page size.
queryNoCompatibility alias for list search.
scopeNoAuthorized scope.
titleNoMust equal content when both are set.
actionYesOperation.
bucketNoMemory bucket.
cursorNoList cursor.
due_atNoISO 8601 due time.
searchNoList title/content search.
statusNoUpdate status.
contentNoMust equal title when both are set.
todo_idNoTarget TODO ID.
priorityNohigh, medium, or low.
due_beforeNoList due-time ceiling.
project_idNoAuthorized project ID.
item_statusNoList status filter.
metadata_jsonNoCreate metadata JSON.
owner_timezoneNoThe user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC.
expected_versionNoRequired current version for update.
client_mutation_idNoMutation replay key (1-128 chars).
confirm_delete_allNoTrue confirms delete_all.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses behaviors such as the need for confirmation for delete_all, that deletions are recoverable (soft-delete), and that list actions need proper timezone to avoid misleading due dates. This adds transparency beyond the annotations (readOnlyHint=false, destructiveHint=true) by clarifying the nature of deletion and listing behavior. However, it doesn't mention idempotency or other potential edge cases, but given annotations and schema, 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.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact but covers essential points: the actions, the timezone requirement for list, and the confirmation for delete_all. It is front-loaded with the verb (Create, update...). However, it could be slightly more organized by separating the different action-specific guidance, but it's acceptably concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (22 params, 5 actions) and the presence of output schema, the description covers the most critical usage scenarios: it highlights timezone for list, confirmation for delete_all, and that delete is soft/recoverable. It doesn't explain returns or all actions in detail, but the output schema and the schema's per-parameter descriptions cover much. The description adds essential context for the less obvious aspects, making it fairly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage for parameters, so the baseline is 3. The description adds value by explaining the purpose of `owner_timezone` (honest due dates) and `confirm_delete_all` (explicit confirmation for delete_all). It also hints at relationships between action and required params via conditional schema. The description goes beyond the schema by explaining the context for these parameters, so a 4 is warranted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the tool performs 'Create, update, complete, list, or bulk soft-delete authorized TODOs' with specific verbs and resources. It clearly covers the main actions and differentiates from siblings like open_todo_board or ledger by focusing on CRUD operations for TODOs.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: for action='list' it instructs to provide the user's real IANA owner_timezone or use a saved owner profile timezone to ensure honest due dates. It also specifies that delete_all should only be used after explicit user confirmation and requires confirm_delete_all=true. These are clear usage directives beyond what the schema states.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_memoryUpdate XMemo memoryA
Destructive
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNoA simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel.
contentNoText body to save, such as a memory, TODO/action item, event note, or state summary.
memory_idYesExact XMemo memory reference shown by search or recall.
memory_typeNoOptional memory type/category for user-facing updates, such as semantic, episodic, or procedural.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true and readOnlyHint=false, setting the safety baseline. The description adds useful context about the need for an exact reference and the updatable aspects, but it does not explain side effects like partial vs. full replacement, handling of non-existent IDs, or whether all optional fields default behavior. Thus it adds some value beyond annotations but not extensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: two sentences, no filler, and front-loaded with the action and resource. It covers the purpose and the key constraint (exact reference) without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating tool with an output schema and annotations, the description is reasonably complete: it explains the trigger, the aspects updated, and the need for an exact reference. However, with many sibling tools including project_workspace_memory_update, it does not explicitly distinguish from that potentially similar tool, which could cause confusion in selection. The description is adequate but not exhaustive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions already cover 100% of the four parameters with detailed explanations. The description's mention of 'content, location, or type' maps to the content, path, and memory_type parameters, reinforcing the schema but not adding new semantics. The baseline for full schema coverage is 3, and no additional parameter insight is provided.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool updates a specific saved memory, with a specific verb ('Updates') and resource ('saved memory'). It specifies the scope (content, location, or type) and the trigger (user asks to correct, revise, move, or reclassify), distinguishing it from create/delete/read siblings like 'remember', 'forget', and 'search_memory'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool ('when the user asks to correct, revise, move, or reclassify it') and notes that an exact reference identifies the record, implying that memory_id is required and likely obtained from prior search/recall. It does not explicitly name alternatives or exclusions, but the context is sufficient for most cases.

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. Dates show when Glama detected each change.

  1. 5 tool updates
    • Changedanalyze_memory_text2 fields changed
      • changedInput schema / properties / since / description
        Previous 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."
      • changedInput schema / properties / until / description
        Previous 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."
    • Changedmemory_overview2 fields changed
      • changedInput schema / properties / since / description
        Previous 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."
      • changedInput schema / properties / until / description
        Previous 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."
    • Changedrecall5 fields changed
      • addedInput schema / properties / hypothetical_answer
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Recall tool.",
        +  "title": "Hypothetical Answer",
        +  "type": "string"
        +}
      • addedInput schema / properties / query_mode
        Added 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"
        +}
      • addedInput schema / properties / since
        Added 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"
        +}
      • addedInput schema / properties / time_order
        Added 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"
        +}
      • addedInput schema / properties / until
        Added 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"
        +}
    • Changedrecall_context5 fields changed
      • addedInput schema / properties / hypothetical_answer
        Added value: +{
        +  "default": "",
        +  "description": "Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query.",
        +  "type": "string"
        +}
      • addedInput schema / properties / query_mode
        Added 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"
        +}
      • addedInput schema / properties / since
        Added 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"
        +}
      • addedInput schema / properties / time_order
        Added 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"
        +}
      • addedInput schema / properties / until
        Added 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"
        +}
    • Changedsearch_memory5 fields changed
      • addedInput schema / properties / hypothetical_answer
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Search Memory tool.",
        +  "title": "Hypothetical Answer",
        +  "type": "string"
        +}
      • addedInput schema / properties / query_mode
        Added 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"
        +}
      • addedInput schema / properties / since
        Added 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"
        +}
      • addedInput schema / properties / time_order
        Added 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"
        +}
      • addedInput schema / properties / until
        Added 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"
        +}
  2. 3 tool updates
    • Changedledger24 fields changed
      • removedInput schema / properties / account_hint
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Account Hint",
        -  "type": "string"
        -}
      • removedInput schema / properties / account_label
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Account Label",
        -  "type": "string"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_expense",
        -  "list",
        -  "summary",
        -  "overview",
        -  "update_transaction",
        -  "subscription_create",
        -  "subscription_edit",
        -  "subscription_transition"
        -]New value: +[
        +  "add_expense",
        +  "list",
        +  "summary",
        +  "overview",
        +  "update_transaction"
        +]
      • removedInput schema / properties / amount_mode
        Removed value: -{
        -  "default": "fixed",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Amount Mode",
        -  "type": "string"
        -}
      • removedInput schema / properties / as_of
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "As Of",
        -  "type": "string"
        -}
      • removedInput schema / properties / cadence
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Cadence",
        -  "type": "string"
        -}
      • removedInput schema / properties / current_period_started_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Current Period Started On",
        -  "type": "string"
        -}
      • changedInput schema / properties / description / description
        Previous value: -"Input value for the Ledger tool."New value: +"Project description for project/create."
      • removedInput schema / properties / ended_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Ended On",
        -  "type": "string"
        -}
      • removedInput schema / properties / expected_amount
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Expected Amount",
        -  "type": "string"
        -}
      • removedInput schema / properties / interval_count
        Removed value: -{
        -  "default": 1,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Interval Count",
        -  "type": "integer"
        -}
      • removedInput schema / properties / interval_unit
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Interval Unit",
        -  "type": "string"
        -}
      • removedInput schema / properties / next_charge_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Next Charge On",
        -  "type": "string"
        -}
      • removedInput schema / properties / notes
        Removed value: -{
        -  "default": "",
        -  "description": "Freeform notes explaining recall feedback or corrections.",
        -  "title": "Notes",
        -  "type": "string"
        -}
      • changedInput schema / properties / patch / description
        Previous value: -"Input value for the Ledger tool."New value: +"Memory/update alias: content and/or tags."
      • removedInput schema / properties / plan_name
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Plan Name",
        -  "type": "string"
        -}
      • removedInput schema / properties / plan_tier
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Plan Tier",
        -  "type": "string"
        -}
      • removedInput schema / properties / renewal_mode
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Renewal Mode",
        -  "type": "string"
        -}
      • removedInput schema / properties / review_lead_days
        Removed value: -{
        -  "default": 0,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Review Lead Days",
        -  "type": "integer"
        -}
      • removedInput schema / properties / review_todo_opt_in
        Removed value: -{
        -  "default": false,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Review Todo Opt In",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / service_key
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Service Key",
        -  "type": "string"
        -}
      • removedInput schema / properties / service_name
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Service Name",
        -  "type": "string"
        -}
      • removedInput schema / properties / subscription_id
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Subscription Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / subscription_status
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Subscription Status",
        -  "type": "string"
        -}
    • Changedproject2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / title / description
        Previous value: -"Title for decision/document/conversation mutations."New value: +"Title for decision, document, or conversation mutations."
    • Changedrecall_context1 field changed
      • changedInput schema / properties / max_tokens / default
        Previous value: -1500New value: +8000
  3. 3 tool updates
    • Changedledger24 fields changed
      • addedInput schema / properties / account_hint
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Account Hint",
        +  "type": "string"
        +}
      • addedInput schema / properties / account_label
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Account Label",
        +  "type": "string"
        +}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_expense",
        -  "list",
        -  "summary",
        -  "overview",
        -  "update_transaction"
        -]New value: +[
        +  "add_expense",
        +  "list",
        +  "summary",
        +  "overview",
        +  "update_transaction",
        +  "subscription_create",
        +  "subscription_edit",
        +  "subscription_transition"
        +]
      • addedInput schema / properties / amount_mode
        Added value: +{
        +  "default": "fixed",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Amount Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / as_of
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "As Of",
        +  "type": "string"
        +}
      • addedInput schema / properties / cadence
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Cadence",
        +  "type": "string"
        +}
      • addedInput schema / properties / current_period_started_on
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Current Period Started On",
        +  "type": "string"
        +}
      • changedInput schema / properties / description / description
        Previous value: -"Project description for project/create."New value: +"Input value for the Ledger tool."
      • addedInput schema / properties / ended_on
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Ended On",
        +  "type": "string"
        +}
      • addedInput schema / properties / expected_amount
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Expected Amount",
        +  "type": "string"
        +}
      • addedInput schema / properties / interval_count
        Added value: +{
        +  "default": 1,
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Interval Count",
        +  "type": "integer"
        +}
      • addedInput schema / properties / interval_unit
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Interval Unit",
        +  "type": "string"
        +}
      • addedInput schema / properties / next_charge_on
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Next Charge On",
        +  "type": "string"
        +}
      • addedInput schema / properties / notes
        Added value: +{
        +  "default": "",
        +  "description": "Freeform notes explaining recall feedback or corrections.",
        +  "title": "Notes",
        +  "type": "string"
        +}
      • changedInput schema / properties / patch / description
        Previous value: -"Memory/update alias: content and/or tags."New value: +"Input value for the Ledger tool."
      • addedInput schema / properties / plan_name
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Plan Name",
        +  "type": "string"
        +}
      • addedInput schema / properties / plan_tier
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Plan Tier",
        +  "type": "string"
        +}
      • addedInput schema / properties / renewal_mode
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Renewal Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / review_lead_days
        Added value: +{
        +  "default": 0,
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Review Lead Days",
        +  "type": "integer"
        +}
      • addedInput schema / properties / review_todo_opt_in
        Added value: +{
        +  "default": false,
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Review Todo Opt In",
        +  "type": "boolean"
        +}
      • addedInput schema / properties / service_key
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Service Key",
        +  "type": "string"
        +}
      • addedInput schema / properties / service_name
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Service Name",
        +  "type": "string"
        +}
      • addedInput schema / properties / subscription_id
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Subscription Id",
        +  "type": "string"
        +}
      • addedInput schema / properties / subscription_status
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Ledger tool.",
        +  "title": "Subscription Status",
        +  "type": "string"
        +}
    • Changedproject2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / title / description
        Previous value: -"Title for decision, document, or conversation mutations."New value: +"Title for decision/document/conversation mutations."
    • Changedrecall_context1 field changed
      • changedInput schema / properties / max_tokens / default
        Previous value: -8000New value: +1500
  4. 2 tool updates
    • Changedledger22 fields changed
      • removedInput schema / properties / account_hint
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Account Hint",
        -  "type": "string"
        -}
      • removedInput schema / properties / account_label
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Account Label",
        -  "type": "string"
        -}
      • changedInput schema / properties / action / enum
        Previous value: -[
        -  "add_expense",
        -  "list",
        -  "summary",
        -  "overview",
        -  "update_transaction",
        -  "subscription_create",
        -  "subscription_edit",
        -  "subscription_transition"
        -]New value: +[
        +  "add_expense",
        +  "list",
        +  "summary",
        +  "overview",
        +  "update_transaction"
        +]
      • removedInput schema / properties / amount_mode
        Removed value: -{
        -  "default": "fixed",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Amount Mode",
        -  "type": "string"
        -}
      • removedInput schema / properties / as_of
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "As Of",
        -  "type": "string"
        -}
      • removedInput schema / properties / cadence
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Cadence",
        -  "type": "string"
        -}
      • removedInput schema / properties / current_period_started_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Current Period Started On",
        -  "type": "string"
        -}
      • removedInput schema / properties / ended_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Ended On",
        -  "type": "string"
        -}
      • removedInput schema / properties / expected_amount
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Expected Amount",
        -  "type": "string"
        -}
      • removedInput schema / properties / interval_count
        Removed value: -{
        -  "default": 1,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Interval Count",
        -  "type": "integer"
        -}
      • removedInput schema / properties / interval_unit
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Interval Unit",
        -  "type": "string"
        -}
      • removedInput schema / properties / next_charge_on
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Next Charge On",
        -  "type": "string"
        -}
      • removedInput schema / properties / notes
        Removed value: -{
        -  "default": "",
        -  "description": "Freeform notes explaining recall feedback or corrections.",
        -  "title": "Notes",
        -  "type": "string"
        -}
      • removedInput schema / properties / plan_name
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Plan Name",
        -  "type": "string"
        -}
      • removedInput schema / properties / plan_tier
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Plan Tier",
        -  "type": "string"
        -}
      • removedInput schema / properties / renewal_mode
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Renewal Mode",
        -  "type": "string"
        -}
      • removedInput schema / properties / review_lead_days
        Removed value: -{
        -  "default": 0,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Review Lead Days",
        -  "type": "integer"
        -}
      • removedInput schema / properties / review_todo_opt_in
        Removed value: -{
        -  "default": false,
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Review Todo Opt In",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / service_key
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Service Key",
        -  "type": "string"
        -}
      • removedInput schema / properties / service_name
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Service Name",
        -  "type": "string"
        -}
      • removedInput schema / properties / subscription_id
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Subscription Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / subscription_status
        Removed value: -{
        -  "default": "",
        -  "description": "Input value for the Ledger tool.",
        -  "title": "Subscription Status",
        -  "type": "string"
        -}
    • Changedrecall_context1 field changed
      • changedInput schema / properties / max_tokens / default
        Previous value: -1500New value: +8000
  5. 2 tool updates
    • Changedledger2 fields changed
      • changedInput schema / properties / description / description
        Previous value: -"Input value for the Ledger tool."New value: +"Project description for project/create."
      • changedInput schema / properties / patch / description
        Previous value: -"Input value for the Ledger tool."New value: +"Memory/update alias: content and/or tags."
    • Changedproject2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • changedInput schema / properties / title / description
        Previous value: -"Title for decision/document/conversation mutations."New value: +"Title for decision, document, or conversation mutations."
  6. 12 tool updates
    • Removedledger_get_dashboard
    • Removedledger_get_subscriptions
    • Removedledger_subscription_mutate
    • Removedledger_update_transaction
    • Removedproject_workspace_conversation_mutate
    • Removedproject_workspace_decision_mutate
    • Removedproject_workspace_document_mutate
    • Removedproject_workspace_get_view
    • Removedproject_workspace_memory_set_review_due
    • Removedproject_workspace_memory_update
    • Removedproject_workspace_settings_save_preferences
    • Removedproject_workspace_todo_mutate
  7. 2 tool updates
    • Changedproject_workspace_document_mutate4 fields changed
      • addedInput schema / properties / content
        Added value: +{
        +  "default": "",
        +  "description": "Text body to save, such as a memory, TODO/action item, event note, or state summary.",
        +  "title": "Content",
        +  "type": "string"
        +}
      • addedInput schema / properties / content_base64
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Project Workspace Document Mutate tool.",
        +  "title": "Content Base64",
        +  "type": "string"
        +}
      • addedInput schema / properties / content_format
        Added value: +{
        +  "default": "markdown",
        +  "description": "Input value for the Project Workspace Document Mutate tool.",
        +  "title": "Content Format",
        +  "type": "string"
        +}
      • addedInput schema / properties / filename
        Added value: +{
        +  "default": "",
        +  "description": "Input value for the Project Workspace Document Mutate tool.",
        +  "title": "Filename",
        +  "type": "string"
        +}
    • Addedread_memory
  8. 2 tool updates
    • Changedget_project_summary3 fields changed
      • removedOutput schema / properties / generatedAt
        Removed value: -{
        -  "type": "string"
        -}
      • removedOutput schema / properties / requestId
        Removed value: -{
        -  "type": "string"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "schemaVersion",
        -  "requestId",
        -  "generatedAt",
        -  "project",
        -  "focus",
        -  "availability",
        -  "completeness",
        -  "freshness",
        -  "bullets",
        -  "domainCoverage",
        -  "errors"
        -]New value: +[
        +  "schemaVersion",
        +  "project",
        +  "focus",
        +  "availability",
        +  "completeness",
        +  "freshness",
        +  "bullets",
        +  "domainCoverage",
        +  "errors"
        +]
    • Changedopen_project_workspace17 fields changed
      • addedOutput schema / $defs / ProjectTabPageOutput / properties / generatedAt / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectTabPageOutput / properties / generatedAt / type
        Removed value: -"string"
      • addedOutput schema / $defs / ProjectTabPageOutput / properties / requestId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectTabPageOutput / properties / requestId / type
        Removed value: -"string"
      • changedOutput schema / $defs / ProjectTabPageOutput / required
        Previous value: -[
        -  "schemaVersion",
        -  "requestId",
        -  "generatedAt",
        -  "tab",
        -  "page",
        -  "providers"
        -]New value: +[
        +  "schemaVersion",
        +  "tab",
        +  "page",
        +  "providers"
        +]
      • addedOutput schema / $defs / ProjectWorkspaceOutput / properties / generatedAt / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectWorkspaceOutput / properties / generatedAt / type
        Removed value: -"string"
      • addedOutput schema / $defs / ProjectWorkspaceOutput / properties / requestId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectWorkspaceOutput / properties / requestId / type
        Removed value: -"string"
      • addedOutput schema / $defs / ProjectWorkspaceOutput / properties / snapshotId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectWorkspaceOutput / properties / snapshotId / type
        Removed value: -"string"
      • changedOutput schema / $defs / ProjectWorkspaceOutput / required
        Previous value: -[
        -  "schemaVersion",
        -  "requestId",
        -  "snapshotId",
        -  "generatedAt",
        -  "project",
        -  "activeTab",
        -  "tabManifest",
        -  "overview",
        -  "navigation",
        -  "sourceSummary"
        -]New value: +[
        +  "schemaVersion",
        +  "project",
        +  "activeTab",
        +  "tabManifest",
        +  "overview",
        +  "navigation",
        +  "sourceSummary"
        +]
      • addedOutput schema / $defs / ProjectWorkspacesHomeOutput / properties / generatedAt / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectWorkspacesHomeOutput / properties / generatedAt / type
        Removed value: -"string"
      • addedOutput schema / $defs / ProjectWorkspacesHomeOutput / properties / requestId / anyOf
        Added value: +[
        +  {
        +    "type": "string"
        +  },
        +  {
        +    "type": "null"
        +  }
        +]
      • removedOutput schema / $defs / ProjectWorkspacesHomeOutput / properties / requestId / type
        Removed value: -"string"
      • changedOutput schema / $defs / ProjectWorkspacesHomeOutput / required
        Previous value: -[
        -  "schemaVersion",
        -  "requestId",
        -  "generatedAt",
        -  "surface",
        -  "counts",
        -  "projects",
        -  "filters",
        -  "noMatch",
        -  "messageKey",
        -  "dataQuality",
        -  "errors"
        -]New value: +[
        +  "schemaVersion",
        +  "surface",
        +  "counts",
        +  "projects",
        +  "filters",
        +  "noMatch",
        +  "messageKey",
        +  "dataQuality",
        +  "errors"
        +]
  9. 1 tool update
    • Changedproject1 field changed
      • changedInput schema / properties / excerpt / description
        Previous value: -"Conversation excerpt for link or metadata update."New value: +"Short note for the link or metadata update, not a full transcript."
  10. 45 tool updates
    • Removedadd_expense
    • Addedanalyze_memory_text
    • Removedcomplete_memory_todo
    • Removedcreate_memory_todo
    • Changedexplain_memory3 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / include_embedding
        Removed value: -{
        -  "default": false,
        -  "description": "Whether to include embedding/vector metadata in the returned explanation.",
        -  "title": "Include Embedding",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / output_json
        Removed value: -{
        -  "default": false,
        -  "description": "Return a machine-readable JSON response instead of a human-readable summary.",
        -  "title": "Output Json",
        -  "type": "boolean"
        -}
    • Changedforget8 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • addedInput schema / properties / memory_id
        Added value: +{
        +  "default": "",
        +  "description": "Exact XMemo memory reference shown by search or recall.",
        +  "title": "Memory Id",
        +  "type": "string"
        +}
      • removedInput schema / properties / metadata_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string with extra metadata for the operation.",
        -  "title": "Metadata Json",
        -  "type": "string"
        -}
      • changedInput schema / properties / mode / default
        Previous value: -"hard"New value: +"soft"
      • changedInput schema / properties / mode / description
        Previous value: -"Deletion mode for forget_memory, such as soft_delete, hard_delete, or redact when supported."New 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."
      • addedInput schema / properties / mode / enum
        Added value: +[
        +  "soft",
        +  "soft_delete",
        +  "hard",
        +  "hard_delete"
        +]
      • removedInput schema / properties / query_hint
        Removed value: -{
        -  "anyOf": [
        -    {
        -      "type": "string"
        -    },
        -    {
        -      "type": "null"
        -    }
        -  ],
        -  "default": null,
        -  "description": "Input value for the Forget tool.",
        -  "title": "Query Hint"
        -}
      • removedInput schema / properties / replacement_content
        Removed value: -{
        -  "default": "",
        -  "description": "Replacement text to store when redacting or replacing deleted memory content.",
        -  "title": "Replacement Content",
        -  "type": "string"
        -}
    • Changedget_mcp_identity1 field changed
      • addedInput schema / additionalProperties
        Added value: +false
    • Removedget_monthly_ledger_summary
    • Removedget_project_context
    • Addedget_project_summary
    • Removedget_timeline
    • Addedledger
    • Addedledger_get_dashboard
    • Addedledger_get_subscriptions
    • Addedledger_subscription_mutate
    • Addedledger_update_transaction
    • Removedlist_ledger_transactions
    • Removedlist_memory_todos
    • Removedlist_memory_versions
    • Addedmemory_overview
    • Removedmemory_stats
    • Addedopen_ledger
    • Addedopen_project_workspace
    • Addedopen_todo_board
    • Addedproject
    • Addedproject_workspace_conversation_mutate
    • Addedproject_workspace_decision_mutate
    • Addedproject_workspace_document_mutate
    • Addedproject_workspace_get_view
    • Addedproject_workspace_memory_set_review_due
    • Addedproject_workspace_memory_update
    • Addedproject_workspace_settings_save_preferences
    • Addedproject_workspace_todo_mutate
    • Removedpropose_profile_mutation
    • Removedpropose_todo_mutation
    • Removedpropose_write
    • Changedrecall7 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / agent_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional client-supplied agent label for memory attribution.",
        -  "title": "Agent Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / agent_instance_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional stable, non-secret agent instance ID for per-client attribution.",
        -  "title": "Agent Instance Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / explain
        Removed value: -{
        -  "default": false,
        -  "description": "Whether to include retrieval explanation details with search or recall results.",
        -  "title": "Explain",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / memory_type
        Removed value: -{
        -  "default": "%",
        -  "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.",
        -  "title": "Memory Type",
        -  "type": "string"
        -}
      • removedInput schema / properties / path_filter
        Removed value: -{
        -  "default": "%",
        -  "description": "Memory path filter; % matches all paths.",
        -  "title": "Path Filter",
        -  "type": "string"
        -}
      • removedInput schema / properties / prefer_working
        Removed value: -{
        -  "default": false,
        -  "description": "Whether to prioritize working/session-state memories in retrieval.",
        -  "title": "Prefer Working",
        -  "type": "boolean"
        -}
    • Changedrecall_context20 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / agent_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional client-supplied agent label for memory attribution.",
        -  "title": "Agent Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / agent_instance_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional stable, non-secret agent instance ID for per-client attribution.",
        -  "title": "Agent Instance Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / bucket
        Removed 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"
        -}
      • removedInput schema / properties / limit
        Removed value: -{
        -  "default": 0,
        -  "description": "Maximum number of results to return.",
        -  "title": "Limit",
        -  "type": "integer"
        -}
      • changedInput schema / properties / max_items / description
        Previous value: -"Maximum number of memory items to include."New value: +"Maximum memories rendered in the context pack."
      • removedInput schema / properties / max_items / title
        Removed value: -"Max Items"
      • changedInput schema / properties / max_tokens / description
        Previous value: -"Approximate maximum response size."New value: +"Approximate token budget for the rendered context pack."
      • removedInput schema / properties / max_tokens / title
        Removed value: -"Max Tokens"
      • removedInput schema / properties / memory_type
        Removed value: -{
        -  "default": "auto",
        -  "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.",
        -  "title": "Memory Type",
        -  "type": "string"
        -}
      • removedInput schema / properties / output_json
        Removed value: -{
        -  "default": false,
        -  "description": "Return a machine-readable JSON response instead of a human-readable summary.",
        -  "title": "Output Json",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / path_filter
        Removed value: -{
        -  "default": "%",
        -  "description": "Memory path filter; % matches all paths.",
        -  "title": "Path Filter",
        -  "type": "string"
        -}
      • removedInput schema / properties / prefer_working
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to prioritize working/session-state memories in retrieval.",
        -  "title": "Prefer Working",
        -  "type": "boolean"
        -}
      • changedInput schema / properties / query / description
        Previous value: -"Natural-language question or search text."New value: +"Natural-language query used to rank memories for the context pack."
      • removedInput schema / properties / query / title
        Removed value: -"Query"
      • removedInput schema / properties / scope
        Removed value: -{
        -  "default": "",
        -  "description": "Optional scope that narrows memory access; leave blank for the token default.",
        -  "title": "Scope",
        -  "type": "string"
        -}
      • removedInput schema / properties / team_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional team/workspace identifier for team-scoped memory access.",
        -  "title": "Team Id",
        -  "type": "string"
        -}
      • removedInput schema / title
        Removed value: -"recall_contextArguments"
      • removedOutput schema / properties / result / title
        Removed value: -"Result"
      • removedOutput schema / title
        Removed value: -"recall_contextOutput"
    • Removedrecord_event
    • Changedremember19 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / agent_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional client-supplied agent label for memory attribution.",
        -  "title": "Agent Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / agent_instance_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional stable, non-secret agent instance ID for per-client attribution.",
        -  "title": "Agent Instance Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / bucket
        Removed 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"
        -}
      • removedInput schema / properties / confidence
        Removed 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"
        -}
      • addedInput schema / properties / create_project
        Added value: +{
        +  "default": false,
        +  "description": "Create a missing formal project from a valid Projects / <Project Name> path. Defaults to false; enable only when the user explicitly asks.",
        +  "title": "Create Project",
        +  "type": "boolean"
        +}
      • removedInput schema / properties / dedupe
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to check for and merge likely duplicate memories before saving.",
        -  "title": "Dedupe",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / device_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional client-supplied device identifier for attribution.",
        -  "title": "Device Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / device_label
        Removed value: -{
        -  "default": "",
        -  "description": "Optional human-readable device label for attribution.",
        -  "title": "Device Label",
        -  "type": "string"
        -}
      • removedInput schema / properties / embedding_json
        Removed value: -{
        -  "default": "",
        -  "description": "Optional JSON array or object containing a precomputed embedding; leave blank for normal use.",
        -  "title": "Embedding Json",
        -  "type": "string"
        -}
      • removedInput schema / properties / expires_at
        Removed value: -{
        -  "default": "",
        -  "description": "Optional ISO 8601 expiration timestamp for the memory.",
        -  "title": "Expires At",
        -  "type": "string"
        -}
      • removedInput schema / properties / importance
        Removed 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"
        -}
      • removedInput schema / properties / memory_id
        Removed value: -{
        -  "default": "",
        -  "description": "Exact XMemo memory reference shown by search or recall.",
        -  "title": "Memory Id",
        -  "type": "string"
        -}
      • removedInput schema / properties / memory_type
        Removed value: -{
        -  "default": "auto",
        -  "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.",
        -  "title": "Memory Type",
        -  "type": "string"
        -}
      • removedInput schema / properties / metadata_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string with extra metadata for the operation.",
        -  "title": "Metadata Json",
        -  "type": "string"
        -}
      • removedInput schema / properties / provenance_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string describing memory source, evidence, or attribution.",
        -  "title": "Provenance Json",
        -  "type": "string"
        -}
      • removedInput schema / properties / scope
        Removed value: -{
        -  "default": "",
        -  "description": "Optional scope that narrows memory access; leave blank for the token default.",
        -  "title": "Scope",
        -  "type": "string"
        -}
      • removedInput schema / properties / semantic_key
        Removed value: -{
        -  "default": "",
        -  "description": "Optional stable semantic key used to identify or upsert a memory concept.",
        -  "title": "Semantic Key",
        -  "type": "string"
        -}
      • removedInput schema / properties / team_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional team/workspace identifier for team-scoped memory access.",
        -  "title": "Team Id",
        -  "type": "string"
        -}
    • Changedrestore_memory2 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / metadata_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string with extra metadata for the operation.",
        -  "title": "Metadata Json",
        -  "type": "string"
        -}
    • Addedsearch_memory
    • Addedtodo
    • Changedupdate_memory16 fields changed
      • addedInput schema / additionalProperties
        Added value: +false
      • removedInput schema / properties / bucket
        Removed 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"
        -}
      • removedInput schema / properties / confidence
        Removed 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"
        -}
      • removedInput schema / properties / detect_conflicts
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to detect possible conflicts with existing memories during an update.",
        -  "title": "Detect Conflicts",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / expires_at
        Removed value: -{
        -  "default": "",
        -  "description": "Optional ISO 8601 expiration timestamp for the memory.",
        -  "title": "Expires At",
        -  "type": "string"
        -}
      • removedInput schema / properties / importance
        Removed 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"
        -}
      • changedInput schema / properties / memory_type / description
        Previous value: -"Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %."New value: +"Optional memory type/category for user-facing updates, such as semantic, episodic, or procedural."
      • removedInput schema / properties / merge_metadata
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to merge new metadata with existing metadata instead of replacing it.",
        -  "title": "Merge Metadata",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / merge_provenance
        Removed value: -{
        -  "default": true,
        -  "description": "Whether to merge new provenance with existing provenance instead of replacing it.",
        -  "title": "Merge Provenance",
        -  "type": "boolean"
        -}
      • removedInput schema / properties / metadata_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string with extra metadata for the operation.",
        -  "title": "Metadata Json",
        -  "type": "string"
        -}
      • removedInput schema / properties / provenance_json
        Removed value: -{
        -  "default": "{}",
        -  "description": "Optional JSON object string describing memory source, evidence, or attribution.",
        -  "title": "Provenance Json",
        -  "type": "string"
        -}
      • removedInput schema / properties / scope
        Removed value: -{
        -  "default": "",
        -  "description": "Optional scope that narrows memory access; leave blank for the token default.",
        -  "title": "Scope",
        -  "type": "string"
        -}
      • removedInput schema / properties / semantic_key
        Removed value: -{
        -  "default": "",
        -  "description": "Optional stable semantic key used to identify or upsert a memory concept.",
        -  "title": "Semantic Key",
        -  "type": "string"
        -}
      • removedInput schema / properties / status
        Removed value: -{
        -  "default": "",
        -  "description": "Memory status filter or update value, such as active, archived, deleted, or %.",
        -  "title": "Status",
        -  "type": "string"
        -}
      • removedInput schema / properties / supersession_reason
        Removed value: -{
        -  "default": "",
        -  "description": "Reason the updated memory supersedes older content.",
        -  "title": "Supersession Reason",
        -  "type": "string"
        -}
      • removedInput schema / properties / team_id
        Removed value: -{
        -  "default": "",
        -  "description": "Optional team/workspace identifier for team-scoped memory access.",
        -  "title": "Team Id",
        -  "type": "string"
        -}
    • Removedupdate_state
  11. 1 tool update
    • Changedforget1 field changed
      • changedInput schema / properties / mode / default
        Previous value: -"soft"New value: +"hard"
  12. 3 tool updates
    • Addedpropose_profile_mutation
    • Addedpropose_todo_mutation
    • Addedpropose_write
  13. 32 tool updates
    • Removedanalyze_memory_text
    • Removedcomplete_reminder
    • Removedcreate_pending_decision
    • Removedcreate_reminder
    • Removedcreate_restart_snapshot
    • Removeddelete_current_memory
    • Changedforget4 fields changed
      • addedInput schema / properties / metadata_json
        Added value: +{
        +  "default": "{}",
        +  "description": "Optional JSON object string with extra metadata for the operation.",
        +  "title": "Metadata Json",
        +  "type": "string"
        +}
      • addedInput schema / properties / mode
        Added value: +{
        +  "default": "soft",
        +  "description": "Deletion mode for forget_memory, such as soft_delete, hard_delete, or redact when supported.",
        +  "title": "Mode",
        +  "type": "string"
        +}
      • addedInput schema / properties / query_hint
        Added value: +{
        +  "anyOf": [
        +    {
        +      "type": "string"
        +    },
        +    {
        +      "type": "null"
        +    }
        +  ],
        +  "default": null,
        +  "description": "Input value for the Forget tool.",
        +  "title": "Query Hint"
        +}
      • addedInput schema / properties / replacement_content
        Added value: +{
        +  "default": "",
        +  "description": "Replacement text to store when redacting or replacing deleted memory content.",
        +  "title": "Replacement Content",
        +  "type": "string"
        +}
    • Removedforget_memory
    • Addedget_project_context
    • Removedget_recall_policy
    • Removedget_safety_policy
    • Removedget_system_stats
    • Removedlist_memory_conflicts
    • Removedlist_pending_decisions
    • Removedlist_reminders
    • Removedmark_memory_used
    • Removedmemory_activity
    • Removedmemory_overview
    • Removedquery_audit_events
    • Removedquery_consolidation_audit
    • Removedrecall_plan
    • Removedrecord_recall_eval_judgment
    • Removedrecord_recall_feedback
    • Removedredact_memory
    • Removedreflect
    • Removedresolve_decision
    • Removedresolve_memory_conflict
    • Removedrestore_restart_snapshot
    • Removedrun_lifecycle
    • Removedrun_recall_eval
    • Removedsearch_memory
    • Removedstore_memory

Frequently Asked Questions

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI agents to store and semantically retrieve durable memories across sessions via MCP or REST, with tools for remembering, recalling, asking, updating, and forgetting memories.
    11
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides a persistent, cross-tool memory layer for AI coding agents via MCP, enabling storage and retrieval of decisions, preferences, and context across different tools and models.
    6
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Governed shared memory platform for AI agents and agent fleets. Provides persistent memory, cross-agent knowledge sharing, permissions, audit trails, and multi-tenant isolation through a Model Context Protocol (MCP) server.
    4
    486
    Apache 2.0
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first, governable long-term memory for AI agents. Provides SQLite-backed storage, cross-session recall, and traceable memory corrections through a standard MCP interface.
    1
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

TDQS

A3.9/5.0
Disambiguation3/5

Multiple memory-retrieval tools (recall, search_memory, recall_context, read_memory, memory_overview) have overlapping purposes; detailed descriptions help but an agent could easily pick the wrong one. Similarly, ledger/open_ledger and todo/open_todo_board split text vs UI interaction, and forget overlaps with todo delete_all and ledger deletion.

Naming Consistency3/5

Most tools follow a verb_noun snake_case pattern (read_memory, update_memory, search_memory, open_ledger). However, several tools use bare nouns or verbs (forget, ledger, project, todo, recall, remember) and memory_overview is noun_noun, creating inconsistent conventions.

Tool Count3/5

19 tools is on the heavy side for the apparent scope, and the surface includes several pairs that duplicate the same domain in text vs UI form (ledger/open_ledger, todo/open_todo_board). Still, the count is defensible given the combined memory, project, TODO, and ledger coverage.

Completeness4/5

Memory has full lifecycle coverage (remember, read, search/recall, update, forget, restore), and TODO and Ledger workflows are largely complete. Minor gaps exist—no explicit project deletion and no pure text list-projects tool—but core workflows do not dead-end.