mcp-memory
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@mcp-memoryWhere did I leave off on this project?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP-Memory: OKF-Backed Agent Memory Server
MCP-Memory is a Model Context Protocol (MCP) server that equips AI agents (such as Claude Desktop, Cursor, Antigravity, Windsurf, or Codex) with persistent, long-term memory capabilities.
Memory records are formatted using the Open Knowledge Format (OKF v0.2) standard and indexed with a local SQLite instance (supporting FTS5 full-text search) for fast key-value lookups, tag filtering, and content search.
Fast Track: Jump directly to Quick Start
Key Features
Persistent State Across Sessions: Enables AI agents to read, store, search, and delete stateful memory snippets that persist across chat turns and sessions.
OKF Standard Compliance: Stores every memory item formatted as an OKF v0.2 Markdown document with YAML frontmatter (
type,key,namespace,tags,generated,sources,verified,status,stale_after), adhering strictly toSPEC.mdandOKF_RULES.md.Dual-Layer Architecture:
Human-Browseable OKF Directory: Automatically dumps and syncs every memory to disk as a raw
.mdfile inside thememory/bundle directory with hierarchicalindex.mdprogressive disclosure files (rootindex.mdversioned withokf_version: "0.2") andlog.mdupdate history tracking.High-Performance SQLite Indexing: SQLite FTS5 (Full-Text Search) and automatic triggers for sub-20ms key lookups and instant keyword searches.
Namespace Isolation: Supports contextual separation (e.g.
user/preferences,project/architecture,default).Zero Boilerplate Setup: Quick setup wizard (
python3 setup.py) auto-configures installed MCP tools (Antigravity, Claude, Cursor, Windsurf, Codex).
Related MCP server: MCP Vector Memory
MCP Tools
The server exposes six MCP tools to interacting agents:
1. memory_store
Stores or updates a memory record in OKF v0.2 format.
Parameters:
key(string, required): Unique identifier or path for the memory (e.g.user/preferences/coding_styleorproject/architecture).content(string or object, required): Core information to store.project_root(string, required): Absolute path to the active project root directory (e.g./Users/user/Projects/my-app).tags(array of strings, optional): Classification tags for filtering.namespace(string, optional, default:"default"): Scope/namespace.concept_type(string, optional, default:"Agent Memory"): OKF concept type (e.g.Metric,Playbook,Attested Computation).title(string, optional): Display name.description(string, optional): One-line summary.resource(string, optional): Canonical URI of underlying asset.status(string, optional, default:"stable"): Lifecycle state (draft|stable|deprecated).stale_after(string, optional): ISO date (YYYY-MM-DD).sources(array of objects, optional): Provenance sources[{resource, id, title, author, usage_count, last_modified}].verified(array of objects or object, optional): Verification events[{by, at}].generated_by(string, optional): Actor identifier following actor convention (<producer>/<version>,human:<id>,process:<id>).
2. memory_retrieve
Retrieves a specific memory by its key and namespace.
Parameters:
key(string, required): The memory key to look up.project_root(string, required): Absolute path to the active project root directory.namespace(string, optional, default:"default"): Scope/namespace.
3. memory_search
Finds memories matching keywords, tags, or namespace filters.
Parameters:
project_root(string, required): Absolute path to the active project root directory.query(string, optional): Keyword search query across keys, frontmatter, and content.tags(array of strings, optional): Filter by specific tags.namespace(string, optional): Scope search to a namespace.limit(integer, optional, default: 10): Maximum number of results.
4. memory_delete
Removes a specific memory record by its key and namespace, from both the SQLite index and the memory/ bundle on disk.
Parameters:
key(string, required): The key of the memory to remove.project_root(string, required): Absolute path to the active project root directory.namespace(string, optional, default:"default"): Scope/namespace.
5. memory_get_last
AGENT DIRECTIVE (Session Start): Retrieves the last recorded session checkpoint (system/last_memory) so the AI agent immediately knows where work was left off when opening a project or starting a session.
Parameters:
project_root(string, required): Absolute path to active project root directory.namespace(string, optional, default:"default"): Scope/namespace.
6. memory_update_last
AGENT DIRECTIVE (Milestones & Progress): Updates the canonical session checkpoint (system/last_memory) whenever completing a milestone, making key changes, or pausing work.
Parameters:
content(string or object, required): Brief note or structured dictionary summarizing progress and referencing key memory files.project_root(string, required): Absolute path to active project root directory.namespace(string, optional, default:"default"): Scope/namespace.summary(string, optional): One-sentence description of the milestone achieved.
OKF (Open Knowledge Format) Structure
Every stored memory strictly adheres to the OKF v0.2 specification (SPEC.md & OKF_RULES.md):
---
type: Agent Memory
title: Coding Style
key: user/preferences/coding_style
namespace: default
tags:
- preferences
- style
status: stable
generated:
by: mcp-memory/0.2.0
at: '2026-08-12T19:23:35Z'
created_at: '2026-08-12T19:23:35Z'
updated_at: '2026-08-12T19:23:35Z'
---
User prefers functional programming style with explicit type annotations.Quick Start
1. Clone the Repository
git clone https://github.com/fellowgeek/mcp-memory
cd mcp-memory2. Interactive Setup Wizard
Run setup.py to auto-detect and register mcp-memory with your AI tools:
python3 setup.pyNote: Once
setup.pyfinishes configuring your tools, your AI client will launchmcp-memoryautomatically in the background whenever needed. You do not need to manually start or keep a server process running in your terminal.
3. Run Manually via CLI (Optional / Debugging)
If you want to manually verify startup, inspect stdio output, or pre-initialize the virtual environment (.venv), you can run run.sh directly:
./run.shManual Client Configuration
If you prefer to configure your MCP client manually, add the "memory" server entry pointing to run.sh:
JSON Configuration (Antigravity, Claude Desktop, Cursor, Windsurf)
Add to your client's mcp_config.json or claude_desktop_config.json:
{
"mcpServers": {
"memory": {
"command": "/ABSOLUTE/PATH/TO/run.sh"
}
}
}TOML Configuration (Codex Desktop)
Add to ~/.codex/config.toml:
[mcp_servers.memory]
command = "/ABSOLUTE/PATH/TO/run.sh"CLI Configuration
Claude Code CLI:
claude mcp add --scope user memory -- /ABSOLUTE/PATH/TO/run.shCodex CLI:
codex mcp add memory -- /ABSOLUTE/PATH/TO/run.sh
Testing
Run the automated test suite to verify OKF serialization, SQLite database operations, and FastMCP tool execution:
python3 test_memory.pyStorage & Environment Variables
By default, mcp-memory creates project-isolated memory stores inside each project's root directory:
OKF Markdown Files (Human-readable):
memory/folder in project root.SQLite Database (Hidden index):
.mcp_memory/memories.dbin project root.
You can customize this behavior using environment variables:
MCP_MEMORY_PROJECT_ROOT: Project root directory (default: process current working directorycwd).MCP_MEMORY_DB_PATH: SQLite database file path (default:.mcp_memory/memories.dbrelative to project root).MCP_MEMORY_DIR: Directory for Open Knowledge Format (OKF).mdfiles (default:memoryrelative to project root).
Tip: If you prefer a single global memory store shared across all projects, set
MCP_MEMORY_DB_PATH=~/.mcp_memory/memories.dbandMCP_MEMORY_DIR=~/.mcp_memory/memoryin your client's MCP configuration.
Available Tools
6 toolsmemory_deleteB
Removes a specific memory entry.
Parameters: key: The key of the memory to remove. project_root: REQUIRED. Absolute path to active project root directory. namespace: Logical namespace (default: 'default').
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| namespace | No | default | |
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool 'removes' an entry, implying a destructive mutation, but does not disclose whether the operation is permanent, whether it errors on missing keys, or what the response contains. For a mutation with no annotation coverage, this is a significant gap.
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, with a one-sentence purpose and a clear, front-loaded parameter list. No fluff or redundant information; every line adds value. This is an optimally structured short definition.
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?
Although an output schema exists (not shown), the description omits critical context for a destructive operation: it does not mention side effects (e.g., irreversible deletion), error behavior on missing keys, or any confirmation/return message. For a delete tool with no annotations, an agent needs more than the bare action and parameter list to call it safely and 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 has 0% description coverage, so the description must explain each parameter. It does: 'key' is the memory key to remove, 'project_root' is the required absolute path, and 'namespace' indicates a logical namespace with a default. This adds meaning beyond the bare schema titles and is sufficient for an agent to understand parameter purposes, though it could be more detailed (e.g., allowed formats).
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 clear verb ('removes') and resource ('specific memory entry'), which unambiguously defines the operation. It is distinct from siblings like memory_store or memory_retrieve by the action. However, it does not explicitly differentiate from similar delete-like operations, though none exist among siblings, so it is clear enough.
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?
No guidance is provided on when to use this tool versus alternatives. The description only lists parameters and the core action, with no mention of contexts in which deletion is appropriate, prerequisites, or scenarios where another tool (e.g., memory_update_last) might be preferred. The agent must infer usage from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_get_lastA
AGENT DIRECTIVE - SESSION INITIALIZATION: Call this tool FIRST when starting work or opening a project session to retrieve the last recorded session checkpoint ('system/last_memory') and understand where work was left off.
Parameters: project_root: REQUIRED. Absolute path to active project root directory. namespace: Logical namespace (default: 'default').
| Name | Required | Description | Default |
|---|---|---|---|
| namespace | No | default | |
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of explaining behavior. It does state that the tool retrieves a checkpoint and helps understand where work left off, implying a read-only operation. However, it does not disclose behavior when no last memory exists, potential errors, or whether any state is initialized, which leaves some ambiguity for an agent.
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 and front-loaded with the most important directive: when to call the tool. The parameter list is placed afterward without redundant explanation or filler. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's low complexity and the presence of an output schema, the description covers the key context: when to call it, what it retrieves, and the required parameters. It falls slightly short on edge-case behavior, such as missing checkpoint handling or namespace semantics, but overall it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so parameter meaning depends entirely on the description. It usefully explains project_root as REQUIRED and an absolute path, and namespace as a logical namespace with a default. The namespace definition is thin, but for a two-parameter tool this is adequate compensation for the bare 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 retrieves the last recorded session checkpoint and is meant for session initialization. It identifies a specific resource ('system/last_memory'), so the purpose is unambiguous. It does not explicitly contrast itself with siblings like memory_retrieve or memory_search, but the 'last checkpoint' scope sets it apart.
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 to call this tool FIRST when starting work or opening a project session, which is strong when-to-use guidance. It does not mention when not to use it or describe alternative sibling tools, so the guidance is clear but not fully comparative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_retrieveA
Retrieves a specific memory record by key.
Parameters: key: The exact memory key to look up (e.g. 'system/last_memory' for session checkpoint). project_root: REQUIRED. Absolute path to active project root directory. namespace: Logical namespace (default: 'default').
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| namespace | No | default | |
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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 only states the action (retrieves) and parameter details. It does not disclose whether the operation is read-only, what happens if the key is missing, whether any side effects occur, or if specific permissions are required. This is a significant gap for a tool that likely performs a read operation.
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 and well-structured. It opens with a single-sentence purpose statement, immediately followed by a clearly formatted parameter list. There is no fluff; every line contributes to understanding the tool's function and parameters. The structure is easy to scan and comprehend.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the basic purpose and parameter semantics, but it lacks guidance on behavioral aspects such as return format (though an output schema exists), error handling, and read-only nature. It also does not differentiate usage from sibling tools. For a simple retrieval with straightforward parameters, this is adequate but not fully 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 0% description coverage, so the description must compensate. It does: it explains the 'key' parameter with an example, clarifies that 'project_root' is required and what it represents, and notes the default for 'namespace'. This adds meaningful context beyond the bare schema definitions, covering all three parameters effectively.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('Retrieves') and a specific resource ('a specific memory record by key'). It is distinct from sibling tools like memory_search (which implies searching) and memory_get_last (which implies getting the last record). The key-based retrieval purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives. There is no mention of when to prefer memory_retrieve over memory_search or memory_get_last, nor any exclusions or prerequisites. The only usage hint is implicit: it retrieves by an exact key, but this is not framed as a decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_searchA
Searches persistent memories matching keywords, tags, or namespace patterns.
Parameters: project_root: REQUIRED. Absolute path to active project root directory. query: Search string for full-text search across keys, frontmatter, and content. tags: Optional list of tags to filter by. namespace: Optional namespace filter. limit: Maximum number of results to return (default: 10).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | No | ||
| namespace | No | ||
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It states the tool 'searches' which implies a read-only operation, but does not explicitly disclose that it makes no modifications. It also does not mention performance characteristics (e.g., indexing), result ordering, or any potential side effects like caching. This is acceptable for a search, but the absence of explicit read-only confirmation or other behavioral notes leaves a minor gap.
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 and well-structured. It starts with a one-sentence purpose statement, then lists parameters in a bulleted format with clear labels. There is no redundant fluff, and the most important information (the search behavior) is front-loaded. Every sentence contributes value, and the parameter descriptions are directly 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 that an output schema exists, the description need not explain return values. It covers the tool's purpose, all parameters with semantics, and minimal usage context. However, it falls short on usage guidance relative to siblings (e.g., when to use this over memory_retrieve) and does not mention any edge cases or limitations (e.g., whether searches are case-insensitive, or how tags/namespace interact). These omissions are minor, but they prevent a perfect score.
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 description provides detailed semantic meaning for every parameter, going well beyond the schema (which has 0% description coverage). For example, project_root is specified as 'absolute path to active project root directory', query is described as 'search string across keys, frontmatter, and content', and limit is given a default meaning. This fully compensates for the lack of schema descriptions and enables correct usage without ambiguity.
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 'Searches' and a specific resource 'persistent memories', and enumerates matching criteria (keywords, tags, namespace patterns). This is distinguishable from siblings like memory_retrieve (which likely fetches a specific memory) and memory_store (which writes), so an agent can tell them apart at a glance.
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 explains what the tool does and its parameters, but does not explicitly state when to prefer it over sibling tools like memory_retrieve or memory_get_last. The intended use case (searching rather than retrieving) is implied by the word 'Searches' but not spelled out. It lacks explicit 'when not to use' guidance, such as 'use memory_retrieve for exact ID lookups'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_storeA
Stores or updates a persistent memory record in Open Knowledge Format (OKF v0.2).
Parameters: key: Unique identifier or path for the memory (e.g. 'user/preferences/coding_style' or 'system/last_memory'). content: The core information to store (string text or structured dictionary). project_root: REQUIRED. Absolute path to active project root directory. tags: Optional classification tags for filtering (e.g. ['preferences', 'user']). namespace: Logical separation for contexts or users (default: 'default'). concept_type: OKF concept type (default: 'Agent Memory'). Options: 'Agent Memory', 'Checkpoint', 'Metric', 'Playbook', etc. title: Human-readable display name. description: Single-sentence summary of the concept. resource: Canonical URI for the underlying asset. status: Lifecycle status ('draft' | 'stable' | 'deprecated'). Default: 'stable'. stale_after: ISO date ('YYYY-MM-DD') when memory becomes stale. sources: Provenance sources list [{resource, id, title, author, usage_count, last_modified}]. usage_window: Sources usage window framing {from, to}. verified: Verification events list or mapping [{by, at}]. generated_by: Actor identifier string following actor convention ('/', 'human:', 'process:'). runtime: For Attested Computation concepts ('bigquery', 'postgres', 'dbt', 'python'). parameters: For Attested Computation concepts [{name, type, required}]. executor: For Attested Computation concepts {resource, receipt}. attester: For Attested Computation concepts {resource}. computation: Path to external computation file.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | ||
| tags | No | ||
| title | No | ||
| status | No | ||
| content | Yes | ||
| runtime | No | ||
| sources | No | ||
| attester | No | ||
| executor | No | ||
| resource | No | ||
| verified | No | ||
| namespace | No | default | |
| parameters | No | ||
| computation | No | ||
| description | No | ||
| stale_after | No | ||
| concept_type | No | ||
| generated_by | No | ||
| project_root | Yes | ||
| usage_window | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that records are persistent and that the operation is an upsert ('Stores or updates'), but it does not explain overwrite semantics, whether content is merged or replaced, side effects on existing keys, required permissions, or how the OKF record is materialized. This is a significant gap for a write tool.
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 one-sentence purpose is front-loaded, followed by a systematically formatted parameter list. Each parameter line adds semantic value that the schema lacks, and the length is justified by the tool's 20-parameter complexity. There is 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?
For a complex 20-parameter tool with no annotations, the description covers all parameters, required fields, defaults, and special-case fields. Since an output schema is present, return values need not be described. The main remaining gaps are usage routing and overwrite/merge behavior, but the parameter documentation is otherwise thorough enough for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description fully compensates by documenting all 20 parameters with meaning, defaults, examples, allowed values, and context-specific notes such as 'For Attested Computation concepts'. This goes well beyond the bare schema and gives an agent enough semantic grounding to construct valid arguments.
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 states a specific verb and resource: 'Stores or updates a persistent memory record in Open Knowledge Format (OKF v0.2).' This is clear and distinguishes the tool from retrieval/deletion tools. However, it does not explicitly differentiate from memory_update_last, which also performs an update, so it misses full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when storing or updating a keyed memory, but gives no explicit when-to-use guidance, no exclusions, and no mention of alternatives such as memory_update_last or memory_delete. With five siblings, an agent gets no routing help beyond the tool's name and first sentence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memory_update_lastA
AGENT DIRECTIVE - MILESTONE & SESSION CHECKPOINTING: Call this tool whenever completing a milestone, making key project changes, or pausing work to update the canonical project checkpoint ('system/last_memory') so future sessions know where work was left off.
Parameters: content: Brief note or structured dictionary summarizing progress and referencing key memory files (e.g. 'Goal Progress'). project_root: REQUIRED. Absolute path to active project root directory. namespace: Logical namespace (default: 'default'). summary: Optional one-sentence description of the milestone achieved.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| summary | No | ||
| namespace | No | default | |
| project_root | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It says the tool updates the canonical checkpoint 'so future sessions know where work was left off', which conveys the main effect, but it does not disclose whether the previous checkpoint is overwritten, whether a missing checkpoint is created, or any other 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 key directive is front-loaded and every parameter is explained without filler. The block is reasonably compact for the amount of guidance it provides, though the 'AGENT DIRECTIVE' framing adds a small amount of stylistic overhead.
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 tool with 4 parameters, an output schema, and no enums or nested objects, the description covers when to call the tool, what it accomplishes, and what each parameter means. It does not explain overwrite behavior or routing to siblings, but an agent has enough to select and invoke the tool correctly in the intended checkpointing workflow.
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 0%, but the description compensates by explaining each parameter: content is a progress note or dictionary, project_root is a required absolute path, namespace has a default, and summary is an optional one-sentence description. Some semantics still remain abstract, such as what 'logical namespace' affects, so it is not a perfect 5.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly names a specific verb and target: 'update the canonical project checkpoint ('system/last_memory')'. It also frames the tool as milestone/session checkpointing, which differentiates it from sibling tools like memory_store or memory_get_last by focusing on updating the single canonical 'last_memory' record.
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 conditions: 'whenever completing a milestone, making key project changes, or pausing work'. However, it does not state when not to use it or explicitly compare it with alternatives such as memory_store for new memories.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
memory_get_last and memory_retrieve overlap because both can retrieve the same system/last_memory record, and memory_update_last similarly overlaps with memory_store for that key. The AGENT DIRECTIVE text helps clarify intended usage, but the boundaries between generic and session-specific operations are not fully crisp.
All tools share a consistent memory_ prefix and snake_case formatting, following a readable memory_<verb> pattern. Minor synonym inconsistency between retrieve/get and store/update keeps it from being perfectly uniform.
Six tools is well-scoped for a memory server: generic CRUD plus session checkpointing. Each tool has a distinct role, and the specialized checkpoint pair adds clear value without bloating the surface.
The set covers the full memory lifecycle: store, retrieve, search, delete, and session checkpoint read/write. There are no obvious dead ends for the stated domain of persistent project memory.
Maintenance
Related MCP Connectors
Persistent memory for AI agents. Search, store, and recall across sessions.
Persistent memory for AI agents. Search and store durable facts, preferences and decisions.
Persistent memory for AI agents: add, search, update, and delete long-term memories.
Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
- -licenseNot gradedqualityNot gradedmaintenanceProvides persistent local memory functionality for AI assistants, enabling them to store, retrieve, and search contextual information across conversations with SQLite-based full-text search. All data stays private on your machine while dramatically improving context retention and personalized assistance.3
- AlicenseNot gradedqualityNot gradedmaintenanceProvides AI coding agents with persistent, long-term memory through local semantic search and SQLite storage. It enables agents to save and retrieve architectural decisions or project context across different conversation sessions without requiring cloud services.
- AlicenseNot gradedqualityDmaintenanceProvides persistent long-term memory for AI assistants with tag-based retrieval, wiki-style linking, and source references, storing memories as markdown files with SQLite index.1MIT
- FlicenseNot gradedqualityBmaintenancePersistent memory for AI agents enabling saving, searching, and managing knowledge across sessions with local markdown files.2
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/fellowgeek/mcp-memory'
If you have feedback or need assistance with the MCP directory API, please join our Discord server