Skip to main content
Glama
xmszm

xmszm-memory

by xmszm

memory

Personal MCP memory server. Multi-user, file-backed, cross-platform.

Each user gets an isolated namespace. Memories persist across sessions within the namespace.

Usage

Lifecycle

xmszm-memory has three separate steps. Do not confuse MCP connection with automatic memory loading.

1. Configure MCP
   -> The client can see xmszm-memory tools.

2. First-use initialization
   -> initialize(namespace, profile?) creates boot/personality memories.
   -> boot_instructions(namespace, target?) generates the client rule to install into AGENTS.md, CLAUDE.md, .cursorrules, or global instructions.

3. Normal conversations
   -> The installed client rule makes each new session call initialize(...) and read(..., "system://boot") before answering.
   -> During conversation, the model uses search/read/list to recall memory and create/update/delete to maintain durable memory.

Important: MCP servers cannot force clients to call tools at session start. Automatic memory loading only works after the returned boot_instructions rule is installed in the client or project instructions.

Requirements

  • Node.js >= 18 (if installed via npm)

  • No installation needed if using npx

stdio mode (for MCP clients)

npx -y @xmszm/memory

SSE mode (HTTP server, background service)

npx -y @xmszm/memory sse
npx -y @xmszm/memory sse 3000

Hermes Configuration

{
  "mcpServers": {
    "xmszm-memory": {
      "command": "npx",
      "args": ["-y", "@xmszm/memory"]
    }
  }
}

Claude Code Configuration

User-scope example:

claude mcp add -s user xmszm-memory -- npx -y @xmszm/memory

JSON example:

{
  "mcpServers": {
    "xmszm-memory": {
      "command": "npx",
      "args": ["-y", "@xmszm/memory"]
    }
  }
}

Cursor / Windsurf / Any MCP Client

Most MCP-compatible clients accept the same format:

{
  "mcpServers": {
    "xmszm-memory": {
      "command": "npx",
      "args": ["-y", "@xmszm/memory"]
    }
  }
}

Related MCP server: memory-mcp

Memory Model

Memories are URI-only records. There is no key field and no key-based API.

interface Memory {
  uri: string;
  content: string;
  disclosure: string;
  priority: 0 | 1 | 2; // default 2
  tags: string[];      // default []
  source: string;      // default "assistant_inferred"
  createdAt: string;
  updatedAt: string;
  deletedAt?: string;  // set by delete()
}

Deleted memories are soft-deleted with deletedAt and are excluded from read, search, and list by default.

Tools

Tool

Description

initialize(namespace, profile?)

Idempotently create v2.1 boot/personality memories. profile defaults to assistant; accepted values are assistant and blank. Active existing memories are skipped, never overwritten.

boot_instructions(namespace, target?)

Generate copy-paste startup instructions for a client/global/project rule so future sessions call initialize and read(system://boot) before answering. Targets: generic, project, claude-code, codex, cursor, windsurf.

create(namespace, uri, content, disclosure, priority?, tags?, source?)

Create a new memory. Refuses overwrite if uri already exists; use update to modify.

update(namespace, uri, fields)

Update an existing active memory by exact URI without changing createdAt. fields can include content, disclosure, priority, tags, or source.

read(namespace, uri)

Read one active memory by exact URI. Special reads: system://boot and system://diagnostic/identity.

search(namespace, query)

Main entry when URI is unknown. Searches uri, content, disclosure, tags, and source.

list(namespace, prefix?)

Browse active memories, optionally filtered by URI prefix.

delete(namespace, uri)

Soft-delete one active memory by exact URI by setting deletedAt.

list_namespaces()

List all namespaces only; it does not return memories.

First-use Initialization

After MCP is configured, ask the client once to initialize the namespace and generate its startup rule.

Recommended first prompt:

Use xmszm-memory. Call initialize("admin", "assistant"), then read("admin", "system://boot"), then call boot_instructions("admin", "<target>") and install the returned rule into this client's global or project instructions.

Use target claude-code, codex, cursor, windsurf, project, or generic.

Boot Flow

At the start of a new session, clients should initialize the namespace once if it may be empty, then read the boot context before answering:

initialize(namespace, "assistant")  # or initialize(namespace, "blank")
read(namespace, "system://boot")

initialize is safe to call repeatedly. It reports created and skipped_active_existing URIs and never overwrites an active memory.

Profiles:

Profile

Behavior

assistant

Creates default identity, verification, no-fake-execution, conflict-resolution, user-relationship, boundary, reality, and coding-workflow memories.

blank

Creates only minimal structural placeholders such as identity://default/self and boundaries; it does not assume user-specific preferences.

Special reads:

URI

Behavior

system://boot

Returns active identity://default/* memories plus all active priority=0 memories, de-duplicated by URI and sorted by URI. Includes a short routing guide.

system://diagnostic/identity

Reports whether core identity URIs are present, missing, active count, priority-0 count, and warnings for missing boundaries, verification, or no-fake-execution memories.

Recommended memory flow:

Configure MCP once -> client can see xmszm-memory tools
First use once -> initialize(namespace, profile?) -> read(namespace, "system://boot") -> boot_instructions(namespace, target?) -> install returned rule
Every new session -> installed rule triggers initialize(namespace, profile?) -> read(namespace, "system://boot")
Unknown URI -> search(namespace, query) -> read/update/delete(namespace, exactUri)
Browse URI prefix -> list(namespace, prefix)
Create new memory -> create(namespace, uri, ...)
Modify existing memory -> update(namespace, uri, fields)

Examples:

initialize("admin")
initialize("admin", "blank")
read("admin", "system://boot")
read("admin", "system://diagnostic/identity")
boot_instructions("admin", "generic")
boot_instructions("admin", "codex")

To make memory load automatically, run boot_instructions(namespace, target?) once and copy the returned rule into the client global instructions or project rule file. Without that client-side rule, the MCP server is available but the model may not call it until asked.

Data

Stored in ~/.xmszm-memory/ as one JSON file per namespace.

# View all your memories
cat ~/.xmszm-memory/admin.json

License

MIT

Built from the design philosophy of Nocturne Memory by NeuronActivation.

Available Tools

9 tools
boot_instructionsA

Generate copy-paste startup instructions for a client/global/project rule. Use this after initialize so future new sessions automatically call initialize(namespace, "assistant") and read(namespace, "system://boot") before answering. This tool does not edit client files; it returns the rule text to install.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNoWhere the instruction will be installed. Controls the recommended filename/location only.generic
namespaceYesUser namespace, e.g. admin or alice

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It transparently states the tool 'does not edit client files' and 'returns the rule text to install,' preventing expectations of side effects. It doesn't discuss permissions or error conditions, but for a text-generation tool this is adequate disclosure, meriting a 4.

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

Conciseness5/5

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

Three sentences with zero redundancy: purpose, usage context, and a side-effect disclaimer. Every sentence earns its place, making the description compact and highly scannable.

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

Completeness5/5

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

Given the tool's simplicity (2 params, no annotations, no output schema), the description covers all essentials: what it generates, when to use it, and what it returns. The statement 'returns the rule text to install' substitutes for an output schema, and the integration with 'initialize' places it in a complete workflow.

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

Parameters3/5

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

Schema coverage is 100%, so the baseline is 3. The description references namespace in an example but adds no new semantic meaning beyond the schema's own descriptions. The 'target' parameter is already described in the schema as controlling 'recommended filename/location only,' so the description adds no incremental value.

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

Purpose5/5

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

The description clearly states it 'Generate copy-paste startup instructions' for a client/global/project rule, using a specific verb and resource. It distinguishes from siblings by explicitly noting it 'does not edit client files; it returns the rule text to install,' which separates it from create/update/delete tools.

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

Usage Guidelines4/5

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

The description gives explicit context: 'Use this after initialize' and explains the purpose ('future new sessions automatically call initialize...'). It does not explicitly name alternatives or when-not-to-use, but the workflow context is clear and excludes file-editing use cases, which earns a 4.

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

createA

Create a new URI-only memory. Requires exact namespace and uri. Refuses overwrite when uri already exists; use update to modify an existing memory. Default priority=2, tags=[], source=assistant_inferred.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesStable memory URI, e.g. memory://admin/project/password-policy
tagsNoTags used for search and grouping
sourceNoEnum-like source label; default assistant_inferred
contentYesFull memory content
priorityNo0 highest, 1 normal, 2 low/default
namespaceYesUser namespace, e.g. admin or alice
disclosureYesWhen this memory should be considered relevant

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the critical non-obvious behavior of refusing overwrites and specifies default values for priority, tags, and source. However, it does not mention what happens on success or error, leaving a small gap.

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

Conciseness5/5

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

The description is three sentences, each serving a distinct purpose: stating the action, noting constraints/alternatives, and listing defaults. There is no redundant or vague wording, making it highly efficient.

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

Completeness4/5

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

Given the absence of an output schema and annotations, the description sufficiently covers the core purpose, usage constraints, key behavior, and defaults. It could detail the success response or auth requirements, but for a create tool that refuses duplicates, it is largely complete.

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

Parameters4/5

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

The schema already covers all 7 parameters (100% coverage), establishing a baseline of 3. The description adds value by emphasizing that namespace and uri must be exact, and by providing defaults for priority, tags, and source that go beyond the schema descriptions.

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

Purpose5/5

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

The description opens with the specific verb 'Create' and identifies the resource as 'URI-only memory', clearly stating the tool's purpose. It distinguishes itself from the sibling 'update' tool by explicitly saying 'use update to modify an existing memory'.

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

Usage Guidelines5/5

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

It provides an explicit exclusion: 'Refuses overwrite when uri already exists', and recommends the alternative tool 'update' for modifying existing memories. It also states the prerequisite of exact namespace and uri, giving clear guidance on when to use this tool.

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

deleteA

Soft-delete an active memory by exact URI. Does not remove the JSON record; it sets deletedAt. Use search/list first if URI is unknown.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesExact memory URI
namespaceYes

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations provided, the description carries full responsibility for disclosing behavior. It clearly explains the soft-delete nature: 'Does not remove the JSON record; it sets deletedAt.' This is a critical non-obvious trait that goes beyond a typical delete. However, it does not address edge cases like non-existent URIs or already-deleted memories, which slightly reduces completeness.

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

Conciseness5/5

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

The description is extremely concise at two sentences, front-loaded with the primary action, and every sentence adds value—purpose, behavior, and usage guidance. There is no redundancy or filler.

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

Completeness4/5

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

For a simple delete operation with two parameters and no output schema, the description covers purpose, usage guidance, and key behavioral context. It does not specify return values or error conditions, but these are not explicitly required given the lack of an output schema. Overall, it is adequately complete for an agent to invoke the tool correctly.

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

Parameters3/5

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

The schema describes 'uri' as 'Exact memory URI' (50% coverage), and the description reinforces 'exact URI' and advises searching first if unknown, adding meaning to the uri parameter. However, the 'namespace' parameter remains unexplained, and the description does not fully compensate for the missing schema description for that parameter.

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

Purpose5/5

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

The description clearly states the tool's action: 'Soft-delete an active memory by exact URI.' This is a specific verb+resource combination, and the additional explanation that it sets deletedAt rather than removing the JSON record distinguishes it from a hard delete and aligns with its sibling operations like create/update/read.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use search/list first if URI is unknown.' This names alternative tools and sets a clear precondition for use, helping the agent decide when to invoke this tool versus searching or listing first.

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

initializeA

Initialize a namespace with v2.1 boot/personality memories. On a new session, call initialize(namespace, profile?) once if the namespace may be empty, then read(namespace, "system://boot") before answering. Idempotent: active existing memories are never overwritten. profile defaults to "assistant"; accepted profiles are "assistant" and "blank".

ParametersJSON Schema
NameRequiredDescriptionDefault
profileNoassistant creates default identity/principle/workflow memories; blank creates only minimal structural identity placeholders.assistant
namespaceYesUser namespace, e.g. admin or alice

TDQS

A3.8/5.0
Behavior3/5

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

The description discloses idempotency ('active existing memories are never overwritten'), which is useful behavioral context. However, it does not mention permissions, what happens to inactive memories, or any return behavior. Since there are no annotations, the description carries the full burden but only partially addresses safety and side effects.

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

Conciseness5/5

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

The description is three sentences, tightly written, and front-loaded with the core purpose. Every sentence adds practical information, including the workflow and idempotency.

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

Completeness4/5

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

Given the tool's simple two-parameter signature and absence of an output schema, the description covers the essential context: when to call it, what it does, its idempotency, and the profile options. It does not describe return values, but that is acceptable given the tool's initialization nature.

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

Parameters3/5

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

The schema already provides full descriptions for both parameters (namespace and profile) with a default and enum for profile. The description adds minimal value by restating the default and accepted profiles, so it does not exceed the baseline for high schema coverage.

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

Purpose4/5

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

The description clearly states a specific action and resource: 'Initialize a namespace with v2.1 boot/personality memories.' This is a distinct operation from siblings like create or update, though it does not explicitly name alternatives.

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

Usage Guidelines4/5

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

It provides explicit when-to-use guidance: 'On a new session, call initialize(namespace, profile?) once if the namespace may be empty, then read(namespace, "system://boot") before answering.' This gives a clear condition and sequence. It also notes idempotency, implying repeated calls are safe.

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

listA

Browse active memories by URI. Optional prefix filters by URI prefix. Use search for keyword discovery; use read/update/delete only after you have the exact URI.

ParametersJSON Schema
NameRequiredDescriptionDefault
prefixNoOptional URI prefix filter
namespaceYes

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It adds context that it lists 'active' memories and supports prefix filtering, but it does not disclose return format, pagination, or the meaning of 'active.' It implies read-only behavior but does not explicitly state it.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose, and each sentence provides essential guidance without waste. It is concise and well-structured.

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

Completeness4/5

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

The tool is simple with two parameters and no output schema. The description covers the typical use case and differentiates from siblings. It lacks return format details, but this is not critical for a browsing tool and the description is otherwise complete.

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

Parameters3/5

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

Schema coverage is 50% with only the prefix parameter having a description. The description clarifies 'Optional prefix filters by URI prefix,' adding meaning to that parameter. However, 'namespace' remains undocumented in both schema and description, leaving ambiguity.

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

Purpose5/5

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

The description clearly states the tool's purpose: 'Browse active memories by URI.' It uses a specific verb with a resource and scope. It also distinguishes from siblings by explicitly mentioning keyword search and exact-URI operations.

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

Usage Guidelines5/5

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

The description provides explicit guidance: 'Use search for keyword discovery; use read/update/delete only after you have the exact URI.' This clearly states when to use this tool versus alternatives.

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

list_namespacesA

List all namespaces only. This does not return memories. After choosing a namespace, call search(namespace, query) for memory content or list(namespace, prefix) for URI prefix browsing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It clearly states the tool returns only namespaces and does not return memories, which is a critical behavioral trait to prevent misuse. This goes beyond a simple 'list' statement.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the main purpose, and every sentence adds value (scope clarification, usage guidance). It is concise without being under-specified.

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

Completeness5/5

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

Despite no output schema, the description is complete for a zero-parameter tool: it specifies what is returned (namespaces), what is not returned (memories), and what to do next. This provides adequate context for an agent to select and use the tool correctly.

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

Parameters4/5

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

The tool has zero parameters, so the schema is empty and description adds no parameter information. Per rubric, baseline for 0 params is 4, and no additional semantics are needed.

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

Purpose5/5

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

The description uses a specific verb and resource ('List all namespaces') and explicitly states it does not return memories, differentiating it from sibling tools like search and list. The inclusion of 'only' reinforces its limited scope.

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

Usage Guidelines5/5

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

It provides explicit guidance on when to use this tool (to choose a namespace) and what to use next (search or list), along with usage syntax. This clearly distinguishes it from alternatives and gives actionable next steps.

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

readA

Read one active memory by exact URI. Special URIs: system://boot returns active identity://default/* plus active priority=0 memories; system://diagnostic/identity reports core identity status. On a new session, call initialize once if the namespace may be empty, then read system://boot before answering. Do not guess other URIs: if URI is unknown, call search first; use list only for prefix browsing.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesExact memory URI returned by search/list, or system://boot / system://diagnostic/identity
namespaceYes

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses special system URIs and their return semantics ('returns active identity://default/* plus active priority=0 memories', 'reports core identity status'), defines the 'active memory' limitation, and warns not to guess URIs. With no annotations, this provides substantial behavioral context, though it stops short of explaining potential error behaviors.

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

Conciseness5/5

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

The description is compact, front-loads the primary action, and packs special cases and workflow guidance into three sentences without redundancy.

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

Completeness5/5

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

Given the absence of an output schema, the description compensates by explaining what special URIs return, when to initialize, and how to handle unknown URIs. This provides a complete operational picture for a read tool.

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

Parameters3/5

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

The schema describes 'uri' but not 'namespace' (50% coverage). The description expands on URI semantics, including exact-match requirement and special system URI formats, but does not clarify the purpose of 'namespace', leaving some ambiguity.

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

Purpose5/5

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

The description clearly states 'Read one active memory by exact URI' — a specific verb ('Read'), a resource ('memory'), and a scoping qualifier ('exact URI'). It also distinguishes itself from siblings by warning 'if URI is unknown, call search first; use list only for prefix browsing.'

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

Usage Guidelines5/5

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

Explicitly provides when-to-use guidance: 'On a new session, call initialize once... then read system://boot before answering' and directs users to alternatives: 'if URI is unknown, call search first; use list only for prefix browsing.'

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

updateA

Update an existing active memory by exact uri. Use only when you already know the URI. Does not change createdAt. Accepts fields: content, disclosure, priority, tags, source.

ParametersJSON Schema
NameRequiredDescriptionDefault
uriYesExact existing memory URI
fieldsYesFields to modify. Do not include uri, createdAt, updatedAt, or deletedAt.
namespaceYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It adds useful context: 'Does not change createdAt' and the constraint of updating only 'active memory.' However, it omits important mutation semantics such as merge vs. replace behavior, error cases (e.g., URI not found), whether updatedAt changes, and auth requirements. It provides some transparency but not comprehensive coverage.

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

Conciseness5/5

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

The description is two sentences, front-loaded with the primary purpose, and every sentence adds value. It is not verbose and includes the essential usage condition and a key behavioral note without redundancy.

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

Completeness3/5

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

For a mutation tool with no annotations and no output schema, the description provides some essential context: purpose, usage condition, a behavioral guarantee, and accepted fields. However, it lacks details about return value, error handling, partial vs. full replacement, and specific constraints like priority enum semantics. Given the tool's nested parameter structure and the absence of annotations, the description is only moderately complete.

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

Parameters3/5

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

The schema already provides descriptions for the 'fields' object and its properties (67% coverage), and the description reinforces the accepted fields. The description adds the 'exact uri' requirement and the behavioral note about createdAt, which is helpful. However, it does not explain the enum for priority or the meaning of disclosure, leaving gaps that the schema partially fills. Baseline 3 is appropriate.

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

Purpose5/5

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

The description clearly states the action: 'Update an existing active memory by exact uri.' This distinguishes it from siblings like create, read, list, and delete by specifying it modifies an existing active memory and requires the exact URI. It also lists the accepted fields, leaving no ambiguity about what the tool does.

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

Usage Guidelines4/5

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

The description provides an explicit usage condition: 'Use only when you already know the URI.' This guides the agent to use search/read if the URI is unknown. However, it does not explicitly mention alternative tools or exclusion scenarios (e.g., when to use create instead), so it falls short of full guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv2.1.1
    • First observedboot_instructions
    • First observedcreate
    • First observeddelete
    • First observedinitialize
    • First observedlist
    • First observedlist_namespaces
    • First observedread
    • First observedsearch
    • First observedupdate

TDQS

A4.3/5.0
Disambiguation5/5

Each tool targets a distinct operation: search for keyword discovery, list for prefix browsing, read for exact URI retrieval, plus separate create/update/delete tools. Initialize and boot_instructions serve clear setup purposes, while list_namespaces is unique. No two tools appear to do the same thing.

Naming Consistency4/5

Most tools use imperative verbs (search, initialize, create, update, read, list, delete), with compound names like list_namespaces. The only outlier is boot_instructions, which is a noun phrase rather than a verb, but the overall lowercase snake_case style is consistent.

Tool Count5/5

With 9 tools, the set is well-scoped for a memory management system. Each tool serves a clear purpose: CRUD, search, list, namespace management, and initialization. No tool feels redundant or unnecessary.

Completeness5/5

The tool surface covers the full lifecycle: create, read, update, delete, search, and list, plus namespace handling and session initialization. The boot_instructions tool fills a practical gap for client setup. No obvious missing operations for the stated purpose.

Maintenance

ActivityStale
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Persistent memory MCP server for AI agents that stores, recalls, and searches conversation history, key-value context, and long-term entries across sessions with semantic search and FIFO queues.
    75
    1
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/xmszm/memory'

If you have feedback or need assistance with the MCP directory API, please join our Discord server