XMemo
Server Details
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
- 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 toolsanalyze_memory_textAnalyze XMemo memory textARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| since | No | 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. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). 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. | |
| phrase | Yes | Exact word or phrase to count across visible XMemo memories. | |
| group_by | No | Optional grouping: none, month, agent, location, memory_type, type, source, path, bucket, or day. | none |
| match_mode | No | How to match phrase: exact, case_insensitive, or regex_lite. | exact |
| max_examples | No | Maximum number of short snippets to include. | |
| include_examples | No | Whether to include a few short matching memory snippets. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 memoryARead-onlyIdempotentInspect
Explains why a memory exists or matched a query whenever the user asks why something was saved there or why it was retrieved.
| Name | Required | Description | Default |
|---|---|---|---|
| query | No | Natural-language question or search text. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, 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.
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.
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.
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.
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.
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 TODOADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Deletion mode: soft or soft_delete is the recoverable default; hard or hard_delete is permanent and unrecoverable and may be used only after explicit user confirmation. | soft |
| reason | No | Optional user-facing reason for the deletion. | |
| target | No | The memory to forget: current or an exact memory ID shown by search. | current |
| memory_id | No | Exact XMemo memory reference shown by search or recall. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=false, 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.
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.
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.
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.
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.
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 connectionARead-onlyIdempotentInspect
Checks XMemo connection status and the currently connected account/agent when the user asks whether XMemo is connected.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, 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.
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.
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.
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.
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.
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 summaryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| focus | No | Project summary focus: status, blockers, progress, next_actions, or work. | status |
| project_id | No | Optional project identifier to filter the Ledger or TODO workspace. |
Output Schema
| Name | Required | Description |
|---|---|---|
| focus | Yes | |
| errors | Yes | |
| bullets | Yes | |
| project | Yes | |
| headline | No | |
| freshness | Yes | |
| availability | Yes | |
| completeness | Yes | |
| schemaVersion | Yes | |
| domainCoverage | Yes |
TDQS
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.
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.
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.
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.
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.
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 LedgerADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| item | No | The purchased item or service, for example 2 watermelons or Nintendo Switch 2. | |
| note | No | Optional completion note. | |
| path | No | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | finance/ledger/expenses |
| limit | No | Maximum number of results to return. | |
| patch | No | Memory/update alias: content and/or tags. | |
| query | No | Natural-language question or search text. | |
| scope | No | Optional scope that narrows memory access; leave blank for the token default. | |
| action | Yes | Usage action or audit-event action filter, depending on the tool. | |
| amount | No | Positive transaction amount as a number. | |
| bucket | No | Memory bucket or namespace to read from or write to; use % only for tools that support wildcard reads. | |
| months | No | Number of recent ledger months to summarize. | |
| offset | No | Number of matching records to skip for pagination. | |
| date_to | No | Only include ledger transactions on or before this YYYY-MM-DD date. | |
| team_id | No | Optional team/workspace identifier for team-scoped memory access. | |
| agent_id | No | Optional client-supplied agent label for memory attribution. | |
| category | No | Optional spending category, such as food, transport, or electronics. | |
| currency | No | Currency 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. | |
| merchant | No | Optional merchant or store name. | |
| date_from | No | Only include ledger transactions on or after this YYYY-MM-DD date. | |
| device_id | No | Optional client-supplied device identifier for attribution. | |
| max_amount | No | Only include ledger transactions with amount less than or equal to this value. | |
| min_amount | No | Only include ledger transactions with amount greater than or equal to this value. | |
| project_id | No | Optional project identifier to filter the Ledger or TODO workspace. | |
| description | No | Project description for project/create. | |
| output_json | No | Return a machine-readable JSON response instead of a human-readable summary. | |
| device_label | No | Optional human-readable device label for attribution. | |
| owner_timezone | No | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| payment_method | No | Optional payment method, such as card, cash, Alipay, or WeChat Pay. | |
| transaction_id | No | Input value for the Ledger tool. | |
| expected_version | No | Optimistic-concurrency version read from the current record; a stale value is rejected with VERSION_CONFLICT. | |
| transaction_date | No | Transaction date in YYYY-MM-DD. Leave blank to use today's UTC date. | |
| transaction_type | No | Optional ledger type filter: expense, income, refund, or transfer. | |
| agent_instance_id | No | Optional stable, non-secret agent instance ID for per-client attribution. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 overviewARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| since | No | 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. | |
| top_n | No | Maximum number of aggregate groups to return. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). 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. | |
| section | No | Input value for the Memory Overview tool. | overview |
| group_by | No | Optional grouping: none, month, agent, location, memory_type, type, source, path, bucket, or day. | |
| memory_type | No | Optional memory type/category for user-facing updates, such as semantic, episodic, or procedural. | % |
| activity_type | No | Activity filter: all, writes, deletions, restorations, reads, reminders, ledger, or timeline. | all |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description 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.
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.
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.
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.
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.
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 LedgerARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| view | No | Ledger workspace mode: overview for transactions and Net flow, or subscriptions (compatibility value) for external-service renewal reminders. | overview |
| period | No | Ledger period preset: current_month, previous_month, last_3_months, last_6_months, year_to_date, or custom. | current_month |
| search | No | Optional title search query for the board. | |
| date_to | No | Only include ledger transactions on or before this YYYY-MM-DD date. | |
| category | No | Optional spending category, such as food, transport, or electronics. | |
| currency | No | Currency 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_from | No | Only include ledger transactions on or after this YYYY-MM-DD date. | |
| project_id | No | Optional project identifier to filter the Ledger or TODO workspace. | |
| owner_timezone | Yes | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| transaction_type | No | Optional ledger type filter: expense, income, refund, or transfer. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 WorkspaceARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| project | No | Natural-language project name or alias; resolved only within your authorized projects, never a global search. | |
| project_id | No | Optional project identifier to filter the Ledger or TODO workspace. | |
| initial_tab | No | Project 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_mode | No | Post-authorization presentation policy: focused on this project, or all_authorized sources. | focused |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint=true, idempotentHint=true, destructiveHint=false), the description 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.
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.
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.
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.
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.
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 BoardARead-onlyIdempotentInspect
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=).
| Name | Required | Description | Default |
|---|---|---|---|
| cursor | No | Opaque cursor for loading the next TODO Board page. | |
| search | No | Optional title search query for the board. | |
| due_range | No | Optional due-date range: overdue, today, this_week, later, or none. | |
| project_id | No | Optional project identifier to filter the Ledger or TODO workspace. | |
| source_filter | No | Optional source filter for the board. | |
| status_filter | No | Optional status filter for the board. | |
| owner_timezone | Yes | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| assignee_filter | No | Optional assignee or creator filter for the board. |
Output Schema
| Name | Required | Description |
|---|---|---|
| focus | Yes | |
| counts | Yes | |
| cursor | Yes | |
| columns | Yes | |
| filters | Yes | |
| project | Yes | |
| summary | Yes | |
| surface | Yes | |
| pinnedItems | Yes | |
| globalCounts | Yes | |
| activeFilters | Yes | |
| filteredCounts | Yes | |
| availableActions | Yes | |
| relationReadAvailable | Yes |
TDQS
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.
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.
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.
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.
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.
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 projectADestructiveInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| uri | No | HTTPS document URL for document/link. | |
| name | No | Required display name for project/create. | |
| tags | No | Replacement memory tags for memory/update; max 20. | |
| patch | No | Memory/update alias: content and/or tags; dual values must match. | |
| title | No | Title for decision, document, or conversation mutations. | |
| action | Yes | Operation valid for the selected entity. | |
| entity | Yes | Project resource family to mutate. | |
| content | No | Replacement memory content for memory/update. | |
| context | No | Required context for decision/create. | |
| excerpt | No | Short note for the link or metadata update, not a full transcript. | |
| options | No | Decision options for create or supersede. | |
| decision | No | Optional decision statement for create. | |
| provider | No | Provider name for document/conversation link. | |
| timezone | No | Settings IANA timezone; empty clears. | |
| rationale | No | Decision rationale for create. | |
| memory_ref | No | Exact memory:<id> for memory mutations. | |
| project_id | No | Exact authorized project ID; omit only for project/create. | |
| resolution | No | Resolution text for decision/resolve. | |
| default_tab | No | Settings tab: overview, memory, todo, decisions, documents, conversations, timeline, or settings. | |
| description | No | Optional project/create description; max 2000 characters. | |
| new_context | No | Replacement context for decision/supersede. | |
| occurred_at | No | Conversation time in ISO 8601. | |
| access_state | No | set_availability value: available, unavailable, or revoked. | |
| date_display | No | Settings date format: locale or iso. | |
| decision_ref | No | Decision ref for resolve, reopen, or supersede. | |
| project_tags | No | Document tags for link or metadata update. | |
| provider_ref | No | Provider-native ref for document/conversation link. | |
| source_label | No | Document source label for link or metadata update. | |
| resource_type | No | document/link; omitted means document; otherwise rejected. | |
| review_due_at | No | ISO 8601 time with timezone for memory/set_review_due; empty clears. | |
| expected_version | No | Current record version for edits; stale writes fail. | |
| resource_link_ref | No | Document ref for edit, availability, or unlink. | |
| client_mutation_id | No | Replay key (1-128 chars) for idempotent writes. | |
| linked_entity_refs | No | Conversation-linked public refs (not project IDs); each starts memory:, decision:, todo:, prl-, pcl-, or pwp-. | |
| default_source_mode | No | Settings source mode: focused or all_authorized. | |
| conversation_link_ref | No | Conversation ref for edit, availability, or unlink. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ok | Yes | |
| record | Yes | |
| changes | No | |
| staleTabs | No |
TDQS
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.
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.
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.
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.
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.
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 MemoryARead-onlyIdempotentInspect
Read one exact authorized XMemo memory in character windows. Use a memory ID returned by recall or search, then continue long content with next_offset. Embeddings are never returned.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum content characters in this page; defaults to 4000. | |
| offset | No | Zero-based character offset into this memory's content; defaults to 0. | |
| memory_id | Yes | Exact XMemo memory reference returned by recall or search. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
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.
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.
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.
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.
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.
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 memoryARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| query | Yes | Natural-language question or search text. | |
| since | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). 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. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). 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_mode | No | 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. | |
| time_order | No | 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. | |
| hypothetical_answer | No | Input value for the Recall tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=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.
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.
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.
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.
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.
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 contextARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Natural-language query used to rank memories for the context pack. | |
| since | No | 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. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). 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_items | No | Maximum memories rendered in the context pack. | |
| max_tokens | No | Approximate token budget for the rendered context pack. | |
| query_mode | No | Optional query intent: 'topic' (default) or 'activity_log'. 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_order | No | 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. | |
| hypothetical_answer | No | Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, 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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | |
| content | Yes | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| create_project | No | Create a missing formal project from a valid Projects / <Project Name> path. Defaults to false; enable only when the user explicitly asks. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| reason | No | Optional user-facing reason for the deletion. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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.
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.
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.
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.
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.
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 memoriesARead-onlyIdempotentInspect
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| query | Yes | Natural-language question or search text. | |
| since | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). 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. | |
| until | No | RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). 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_mode | No | 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. | |
| time_order | No | 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. | |
| hypothetical_answer | No | Input value for the Search Memory tool. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=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.
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.
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.
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.
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.
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 TODOsADestructiveInspect
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=).
| Name | Required | Description | Default |
|---|---|---|---|
| note | No | Completion note or bulk-delete reason. | |
| limit | No | List page size. | |
| query | No | Compatibility alias for list search. | |
| scope | No | Authorized scope. | |
| title | No | Must equal content when both are set. | |
| action | Yes | Operation. | |
| bucket | No | Memory bucket. | |
| cursor | No | List cursor. | |
| due_at | No | ISO 8601 due time. | |
| search | No | List title/content search. | |
| status | No | Update status. | |
| content | No | Must equal title when both are set. | |
| todo_id | No | Target TODO ID. | |
| priority | No | high, medium, or low. | |
| due_before | No | List due-time ceiling. | |
| project_id | No | Authorized project ID. | |
| item_status | No | List status filter. | |
| metadata_json | No | Create metadata JSON. | |
| owner_timezone | No | The user's real IANA timezone, such as Asia/Tokyo or America/Los_Angeles. Required for honest calendar periods; never guess UTC. | |
| expected_version | No | Required current version for update. | |
| client_mutation_id | No | Mutation replay key (1-128 chars). | |
| confirm_delete_all | No | True confirms delete_all. |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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 memoryADestructiveInspect
Updates the content, location, or type of a specific saved memory when the user asks to correct, revise, move, or reclassify it. An exact reference identifies the record.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | A simple user-facing category or path for this memory, such as preferences, projects/xmemo, or personal/travel. | |
| content | No | Text body to save, such as a memory, TODO/action item, event note, or state summary. | |
| memory_id | Yes | Exact XMemo memory reference shown by search or recall. | |
| memory_type | No | Optional memory type/category for user-facing updates, such as semantic, episodic, or procedural. |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and readOnlyHint=false, 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.
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.
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.
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.
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.
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.
5 tool updates
- Changed
analyze_memory_text2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"Only include memories or activity on or after this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"Only include memories or activity on or before this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
memory_overview2 fields changed- changed
Input schema / properties / since / descriptionPrevious value: -"Only include memories or activity on or after this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates." - changed
Input schema / properties / until / descriptionPrevious value: -"Only include memories or activity on or before this ISO 8601 timestamp."New value: +"RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically."
- Changed
recall5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Input value for the Recall tool.", + "title": "Hypothetical Answer", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "title": "Query Mode", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "title": "Since", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "title": "Time Order", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "title": "Until", + "type": "string" +}
- Changed
recall_context5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Optional multilingual hypothetical answer or dense semantic expansion written by the calling LLM for this query.", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "type": "string" +}
- Changed
search_memory5 fields changed- added
Input schema / properties / hypothetical_answerAdded value: +{ + "default": "", + "description": "Input value for the Search Memory tool.", + "title": "Hypothetical Answer", + "type": "string" +} - added
Input schema / properties / query_modeAdded value: +{ + "default": "", + "description": "Optional query intent: 'topic' (default) or 'activity_log'. Trigger: Set 'activity_log' for event feeds within a bounded [since, until) window; set 'topic' for topic retrieval. Model responsibility: 'activity_log' requires explicit bounded 'since' and 'until' timestamps. Consequence: 'activity_log' without bounds fails closed; explicit 'topic' blocks stream bypass.", + "title": "Query Mode", + "type": "string" +} - added
Input schema / properties / sinceAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-01T00:00:00+09:00'). Trigger: Call this whenever the user query mentions any relative or absolute time constraint (今天/今日/昨天/昨日/前天/上周/8月1日/8月10日到9月1日/最近...). Model responsibility: You (the calling LLM) know current date and user local time, so you must convert natural language time expressions into absolute timestamps. Consequence: If omitted, the server falls back to heuristic guessing which may misinterpret timezone day boundaries or relative dates.", + "title": "Since", + "type": "string" +} - added
Input schema / properties / time_orderAdded value: +{ + "default": "", + "description": "Sort order for returned memories: 'desc' (newest first) or 'asc' (oldest first). Trigger: Pass 'desc' when the user asks for 'latest', 'recent', '从新到旧', or timeline recency, or 'asc' for chronological order. Model responsibility: Explicitly set desired temporal ordering when the user expresses recency intent. If omitted and since/until are omitted, default relevance ranking is used without temporal sorting.", + "title": "Time Order", + "type": "string" +} - added
Input schema / properties / untilAdded value: +{ + "default": "", + "description": "RFC 3339 timestamp with timezone offset (e.g., '2026-09-02T00:00:00+09:00'). When used with since, defines the half-open interval [since, until) with until > since (maximum 90 days span). Trigger: Pass when the user query specifies an end date or bounded window (e.g., 昨天 end of day, 截至8月10日, 8月10日到9月1日). Model responsibility: Convert natural language end bounds into absolute timestamps with timezone offsets. Consequence: If omitted, the window is open-ended on the upper side or derived heuristically.", + "title": "Until", + "type": "string" +}
3 tool updates
- Changed
ledger24 fields changed- removed
Input schema / properties / account_hintRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Hint", - "type": "string" -} - removed
Input schema / properties / account_labelRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Label", - "type": "string" -} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction", - "subscription_create", - "subscription_edit", - "subscription_transition" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction" +] - removed
Input schema / properties / amount_modeRemoved value: -{ - "default": "fixed", - "description": "Input value for the Ledger tool.", - "title": "Amount Mode", - "type": "string" -} - removed
Input schema / properties / as_ofRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "As Of", - "type": "string" -} - removed
Input schema / properties / cadenceRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Cadence", - "type": "string" -} - removed
Input schema / properties / current_period_started_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Current Period Started On", - "type": "string" -} - changed
Input schema / properties / description / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Project description for project/create." - removed
Input schema / properties / ended_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Ended On", - "type": "string" -} - removed
Input schema / properties / expected_amountRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Expected Amount", - "type": "string" -} - removed
Input schema / properties / interval_countRemoved value: -{ - "default": 1, - "description": "Input value for the Ledger tool.", - "title": "Interval Count", - "type": "integer" -} - removed
Input schema / properties / interval_unitRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Interval Unit", - "type": "string" -} - removed
Input schema / properties / next_charge_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Next Charge On", - "type": "string" -} - removed
Input schema / properties / notesRemoved value: -{ - "default": "", - "description": "Freeform notes explaining recall feedback or corrections.", - "title": "Notes", - "type": "string" -} - changed
Input schema / properties / patch / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Memory/update alias: content and/or tags." - removed
Input schema / properties / plan_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Name", - "type": "string" -} - removed
Input schema / properties / plan_tierRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Tier", - "type": "string" -} - removed
Input schema / properties / renewal_modeRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Renewal Mode", - "type": "string" -} - removed
Input schema / properties / review_lead_daysRemoved value: -{ - "default": 0, - "description": "Input value for the Ledger tool.", - "title": "Review Lead Days", - "type": "integer" -} - removed
Input schema / properties / review_todo_opt_inRemoved value: -{ - "default": false, - "description": "Input value for the Ledger tool.", - "title": "Review Todo Opt In", - "type": "boolean" -} - removed
Input schema / properties / service_keyRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Key", - "type": "string" -} - removed
Input schema / properties / service_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Name", - "type": "string" -} - removed
Input schema / properties / subscription_idRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Id", - "type": "string" -} - removed
Input schema / properties / subscription_statusRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Status", - "type": "string" -}
- Changed
project2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / title / descriptionPrevious value: -"Title for decision/document/conversation mutations."New value: +"Title for decision, document, or conversation mutations."
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -1500New value: +8000
3 tool updates
- Changed
ledger24 fields changed- added
Input schema / properties / account_hintAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Account Hint", + "type": "string" +} - added
Input schema / properties / account_labelAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Account Label", + "type": "string" +} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction", + "subscription_create", + "subscription_edit", + "subscription_transition" +] - added
Input schema / properties / amount_modeAdded value: +{ + "default": "fixed", + "description": "Input value for the Ledger tool.", + "title": "Amount Mode", + "type": "string" +} - added
Input schema / properties / as_ofAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "As Of", + "type": "string" +} - added
Input schema / properties / cadenceAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Cadence", + "type": "string" +} - added
Input schema / properties / current_period_started_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Current Period Started On", + "type": "string" +} - changed
Input schema / properties / description / descriptionPrevious value: -"Project description for project/create."New value: +"Input value for the Ledger tool." - added
Input schema / properties / ended_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Ended On", + "type": "string" +} - added
Input schema / properties / expected_amountAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Expected Amount", + "type": "string" +} - added
Input schema / properties / interval_countAdded value: +{ + "default": 1, + "description": "Input value for the Ledger tool.", + "title": "Interval Count", + "type": "integer" +} - added
Input schema / properties / interval_unitAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Interval Unit", + "type": "string" +} - added
Input schema / properties / next_charge_onAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Next Charge On", + "type": "string" +} - added
Input schema / properties / notesAdded value: +{ + "default": "", + "description": "Freeform notes explaining recall feedback or corrections.", + "title": "Notes", + "type": "string" +} - changed
Input schema / properties / patch / descriptionPrevious value: -"Memory/update alias: content and/or tags."New value: +"Input value for the Ledger tool." - added
Input schema / properties / plan_nameAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Plan Name", + "type": "string" +} - added
Input schema / properties / plan_tierAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Plan Tier", + "type": "string" +} - added
Input schema / properties / renewal_modeAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Renewal Mode", + "type": "string" +} - added
Input schema / properties / review_lead_daysAdded value: +{ + "default": 0, + "description": "Input value for the Ledger tool.", + "title": "Review Lead Days", + "type": "integer" +} - added
Input schema / properties / review_todo_opt_inAdded value: +{ + "default": false, + "description": "Input value for the Ledger tool.", + "title": "Review Todo Opt In", + "type": "boolean" +} - added
Input schema / properties / service_keyAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Service Key", + "type": "string" +} - added
Input schema / properties / service_nameAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Service Name", + "type": "string" +} - added
Input schema / properties / subscription_idAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Subscription Id", + "type": "string" +} - added
Input schema / properties / subscription_statusAdded value: +{ + "default": "", + "description": "Input value for the Ledger tool.", + "title": "Subscription Status", + "type": "string" +}
- Changed
project2 fields changed- removed
Input schema / additionalPropertiesRemoved value: -false - changed
Input schema / properties / title / descriptionPrevious value: -"Title for decision, document, or conversation mutations."New value: +"Title for decision/document/conversation mutations."
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -8000New value: +1500
2 tool updates
- Changed
ledger22 fields changed- removed
Input schema / properties / account_hintRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Hint", - "type": "string" -} - removed
Input schema / properties / account_labelRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Account Label", - "type": "string" -} - changed
Input schema / properties / action / enumPrevious value: -[ - "add_expense", - "list", - "summary", - "overview", - "update_transaction", - "subscription_create", - "subscription_edit", - "subscription_transition" -]New value: +[ + "add_expense", + "list", + "summary", + "overview", + "update_transaction" +] - removed
Input schema / properties / amount_modeRemoved value: -{ - "default": "fixed", - "description": "Input value for the Ledger tool.", - "title": "Amount Mode", - "type": "string" -} - removed
Input schema / properties / as_ofRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "As Of", - "type": "string" -} - removed
Input schema / properties / cadenceRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Cadence", - "type": "string" -} - removed
Input schema / properties / current_period_started_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Current Period Started On", - "type": "string" -} - removed
Input schema / properties / ended_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Ended On", - "type": "string" -} - removed
Input schema / properties / expected_amountRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Expected Amount", - "type": "string" -} - removed
Input schema / properties / interval_countRemoved value: -{ - "default": 1, - "description": "Input value for the Ledger tool.", - "title": "Interval Count", - "type": "integer" -} - removed
Input schema / properties / interval_unitRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Interval Unit", - "type": "string" -} - removed
Input schema / properties / next_charge_onRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Next Charge On", - "type": "string" -} - removed
Input schema / properties / notesRemoved value: -{ - "default": "", - "description": "Freeform notes explaining recall feedback or corrections.", - "title": "Notes", - "type": "string" -} - removed
Input schema / properties / plan_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Name", - "type": "string" -} - removed
Input schema / properties / plan_tierRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Plan Tier", - "type": "string" -} - removed
Input schema / properties / renewal_modeRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Renewal Mode", - "type": "string" -} - removed
Input schema / properties / review_lead_daysRemoved value: -{ - "default": 0, - "description": "Input value for the Ledger tool.", - "title": "Review Lead Days", - "type": "integer" -} - removed
Input schema / properties / review_todo_opt_inRemoved value: -{ - "default": false, - "description": "Input value for the Ledger tool.", - "title": "Review Todo Opt In", - "type": "boolean" -} - removed
Input schema / properties / service_keyRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Key", - "type": "string" -} - removed
Input schema / properties / service_nameRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Service Name", - "type": "string" -} - removed
Input schema / properties / subscription_idRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Id", - "type": "string" -} - removed
Input schema / properties / subscription_statusRemoved value: -{ - "default": "", - "description": "Input value for the Ledger tool.", - "title": "Subscription Status", - "type": "string" -}
- Changed
recall_context1 field changed- changed
Input schema / properties / max_tokens / defaultPrevious value: -1500New value: +8000
2 tool updates
- Changed
ledger2 fields changed- changed
Input schema / properties / description / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Project description for project/create." - changed
Input schema / properties / patch / descriptionPrevious value: -"Input value for the Ledger tool."New value: +"Memory/update alias: content and/or tags."
- Changed
project2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - changed
Input schema / properties / title / descriptionPrevious value: -"Title for decision/document/conversation mutations."New value: +"Title for decision, document, or conversation mutations."
12 tool updates
- Removed
ledger_get_dashboard - Removed
ledger_get_subscriptions - Removed
ledger_subscription_mutate - Removed
ledger_update_transaction - Removed
project_workspace_conversation_mutate - Removed
project_workspace_decision_mutate - Removed
project_workspace_document_mutate - Removed
project_workspace_get_view - Removed
project_workspace_memory_set_review_due - Removed
project_workspace_memory_update - Removed
project_workspace_settings_save_preferences - Removed
project_workspace_todo_mutate
2 tool updates
- Changed
project_workspace_document_mutate4 fields changed- added
Input schema / properties / contentAdded value: +{ + "default": "", + "description": "Text body to save, such as a memory, TODO/action item, event note, or state summary.", + "title": "Content", + "type": "string" +} - added
Input schema / properties / content_base64Added value: +{ + "default": "", + "description": "Input value for the Project Workspace Document Mutate tool.", + "title": "Content Base64", + "type": "string" +} - added
Input schema / properties / content_formatAdded value: +{ + "default": "markdown", + "description": "Input value for the Project Workspace Document Mutate tool.", + "title": "Content Format", + "type": "string" +} - added
Input schema / properties / filenameAdded value: +{ + "default": "", + "description": "Input value for the Project Workspace Document Mutate tool.", + "title": "Filename", + "type": "string" +}
- Added
read_memory
2 tool updates
- Changed
get_project_summary3 fields changed- removed
Output schema / properties / generatedAtRemoved value: -{ - "type": "string" -} - removed
Output schema / properties / requestIdRemoved value: -{ - "type": "string" -} - changed
Output schema / requiredPrevious value: -[ - "schemaVersion", - "requestId", - "generatedAt", - "project", - "focus", - "availability", - "completeness", - "freshness", - "bullets", - "domainCoverage", - "errors" -]New value: +[ + "schemaVersion", + "project", + "focus", + "availability", + "completeness", + "freshness", + "bullets", + "domainCoverage", + "errors" +]
- Changed
open_project_workspace17 fields changed- added
Output schema / $defs / ProjectTabPageOutput / properties / generatedAt / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectTabPageOutput / properties / generatedAt / typeRemoved value: -"string" - added
Output schema / $defs / ProjectTabPageOutput / properties / requestId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectTabPageOutput / properties / requestId / typeRemoved value: -"string" - changed
Output schema / $defs / ProjectTabPageOutput / requiredPrevious value: -[ - "schemaVersion", - "requestId", - "generatedAt", - "tab", - "page", - "providers" -]New value: +[ + "schemaVersion", + "tab", + "page", + "providers" +] - added
Output schema / $defs / ProjectWorkspaceOutput / properties / generatedAt / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectWorkspaceOutput / properties / generatedAt / typeRemoved value: -"string" - added
Output schema / $defs / ProjectWorkspaceOutput / properties / requestId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectWorkspaceOutput / properties / requestId / typeRemoved value: -"string" - added
Output schema / $defs / ProjectWorkspaceOutput / properties / snapshotId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectWorkspaceOutput / properties / snapshotId / typeRemoved value: -"string" - changed
Output schema / $defs / ProjectWorkspaceOutput / requiredPrevious value: -[ - "schemaVersion", - "requestId", - "snapshotId", - "generatedAt", - "project", - "activeTab", - "tabManifest", - "overview", - "navigation", - "sourceSummary" -]New value: +[ + "schemaVersion", + "project", + "activeTab", + "tabManifest", + "overview", + "navigation", + "sourceSummary" +] - added
Output schema / $defs / ProjectWorkspacesHomeOutput / properties / generatedAt / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectWorkspacesHomeOutput / properties / generatedAt / typeRemoved value: -"string" - added
Output schema / $defs / ProjectWorkspacesHomeOutput / properties / requestId / anyOfAdded value: +[ + { + "type": "string" + }, + { + "type": "null" + } +] - removed
Output schema / $defs / ProjectWorkspacesHomeOutput / properties / requestId / typeRemoved value: -"string" - changed
Output schema / $defs / ProjectWorkspacesHomeOutput / requiredPrevious value: -[ - "schemaVersion", - "requestId", - "generatedAt", - "surface", - "counts", - "projects", - "filters", - "noMatch", - "messageKey", - "dataQuality", - "errors" -]New value: +[ + "schemaVersion", + "surface", + "counts", + "projects", + "filters", + "noMatch", + "messageKey", + "dataQuality", + "errors" +]
1 tool update
- Changed
project1 field changed- changed
Input schema / properties / excerpt / descriptionPrevious value: -"Conversation excerpt for link or metadata update."New value: +"Short note for the link or metadata update, not a full transcript."
45 tool updates
- Removed
add_expense - Added
analyze_memory_text - Removed
complete_memory_todo - Removed
create_memory_todo - Changed
explain_memory3 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / include_embeddingRemoved value: -{ - "default": false, - "description": "Whether to include embedding/vector metadata in the returned explanation.", - "title": "Include Embedding", - "type": "boolean" -} - removed
Input schema / properties / output_jsonRemoved value: -{ - "default": false, - "description": "Return a machine-readable JSON response instead of a human-readable summary.", - "title": "Output Json", - "type": "boolean" -}
- Changed
forget8 fields changed- added
Input schema / additionalPropertiesAdded value: +false - added
Input schema / properties / memory_idAdded value: +{ + "default": "", + "description": "Exact XMemo memory reference shown by search or recall.", + "title": "Memory Id", + "type": "string" +} - removed
Input schema / properties / metadata_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string with extra metadata for the operation.", - "title": "Metadata Json", - "type": "string" -} - changed
Input schema / properties / mode / defaultPrevious value: -"hard"New value: +"soft" - changed
Input schema / properties / mode / descriptionPrevious 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." - added
Input schema / properties / mode / enumAdded value: +[ + "soft", + "soft_delete", + "hard", + "hard_delete" +] - removed
Input schema / properties / query_hintRemoved value: -{ - "anyOf": [ - { - "type": "string" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Input value for the Forget tool.", - "title": "Query Hint" -} - removed
Input schema / properties / replacement_contentRemoved value: -{ - "default": "", - "description": "Replacement text to store when redacting or replacing deleted memory content.", - "title": "Replacement Content", - "type": "string" -}
- Changed
get_mcp_identity1 field changed- added
Input schema / additionalPropertiesAdded value: +false
- Removed
get_monthly_ledger_summary - Removed
get_project_context - Added
get_project_summary - Removed
get_timeline - Added
ledger - Added
ledger_get_dashboard - Added
ledger_get_subscriptions - Added
ledger_subscription_mutate - Added
ledger_update_transaction - Removed
list_ledger_transactions - Removed
list_memory_todos - Removed
list_memory_versions - Added
memory_overview - Removed
memory_stats - Added
open_ledger - Added
open_project_workspace - Added
open_todo_board - Added
project - Added
project_workspace_conversation_mutate - Added
project_workspace_decision_mutate - Added
project_workspace_document_mutate - Added
project_workspace_get_view - Added
project_workspace_memory_set_review_due - Added
project_workspace_memory_update - Added
project_workspace_settings_save_preferences - Added
project_workspace_todo_mutate - Removed
propose_profile_mutation - Removed
propose_todo_mutation - Removed
propose_write - Changed
recall7 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / agent_idRemoved value: -{ - "default": "", - "description": "Optional client-supplied agent label for memory attribution.", - "title": "Agent Id", - "type": "string" -} - removed
Input schema / properties / agent_instance_idRemoved value: -{ - "default": "", - "description": "Optional stable, non-secret agent instance ID for per-client attribution.", - "title": "Agent Instance Id", - "type": "string" -} - removed
Input schema / properties / explainRemoved value: -{ - "default": false, - "description": "Whether to include retrieval explanation details with search or recall results.", - "title": "Explain", - "type": "boolean" -} - removed
Input schema / properties / memory_typeRemoved value: -{ - "default": "%", - "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.", - "title": "Memory Type", - "type": "string" -} - removed
Input schema / properties / path_filterRemoved value: -{ - "default": "%", - "description": "Memory path filter; % matches all paths.", - "title": "Path Filter", - "type": "string" -} - removed
Input schema / properties / prefer_workingRemoved value: -{ - "default": false, - "description": "Whether to prioritize working/session-state memories in retrieval.", - "title": "Prefer Working", - "type": "boolean" -}
- Changed
recall_context20 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / agent_idRemoved value: -{ - "default": "", - "description": "Optional client-supplied agent label for memory attribution.", - "title": "Agent Id", - "type": "string" -} - removed
Input schema / properties / agent_instance_idRemoved value: -{ - "default": "", - "description": "Optional stable, non-secret agent instance ID for per-client attribution.", - "title": "Agent Instance Id", - "type": "string" -} - removed
Input schema / properties / bucketRemoved 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" -} - removed
Input schema / properties / limitRemoved value: -{ - "default": 0, - "description": "Maximum number of results to return.", - "title": "Limit", - "type": "integer" -} - changed
Input schema / properties / max_items / descriptionPrevious value: -"Maximum number of memory items to include."New value: +"Maximum memories rendered in the context pack." - removed
Input schema / properties / max_items / titleRemoved value: -"Max Items" - changed
Input schema / properties / max_tokens / descriptionPrevious value: -"Approximate maximum response size."New value: +"Approximate token budget for the rendered context pack." - removed
Input schema / properties / max_tokens / titleRemoved value: -"Max Tokens" - removed
Input schema / properties / memory_typeRemoved value: -{ - "default": "auto", - "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.", - "title": "Memory Type", - "type": "string" -} - removed
Input schema / properties / output_jsonRemoved value: -{ - "default": false, - "description": "Return a machine-readable JSON response instead of a human-readable summary.", - "title": "Output Json", - "type": "boolean" -} - removed
Input schema / properties / path_filterRemoved value: -{ - "default": "%", - "description": "Memory path filter; % matches all paths.", - "title": "Path Filter", - "type": "string" -} - removed
Input schema / properties / prefer_workingRemoved value: -{ - "default": true, - "description": "Whether to prioritize working/session-state memories in retrieval.", - "title": "Prefer Working", - "type": "boolean" -} - changed
Input schema / properties / query / descriptionPrevious value: -"Natural-language question or search text."New value: +"Natural-language query used to rank memories for the context pack." - removed
Input schema / properties / query / titleRemoved value: -"Query" - removed
Input schema / properties / scopeRemoved value: -{ - "default": "", - "description": "Optional scope that narrows memory access; leave blank for the token default.", - "title": "Scope", - "type": "string" -} - removed
Input schema / properties / team_idRemoved value: -{ - "default": "", - "description": "Optional team/workspace identifier for team-scoped memory access.", - "title": "Team Id", - "type": "string" -} - removed
Input schema / titleRemoved value: -"recall_contextArguments" - removed
Output schema / properties / result / titleRemoved value: -"Result" - removed
Output schema / titleRemoved value: -"recall_contextOutput"
- Removed
record_event - Changed
remember19 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / agent_idRemoved value: -{ - "default": "", - "description": "Optional client-supplied agent label for memory attribution.", - "title": "Agent Id", - "type": "string" -} - removed
Input schema / properties / agent_instance_idRemoved value: -{ - "default": "", - "description": "Optional stable, non-secret agent instance ID for per-client attribution.", - "title": "Agent Instance Id", - "type": "string" -} - removed
Input schema / properties / bucketRemoved 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" -} - removed
Input schema / properties / confidenceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Confidence score for the saved or updated memory, from 0.0 to 1.0.", - "title": "Confidence" -} - added
Input schema / properties / create_projectAdded 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" +} - removed
Input schema / properties / dedupeRemoved value: -{ - "default": true, - "description": "Whether to check for and merge likely duplicate memories before saving.", - "title": "Dedupe", - "type": "boolean" -} - removed
Input schema / properties / device_idRemoved value: -{ - "default": "", - "description": "Optional client-supplied device identifier for attribution.", - "title": "Device Id", - "type": "string" -} - removed
Input schema / properties / device_labelRemoved value: -{ - "default": "", - "description": "Optional human-readable device label for attribution.", - "title": "Device Label", - "type": "string" -} - removed
Input schema / properties / embedding_jsonRemoved value: -{ - "default": "", - "description": "Optional JSON array or object containing a precomputed embedding; leave blank for normal use.", - "title": "Embedding Json", - "type": "string" -} - removed
Input schema / properties / expires_atRemoved value: -{ - "default": "", - "description": "Optional ISO 8601 expiration timestamp for the memory.", - "title": "Expires At", - "type": "string" -} - removed
Input schema / properties / importanceRemoved 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" -} - removed
Input schema / properties / memory_idRemoved value: -{ - "default": "", - "description": "Exact XMemo memory reference shown by search or recall.", - "title": "Memory Id", - "type": "string" -} - removed
Input schema / properties / memory_typeRemoved value: -{ - "default": "auto", - "description": "Memory type/category filter or value, such as episodic, identity, procedural, semantic, working, auto, or %.", - "title": "Memory Type", - "type": "string" -} - removed
Input schema / properties / metadata_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string with extra metadata for the operation.", - "title": "Metadata Json", - "type": "string" -} - removed
Input schema / properties / provenance_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string describing memory source, evidence, or attribution.", - "title": "Provenance Json", - "type": "string" -} - removed
Input schema / properties / scopeRemoved value: -{ - "default": "", - "description": "Optional scope that narrows memory access; leave blank for the token default.", - "title": "Scope", - "type": "string" -} - removed
Input schema / properties / semantic_keyRemoved value: -{ - "default": "", - "description": "Optional stable semantic key used to identify or upsert a memory concept.", - "title": "Semantic Key", - "type": "string" -} - removed
Input schema / properties / team_idRemoved value: -{ - "default": "", - "description": "Optional team/workspace identifier for team-scoped memory access.", - "title": "Team Id", - "type": "string" -}
- Changed
restore_memory2 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / metadata_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string with extra metadata for the operation.", - "title": "Metadata Json", - "type": "string" -}
- Added
search_memory - Added
todo - Changed
update_memory16 fields changed- added
Input schema / additionalPropertiesAdded value: +false - removed
Input schema / properties / bucketRemoved 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" -} - removed
Input schema / properties / confidenceRemoved 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" -} - removed
Input schema / properties / detect_conflictsRemoved value: -{ - "default": true, - "description": "Whether to detect possible conflicts with existing memories during an update.", - "title": "Detect Conflicts", - "type": "boolean" -} - removed
Input schema / properties / expires_atRemoved value: -{ - "default": "", - "description": "Optional ISO 8601 expiration timestamp for the memory.", - "title": "Expires At", - "type": "string" -} - removed
Input schema / properties / importanceRemoved value: -{ - "anyOf": [ - { - "type": "number" - }, - { - "type": "null" - } - ], - "default": null, - "description": "Importance score for the saved or updated memory, from 0.0 to 1.0.", - "title": "Importance" -} - changed
Input schema / properties / memory_type / descriptionPrevious value: -"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." - removed
Input schema / properties / merge_metadataRemoved value: -{ - "default": true, - "description": "Whether to merge new metadata with existing metadata instead of replacing it.", - "title": "Merge Metadata", - "type": "boolean" -} - removed
Input schema / properties / merge_provenanceRemoved value: -{ - "default": true, - "description": "Whether to merge new provenance with existing provenance instead of replacing it.", - "title": "Merge Provenance", - "type": "boolean" -} - removed
Input schema / properties / metadata_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string with extra metadata for the operation.", - "title": "Metadata Json", - "type": "string" -} - removed
Input schema / properties / provenance_jsonRemoved value: -{ - "default": "{}", - "description": "Optional JSON object string describing memory source, evidence, or attribution.", - "title": "Provenance Json", - "type": "string" -} - removed
Input schema / properties / scopeRemoved value: -{ - "default": "", - "description": "Optional scope that narrows memory access; leave blank for the token default.", - "title": "Scope", - "type": "string" -} - removed
Input schema / properties / semantic_keyRemoved value: -{ - "default": "", - "description": "Optional stable semantic key used to identify or upsert a memory concept.", - "title": "Semantic Key", - "type": "string" -} - removed
Input schema / properties / statusRemoved value: -{ - "default": "", - "description": "Memory status filter or update value, such as active, archived, deleted, or %.", - "title": "Status", - "type": "string" -} - removed
Input schema / properties / supersession_reasonRemoved value: -{ - "default": "", - "description": "Reason the updated memory supersedes older content.", - "title": "Supersession Reason", - "type": "string" -} - removed
Input schema / properties / team_idRemoved value: -{ - "default": "", - "description": "Optional team/workspace identifier for team-scoped memory access.", - "title": "Team Id", - "type": "string" -}
- Removed
update_state
1 tool update
- Changed
forget1 field changed- changed
Input schema / properties / mode / defaultPrevious value: -"soft"New value: +"hard"
3 tool updates
- Added
propose_profile_mutation - Added
propose_todo_mutation - Added
propose_write
32 tool updates
- Removed
analyze_memory_text - Removed
complete_reminder - Removed
create_pending_decision - Removed
create_reminder - Removed
create_restart_snapshot - Removed
delete_current_memory - Changed
forget4 fields changed- added
Input schema / properties / metadata_jsonAdded value: +{ + "default": "{}", + "description": "Optional JSON object string with extra metadata for the operation.", + "title": "Metadata Json", + "type": "string" +} - added
Input schema / properties / modeAdded value: +{ + "default": "soft", + "description": "Deletion mode for forget_memory, such as soft_delete, hard_delete, or redact when supported.", + "title": "Mode", + "type": "string" +} - added
Input schema / properties / query_hintAdded value: +{ + "anyOf": [ + { + "type": "string" + }, + { + "type": "null" + } + ], + "default": null, + "description": "Input value for the Forget tool.", + "title": "Query Hint" +} - added
Input schema / properties / replacement_contentAdded value: +{ + "default": "", + "description": "Replacement text to store when redacting or replacing deleted memory content.", + "title": "Replacement Content", + "type": "string" +}
- Removed
forget_memory - Added
get_project_context - Removed
get_recall_policy - Removed
get_safety_policy - Removed
get_system_stats - Removed
list_memory_conflicts - Removed
list_pending_decisions - Removed
list_reminders - Removed
mark_memory_used - Removed
memory_activity - Removed
memory_overview - Removed
query_audit_events - Removed
query_consolidation_audit - Removed
recall_plan - Removed
record_recall_eval_judgment - Removed
record_recall_feedback - Removed
redact_memory - Removed
reflect - Removed
resolve_decision - Removed
resolve_memory_conflict - Removed
restore_restart_snapshot - Removed
run_lifecycle - Removed
run_recall_eval - Removed
search_memory - Removed
store_memory
Frequently Asked Questions
Claiming proves that you control a remote MCP connector. It does not move, proxy, or interrupt the server.
Open the connector listing, choose Claim ownership, and sign in to Glama.
Complete one verification method:
GitHub identity — fastest for official registry listings. For a namespace such as
io.github.alice/server, link the matching GitHub user, then choose Claim with GitHub. An organization namespace such asio.github.acme/serveralso needs that organization to have installed the Glama AI GitHub App and approved its permissions, because GitHub discloses organization membership only to apps it has installed. Use HTTP or DNS when it has not.HTTP challenge — works when you can deploy a public file. Generate a token, publish the exact JSON Glama shows at
/.well-known/glama.jsonon the same origin as the connector, then choose Check HTTP challenge.DNS challenge — works when you control DNS but cannot change the server. Generate a token, create the exact TXT record Glama shows, wait for it to propagate, then choose Check DNS challenge.
After verification, Glama sends a confirmation email and gives you access to listing details, thumbnails, health checks, and analytics. Keep the HTTP file or DNS record in place: Glama periodically checks it and ownership remains verified while the token is discoverable.
The HTTP ownership file has this structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"claim": "glama_claim_..."
}Claim tokens are opaque, stable, and bound to the signed-in Glama account. They contain no email address or other personal information. If Glama can no longer discover a verified HTTP or DNS token, it starts a seven-day grace period before removing claim-based access. Restore the same token during that period to keep ownership verified. Never publish an email address, Glama session token, GitHub token, or connector credential as ownership proof.
If verification fails, confirm that you copied the current token exactly. The HTTP file must be public, return valid JSON with a successful HTTP response, and stay on the connector's origin. DNS changes may need more time to propagate. A claim cannot transfer to a different origin or hostname: if the connector target changes, Glama starts the grace period and the new target must be claimed separately after the previous claim is released.
For a connector linked to the official MCP Registry, registry updates continue to replace its name, description, and URL by default. After claiming, open Manage connector and enable Use Glama listing details as the source of truth if edits made on Glama should be preserved. Categories and thumbnails are always managed on Glama; registry linkage and technical connection settings continue to sync.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
To improve your MCP server's ranking:
Claim ownership of the server listing
Complete the server profile with an accurate description and thumbnail
Provide a test profile so Glama can connect to and evaluate the server
Keep tool definitions clear and complete to earn a high Tool Definition Quality Score (TDQS)
Route real usage through the Glama Gateway; more recorded successful server uses also improve the ranking
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Related MCP Connectors
Persistent memory for AI agents with OAuth-backed hosted MCP access.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Shared long-term memory vault for AI agents with 20 MCP tools.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables 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.11MIT
- AlicenseNot gradedqualityBmaintenanceProvides 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.61MIT
- AlicenseNot gradedqualityBmaintenanceGoverned 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.4486Apache 2.0
- AlicenseNot gradedqualityAmaintenanceLocal-first, governable long-term memory for AI agents. Provides SQLite-backed storage, cross-session recall, and traceable memory corrections through a standard MCP interface.1MIT
Glama MCP Gateway
Add one secure layer between your agents and this server.
TDQS
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.
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.
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.
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.