Changes Memory MCP
The Changes Memory MCP server stores, retrieves, and searches project-level and cross-project corrections, preferences, conventions, domain facts, and anti-patterns. It helps agents avoid repeating mistakes by consulting past learnings.
Core Capabilities:
Add Memory:
•add_local– Save a new entry to a project’s memory file (corrections, preferences, etc.) with rich metadata: title, summary, rationale, tags, optional before/after examples, and related file paths. Accepts aprojectPathparameter to target a specific project.
•add_global– Save a cross-project entry to the global memory file, using the same structure.Read & Search:
•list_changes– Retrieve all saved entries from project, global, or both, with optional result limits.
•list_change_index– Get a lightweight index (id, title, store, kind, tags, paths) to quickly decide which entries to fetch in full. Supports optional text filtering.
•get_change– Fetch the full details of a single entry by its ID.
•search_changes– Full-text search across titles, summaries, tags, paths, and content, with configurable result limits.
•get_relevant_changes– Given a task or risk description, automatically surface the most relevant local and global entries to inform decisions.Tag Management:
•list_tag_catalog– View the recommended set of tags (e.g.,api,frontend,security,tests) for categorizing entries. Entries require 2–5 tags from this catalog to enable efficient indexing and retrieval.Flexible Configuration:
Memory is stored as plain Markdown files. Paths are configurable via CLI arguments or environment variables (CHANGES_MEMORY_PROJECT_PATH,CHANGES_MEMORY_GLOBAL_PATH), falling back to defaults (<project>/.codex/changes.mdfor local,~/.codex/changes.mdfor global).Cross-Project Support:
All read tools andadd_localaccept aprojectPathto target the correct project when working across multiple repositories.
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., "@Changes Memory MCPsearch change memory for frontend naming conventions"
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.
Knowledge Memory MCP
Local MCP server for storing corrections, preferences, and reusable criteria across conversations, with a single Codex configuration and separate global + project memory files.
What It Solves
Stores user-approved corrections in a stable format.
Lists, searches, and retrieves relevant criteria for new tasks.
Helps agents avoid repeating mistakes when they consult this MCP before implementation or review.
Related MCP server: SecondBrain
Memory Stores
By default, memory is stored in plain Markdown files:
~/.codex/changes.md # global memory
<project>/.codex/changes.md # project memoryYou can change this with CLI arguments or environment variables:
--project-path=/path/to/project: default project when a tool call does not passprojectPath.--global-path=/path/to/changes.md: exact file path for global memory.CHANGES_MEMORY_PROJECT_PATH: equivalent to--project-path.CHANGES_MEMORY_GLOBAL_PATH: equivalent to--global-path.
Backward compatibility:
--memory-rootandCHANGES_MEMORY_ROOTstill work as the default project path.--memory-pathandCHANGES_MEMORY_PATHforce an exact file path for the default project memory.
MCP Tools
add_local: stores a new correction or criterion in project memory.add_global: stores a cross-project criterion in global memory.list_change_index: lists a compact index of entries with id, title, store, kind, tags, and paths.list_tag_catalog: lists the recommended tag catalog for memory entries.list_changes: lists project + global entries by default.search_changes: searches entries by free text, tags, or paths.get_relevant_changes: returns the most relevant project + global entries for a task.get_change: retrieves an exact entry by id from project + global memory.
Read tools and add_local accept projectPath to select the right project when a conversation touches multiple repositories.
Recommended Tags
Every add_local and add_global call must include tags. Prefer 2-5 tags from this catalog:
api, backend, codex, components, config, database, docker, docs, frontend,
git, i18n, json, mcp, migration, mongo, naming, opensearch, performance,
security, styles, testsUse list_tag_catalog when unsure which tags fit. Tags are what make list_change_index useful without loading full entries.
Run From GitHub
npx -y --package github:formonkey/knowledge-memory-mcp#main knowledge-memory-mcpRun From A Local Checkout
node /path/to/knowledge-memory-mcp/src/index.jsCodex MCP Configuration
Use one global config in ~/.codex/config.toml.
GitHub shows a copy button on each fenced code block below, so users can copy each file or snippet directly.
Recommended setup, directly from GitHub:
[mcp_servers.knowledge_memory]
command = "npx"
args = [
"-y",
"--package",
"github:formonkey/knowledge-memory-mcp#main",
"knowledge-memory-mcp"
]
enabled = true
startup_timeout_sec = 20
tool_timeout_sec = 60
default_tools_approval_mode = "auto"Local checkout:
[mcp_servers.knowledge_memory]
command = "node"
args = [
"/absolute/path/to/knowledge-memory-mcp/src/index.js"
]
enabled = true
startup_timeout_sec = 20
tool_timeout_sec = 60
default_tools_approval_mode = "auto"Environment-variable alternative:
[mcp_servers.knowledge_memory.env]
CHANGES_MEMORY_GLOBAL_PATH = "/Users/nigma/.codex/changes.md"After changing the config, restart Codex so the MCP server is reloaded.
Copy-Paste Codex Setup
This is the recommended setup when several Codex agents should share the same memory server.
GitHub renders a copy-to-clipboard button on every code block in this section.
Paste each block here:
~/.codex/config.toml # one global MCP server config
<project>/.codex/agents/knowledge-reviewer.toml # optional read-only reviewer agent
<project>/.agents/skills/knowledge-memory-review/SKILL.md # optional reviewer skill
<project>/AGENTS.md # optional project-wide agent rules1. Global MCP config
Copy this into:
~/.codex/config.toml[mcp_servers.knowledge_memory]
command = "npx"
args = [
"-y",
"--package",
"github:formonkey/knowledge-memory-mcp#main",
"knowledge-memory-mcp"
]
enabled = true
startup_timeout_sec = 20
tool_timeout_sec = 60
default_tools_approval_mode = "auto"Restart Codex after editing ~/.codex/config.toml.
2. Project reviewer agent
Create this file inside any project that should use the reviewer:
<project>/.codex/agents/knowledge-reviewer.tomlname = "knowledge_reviewer"
description = "Read-only reviewer that checks code against knowledge_memory before and after implementation."
model = "gpt-5.5"
model_reasoning_effort = "high"
sandbox_mode = "read-only"
developer_instructions = """
You are a read-only knowledge reviewer for this repository.
Required MCP server:
- knowledge_memory
Available knowledge_memory tools:
- list_change_index
- list_tag_catalog
- get_change
- search_changes
- get_relevant_changes
Guardrails:
- Do not edit files.
- Do not run write, format, migration, install, or destructive commands.
- Do not call add_local or add_global.
- Do not save memory. If a new reusable rule is found, propose it to the main agent and wait for explicit user confirmation.
- Prefer compact reads: call list_change_index first, then retrieve only relevant entries with get_change, search_changes, or get_relevant_changes.
- When reviewing multiple projects, pass projectPath to knowledge_memory tool calls.
Review workflow:
1. Call list_change_index with projectPath when available.
2. Use tags from the index to decide which entries matter.
3. Retrieve only the relevant entries.
4. Review the current task or diff against those entries.
5. Report findings first, ordered by severity, with file and line references when available.
6. Include an explicit "Memory Checks" section listing which memory ids were applied or saying that no relevant entries were found.
Output format:
- Findings
- Memory Checks
- Open Questions
- Suggested Memory To Save, only if applicable and only as a proposal
"""Notes:
The reviewer workflow is fully embedded in
developer_instructions, so this agent works even without an extra skill file.The important guardrail is
sandbox_mode = "read-only"plus the explicit instruction not to use write tools.If your Codex version supports additional per-agent permission fields, keep this reviewer read-only.
3. Optional reviewer skill
Create this file if you want the same review workflow available as a reusable Codex skill in the project:
<project>/.agents/skills/knowledge-memory-review/SKILL.md---
name: knowledge-memory-review
description: Review a task, plan, or diff against knowledge_memory using the compact memory index first.
---
# Knowledge Memory Review
Use this skill when reviewing implementation plans, diffs, bug fixes, or refactors against saved project and global memory.
## Required MCP Server
- `knowledge_memory`
## Read-Only Tools
- `list_change_index`
- `list_tag_catalog`
- `get_change`
- `search_changes`
- `get_relevant_changes`
## Guardrails
- Do not edit files.
- Do not run write, format, migration, install, or destructive commands.
- Do not call `add_local` or `add_global`.
- Do not save memory directly.
- If a new reusable rule should be saved, propose it and wait for explicit user confirmation.
- Prefer compact reads: call `list_change_index` first, then retrieve only the entries that look relevant.
- When reviewing several projects in one conversation, pass `projectPath` to memory tool calls.
## Workflow
1. Call `list_change_index` with `projectPath` when available.
2. Select candidate entries by tags, paths, title, and summary.
3. Retrieve only relevant entries with `get_change`, `search_changes`, or `get_relevant_changes`.
4. Review the task, plan, or diff against those entries.
5. Report findings first, ordered by severity, with file and line references when available.
6. Include a `Memory Checks` section listing the memory ids applied, or state that no relevant entries were found.
7. Include `Suggested Memory To Save` only when there is a reusable learning, and only as a proposal.The knowledge-reviewer.toml agent above already contains these rules. This skill is useful for main agents or other reviewers that load repository skills.
4. Optional project AGENTS.md snippet
Copy this into a project's AGENTS.md if you want every agent in that repo to use memory:
Before implementing, reviewing, or fixing code, use the `knowledge_memory` MCP.
Start with `list_change_index` to inspect the compact index. Use tags to decide which entries are relevant, then call `get_change`, `search_changes`, or `get_relevant_changes` only for those entries.
Use `add_local` only after explicit user confirmation for project-specific learnings.
Use `add_global` only after explicit user confirmation for cross-project learnings.
Every saved memory entry must include 2-5 tags from `list_tag_catalog`.
When a conversation touches multiple projects, pass `projectPath` to select the correct local memory file.5. Example prompts
Use the reviewer before implementation:
Ask knowledge_reviewer to inspect memory for this repo and review the planned change before I implement it.Use the reviewer after implementation:
Ask knowledge_reviewer to review this diff against knowledge_memory and report any repeated mistakes or missing conventions.Save a local project rule:
Save this as local memory: React components in this repo must use PascalCase file names and include the Component suffix. Tags: components, naming, frontend.Save a global rule:
Save this as global memory: Always check list_change_index before reading full memory entries. Tags: codex, mcp, performance.Recommended Agent Instruction
Add a rule like this to global or repository instructions when you want agents to use this memory:
Before implementing or reviewing changes, call `list_change_index` on the `knowledge_memory` MCP server to inspect the compact index. Then call `get_change`, `search_changes`, or `get_relevant_changes` only for entries that look relevant.
When a conversation touches multiple projects, pass `projectPath` in tool calls to select the correct local memory.
Do not store memory on your own initiative. If the user confirms that a learning should be saved, use `add_local` for project-specific criteria and `add_global` only for criteria that apply across projects. Always include 2-5 tags from the catalog.Notes
Persistence currently uses plain
changes.mdfiles, with no database or external index.Search is text-based with simple ranking. It is enough to start and easy to audit.
The model can later evolve toward richer scopes, editable confirmations, and explicit
Before -> Afteroutput.
Available Tools
8 toolsadd_globalGuardar GlobalC
Guarda una correccion o criterio transversal en la memoria global.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| tags | Yes | Use 2-5 tags from this catalog when possible: api, backend, codex, components, config, database, docker, docs, frontend, git, i18n, json, mcp, migration, mongo, naming, opensearch, performance, security, styles, tests. | |
| after | No | ||
| title | Yes | ||
| before | No | ||
| summary | Yes | ||
| examples | No | ||
| rationale | Yes | ||
| relatedPaths | No | ||
| requestedChange | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations provide readOnlyHint=false, which matches the 'Guarda' action, but the description adds no further behavioral context. It does not mention persistence semantics, overwrite behavior, authorization requirements, or side effects, which is minimal for a mutation 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 description is a single, front-loaded sentence with no filler or redundant information. It is concise and readably structured, though its brevity sacrifices important details that are penalized in other dimensions.
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 10 parameters, no output schema, only readOnlyHint=false as an annotation, and a rich set of sibling tools, the description is far too sparse. It fails to address return values, the meaning of fields like before/after/relatedPaths, or how global entries interact with local ones.
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 only 10% (only the 'tags' parameter has a description), and the tool description does not explain any parameters. Required fields like title, summary, requestedChange, and rationale are left entirely to name inference, which is insufficient for a 10-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Guarda') and the resource ('memoria global'), specifying the content type ('correccion o criterio transversal'). The 'global' qualifier distinguishes it from sibling add_local, though it could more explicitly contrast local vs global storage.
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 usage guidance is given. The description does not mention when to prefer add_global over add_local, nor any prerequisites or exclusion criteria. The only hint is the word 'global', which is implicit rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_localGuardar LocalB
Guarda una nueva correccion o criterio aprendido en la memoria del proyecto.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | ||
| tags | Yes | Use 2-5 tags from this catalog when possible: api, backend, codex, components, config, database, docker, docs, frontend, git, i18n, json, mcp, migration, mongo, naming, opensearch, performance, security, styles, tests. | |
| after | No | ||
| title | Yes | ||
| before | No | ||
| summary | Yes | ||
| examples | No | ||
| rationale | Yes | ||
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| relatedPaths | No | ||
| requestedChange | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, and the description confirms a write action ('guarda'), but no additional behavioral details are disclosed, such as whether it overwrites existing entries, merges with prior data, or requires specific permissions. The description adds little beyond what the annotation already conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no superfluous words. It is concise and to the point, ensuring the core purpose is immediately clear.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (11 parameters, 5 required, no output schema), the minimal description is insufficient. It does not clarify required fields, what the tool returns (if anything), or side effects, leaving significant gaps for a mutation tool with many inputs.
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?
With only 18% schema description coverage, the description should compensate, but it does not explain the 11 parameters or the 5 required fields beyond a generic notion of 'correccion o criterio aprendido'. Tags and projectPath have limited schema descriptions, but title, summary, requestedChange, rationale, and others remain undocumented, leaving the agent without sufficient guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Guarda') and identifies the resource ('una nueva correccion o criterio aprendido') with a clear location ('en la memoria del proyecto'). This distinguishes it from the sibling tool add_global, which targets global memory, making 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'memoria del proyecto' implies a local scope, suggesting use for project-specific knowledge, but the description does not explicitly contrast with add_global or other alternatives like search_changes. No exclusions or 'when not to use' guidance are provided, so usage is inferred but not clarified.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_changeObtener CambioARead-only
Recupera un cambio exacto por id
| Name | Required | Description | Default |
|---|---|---|---|
| id | Yes | ||
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| includeGlobal | No | Incluye la memoria global. Por defecto true. | |
| includeProject | No | Incluye la memoria del proyecto. Por defecto true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, so the read-only nature is already communicated. The description adds that the retrieval is 'exacto' (exact) by id, but it does not disclose behavior when the id is not found, return format, or how includeGlobal/includeProject affect the lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that immediately expresses the core functionality with no filler or redundancy. It efficiently uses the available space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description should explain what a 'cambio' contains or what happens on failure, but it does not. The optional memory-related parameters are entirely omitted from the description, leaving their behavior solely to schema definitions, which is insufficient for a complete understanding.
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 clarifies that the 'id' parameter is the change's identifier, which is missing from the schema description for id. However, the other three parameters (projectPath, includeGlobal, includeProject) already have detailed schema descriptions, so the description adds minimal value beyond that.
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 'Recupera un cambio exacto por id' clearly states the action (retrieves), the resource (a change), and the identifier used for retrieval. This distinguishes it from sibling tools like list_changes or search_changes, which operate on collections or queries.
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 phrase 'por id' implies that the tool is for retrieving a specific known change by its identifier, but it does not explicitly compare against alternatives like search_changes or list_changes. No exclusions or when-not-to-use guidance is provided, leaving usage context implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_relevant_changesCambios RelevantesBRead-only
Devuelve los cambios mas relevantes para una tarea o riesgo concreto
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| limit | No | ||
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| includeGlobal | No | Incluye la memoria global. Por defecto true. | |
| includeProject | No | Incluye la memoria del proyecto. Por defecto true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, and the description's 'Devuelve' is consistent (read operation). The description adds little beyond the annotation, not explaining how relevance is determined or that it uses local/project memory (as suggested by parameters). With annotations covering the safety profile, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundancy or fluff. It front-loads the verb and resource, though it could briefly mention the memory aspect without becoming verbose.
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 states the tool returns relevant changes but does not explain the retrieval mechanism or the use of global/project memory (evident from parameters). With no output schema, more details about the returned content would improve completeness, but the purpose is still clear.
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 clarifies that the 'task' parameter refers to a task or risk ('tarea o riesgo concreto'), adding meaning to the otherwise undocumented schema field. However, it does not explain 'limit' or other parameters, and schema coverage is only 60%, so the description only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the verb 'Devuelve' (returns) and identifies the resource 'cambios relevantes' (relevant changes) for a specific task or risk, providing specific scope. It distinguishes from sibling tools like list_changes or get_change by focusing on relevance to a task/risk, though it does not explicitly contrast with alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'para una tarea o riesgo concreto' gives a clear use case, implying when to use the tool. However, it provides no exclusions or comparison with siblings like search_changes, so guidance on alternatives is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_change_indexListar IndiceARead-only
Lista un indice compacto de cambios con id, titulo, store, tipo, tags y rutas para decidir que consultar despues.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | Filtro textual opcional sobre titulo, resumen, tags, rutas y contenido. | |
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| includeGlobal | No | Incluye la memoria global. Por defecto true. | |
| includeProject | No | Incluye la memoria del proyecto. Por defecto true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, indicating a safe read operation. The description adds useful context about the response format (compact index with specific fields) and the decision-making purpose, but does not disclose details like sorting or pagination behavior. This is modest added value beyond annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the core function and includes no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only listing tool, the description covers the essentials: what is returned, and why to use it. However, with no output schema and sibling tools like list_changes/search_changes, a little more distinction would help, so not a 5.
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 already covers 80% of parameters with descriptions. The description doesn't add parameter-specific guidance; it only implies the index is compact. Baseline 3 is appropriate given high schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and clearly identifies the resource: a compact index of changes with specific fields (id, title, store, type, tags, paths). It also conveys the purpose of aiding subsequent queries, distinguishing it from similar tools like list_changes.
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 states the context of use: to decide which changes to query later, implying it is a preliminary browsing tool. However, it does not explicitly name alternative tools or provide exclusions, 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.
list_changesListar CambiosARead-only
Lista los cambios guardados en la memoria del proyecto y la global.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| includeGlobal | No | Incluye la memoria global. Por defecto true. | |
| includeProject | No | Incluye la memoria del proyecto. Por defecto true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, so the agent knows it's safe. The description adds the scope of the listing (project and global memory), which is somewhat useful but does not disclose any other behavioral details such as ordering, pagination, or default inclusion of both memory types (though that is in the schema).
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?
One concise sentence that immediately conveys the function with no fluff.
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 is brief but adequate for a simple read-only list operation, especially with the schema providing parameter details and annotations declaring safety. However, it lacks any usage guidance or mention of output format, and does not clarify when to prefer this over sibling search/relevant-change tools.
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 already describes 3 of 4 parameters (limit lacks description but has type/min/max). The description does not add meaning beyond saying the changes come from project and global memory, which matches includeProject/includeGlobal. Thus it adds little beyond 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 lists changes saved in project and global memory (verb 'Lista' + resource 'cambios guardados'). This distinguishes it from siblings like search_changes (search) and get_change (retrieve specific change).
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 vs alternatives like search_changes or get_change. It only states what it does, without any exclusions or recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tag_catalogListar TagsARead-only
Lista el catalogo recomendado de tags para usar al guardar memoria con add_local o add_global.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already signals a safe read operation. The description adds behavioral context by explaining that it provides a recommended catalog for memory saving, though it doesn't disclose return format or potential empty results.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that directly states action and purpose, with no wasted words.
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 parameterless, read-only tool with no output schema, the description fully explains purpose and usage context, making it complete for an agent to select and invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the schema fully covers the input, and the description appropriately doesn't discuss parameters, matching the baseline for parameterless tools.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Lista') and resource ('catalogo recomendado de tags'), and explicitly connects to sibling tools (add_local, add_global) for context, clearly distinguishing this from other list tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It states the exact use case: get recommended tags when saving memory with add_local or add_global, giving clear context for when to invoke it. It doesn't mention exclusions, but the purpose is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_changesBuscar CambiosBRead-only
Busca cambios por texto libre
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| projectPath | No | Ruta absoluta del proyecto cuya memoria local se quiere usar. Si se omite, se usa el cwd o --project-path del servidor. | |
| includeGlobal | No | Incluye la memoria global. Por defecto true. | |
| includeProject | No | Incluye la memoria del proyecto. Por defecto true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already declares a safe read operation, so the description does not need to repeat that. The description adds the 'free text' search behavior but does not disclose scope (project vs global) or return format. This is acceptable given the annotation covers the main safety concern.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, focused sentence with no wasted words. It is front-loaded and immediately conveys the core purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple search tool, the description is minimally adequate but lacks important context. It does not explain how this tool differs from 'get_relevant_changes', nor does it mention that the search operates on local memory (as indicated by projectPath and includeGlobal). The schema provides parameter details, but without an output schema, the return format is not disclosed, and the description does not compensate.
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 60%, with descriptions for projectPath, includeGlobal, and includeProject, but not for query and limit. The description adds meaning to 'query' by calling it 'texto libre' (free text), but does not clarify 'limit' or other parameters beyond what the schema already provides. It provides some added value but does not fully compensate for the missing parameter descriptions.
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 'Busca cambios por texto libre' clearly states the tool's function: searching changes by free text. It uses a specific verb (search) and resource (changes). However, it does not distinguish from the sibling tool 'get_relevant_changes', which likely also searches changes in a similar manner.
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 such as 'get_relevant_changes' or 'list_changes'. There is no mention of intended use cases, exclusions, or relationships to sibling tools.
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.
8 tool updates
v0.1.0- First observed
add_global - First observed
add_local - First observed
get_change - First observed
get_relevant_changes - First observed
list_change_index - First observed
list_changes - First observed
list_tag_catalog - First observed
search_changes
TDQS
Most tools are clearly distinct, but list_changes and list_change_index both list changes, and search_changes vs get_relevant_changes could overlap. Descriptions help clarify the intended use cases, so the ambiguity is limited.
All tool names follow a consistent verb-first snake_case pattern (e.g., add_local, search_changes, get_change). The add_local/add_global pair uses a predictable scope suffix, and the naming aligns well across the set.
With 8 tools, the server is well-scoped for a memory management system. Each tool serves a clear purpose, and the count is within the expected range to avoid unnecessary complexity.
The server covers creation, retrieval, search, and listing, but lacks update and delete operations for changes. Without these, correcting or removing stored memories is not possible, which is a notable gap in lifecycle coverage.
Maintenance
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
An MCP memory server. One memory your agents share — across models, devices and apps.
One memory, every AI. A shared, user-owned markdown memory your AI clients read and write over MCP.
- memnodeOAuthdev.memnode
Persistent, inspectable memory for AI agents with lineage, correction, and a hosted MCP endpoint.
Shared, governed long-term memory for AI agents across tools and sessions via MCP and REST.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceA local, cross-editor MCP server that provides persistent memory for coding agents, capturing and recalling decisions, conventions, and fixes across sessions without API keys.-
- AlicenseAqualityCmaintenanceA local-first MCP server that provides a shared Markdown-based memory for AI coding agents, enabling cross-agent context persistence via tools like memory_search and memory_capture.101MIT
- AlicenseBqualityAmaintenanceA local MCP server that provides agents with tools to list, read, search, inspect history and diffs, and capture unstructured text in a user-owned Git repository of durable memory.5MIT
- AlicenseNot gradedqualityBmaintenanceMCP server providing persistent, local-first memory for AI agents via Markdown files in a git repo, with search, branching, and auditability.172MIT
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/formonkey/knowledge-memory-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server