npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@mnemo-ai/mcp

v3.6.3

Published

Standalone Model Context Protocol server for Mnemosyne — pluggable into any MCP client (Claude Desktop, Cursor, Continue).

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_COUNT in src/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.js

To 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_context are not yet expanded below). For the undocumented tools, read the Zod inputSchema and description directly in the corresponding packages/mcp/src/tools/<name>.ts file — 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_archive and is recoverable for audit. The reason string 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 forces vectorWeight: 1.0 for pure semantic (vector-only) search. Use memory_recall when 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 explicit topicKey to 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 embedder is down but db is "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) — live
  • collapse → client.collapseSession (POST /v1/session/:id/collapse) — live
  • scratch → client.updateSessionScratch (POST /v1/session/:id/scratch) — live
  • discard → 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_session tool (above) now exposes the spec's action: pin | scratch | collapse | discard contract. pin and collapse are fully wired; scratch and discard return an actionable error pending server/client wiring (POST /v1/session/:id/turn and a discard endpoint). memory_pin, memory_episode_start, and memory_episode_end remain 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