@mnemo-ai/mcp
v3.6.3
Published
Standalone Model Context Protocol server for Mnemosyne — pluggable into any MCP client (Claude Desktop, Cursor, Continue).
Maintainers
Readme
@mnemo-ai/mcp
AI pointer: Standalone MCP stdio server. Proxies tool calls to the HTTP API via @mnemo-ai/client-ts. 34 tools: all 34 live (all are registered and functional in the server; see table below). Tool count is enforced by
registerAllTools/MCP_TOOL_COUNTinsrc/registry.ts— treat that file as the source of truth, not this README, if they ever disagree.Depends on: @mnemo-ai/client-ts, @modelcontextprotocol/sdk
Live tools (34 registered): memory_recall, memory_remember, memory_pin, memory_forget, memory_timeline, memory_search, memory_relate, memory_decide, memory_entity, memory_status, memory_remind_when, memory_consolidate, memory_session, memory_episode_start, memory_episode_end, memory_task, memory_event, memory_reasoning, memory_strategy, memory_self_edit, memory_hyperedge, memory_introspect, memory_anticipate, memory_compose, memory_workflow, memory_skill, memory_doctor, memory_update, memory_judge, memory_stats, memory_compare, memory_purge, memory_context, memory_workspace
All 34 tools are live. There are no stub tools.
Status: BETA (all 34 live)
See also: CLAUDE.md · docs/INDEX.md · docs/STATUS.md
Standalone Model Context Protocol server for Mnemosyne — the multi-tenant cognitive memory system.
Plug it into any MCP client (Claude Desktop, Cursor, Continue, …) and your assistant gets durable, workspace-scoped memory: recall what users prefer, remember decisions across sessions, pin critical knowledge, and audit what was learned over time.
This package is a thin adapter. It speaks MCP over stdio and forwards every call to
@mnemo-ai/client-ts, which in turn talks to a Mnemosyne HTTP server you control.
Install
You don't need to install anything globally. Just point your MCP client at it via npx.
Configure
Claude Desktop
Add this to claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@mnemo-ai/mcp"],
"env": {
"MNEMO_URL": "https://memory.acme.com",
"MNEMO_KEY": "msk_..."
}
}
}
}Restart Claude Desktop. You should see "mnemosyne" appear in the MCP tools menu.
Cursor
In ~/.cursor/mcp.json (or the per-project equivalent):
{
"mcpServers": {
"mnemosyne": {
"command": "npx",
"args": ["-y", "@mnemo-ai/mcp"],
"env": {
"MNEMO_URL": "https://memory.acme.com",
"MNEMO_KEY": "msk_..."
}
}
}
}Continue / any other MCP client
Same pattern: command: npx, args: ["-y", "@mnemo-ai/mcp"], set MNEMO_URL and MNEMO_KEY in env.
Environment variables
| Var | Required | Description |
| --- | --- | --- |
| MNEMO_URL | yes | Base URL of your Mnemosyne server, e.g. https://memory.acme.com. |
| MNEMO_KEY | yes | Workspace API key (msk_... or mk_live_...). Scope determines which tools are available — read-only keys cannot call remember, pin, or forget. |
If either is missing, the server exits with code 1 and prints a help message to stderr (which most MCP clients surface in their UI).
Tools exposed
Status legend: a Live tool is registered and functional. All 34 tools are live.
| Tool | Status | Scope | Purpose |
| --- | --- | --- | --- |
| memory_recall | ✅ Live | read | Top-K relevant facts for a query (semantic + worth-weighted). |
| memory_remember | ✅ Live | write | Persist a new durable fact (idempotent via content hash). |
| memory_pin | ✅ Live | write | Protect a fact from auto-prune and boost it in recall. |
| memory_forget | ✅ Live | write | Soft-archive a fact (closes validTo, auditable, restorable). |
| memory_timeline | ✅ Live | read | Fact changes over a time window ("what did my AI learn this week?"). |
| memory_search | ✅ Live | read | Full-text + semantic search with filters (kind, sensitivity, date). |
| memory_relate | ✅ Live | write | Create a relation between two primitives (9 locked verbs). |
| memory_decide | ✅ Live | write | Log an architectural or policy decision with full rationale. |
| memory_entity | ✅ Live | write | Upsert a named entity (person, org, project, concept). |
| memory_status | ✅ Live | read | Health check: server version, adapter states. |
| memory_remind_when | ✅ Live | write | Schedule a prospective memory trigger on a condition or time. |
| memory_consolidate | ✅ Live | write | Trigger a consolidation pass (merge/retire duplicate facts). |
| memory_session | ✅ Live | write | Unified session control (§24): pin a fact, append a scratch turn, collapse, or discard. All 4 actions fully wired. |
| memory_episode_start | ✅ Live | write | Open a named episode context (session). |
| memory_episode_end | ✅ Live | write | Close and collapse an episode, extracting facts from transcript. |
| memory_task | ✅ Live | write | Gestiona tareas accionables: crear, leer, listar, actualizar o archivar con dueño, estado y dependencias. |
| memory_event | ✅ Live | write | Registra eventos inmutables en el log del workspace: create, get, list, archive. |
| memory_reasoning | ✅ Live | write | Persiste chains-of-thought estructurados (pregunta → pasos → conclusión) reutilizables. |
| memory_strategy | ✅ Live | write | Gestiona estrategias reusables trigger→action. Usa op como discriminador (no action). |
| memory_self_edit | ✅ Live | write | Corrige el statement de un fact existente con trazabilidad: guarda la versión previa y el motivo en el audit log. |
| memory_hyperedge | ✅ Live | write | Create/relate an N-ary hyperedge across ≥3 facts (hypergraph associations beyond binary relations). |
| memory_introspect | ✅ Live | read | Self-model / meta-cognition: knowledge coverage, gaps, and confidence trends per entity. |
| memory_anticipate | ✅ Live | read | Predictive next-recall suggestions from temporal + co-occurrence patterns (anticipation engine). |
| memory_compose | ✅ Live | read | Compose new inferences over recalled facts via the declarative inference engine. |
| memory_workflow | ✅ Live | write | Manage reusable workflow definitions: create, get, list, patch, archive. |
| memory_skill | ✅ Live | write | Manage reusable skill definitions: create, get, list, patch, archive. |
| memory_doctor | ✅ Live | read | Runs 8 operational diagnostics (Postgres connectivity, app_user grants, schema shadows, migration version, embedding backlog, workspace_id validity, MCP env config, tool registration count). No input. Use before filing a bug report. |
| memory_update | ✅ Live | write | Corrige el statement de un fact existente vía reemplazo bitemporal: cierra el fact original y crea uno nuevo con el mismo linaje. El id del fact cambia. |
| memory_judge | ✅ Live | write | Resuelve conflictos entre facts contradictorios. action='list' muestra pares en conflicto; action='resolve' aplica supersede_a | supersede_b | keep_both | merge. |
| memory_stats | ✅ Live | read | Estadísticas agregadas del workspace: facts live/closed/pinned/archived, decisiones activas, conflictos, cobertura de embeddings, hit-rate de recall a 30 días. Sin input. |
| memory_compare | ✅ Live | read | Compara dos facts por ID: contenido completo, diffs de campos, verbo de relación sugerido (supersedes | conflicts_with | compatible | scoped | related), y si tratan del mismo subject. |
| memory_purge | ✅ Live | write (hard_delete) | Borrado permanente e irreversible. Requiere scope memory:hard_delete. action='fact' borra un fact por ID; action='closed' borra en bulk todos los facts forgotten del workspace. Solo para test workspaces o borrado GDPR. |
| memory_context | ✅ Live | read | Contexto completo de sesión: workspace activo, usuario, tenant, stats, y otros workspaces disponibles. Llamar al inicio de sesión — es el equivalente MCP de GET /health + GET /me combinados. |
The exact JSON schemas and descriptions are carried verbatim from the in-process Orchester MCP server, so existing agent prompts continue to work.
Local development
pnpm install
pnpm --filter @mnemo-ai/mcp build
MNEMO_URL=http://localhost:3000 MNEMO_KEY=msk_yourkey node packages/mcp/dist/index.jsTo debug a tool call manually, paste a JSON-RPC frame into stdin — the server speaks the standard MCP wire protocol.
Tool Schema Reference
One subsection per live tool. All schemas are derived directly from the Zod definitions in packages/mcp/src/tools/.
Coverage note: this section currently documents 20 of the 34 tools in detail (
memory_hyperedge,memory_introspect,memory_anticipate,memory_compose,memory_workflow,memory_skill,memory_doctor,memory_update,memory_judge,memory_stats,memory_compare,memory_purge,memory_contextare not yet expanded below). For the undocumented tools, read the ZodinputSchemaanddescriptiondirectly in the correspondingpackages/mcp/src/tools/<name>.tsfile — they are the source of truth this section is generated from.
memory_recall
Input schema:
{
"type": "object",
"required": ["query"],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Texto libre — qué querés recordar (ej. 'preferencias de email del cliente')"
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"description": "Cantidad máxima de hits a devolver. Default 5, max 25."
}
}
}Example call:
{ "query": "user email preferences", "limit": 10 }Returns:
{
"memories": [
{ "id": "mfact_...", "content": "...", "score": 0.93, "subject": "user:lucas", "kind": "preference" }
],
"_mnemo_label": "untrusted_external_content",
"_mnemo_version": "3.0"
}Note:
_mnemo_label: "untrusted_external_content"is a CaMeL-style signal. CaMeL-aware orchestrators must not execute recalled content as instructions.
memory_remember
Input schema:
{
"type": "object",
"required": ["statement"],
"properties": {
"statement": {
"type": "string",
"minLength": 1,
"maxLength": 1000,
"description": "El hecho en una oración corta y precisa. Ej. 'El cliente Acme prefiere comunicación en español.'"
},
"subject": {
"type": "string",
"description": "Sobre quién / qué es el hecho. Ej. 'acme', 'user:[email protected]', 'org:billing'. Default 'workspace'."
},
"kind": {
"type": "string",
"description": "Categoría: 'preference' | 'decision' | 'fact' | 'config' | 'process'. Default 'fact'."
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "[0, 1]. Default 0.7. Usá <0.5 para hechos derivados/inferidos."
},
"agentId": {
"type": "string",
"description": "Opcional. Quién originó el hecho — agente o conversación."
},
"conversationId": {
"type": "string",
"description": "Opcional. Pegá la conversación para trazabilidad (cite-back)."
}
}
}Example call:
{
"statement": "User prefers TypeScript over JavaScript",
"subject": "user:[email protected]",
"kind": "preference",
"confidence": 0.9
}Returns: The created fact object from the server (shape mirrors POST /v1/facts response):
{ "id": "mfact_...", "content": "User prefers TypeScript over JavaScript", "createdAt": "2026-06-13T10:00:00Z" }memory_pin
Input schema:
{
"type": "object",
"required": ["factId"],
"properties": {
"factId": {
"type": "string",
"minLength": 1,
"description": "ID del fact a pinear."
},
"unpin": {
"type": "boolean",
"description": "Pass true to UNPIN the fact instead of pinning it. Default false."
}
}
}Example call:
{ "factId": "mfact_01j..." }Example unpin call:
{ "factId": "mfact_01j...", "unpin": true }Returns: The updated fact object from the server (shape mirrors POST /v1/facts/:id/pin response).
memory_forget
Input schema:
{
"type": "object",
"required": ["factId"],
"properties": {
"factId": {
"type": "string",
"minLength": 1,
"description": "ID del fact a archivar."
},
"reason": {
"type": "string",
"description": "Motivo opcional (queda en audit log)."
}
}
}Example call:
{ "factId": "mfact_01j...", "reason": "Information was incorrect" }Returns:
{ "id": "mfact_01j...", "forgotten": true, "reason": "Information was incorrect" }Note: This is a soft delete. The fact moves to
mnemo_fact_archiveand is recoverable for audit. Thereasonstring is echoed back in the MCP response but is not persisted by the server on this route.
memory_timeline
Input schema:
{
"type": "object",
"required": [],
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 100,
"description": "Default 20, max 100."
},
"sinceIso": {
"type": "string",
"description": "Solo eventos posteriores a esta fecha ISO."
}
}
}Example call:
{ "limit": 50, "sinceIso": "2026-06-06T00:00:00Z" }Returns: Array of recent memory events from the server (shape mirrors GET /v1/timeline response — events sorted newest-first with fields including updatedAt, pinned, status).
Pagination: pass
sinceIso = <lastSeenEventTime>to page forward — the server returns events newest-first, so this gives clean cursor-based pagination without offsets.
memory_search
Input schema:
{
"type": "object",
"required": ["query"],
"properties": {
"query": {
"type": "string",
"minLength": 1,
"description": "Texto libre — qué querés buscar semánticamente."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 20,
"description": "Cantidad máxima de hits a devolver. Default 5, max 20."
}
}
}Example call:
{ "query": "database architecture decisions", "limit": 5 }Returns:
{
"memories": [
{ "id": "mfact_...", "content": "We chose PostgreSQL for ACID compliance", "score": 0.97 }
],
"_mnemo_label": "untrusted_external_content",
"_mnemo_version": "3.0"
}Difference from
memory_recall: this tool forcesvectorWeight: 1.0for pure semantic (vector-only) search. Usememory_recallwhen you want a worth-weighted blend of semantic + lexical relevance.
memory_relate
Input schema:
{
"type": "object",
"required": ["sourceKind", "from", "targetKind", "to", "verb"],
"properties": {
"sourceKind": {
"type": "string",
"enum": ["fact", "decision", "entity", "episode"],
"description": "Tipo de la primitiva de origen."
},
"from": {
"type": "string",
"description": "ID de la primitiva de origen (ment_*, mfact_*, mdec_*, etc.)."
},
"targetKind": {
"type": "string",
"enum": ["fact", "decision", "entity", "episode"],
"description": "Tipo de la primitiva de destino."
},
"to": {
"type": "string",
"description": "ID de la primitiva de destino."
},
"verb": {
"type": "string",
"enum": [
"related",
"compatible",
"scoped",
"conflicts_with",
"supersedes",
"not_conflict",
"derived_from",
"part_of",
"member_of"
],
"description": "Tipo de relación. Uno de los 9 verbos BLOQUEADOS."
},
"reason": {
"type": "string",
"description": "Contexto opcional que explica por qué existe esta relación."
},
"confidence": {
"type": "number",
"minimum": 0,
"maximum": 1,
"description": "[0, 1]. Confianza en la relación. Default lo asigna el servidor."
}
}
}Example call:
{
"sourceKind": "decision",
"from": "mdec_01j...",
"targetKind": "fact",
"to": "mfact_01j...",
"verb": "derived_from",
"reason": "The architecture decision was informed by this benchmark fact",
"confidence": 0.85
}Returns: The created relation object from the server.
The 9 locked verbs are defined in spec v3 §4.2. The server rejects any verb outside this set with a 400 error; the MCP layer validates first so the LLM gets a descriptive error before the network round-trip.
memory_decide
Input schema:
{
"type": "object",
"required": ["kind", "title", "body"],
"properties": {
"kind": {
"type": "string",
"enum": ["decision", "architecture", "policy", "process", "bugfix", "learning", "discovery", "config"],
"description": "Categoría de la decisión."
},
"title": {
"type": "string",
"minLength": 1,
"maxLength": 500,
"description": "La decisión en una oración concisa. Ej. 'Usar PostgreSQL como base de datos principal.'"
},
"body": {
"type": "string",
"minLength": 1,
"description": "Por qué se tomó esta decisión. Incluí el razonamiento, las alternativas consideradas y los factores determinantes."
},
"topicKey": {
"type": "string",
"description": "Clave normalizada para deduplicación (upsert). Omitir deja al servidor calcularla a partir de title."
},
"conversationId": {
"type": "string",
"description": "ID de la conversación en que se tomó la decisión."
}
}
}Example call:
{
"kind": "architecture",
"title": "Use PostgreSQL as the primary database",
"body": "We chose PostgreSQL over MySQL for its JSONB support, full ACID compliance, and better support for complex queries. MySQL was considered but ruled out due to weaker partial-index support.",
"conversationId": "conv_01j..."
}Returns: The created or upserted decision object from the server (stored in mnemo_decision, not mnemo_fact).
Idempotent by normalized
topic_key. Re-submitting the same title (normalized) performs an upsert and returns the existing row. Pass an explicittopicKeyto control the dedup key.
memory_entity
Input schema:
{
"type": "object",
"required": ["name", "kind"],
"properties": {
"name": {
"type": "string",
"minLength": 1,
"maxLength": 200,
"description": "Nombre canónico de la entidad. Ej. 'Acme Corp', 'Lucas Mailland', 'sistema-auth'."
},
"kind": {
"type": "string",
"enum": ["person", "organization", "project", "concept", "place", "other"],
"description": "Categoría de la entidad."
},
"description": {
"type": "string",
"description": "Descripción breve: rol, contexto o detalles relevantes."
},
"aliases": {
"type": "array",
"items": { "type": "string" },
"description": "Nombres alternativos o apodos."
},
"metadata": {
"type": "object",
"additionalProperties": true,
"description": "Metadatos arbitrarios."
}
}
}Example call:
{
"name": "Acme Corp",
"kind": "organization",
"description": "Enterprise customer using the ATS product",
"aliases": ["Acme", "acme-corp"],
"metadata": { "plan": "enterprise", "region": "us-east" }
}Returns: The created or retrieved entity object from the server (upsert by normalized name within the workspace).
memory_status
Input schema:
{
"type": "object",
"required": [],
"properties": {}
}Example call:
{}Returns: Health snapshot from GET /v1/health, including sub-component status for graceful degradation:
{
"status": "ok",
"db": "ok",
"embedder": "ok",
"queue": "ok",
"version": "3.0.0",
"recallLatencyP50Ms": 42
}Sub-component statuses allow orchestrators to degrade gracefully — e.g. if
embedderis down butdbis"ok", fact retrieval by ID may still work while semantic recall is unavailable.
memory_remind_when
Description: Schedule a prospective memory trigger. The server evaluates the condition against new incoming facts and fires the reminder when matched.
Input schema:
{
"condition": "string — natural-language condition to watch for (required)",
"label": "string — human-readable label for this reminder (required)",
"triggerAt": "string — ISO-8601 datetime for time-based trigger (optional)",
"metadata": "object — arbitrary caller metadata (optional)"
}Output schema:
{
"content": [{ "type": "text", "text": "Reminder scheduled: {label} (id: {id})" }]
}Example call:
{
"name": "memory_remind_when",
"arguments": {
"condition": "user mentions they want to switch to TypeScript",
"label": "TS migration intent",
"triggerAt": "2026-07-01T09:00:00Z"
}
}memory_consolidate
Description: Trigger a fast consolidation pass for the active workspace. The engine
selects bounded low-worth candidate facts, merges eligible near-duplicate clusters, and
reports candidate, merge, and skip counts. Only mode: "fast" with dryRun: false is
currently supported. Manual deep mode returns HTTP 422 deep_mode_not_supported, and
dryRun: true returns HTTP 422 dry_run_not_supported without running consolidation.
Input schema:
{
"mode": "\"fast\" | \"deep\" - only fast is currently supported; deep returns HTTP 422 (optional, default: fast)",
"dryRun": "boolean - must currently be false; true returns HTTP 422 (optional, default: false)"
}Output schema:
{
"content": [{
"type": "text",
"text": "Consolidation complete. candidates=N merged=M skipped=K"
}]
}Example call:
{
"name": "memory_consolidate",
"arguments": { "mode": "fast", "dryRun": false }
}memory_session
Description: Unified session-control tool (spec §24). Dispatches on action:
pin/unpin a fact, append a scratch turn to a session, collapse a session
(triggering the extraction pipeline), or discard a session. The MCP layer is a thin
adapter — the server owns the logic. Action → transport mapping:
pin→client.pinFact/client.unpinFact(POST /v1/facts/:id/pin) — livecollapse→client.collapseSession(POST /v1/session/:id/collapse) — livescratch→client.updateSessionScratch(POST /v1/session/:id/scratch) — livediscard→client.discardSession(POST /v1/session/:id/discard) — live
Input schema:
{
"action": "\"pin\" | \"scratch\" | \"collapse\" | \"discard\" — required",
"sessionId": "string — required for collapse/scratch/discard",
"factId": "string — required for pin",
"unpin": "boolean — for pin (true = unpin; default false)",
"content": "string — required for scratch (the turn text)",
"role": "\"user\" | \"assistant\" | \"system\" — for scratch (turn author)",
"collapseHint": "string — optional natural-language hint for collapse",
"metadata": "object — optional",
"idempotencyKey": "string — optional (forwarded as the Idempotency-Key header)"
}Output schema:
{
"content": [{ "type": "text", "text": "<result summary>" }],
"structuredContent": { "<action-specific result>" }
}All actions return a successful response with action-specific structured content (e.g., { "scratched": true, "sessionId": "..." } for scratch, { "discarded": true, "sessionId": "..." } for discard).
Example call:
{
"name": "memory_session",
"arguments": { "action": "pin", "factId": "fct_01hwz..." }
}memory_episode_start
Note (spec §24 MCP Tools): The unified
memory_sessiontool (above) now exposes the spec'saction: pin | scratch | collapse | discardcontract.pinandcollapseare fully wired;scratchanddiscardreturn an actionable error pending server/client wiring (POST /v1/session/:id/turnand a discard endpoint).memory_pin,memory_episode_start, andmemory_episode_endremain as focused aliases for the pin / open-session / collapse paths and continue to work.
Description: Open a named episode (session). Returns a sessionId that should be
passed to subsequent memory_remember calls to group facts under the episode context.
Close with memory_episode_end to trigger transcript extraction.
Input schema:
{
"agentId": "string — identifier for the agent opening the episode (optional)",
"actorId": "string — identifier for the human actor (optional)",
"metadata": "object — arbitrary session metadata (optional)"
}Output schema:
{
"content": [{ "type": "text", "text": "Episode started. sessionId: {id}" }]
}Example call:
{
"name": "memory_episode_start",
"arguments": { "agentId": "claude-sonnet", "actorId": "user-42" }
}memory_episode_end
Description: Close an episode and trigger the 8-step collapse pipeline: the session
transcript is sent to the LLM for fact extraction, which creates new facts tagged with
the episode context. The session status changes to collapsed.
Input schema:
{
"sessionId": "string — ID returned by memory_episode_start (required)",
"collapseHint": "string — optional natural-language hint about what was important in this episode (optional)"
}Output schema:
{
"content": [{
"type": "text",
"text": "Episode collapsed. sessionId: {id} status: collapsed"
}]
}Example call:
{
"name": "memory_episode_end",
"arguments": {
"sessionId": "ses_01hwz...",
"collapseHint": "Focus on architecture decisions"
}
}memory_task
Description: Gestiona tareas accionables del workspace. Las tareas son trabajos puntuales con dueño, estado y dependencias. Verbos de dominio §24: delegate reasigna la tarea a otro agente (requiere assignedTo; aplica status → delegated); complete la marca como terminada (acepta outcome y lessonsLearned).
Input schema:
{
"action": "\"create\" | \"get\" | \"list\" | \"patch\" | \"archive\" | \"delegate\" | \"complete\" — required",
"id": "string — required for get/patch/archive/delegate/complete",
"title": "string (max 500) — required for create",
"description": "string (max 20000) — optional",
"status": "\"pending\" | \"in_progress\" | \"blocked\" | \"delegated\" | \"completed\" | \"cancelled\" — optional",
"priority": "\"critical\" | \"high\" | \"medium\" | \"low\" — optional",
"assignedTo": "string — required for create",
"sessionId": "string — optional",
"parentTaskId": "string — optional",
"dueAt": "ISO datetime — optional",
"outcome": "string (max 20000) — optional",
"lessonsLearned": "string (max 20000) — optional",
"metadata": "object — optional",
"parentTaskIdFilter": "string — list filter for parentTaskId",
"limit": "integer (1–500) — optional"
}Example call:
{
"name": "memory_task",
"arguments": {
"action": "create",
"title": "Migrate auth to Better Auth",
"assignedTo": "agent-claude",
"priority": "high"
}
}memory_event
Description: Registra eventos inmutables en el log del workspace. Los eventos son append-only; usá memory_fact para estado mutable.
Input schema:
{
"action": "\"create\" | \"get\" | \"list\" | \"archive\" — required",
"id": "string — required for get/archive",
"type": "\"system\" | \"external\" | \"user\" | \"agent\" | \"scheduled\" — required for create",
"name": "string (max 500) — required for create",
"description": "string (max 20000) — required for create",
"occurredAt": "ISO datetime — required for create",
"source": "string (max 200) — required for create",
"durationS": "integer ≥ 0 — optional",
"relatedEntities": "string[] — optional",
"metadata": "object — optional",
"sourceFilter": "string — list filter for source",
"after": "ISO datetime — list filter",
"before": "ISO datetime — list filter",
"limit": "integer (1–500) — optional"
}Example call:
{
"name": "memory_event",
"arguments": {
"action": "create",
"type": "agent",
"name": "wave-b-deployed",
"description": "Wave B MCP tools deployed successfully",
"occurredAt": "2026-06-15T01:00:00.000Z",
"source": "mcp-agent"
}
}memory_reasoning
Description: Almacena chains-of-thought estructurados (pregunta → pasos → conclusión) para reutilizarlos en situaciones similares.
Input schema:
{
"action": "\"create\" | \"get\" | \"list\" | \"patch\" | \"archive\" — required",
"id": "string — required for get/patch/archive",
"agentId": "string — optional",
"question": "string (max 20000) — required for create",
"chain": "array of { step: int, reasoning: string, conclusion?: string } (max 200 steps) — required for create",
"conclusion": "string (max 20000) — required for create",
"topicKey": "string (max 200) — optional",
"status": "\"active\" | \"archived\" | \"pruned\" — optional",
"metadata": "object — optional",
"topicKeyFilter": "string — list filter for topicKey",
"limit": "integer (1–500) — optional"
}Example call:
{
"name": "memory_reasoning",
"arguments": {
"action": "create",
"question": "Should we use PostgreSQL or MongoDB for this use case?",
"chain": [
{ "step": 1, "reasoning": "Need ACID transactions and relational joins" },
{ "step": 2, "reasoning": "Schema is stable and well-defined" }
],
"conclusion": "PostgreSQL is the right choice"
}
}memory_strategy
Description: Gestiona estrategias reusables: heurísticas trigger→action que el agente aplica cuando ocurre una condición disparadora. Usa op como discriminador (no action, que es un campo de contenido). Verbos de dominio §24: store guarda una nueva estrategia (alias de create); recall recupera estrategias relevantes/activas (alias de list); rate registra el resultado (éxito/fallo) de una estrategia para ajustar su worth.
Input schema:
{
"op": "\"create\" | \"get\" | \"list\" | \"patch\" | \"archive\" | \"store\" | \"recall\" | \"rate\" — required",
"id": "string — required for get/patch/archive",
"trigger": "string (max 20000) — required for create. La condición disparadora.",
"action": "string (max 20000) — required for create. La heurística a aplicar.",
"context": "string (max 20000) — optional",
"agentId": "string — optional",
"supersedesId": "string — optional",
"status": "\"active\" | \"superseded\" | \"archived\" — optional",
"metadata": "object — optional",
"limit": "integer (1–500) — optional"
}Example call:
{
"name": "memory_strategy",
"arguments": {
"op": "create",
"trigger": "API returns 5xx three times in a row",
"action": "Switch to exponential backoff with jitter; alert after 5 minutes",
"context": "execution"
}
}memory_self_edit
Description: Edita memoria propia con append, replace, strengthen, weaken, forget, reflect o link. Cuando replace apunta a un fact, el servidor cierra la versión histórica, crea un successor con ID nuevo y devuelve replacementId. El motivo es contexto obligatorio de política, pero todavía no se persiste como auditoría durable.
Input schema:
{
"action": "append | replace | strengthen | weaken | forget | reflect | link — required",
"target": "fact_id | profile | strategy:{id} — required",
"content": "string (max 20000) — required for append/replace",
"reason": "string (max 2000) — required policy context",
"idempotencyKey": "string — optional"
}Example call:
{
"name": "memory_self_edit",
"arguments": {
"action": "replace",
"target": "mfact_01j...",
"content": "The user prefers dark mode in all applications",
"reason": "Previous statement only mentioned VS Code; confirmed applies globally"
}
}Returns: A structured self-edit result. Applied fact replacements include targetKind: "fact" and the required new replacementId. Approval-required results do not include a replacement ID. Returns isError: true with a descriptive message on failure.
License
Apache-2.0 © Lucas Mailland
