Skip to main content
Glama
jmfraga
by jmfraga

LM-Pocket — Longitudinal Memory Pocket

tests

Your AI memory, physically yours.

Español

Your model can change. Your history doesn't have to.

LM-Pocket is a personal, portable, local-first, model-agnostic memory layer that you own. It lives in a folder — on a USB stick, an external SSD, or your laptop — and keeps your context, preferences, decisions and learnings across time, regardless of which LLM, app, company or device you use.

It is not an assistant and not a model. It is a continuity layer: storage, provenance, governance and access control for your long-term memory, exposed to any LLM through MCP or through copy/paste prompt bridges.

Status: v0.1 prototype. The first demo works end to end on a real USB-style volume: encrypted pocket, passphrase unlock, MCP reads limited by profile, proposals approved in a localhost UI, prompt-bridge import/export, and MCP access cut off when the pocket is locked or unplugged. Not audited, not for real secrets yet. Spec frozen at tag spec-v0.2-frozen.

Quick start

Needs uv. Offline machines: see docs/offline.md.

git clone https://github.com/jmfraga/lm-pocket && cd lm-pocket
uv sync
uv run lm-pocket init /Volumes/MyUSB/LM-Pocket --sample   # prints your recovery key once
uv run lm-pocket open /Volumes/MyUSB/LM-Pocket            # opens the localhost UI; unlock there

The home page shows the exact MCP config for each permission profile. For Claude Code:

claude mcp add pocket-work -- "$(uv run which python)" -m lm_pocket mcp --profile work

Then ask Claude something that depends on your memory. Lock the pocket (or unplug the USB) and ask again.

See the first demo — including a real Claude session — or run it yourself on macOS with a throwaway exFAT disk image:

uv run python scripts/demo_usb_macos.py

Related MCP server: agent-memory-os

Why

Every AI provider is building memory, and every one of them keeps it on their servers, in their format, under their rules. Switch providers and you start from zero. Lose your account and your history goes with it.

LM-Pocket bets on the opposite: the canonical copy of your memory belongs to you, in an open format, and the model is a replaceable processor that reads only what you allow.

What makes it different

Pieces of this exist elsewhere (memory engines, MCP memory servers, portable agent memory formats). What LM-Pocket combines:

  • Physically yours — the canonical copy is a folder you can unplug.

  • Spaces — personal, portable_professional, work:<id>… isolated by default. Your employer's LLM never sees your personal life or your previous employer's secrets.

  • Proposal → review → durable — no LLM ever writes directly to your canonical memory.

  • Provenance on everything — every memory answers "where did this come from?" and inferences are distinguished from facts you stated.

  • Portable experience — keep the lesson ("validate small hypotheses before scaling") without carrying the proprietary data it came from.

  • Open export format — nothing should stop another program from reading your memory.

How models connect

Client

Path

Notes

Claude Desktop / Claude Code / Cursor

Local MCP (stdio)

Native, nothing leaves your machine except what the model reads.

Gemini CLI

Local MCP (stdio)

Native MCP support.

Local models (LM Studio, Open WebUI, Ollama-based clients)

Local MCP (stdio or HTTP)

Fully offline end to end.

ChatGPT

Remote MCP bridge (Cloudflare Tunnel or similar) or prompt bridge

ChatGPT only accepts remote HTTPS MCP. Optional, off by default. See docs/bridge.md.

Gemini app and other closed chats

Prompt bridge

Copy a context package in; paste the model's memory export back.

Client support changes fast — see docs/mcp.md for details and please send corrections.

Documents

Spanish versions live in docs/es/.

Principles that must not break

  1. The memory belongs to the user.

  2. The system works offline.

  3. An LLM never writes directly to canonical memory.

  4. Spaces are isolated by default.

  5. Every memory has provenance.

  6. The format is exportable.

  7. MCP is an interface, not the memory.

  8. The model is replaceable.

  9. The user can physically disconnect their memory.

  10. The developer disappearing must not destroy the user's history.

License

The business, if there ever is one, can live in hardware, UX, support, enterprise administration, optional sync or managed services. Never in charging rent to access your own memory.

Available Tools

8 tools
get_contextB
Read-only

A compact, budgeted context package about a topic, grouped by preferences, history, goals and inferences. Prefer this at the start of a task.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicNo
purposeNo
max_tokensNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

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

The annotations already establish this as a safe, read-only, closed-world read, so the safety profile is covered. The description adds the 'compact, budgeted' framing and the grouping categories, but does not disclose truncation behavior, what happens when the token budget is exceeded, or any auth/scope requirements – with an output schema present, return shape need not be repeated.

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

Conciseness4/5

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

Two sentences, no padding, with the substantive characterization of the payload leading and the usage hint trailing. Efficient and front-loaded, though the second sentence could have carried parameter guidance instead of just a preference cue.

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?

An output schema exists, so return values are handled elsewhere, and the description covers the artifact's nature adequately. The gap is parameter guidance for topic/purpose/max_tokens at 0% schema coverage, which leaves an agent guessing about how to steer the result.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden. It implies topic ('about a topic') and budget ('budgeted'), but never mentions the purpose parameter and gives no format, default, or interaction guidance for any of the three, leaving two of three params only obliquely hinted.

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 states a concrete resource – a compact, budgeted context package grouped into preferences, history, goals and inferences. That level of detail lets an agent picture the artifact without opening the schema, though it never distinguishes itself from siblings like get_recent_context or get_profile.

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

Usage Guidelines3/5

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

'Prefer this at the start of a task' gives one concrete trigger point, which is more than nothing. However, it names no alternatives (get_recent_context, get_profile, search_memories are all nearby) and offers no when-not-to-use condition, so the routing decision is only half supported.

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

get_memoryC
Read-only

One memory by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds nothing beyond that: no behavior when the id is unknown, no mention of scoping/permissions, no note on whether memory content is trimmed. With annotations carrying the load, this is minimal-but-not-broken.

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

Conciseness3/5

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

At four words there is zero waste and the key qualifier ('by id') is front-loaded. Size is not the problem; the phrasing is a sentence fragment rather than a usable statement, so it reads as under-specification rather than true conciseness.

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?

An output schema exists, so return values need not be described, and annotations cover the safety profile. What remains missing is the piece only the description can supply: how this differs from search_memories/get_recent_context and what an id looks like, which is thin for a tool in a 7-sibling cluster.

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

Parameters2/5

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

Schema description coverage is 0%, so the description carries the full burden for the single id parameter. It only says 'by id' and gives no expected format (UUID, slug, opaque handle) or example, leaving the agent to guess what a valid identifier looks like.

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

Purpose3/5

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

The fragment identifies the resource (a single memory) and its lookup key (id), which weakly distinguishes it from query-based siblings like search_memories. However, it lacks a verb and reads as a trimmed restatement of the name 'get_memory'. The purpose is inferable but not stated with specificity.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives, despite a dense sibling set (get_context, get_recent_context, search_memories, list_spaces). The agent must infer that it should call this only when it already holds a memory id, and nothing warns what to do if it does not.

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

get_policiesB
Read-only

Read-only view of this profile's rules.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so 'Read-only view' largely restates structured data. The only added context is that the rules belong to 'this profile', which is mild scope information; nothing about what policies contain or how they are scoped.

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

Conciseness4/5

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

A single short, front-loaded sentence with no padding. It loses a point because part of that sentence ('Read-only') duplicates the annotations rather than adding information.

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 zero-parameter read with an output schema and full annotation coverage, the description is nearly sufficient — return values and safety are handled elsewhere. The remaining gap is that 'rules' is never defined and no sibling routing is given.

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 takes zero parameters, so the baseline is 4 and there is nothing for the description to clarify beyond that.

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 names a specific verb ('Read-only view') and resource ('this profile's rules'), which is distinct from siblings like get_profile, list_spaces, and search_memories. It does not explicitly contrast itself with those siblings, so it stops short of a 5.

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

Usage Guidelines2/5

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

There is no indication of when to call this versus get_profile or get_context, nor any prerequisites or exclusions. The agent must infer usage purely from the noun 'rules'.

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

get_profileC
Read-only

What this connection may do: readable spaces and where proposals go.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is fully covered and the bar is lower. The description adds only content hints ('where proposals go'), not behavioral traits such as permission requirements, caching, or connection-specific scoping that would go 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.

Conciseness3/5

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

It is short and free of filler, but it is a sentence fragment with no subject or verb, so the information is not front-loaded in a way the agent can act on. The length is fine; the structure is weak.

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

Completeness3/5

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

With zero parameters, an output schema covering the return shape, and rich annotations, the description does not need to carry much. However, it never states that this returns the current connection's profile or how it relates to list_spaces/propose_memory, so the routing information an agent needs is only partially present.

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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline of 4 applies. No parameter meaning is lost.

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

Purpose3/5

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

The fragment identifies the content of the resource ('readable spaces and where proposals go') but never states an action ('returns/retrieves') or names the resource as a profile, so an agent must infer that get_profile returns the current connection's permission scope. It is meaningfully different from get_context, but the purpose is expressed obliquely rather than as a verb+resource.

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

Usage Guidelines2/5

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

There is no when-to-use statement, no prerequisites, and no alternative named, despite siblings list_spaces (readable spaces) and propose_memory (proposal destination) overlapping with the two things this description mentions. The description only implies usage; nothing tells the agent when to pick get_profile over get_context or list_spaces.

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

get_recent_contextC
Read-only

The most recently updated durable memories this profile can read.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.7/5.0
Behavior3/5

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

Annotations already declare this a safe, read-only, closed-world operation, so the description carries a lighter burden. It does add two useful behavioral facts beyond the annotations: results are limited to 'durable' memories and to what 'this profile can read' (a permission scope). It says nothing about ordering guarantees, refresh cadence, or what happens when no recent memories exist.

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

Conciseness3/5

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

A single short fragment with no wasted words, and the ordering criterion is front-loaded. However, it is a sentence fragment rather than a complete statement, leaving the reader to supply the implicit verb and the limit behavior.

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?

An output schema exists, so return-value explanation is not required, and the annotations cover the safety profile. What is missing is any mention of the limit parameter and the absence of guidance relative to the many sibling retrieval tools, which is a real gap for a one-parameter list tool.

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

Parameters2/5

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

There is one parameter (limit, default 10) with 0% schema description coverage, and the description never mentions it, so nothing explains what the limit constrains or what happens past the cap. The description therefore fails to compensate for the schema gap on the only parameter that exists.

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

Purpose3/5

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

The description conveys the resource (recently updated durable memories) and a scope qualifier ('this profile can read'), but it is a noun phrase with no verb and no differentiation from siblings such as get_context, search_memories, or list_spaces. An agent can infer it returns recent memories but not clearly why it exists alongside get_context.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no exclusions, and no reference to any alternative such as search_memories for filtered lookups or get_context for broader context assembly. The 'most recently updated' ordering is the only implicit hint about when this tool is appropriate.

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

list_spacesB
Read-only

Spaces of the user's memory that this profile can read.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds one genuinely useful behavioral fact beyond that: results are filtered to spaces this profile can read, i.e. access-scoped rather than exhaustive. It still says nothing about ordering, pagination, or whether the list can be empty.

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

Conciseness4/5

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

A single short sentence with no filler, so it is well within budget. However, it is a noun phrase rather than a front-loaded action statement, which slightly weakens the lead.

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

Completeness3/5

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

With an output schema present, return-value detail is not required, and zero parameters need no explanation. What remains thin is that the description never explicitly confirms this is a complete enumeration or whether pagination/limits apply, which an agent planning a discovery call would want.

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 takes zero parameters, so there is nothing for the description to disambiguate; the baseline for a no-parameter tool applies. No parameter semantics are needed or missing.

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

Purpose3/5

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

The fragment names the resource ('spaces of the user's memory') and scopes it to what the profile can read, which hints at a listing operation, but it never states a verb. It does not distinguish itself from siblings like get_context or search_memories, so the agent must infer that this is the enumeration call.

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

Usage Guidelines2/5

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

There is no when-to-use guidance and no mention of alternatives. Nothing tells the agent whether to call list_spaces first to discover scope, or to prefer search_memories/get_context instead. The permission scoping is the only implicit usage signal.

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

propose_memoryA
Idempotent

Propose a new memory about the user. It is saved as a CANDIDATE that the user must approve. type: fact | preference | event | interpretation | skill | decision | relationship | goal. Use 'interpretation' for anything inferred. provider/model: identify yourself for provenance.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
typeNofact
modelNo
contentYes
providerNo
confidenceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare the safety profile (readOnlyHint=false, idempotentHint=true, destructiveHint=false), so the bar is lower. The description adds genuinely useful behavioral context not in the annotations: the memory is saved as a CANDIDATE that the user must approve, which tells the agent the write is not immediately committed.

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

Conciseness4/5

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

Front-loaded with the action and the candidate-approval behavior, then follows with parameter guidance. The type enumeration is long but earns its place since the schema has no enum. No filler sentences.

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?

With an output schema present, return values need no explanation. The description covers the key behavioral trait (candidate/approval) and the highest-value parameter (type), but is silent on tags and confidence, leaving a gap for a 6-parameter 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?

Schema description coverage is 0%, so the description must carry the load. It usefully enumerates the allowed 'type' values (which the schema omits, having no enum) and explains provider/model for provenance, but leaves tags and confidence (default 0.5) entirely unexplained out of 6 parameters.

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?

States a specific verb and resource ('Propose a new memory about the user'), which clearly distinguishes the write path from the read-oriented siblings (search_memories, get_memory, get_context). It doesn't explicitly name a sibling alternative, but the verb 'propose' plus the resource makes the purpose unambiguous.

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

Usage Guidelines3/5

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

Usage is implied rather than stated. The description explains that results become a CANDIDATE requiring approval and gives a routing rule for the 'type' field ('Use interpretation for anything inferred'), but it never says when to call this tool versus not call it, or what prerequisites exist.

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

search_memoriesB
Read-only

Full-text search over the user's durable memories (accent-insensitive). Empty query = most recent. Each result includes provenance: who stated it, how and when.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
spaceNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, openWorldHint=false and destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior ('accent-insensitive', empty-query fallback), but says nothing about limit/pagination behavior or what a space filter does, so it only modestly exceeds the annotation baseline.

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

Conciseness4/5

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

Three short, front-loaded sentences with no filler; the core operation leads and the two useful behavioral facts follow. It does not sprawl, though the formatting is fragmentary.

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?

Since an output schema exists, the description need not explain return values, and its provenance note is a nice complement. But for a 3-parameter search tool with zero schema documentation, the unspecified limit and space parameters leave real gaps in an agent's ability to call it correctly.

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

Parameters2/5

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

Schema description coverage is 0% for three parameters, so the description carries the full burden. It explains the query parameter's edge case (empty = most recent results), but 'limit' and especially 'space' are left completely undefined, leaving two of three parameters undocumented in both places.

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?

States a specific verb and resource ('full-text search over the user's durable memories') plus a qualifier (accent-insensitive) that scopes the search behavior. However, it does not distinguish itself from close siblings like get_memory or get_recent_context, leaving the agent to infer the boundary.

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

Usage Guidelines3/5

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

The 'Empty query = most recent' clause implies one usage mode, but there is no explicit when-to-use guidance versus get_memory (single lookup) or get_recent_context (recency browsing). The agent must infer which sibling to pick for a given intent.

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.

  1. 8 tool updatesv0.1.0
    • First observedget_context
    • First observedget_memory
    • First observedget_policies
    • First observedget_profile
    • First observedget_recent_context
    • First observedlist_spaces
    • First observedpropose_memory
    • First observedsearch_memories

TDQS

B3.2/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have distinct targets (memory by id, spaces, policies, profile, search), but get_recent_context overlaps with search_memories (whose empty query returns most recent), and get_profile vs get_policies have a subtle boundary (permissions vs rules) that could cause misselection.

Naming Consistency5/5

All tools follow a clean snake_case verb_noun pattern (get_context, get_recent_context, get_policies, propose_memory, get_profile, list_spaces, search_memories, get_memory) with no deviation.

Tool Count5/5

Eight tools sit comfortably in the ideal 3-15 range and each maps to a distinct facet of the memory domain (retrieve, search, propose, inspect spaces/policies/profile).

Completeness3/5

Read coverage is strong (context, recent, search, get by id, spaces, policies), but the proposal lifecycle is a dead end: propose_memory creates a candidate yet there is no tool to list, review, revise, withdraw, or delete memories or pending candidates.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first, file-based memory layer for AI agents — one shared Markdown vault across Claude, Codex, Gemini, Cursor and any MCP client. Provides read/write memory tools with an audit trail, per-agent trust levels, and Git sync; no cloud and no lock-in.
    2
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Local-first memory engine for AI-agent teams: private/team/project ACL, associative recall, and federated sync across nodes. One SQLite file, no LLM required.
    12
    7
    Apache 2.0
  • A
    license
    A
    quality
    D
    maintenance
    User-owned portable memory vault as an MCP server: agents can fetch context, search entries, and propose new memories, while humans curate the vault via a web app.
    3
    MIT
  • F
    license
    Not graded
    quality
    A
    maintenance
    Enables AI assistants to read and write a local, encrypted-by-default memory store, so they can share persistent notes and context across sessions and models on your machine.
    85 npm
    -