memanto-mcp
memanto-mcp
Memoria semántica tipada para Claude. Memoria con opiniones, diseñada para agentes B2B regulados.
La mayoría de los servidores de "MCP de memoria" te ofrecen save_memory(text) y dan el trabajo por terminado. Este servidor incluye un modelo de memoria con opiniones: registros tipados (fact, decision, commitment, instruction, …), procedencia y nivel de confianza en cada escritura, alcance consciente del inquilino (tenant-aware) y recuperación bi-temporal, junto con una habilidad (skill) de Claude que le indica al modelo cuándo recordar, cuándo recuperar y cuándo responder, además de cómo mantener las citas y la gestión de inquilinos de forma limpia.
Si estás creando agentes B2B en la plataforma de Anthropic —tecnología legal, finanzas, atención sanitaria, operaciones con clientes, trabajo de conocimiento interno—, este es el público para el que se ha diseñado.
Qué lo hace distintivo
Memoria tipada. Trece tipos de memoria de primer nivel (
fact,preference,goal,decision,commitment,instruction,relationship,context,observation,event,artifact,learning,error). Un tipo incorrecto equivale a una recuperación ruidosa. Elegir el tipo correcto es parte del contrato de la API.Procedencia y confianza en cada registro.
explicit_statement/inferred/observed/validated/corrected/imported, además de una puntuación de confianza de 0.0 a 1.0. Filtrable en la recuperación mediantemin_confidence. El registro de auditoría está en los datos, no añadido a posteriori.Lecturas bi-temporales.
recall_as_of(date)devuelve la memoria tal como estaba en una fecha determinada;recall_currentexcluye los registros sustituidos o caducados. Creado para flujos de trabajo de tipo "qué sabíamos en ".Una habilidad de Claude incluida que cumple su función.
skills/memanto-memory/SKILL.mdle indica a Claude cuándo usar cada verbo, cómo limitar las memorias a los límites del inquilino mediante unagent_idcompuesto, cuándo la recuperación en bruto es mejor que las respuestas sintetizadas (redacción de textos externos → recuperación en bruto, siempre) y cómo tratar los cuerpos de memoria como no confiables al leerlos.Un solo proceso. Envuelve la capa de servicio de Python memanto directamente; no hay que ejecutar ningún proceso REST por separado.
Related MCP server: CozoDB Memory MCP Server
Qué no es esto
No es un almacén vectorial de propósito general. Las memorias son cortas, estructuradas y tipadas; si necesitas indexar 100.000 contratos, hazlo en tu almacén de documentos y usa esto para las decisiones, compromisos y observaciones que el agente hace sobre ellos.
No es agnóstico al backend (todavía). Actualmente está vinculado a Moorcheh como backend vectorial. El nivel gratuito es de 100.000 operaciones al mes; los backends conectables están en la hoja de ruta.
No es un sistema de auditoría empresarial. La habilidad tiene opiniones sobre lo que necesitan los despliegues regulados; el servidor aún no aplica todo ello. Consulta la hoja de ruta para ver las carencias.
Herramientas
Nueve herramientas MCP, bajo el espacio de nombres memanto:
Herramienta | Propósito |
| Almacenar una memoria tipada (hecho, preferencia, objetivo, decisión, …) |
| Búsqueda semántica en la memoria de un agente |
| Recuperar solo memorias activas (no sustituidas) |
| Recuperar tal como estaba en una fecha específica |
| Respuesta basada en RAG usando el LLM integrado de memanto |
| Aprovisionar un nuevo agente (crea un espacio de nombres en Moorcheh) |
| Listar agentes conocidos |
| Obtener los metadatos de un solo agente |
| Eliminar un agente y toda su memoria (destructivo) |
Instalación
Como plugin de Cowork (modo Cowork de Anthropic)
Descarga la última versión de
memanto-mcp.plugin.Suéltalo en Cowork a través de la interfaz de usuario de instalación de plugins.
Configura
MOORCHEH_API_KEYen el entorno que hereda Cowork y luego reinicia Cowork.
Como servidor MCP independiente (Claude Code, Cline, Cursor, Continue, …)
pip install memanto-mcp
export MOORCHEH_API_KEY="mch_..."Luego apunta tu host MCP al binario. Claude Code:
claude mcp add memanto -- memanto-mcpCursor / Cline / Continue: añádelo a tu configuración de MCP como un servidor stdio con el comando memanto-mcp.
Para que la habilidad incluida se cargue en hosts MCP que admitan habilidades (Cowork, Claude Code con el plugin de habilidades), copia skills/memanto-memory/SKILL.md en el directorio de habilidades del host.
Obtener una clave API de Moorcheh
Regístrate en https://console.moorcheh.ai/api-keys. El nivel gratuito es de 100.000 operaciones al mes.
Primera ejecución
> Create a memanto agent called acme:matter-4711:user-jdoe and remember
> that this matter has a 60-day notice period.Claude llama a memanto_create_agent y luego a memanto_remember(memory_type="fact", content="Matter 4711 (Acme): 60-day notice period.", confidence=0.95).
> What do we know about Matter 4711?Claude llama a memanto_recall(query="Matter 4711", agent_id="acme:matter-4711:user-jdoe") y cita el hecho almacenado.
> What was our position on Matter 4711 before the redesign on 2026-03-01?Claude llama a memanto_recall_as_of(query="Matter 4711 position", agent_id=..., as_of_date="2026-02-28").
Cómo piensa la habilidad sobre el alcance
El servidor utiliza agent_id como la primitiva de alcance. La habilidad enseña a Claude a tratarlo como una clave compuesta:
agent_id = "<tenant>:<workspace>:<actor>"Por ejemplo: acme:matter-4711:user-jdoe. La recuperación entre inquilinos es el modo de fallo de mayor impacto en los sistemas de memoria de producción; la habilidad hace que Claude se niegue rotundamente en lugar de devolver resultados vacíos silenciosamente cuando el límite es incorrecto.
Para los ejes que no encajan en la clave compuesta (jurisdicción, región, grupo de conflicto de intereses, línea de productos), usa tags: son filtrables en la recuperación.
Regla de redacción
Cuando el usuario está componiendo texto orientado al exterior —una enmienda de contrato, un correo electrónico para clientes, una presentación regulatoria, un resumen clínico, un memorando informativo—, la habilidad instruye a Claude a usar memanto_recall (resultados en bruto) y citar, no memanto_answer (sintetizado). El coste de auditoría de una cita parafraseada es demasiado alto.
Cuando el usuario está investigando, explorando o informándose a sí mismo, memanto_answer es adecuado.
Hoja de ruta
Las carencias honestas —lo que la habilidad asume que querrías en un despliegue totalmente regulado y lo que el servidor aún no hace— están documentadas en ROADMAP.md. Aspectos destacados: campos estructurados source_uri + source_span (las citas actualmente se codifican dentro de content), mutaciones versionadas + API de redacción, backends de almacenamiento conectables y un transporte HTTP para hosts que no sean stdio.
Diseño del repositorio
memanto-mcp/
├── .claude-plugin/plugin.json # Cowork plugin manifest
├── .mcp.json # MCP server registration (Cowork)
├── server/memanto_mcp_server.py # FastMCP server (stdio)
├── skills/memanto-memory/SKILL.md # the bundled skill
├── pyproject.toml # for `pip install memanto-mcp`
├── README.md # this file
├── ROADMAP.md # what's missing, ranked
├── CONTRIBUTING.md
├── CHANGELOG.md
├── LICENSE # MIT
└── docs/
└── launch-post.md # cross-post draftContribución
Consulta CONTRIBUTING.md. Las dos contribuciones de mayor impacto en este momento son (1) un backend de almacenamiento conectable (interfaz + una implementación de SQLite o pgvector) y (2) un modelo de cita estructurado (source_uri + source_span + quote). Ambos están en la hoja de ruta.
Licencia
MIT. Consulta LICENSE.
Créditos
memanto y Moorcheh: el modelo de memoria tipada y el backend vectorial que esto envuelve.
MCP de Anthropic y Habilidades de Agente: el protocolo y el formato de habilidad.
Los equipos que envían sistemas agentes empresariales cuyos patrones publicados informaron la habilidad: Harvey, Hebbia, Robin AI, Clio, EvenUp, Casetext.
No afiliado a Anthropic ni a Moorcheh.
Available Tools
9 toolsmemanto_answerB
RAG-grounded answer using the agent's memory.
Memanto retrieves relevant memories and synthesizes an answer with citations. Use this when the user wants a synthesized response, not raw search hits.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| agent_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden and does disclose the core pipeline: retrieval over the agent's memory followed by synthesis with citations. It does not state what happens when no relevant memories exist, whether the call is strictly read-only, latency/cost implications, or how agent_id scopes the retrieval corpus, all of which matter for a synthesis 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?
Three short lines, front-loaded with the purpose and then the usage rule; no filler sentences. The second and third lines partially restate the synthesis idea, so it is tight but not maximally economical.
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?
An output schema exists, so return values need not be explained, and the purpose plus usage rule are present. However, for a multi-stage RAG tool with zero annotation coverage and two undocumented required parameters, the definition leaves the agent guessing about scoping and empty-result behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Both parameters are required with 0% schema description coverage, so the description must compensate and largely does not. 'query' is self-evident from the wording, but 'agent_id' is never explained — the phrase 'the agent's memory' only hints that it selects the memory scope, without saying whether it must be an existing agent or what happens on an unknown id.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource combination: it retrieves memories and synthesizes 'a RAG-grounded answer with citations.' The phrase 'not raw search hits' signals it is distinct from a plain retrieval sibling such as memanto_recall, but that sibling is never named, so the differentiation is implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives a clear selection rule: 'Use this when the user wants a synthesized response, not raw search hits,' which covers both when to use it and when not to. The gap is that it never points to the concrete alternative (memanto_recall / memanto_recall_current) an agent should pick for raw hits, so the routing is one-sided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_create_agentA
Create a new agent (provisions a dedicated Moorcheh namespace).
Args: agent_id: Unique kebab-case identifier (e.g. 'customer-support', 'geoff-personal'). description: Optional human description. pattern: One of support, project, tool. Default 'support'.
| Name | Required | Description | Default |
|---|---|---|---|
| pattern | No | support | |
| agent_id | Yes | ||
| description | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations supplied, the description carries the full behavioral burden. It does disclose the key non-obvious side effect — that creating an agent provisions a dedicated Moorcheh namespace — which is real value beyond the schema. However, it says nothing about behavior when the agent_id already exists (error vs. idempotent), whether creation is reversible, or any permission/auth requirements for a mutating 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 single purpose sentence is front-loaded and the Args block is compact and scannable. Wording is efficient, though the inline Args formatting is a stylistic choice that slightly bloats what could be schema documentation.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and all three parameters receive some prose. Still, for a mutating, unannotated creation tool, the definition leaves out duplicate-id behavior, the meaning of the pattern enum, and any permission or irreversibility context an agent would want before calling it.
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%, so the description must supply the meaning, and it largely does: agent_id is documented as a unique kebab-case identifier with concrete examples, description as optional human-readable text, and pattern as one of support/project/tool with a stated default. The only gap is that the three pattern values themselves are never explained, so an agent cannot tell which pattern fits its use case.
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 specific verb+resource ("Create a new agent") and adds the meaningful parenthetical that it "provisions a dedicated Moorcheh namespace". It does not differentiate itself from siblings like memanto_list_agents or memanto_get_agent, but the create action 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?
Usage is only implied by the verb "Create": an agent reading it can infer this is the tool for provisioning a new agent. There is no explicit guidance on when to create versus inspect existing agents first (e.g. via memanto_list_agents), and no noted prerequisites or side-effect warnings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_delete_agentA
Delete an agent and its memory namespace.
DESTRUCTIVE: this removes the agent's stored memories. Confirm with the user before calling.
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full disclosure burden, and it does the most important part: it flags the operation as DESTRUCTIVE and states precisely what is lost (the agent's stored memories), which is more than the bare verb would convey. It omits whether deletion is recoverable, what happens if agent_id does not exist, and whether the namespace is shared with other agents, so it is not fully transparent for an irreversible 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?
Two short sentences with the destructive warning front-loaded in caps before the confirmation requirement. Nothing is redundant and the ordering matches the decision the agent must make.
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?
An output schema exists, so return values need no explanation, and for a single-parameter destructive tool the essential facts (what is destroyed, that confirmation is required) are present. Only the origin/validation of agent_id and post-failure behavior are missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description should explain agent_id, and it does not — no format, no statement that the ID comes from memanto_list_agents or memanto_get_agent. The parameter name itself is largely self-explanatory and there is only one, which keeps this from being a real failure.
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?
"Delete an agent and its memory namespace" names a specific verb and resource and, critically, states the scope of collateral damage (the memory namespace), which distinguishes it from memanto_create_agent, memanto_get_agent and the recall siblings. An agent can tell exactly what this tool destroys without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit pre-call protocol (confirm with the user before calling), which is the main usage condition for a destructive tool. It stops short of routing guidance such as verifying the agent with memanto_get_agent or memanto_list_agents first, or stating whether memories should be retained instead, so there is no true when-not-to-use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_get_agentB
Get metadata for a single agent (or None if it doesn't exist).
| Name | Required | Description | Default |
|---|---|---|---|
| agent_id | 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, the description carries the full behavioral burden, and it does disclose one useful trait: a missing agent yields None rather than an error. It says nothing about permissions, whether the lookup is read-only, or what the metadata contains.
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 front-loaded sentence with no filler; the parenthetical about the None return is the only extra and it is informative. It is efficient, though it could have spent the same space on the agent_id meaning.
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?
An output schema exists, so return shape need not be explained, and the None case is covered. Still, the missing agent_id format is a real gap for a lookup tool whose only input is that identifier.
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% for the single required parameter, and the description adds no meaning: it never says what an agent_id looks like or where an agent obtains one. For a one-param tool this is a clear compensating gap.
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?
States a specific verb and resource ("Get metadata for a single agent"). The words "single" and "metadata" implicitly separate it from memanto_list_agents, but no sibling is named explicitly.
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?
There is no when-to-use guidance and no mention of alternatives such as memanto_list_agents or memanto_recall_current. The agent must infer that this is for looking up a known agent_id rather than discovering agents.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_list_agentsA
List all agents this MCP server knows about.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden, and it only conveys that the result is unfiltered and server-scoped. It says nothing about whether the operation is read-only, whether deleted or archived agents appear, or whether results are paginated. The presence of an output schema relieves it of explaining the return shape, which keeps this at an adequate rather than poor level.
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 short sentence with the scope qualifier placed immediately after the verb-resource pair, so the key information is front-loaded. It is efficient but borders on thin for a tool with no annotations backing it up.
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 zero-parameter list tool with an output schema that documents return values, the description covers what is needed to select and invoke it. The remaining gap is behavioral nuance such as pagination or inclusion of inactive agents, which is minor at this complexity level.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so the baseline is 4; there is no parameter meaning for the description to add or omit. The single sentence correctly avoids inventing filtering options that the empty schema does not support.
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 pairs the specific verb "List" with the resource "agents" and scopes it to "this MCP server knows about," which separates it from a global or external agent registry. It does not explicitly name the sibling memanto_get_agent as the single-agent alternative, so differentiation is implied rather than stated.
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?
Usage is inferable: an agent wanting an inventory of agents would pick this over memanto_get_agent, which needs an identifier. However, the description never states when to prefer listing versus fetching a specific agent, and gives no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_recallB
Semantic search over an agent's memory.
Args: query: Natural-language query. agent_id: Whose memory to search. memory_types: Optional filter by type(s). tags: Optional filter by tag(s). limit: Max results (default 10). min_confidence: Optional minimum confidence threshold.
Returns: dict with search hits (content, score, metadata).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | Yes | ||
| agent_id | Yes | ||
| memory_types | No | ||
| min_confidence | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden and does disclose the return shape (hits with content, score, metadata), the relevance-ranked 'semantic' nature of matching, the default limit of 10, and that filters/thresholds are optional. It does not state auth/permission requirements, result ordering, pagination beyond limit, or whether the search crosses agent boundaries — meaningful gaps for a tool with zero annotation coverage.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in a single sentence, followed by an ordered Args block that mirrors parameter order, plus a brief Returns line. The Args entries mostly restate schema titles and defaults, which is mild redundancy, but there is no filler or hedging.
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 six-parameter tool with no annotations and full output schema, the description covers inputs and the general return shape adequately. Still missing are the valid memory_types vocabulary, the temporal distinction from the as_of/current siblings, and any note on result ordering or scope — gaps an agent would hit on first real use.
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%, so the description must compensate, and it does: all six parameters get a one-line gloss (natural-language query, whose memory, type filter, tag filter, max results with default 10, confidence threshold). It stops short of a 5 because memory_types has no enum in the schema and the description never names the valid memory type values, leaving a required filter unbounded.
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?
States a specific verb and resource: 'Semantic search over an agent's memory,' which is clearly distinct from memanto_remember (write) and memanto_answer (QA). However, it never distinguishes itself from the closest siblings memanto_recall_as_of and memanto_recall_current, so an agent cannot tell from the description alone which recall variant to pick.
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?
There is no when-to-use guidance at all — no statement of when to prefer this over memanto_recall_current, memanto_recall_as_of, or memanto_answer. Usage is only inferable from the tool name and the word 'search'; exclusions and alternatives are absent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_recall_as_ofC
Recall memories as they existed at a specific date.
Args: as_of_date: ISO 8601 date or datetime (e.g. '2026-01-15' or '2026-01-15T12:00:00Z').
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | Yes | ||
| agent_id | Yes | ||
| as_of_date | Yes | ||
| memory_types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full behavioral burden and largely drops it. 'Recall' implies a read, but nothing states whether the tool is side-effect free, what happens when the date precedes a memory's creation, whether deleted memories are visible at their historical timestamp, or how results are ranked and truncated.
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 core sentence is front-loaded and wastes nothing, and the parameter note is compact. The Google-style 'Args:' block is slightly awkward in a tool description whose schema already enumerates the same argument, but it is not 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?
An output schema exists, so return-shape explanation is fairly excused, but for a six-parameter retrieval tool with zero annotation coverage and zero schema description coverage, one documented parameter and no usage routing leaves substantial gaps. An agent cannot confidently decide between this, memanto_recall, and memanto_recall_current, nor infer how query and tags interact.
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% across six parameters, yet the description documents only as_of_date, and even there the input schema already names the field 'As Of Date'; the ISO 8601 examples are the one genuine addition. The four remaining parameters (query, agent_id, tags, limit, memory_types) get no explanation of matching behavior, scoping, or allowed type values.
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?
States a specific verb and resource with a temporal qualifier: 'Recall memories as they existed at a specific date.' That is meaningfully distinct from a plain recall, and the date clause signals point-in-time snapshot semantics. It stops short of naming the obvious sibling (memanto_recall_current) or otherwise making the distinction explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no when-to-use guidance at all: nothing says to prefer memanto_recall_current for present state or memanto_recall for unversioned search, and no prerequisites or exclusions are stated. The temporal framing weakly implies the use case, but the agent must infer the routing decision entirely from the name and one clause.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_recall_currentC
Recall only currently-active memories (excludes superseded, expired, deleted).
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| limit | No | ||
| query | Yes | ||
| agent_id | Yes | ||
| memory_types | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are supplied, so the description carries the full disclosure burden. It does add real behavioral value by enumerating what is filtered out (superseded, expired, deleted), which is more than the schema says, but it omits read-only guarantees, whether agent_id scoping restricts visibility, ordering, and truncation behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler, and the parenthetical exclusion list is efficient. It is arguably under-specified rather than verbose, but there is zero wasted wording.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has five parameters, two required, with no schema descriptions and no annotations; the output schema covers return values, but that is the only relief. For a filtered retrieval tool this definition does not supply enough for an agent to construct a correct query or predict scoping behavior.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description explains none of the five parameters. Query semantics (keyword vs. semantic), the role of agent_id, and the meaning of tags, limit, and memory_types are left entirely to inference from bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Recall') plus a resource ('memories') and constrains the scope to currently-active records with an explicit exclusion list. This lets an agent distinguish it from the broader memanto_recall and the time-traveling memanto_recall_as_of, though the sibling names are never mentioned explicitly.
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?
There is no explicit when-to-use or when-not-to-use guidance, and none of the alternatives (memanto_recall, memanto_recall_as_of, memanto_answer) are named. The agent must infer from 'only currently-active' that this is the right pick when stale/historical memories should be suppressed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
memanto_rememberA
Store a typed memory for an agent.
Args: agent_id: Which agent's memory to write to (must already exist; create with memanto_create_agent). content: The memory content (1–10000 chars). memory_type: One of fact, preference, goal, decision, artifact, learning, event, instruction, relationship, context, observation, commitment, error. title: Optional short title; auto-derived from content if omitted. tags: Optional list of free-form tags for filtering on recall. confidence: Confidence score in [0.0, 1.0]; defaults to 0.8. source: Free-form source label (e.g. "claude", "user", a tool name). provenance: How the memory was obtained — explicit_statement, inferred, observed, validated, corrected, imported.
Returns: dict with the stored memory's id and namespace.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| title | No | ||
| source | No | claude | |
| content | Yes | ||
| agent_id | Yes | ||
| confidence | No | ||
| provenance | No | explicit_statement | |
| memory_type | No | fact |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does reasonably well: it discloses the existence prerequisite, the 1–10000 char content bound, all defaults (confidence 0.8, source "claude", provenance explicit_statement, memory_type fact), and the return shape (id and namespace). It does not say what happens on a missing agent, whether duplicate memories are deduplicated, or whether the write is idempotent — meaningful gaps 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 opening sentence is front-loaded and the per-argument list is scannable and tight. The docstring scaffolding ("Args:", "Returns:") and a redundant "Returns" line despite an existing output schema cost it a point, but no individual line is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-parameter write tool with no annotations, the definition covers purpose, prerequisite, parameter semantics, defaults, and return value — enough to call it correctly. Remaining gaps are behavioral rather than structural: error modes when agent_id is invalid, and duplicate/conflict handling on repeated writes.
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%, so the description must compensate entirely, and it does: every one of the 8 parameters gets a definition, including the full closed vocabularies for memory_type (13 values) and provenance (6 values), the [0.0, 1.0] range for confidence, and the auto-derivation behavior when title is omitted. This adds substantial meaning the bare schema cannot convey, notably the enum values that the schema does not encode.
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?
"Store a typed memory for an agent" gives a concrete verb (store) and resource (typed memory), and the enumerated memory_type list makes "typed" specific rather than decorative. Against siblings like memanto_recall and memanto_recall_as_of, the store-vs-retrieve split is unmistakable without opening any schema.
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 a hard prerequisite — agent_id must already exist, and points to memanto_create_agent as the way to satisfy it — which is exactly the kind of routing guidance an agent needs. It stops short of any when-not-to-use guidance (e.g. what should not be persisted, or whether repeated identical writes are desirable), so it is clear context without exclusions.
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.
9 tool updates
v0.2.0- First observed
memanto_answer - First observed
memanto_create_agent - First observed
memanto_delete_agent - First observed
memanto_get_agent - First observed
memanto_list_agents - First observed
memanto_recall - First observed
memanto_recall_as_of - First observed
memanto_recall_current - First observed
memanto_remember
TDQS
Scored across 9 tools
The forget/remember/recall core is clear, but three retrieval tools (recall, recall_as_of, recall_current) overlap: the docs never state whether plain `recall` already excludes superseded memories, and recall_as_of/recall_current document no agent_id or filter args, so an agent cannot tell whether they are scoped per-agent or global. The remember-vs-answer split (raw storage vs synthesized RAG) is well delineated.
Every tool uses the same `memanto_` prefix with a snake_case verb or verb_object form (remember, recall, answer, create_agent, list_agents, get_agent, delete_agent). The recall_* variants form a predictable modifier pattern rather than a convention break.
Nine tools is well-scoped: five memory operations plus four agent lifecycle operations, each earning its place. No obvious filler tools or redundancies that would bloat the surface.
Agent management is full CRUD except update_agent, but the memory lifecycle is write-and-read only — there is no way to update, forget, delete, or supersede an individual memory, despite memory types like 'error' and 'commitment' implying correction workflows. recall_as_of and recall_current also lack documented parameters, leaving dead ends for filtered use.
Maintenance
Related MCP Connectors
Persistent memory for AI agents. EU-hosted, privacy-first, hybrid recall, contradiction detection.
Persistent memory for AI agents across Claude, ChatGPT and any MCP client.
One memory for your AI agents and your team: Claude, ChatGPT, Cursor and your agents share it.
1Persistent memory for AI agents. Semantic search, memory graph, W3C DID identity.
Related MCP Servers
- AlicenseAqualityDmaintenancePersistent memory API for AI agents — store, recall, and inject semantically-searchable context across sessions. EU-hosted, GDPR-compliant. Supports Claude, Cursor, Cline, and any MCP-compatible client.42MIT
- AlicenseNot gradedqualityDmaintenanceLocal-first memory for Claude & AI agents with hybrid search, Graph-RAG, and time-travel, runs entirely on your machine.76 npm1Apache 2.0
- AlicenseNot gradedqualityAmaintenanceEnables Claude Code and other LLM agents to capture, consolidate, and retrieve memories from conversation history, building a local-first knowledge graph with semantic search and dream-state consolidation.63 npm1MIT
- AlicenseNot gradedqualityAmaintenanceEnables Claude and other AI agents to store and retrieve decisions, patterns, and knowledge persistently across sessions and context compaction, either self-hosted on Redis/Valkey or through a managed SaaS.24 npmMIT