{"id":579141,"recorded_at":"2026-10-27T23:21:57.849356Z","observed_at":"2026-10-27T23:21:57.849254Z","subject_kind":"endpoint","subject":"825804d4-d32f-4788-833d-dae5f552c35d","kind":"mcp.tools","method":"probe.mcp/1","body":{"count":40,"tools":[{"description":"Agrega un directorio al watch list para auto-reindexación.","inputSchema":{"properties":{"path":{"title":"Path","type":"string"}},"required":["path"],"title":"add_watch_dirArguments","type":"object"},"name":"add_watch_dir"},{"description":"\n    Compress retrieved memories using a hybrid approach (extractive + LLM).\n\n    First searches Hipocampo (SSC v1.0), then compresses the top-k results:\n    - method=\"extractive\": sentence-level keyword relevance (fast, no API cost)\n    - method=\"llm\": summarization via NVIDIA NIM (highest quality, API cost)\n    - method=\"hybrid\" (default): uses LLM for technical/code content, extractive for generic text\n\n    Use this tool BEFORE sending context to another LLM to reduce prompt size\n    while preserving critical information.\n\n    Args:\n        query: Natural language search query.\n        k: Number of memories to retrieve (default 5, max 20).\n        method: Compression method: \"hybrid\" (default), \"extractive\", or \"llm\".\n        target_token: Target token count (-1 = auto, based on content).\n        include_metadata: Include per-memory details in output.\n        budget_ratio: Scale factor for auto-estimated tokens (default 1.0).\n\n    Returns:\n        Compressed context as plain text with compression statistics.\n        Includes: compressed text, original/compressed char counts, ratio, latency.\n    ","inputSchema":{"properties":{"budget_ratio":{"default":1.0,"title":"Budget Ratio","type":"number"},"include_metadata":{"default":false,"title":"Include Metadata","type":"boolean"},"k":{"default":5,"title":"K","type":"integer"},"method":{"default":"hybrid","title":"Method","type":"string"},"query":{"title":"Query","type":"string"},"target_token":{"default":-1,"title":"Target Token","type":"integer"}},"required":["query"],"title":"compress_hipocampoArguments","type":"object"},"name":"compress_hipocampo"},{"description":"\n    Consolidación jerárquica: migra memorias episódicas antiguas a semánticas.\n\n    Busca recuerdos con nivel 'episodica' más antiguos que min_age_days\n    y los promueve a 'semantica', opcionalmente comprimiendo su contenido.\n\n    Args:\n        min_age_days: Edad mínima en días para consolidar (default 7).\n        dry_run: Si True, solo muestra qué se consolidaría.\n\n    Returns:\n        Reporte de la consolidación.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"},"min_age_days":{"default":7,"title":"Min Age Days","type":"integer"}},"title":"consolidate_hipocampoArguments","type":"object"},"name":"consolidate_hipocampo"},{"description":"\n    Detecta contradicciones semánticas de una memoria existente.\n\n    Con TypeSafe activo (HIPOCAMPO_TYPESAFE=1): un Noul por candidato en una\n    sola llamada, con probabilidad calibrada (umbral 0.7).\n    Fallback: negation-probe embedding: embedea \"AFIRMACIÓN: {contenido} — ¿Esto es FALSO según: ...\"\n    y compara con el embedding original. Si la distancia de la sonda de negación\n    es MENOR que la del contenido original → señal de contradicción.\n\n    Args:\n        memory_id: ID numérico de la memoria en memoria_vectorial.\n    ","inputSchema":{"properties":{"memory_id":{"title":"Memory Id","type":"integer"}},"required":["memory_id"],"title":"contradicciones_hipocampoArguments","type":"object"},"name":"contradicciones_hipocampo"},{"description":"\n    Aplica decaimiento temporal a enlaces del grafo Y memorias antiguas.\n\n    ENLACES: peso exponencial, half-life 90 días. Elimina enlaces < 0.01.\n    MEMORIAS: archiva episodica sin acceso ni protección a memoria_historica.\n\n    Protecciones (nunca se archivan):\n      - nivel = automatica o semantica\n      - metadatos.critico = true\n      - con enlaces entrantes en memory_links\n\n    Args:\n        dry_run: True (default) = solo lectura. False = ejecuta cambios.\n        min_age_days: Edad mínima en días para considerar memoria candidata.\n\n    Returns:\n        Reporte del decaimiento aplicado.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"},"min_age_days":{"default":30,"title":"Min Age Days","type":"integer"}},"title":"decay_hipocampoArguments","type":"object"},"name":"decay_hipocampo"},{"description":"\n    Elimina un recuerdo del Hipocampo (memoria_vectorial) por su ID.\n\n    Esta operación es irreversible. Una vez eliminado, el recuerdo\n    no podrá recuperarse ni aparecerá en búsquedas futuras.\n\n    Args:\n        id: ID numérico del recuerdo a eliminar.\n\n    Returns:\n        Confirmación de eliminación.\n    ","inputSchema":{"properties":{"id":{"title":"Id","type":"integer"}},"required":["id"],"title":"delete_hipocampoArguments","type":"object"},"name":"delete_hipocampo"},{"description":"Obtiene una memoria exacta por ID, sin pasar por el ranking.\n\n    Acepta el ID numérico de memoria_vectorial (4039), con prefijo (#4039,\n    v4039) o el ID de memory_items (vmi<uuid>). Es la vía determinista para\n    \"tráeme el recuerdo N\": no compite con decenas de resultados.\n\n    Args:\n        id: ID de la memoria (numérico o vmi<uuid>).\n        format: \"compact\" (default), \"full\" o \"json\".\n\n    Returns:\n        La memoria completa (compact muestra un fragmento de 800 chars;\n        full/json incluyen todo el contenido y metadatos).\n    ","inputSchema":{"properties":{"format":{"default":"compact","title":"Format","type":"string"},"id":{"title":"Id","type":"string"}},"required":["id"],"title":"get_hipocampoArguments","type":"object"},"name":"get_hipocampo"},{"description":"\n    Explora el grafo de memoria desde un nodo raíz.\n\n    Args:\n        node_id: ID del recuerdo raíz. Si es 0, lista todos los nodos\n                 con enlaces (vista general).\n        depth: Profundidad de exploración (default 2, max 5).\n        max_nodes: Máximo de nodos a mostrar (default 50).\n\n    Returns:\n        Árbol ASCII del grafo de memoria.\n    ","inputSchema":{"properties":{"depth":{"default":2,"title":"Depth","type":"integer"},"max_nodes":{"default":50,"title":"Max Nodes","type":"integer"},"node_id":{"default":0,"title":"Node Id","type":"integer"}},"title":"graph_hipocampoArguments","type":"object"},"name":"graph_hipocampo"},{"description":"\n    Intenta reparar automáticamente problemas detectados en el sistema.\n\n    Reparaciones posibles:\n    - Reiniciar PostgreSQL si está caído\n    - Crear tablas faltantes desde esquema.sql\n    - Verificar/configurar NVIDIA_API_KEY\n\n    Returns:\n        Reporte de reparaciones ejecutadas.\n    ","inputSchema":{"properties":{},"title":"hipocampo_auto_repairArguments","type":"object"},"name":"hipocampo_auto_repair"},{"description":"\n    Gestiona el presupuesto de memoria (budget + tiering automático).\n\n    3 tiers:\n      - HOT: embedding presente (memoria_vectorial con pgvector)\n      - WARM: embedding=NULL (excluido de HNSW, sigue buscable léxicamente)\n      - COLD: contenido movido a memoria_historica (fuera de búsqueda principal)\n\n    Protecciones: automatica/semantica/critico/enlazadas → exemptas.\n\n    Args:\n        dry_run: True (default) = solo análisis. False = ejecuta tiering.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"}},"title":"hipocampo_budgetArguments","type":"object"},"name":"hipocampo_budget"},{"description":"\n    Comprime memorias antiguas usando checkpointing logarítmico.\n\n    Con dry_run=True (default) es solo lectura — seguro, no modifica datos.\n    Con dry_run=False es destructivo: comprime memorias antiguas de forma\n    irreversible (las originales se eliminan tras comprimir). Idempotente:\n    ejecutar múltiples veces no daña datos.\n\n    Para ejecutar checkpoint como parte del ciclo completo de mantenimiento,\n    usar hipocampo_maintenance (paso 3 del ciclo). Esta herramienta es para\n    ejecución puntual o previsualización.\n\n    Recomendado ejecutar periódicamente (semanal o mensual) para mantener\n    el rendimiento del sistema.\n\n    Args:\n        dry_run: Si es True (default), solo muestra qué se comprimiría.\n                 Si es False, ejecuta la compresión (irreversible).\n\n    Returns:\n        Reporte del checkpointing ejecutado o simulado.\n        Incluye: cantidad de registros comprimidos, espacio liberado.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"}},"title":"hipocampo_checkpointArguments","type":"object"},"name":"hipocampo_checkpoint"},{"description":"\n    Detecta y opcionalmente fusiona duplicados en las tablas de memoria.\n\n    Con merge=False (default) es solo lectura — seguro de ejecutar, no modifica datos.\n    Con merge=True es destructivo: consolida filas duplicadas en una sola, operación\n    irreversible. Usar con precaución. Ejecutar primero sin merge para previsualizar.\n\n    ¿Qué es un duplicado? Dos registros con alta similitud semántica (embedding\n    + texto), por encima del umbral configurable (default 0.95).\n\n    El reporte incluye: cantidad de duplicados encontrados, IDs afectados y\n    resumen de fusión si se ejecutó merge.\n\n    Para ejecutar dedup como parte del ciclo completo de mantenimiento, usar\n    hipocampo_maintenance (paso 2 del ciclo). Esta herramienta es para uso\n    puntual o previsualización antes del merge.\n\n    Args:\n        merge: Si es True, fusiona los duplicados encontrados (irreversible).\n               Si es False (default), solo muestra análisis (seguro).\n\n    Returns:\n        Reporte de duplicados encontrados o fusionados.\n    ","inputSchema":{"properties":{"merge":{"default":false,"title":"Merge","type":"boolean"}},"title":"hipocampo_dedupArguments","type":"object"},"name":"hipocampo_dedup"},{"description":"\n    Ejecuta un health check completo del sistema Hipocampo.\n\n    Verifica: PostgreSQL, NVIDIA API, tablas, espacio en disco, extensiones.\n\n    Returns:\n        Reporte formateado del estado del sistema.\n    ","inputSchema":{"properties":{},"title":"hipocampo_healthArguments","type":"object"},"name":"hipocampo_health"},{"description":"\n    Ejecuta el ciclo completo de mantenimiento:\n    1. Health check → auto-repair si es necesario\n    2. Dedup → fusiona duplicados\n    3. Checkpoint → comprime memorias antiguas\n    4. Purge → limpia access logs antiguos (>30d)\n    5. Tune → ajusta thresholds según métricas\n\n    Nota: hipocampo_budget y decay_hipocampo se ejecutan manualmente\n    o via cron separado (son destructivos y requieren dry_run previo).\n\n    Returns:\n        Reporte consolidado del mantenimiento.\n    ","inputSchema":{"properties":{},"title":"hipocampo_maintenanceArguments","type":"object"},"name":"hipocampo_maintenance"},{"description":"\n    Muestra estadísticas de rendimiento del sistema Hipocampo.\n\n    Analiza latencia de queries, métodos usados, scores promedios\n    y da recomendaciones de optimización.\n\n    Returns:\n        Reporte de métricas y recomendaciones.\n    ","inputSchema":{"properties":{},"title":"hipocampo_statsArguments","type":"object"},"name":"hipocampo_stats"},{"description":"\n    Ajusta automáticamente los thresholds y pesos del SSC\n    basado en las métricas de rendimiento acumuladas.\n\n    Es destructivo: modifica los thresholds y pesos de forma irreversible.\n    Sin embargo, es idempotente: ejecutarlo múltiples veces converge al\n    mismo resultado. Usar con precaución.\n\n    Para solo ver estadísticas sin modificar nada, usar hipocampo_stats\n    (solo lectura). Para ejecutar el ciclo completo de mantenimiento\n    (que incluye tune como paso 5), usar hipocampo_maintenance.\n\n    Recomendado ejecutar solo después de acumular suficientes métricas\n    (al menos 100 consultas registradas). No usar si el sistema funciona\n    correctamente sin degradación.\n\n    Returns:\n        Reporte de ajustes aplicados (nuevos thresholds y pesos).\n    ","inputSchema":{"properties":{},"title":"hipocampo_tuneArguments","type":"object"},"name":"hipocampo_tune"},{"description":"\n    Indexa archivos de código fuente de un proyecto en Hipocampo (RAG).\n\n    Escanea archivos PHP, JS, TS, Python, SQL, HTML, CSS, JSON, YAML,\n    los divide en chunks significativos y los guarda como recuerdos con\n    embedding para búsqueda semántica.\n\n    La segunda corrida solo indexa archivos modificados (por mtime).\n\n    Args:\n        project_path: Ruta absoluta del proyecto a indexar.\n                      Si está vacía, usa el directorio actual.\n        force: Si True, re-indexa todo aunque no haya cambios.\n\n    Returns:\n        Estadísticas de la indexación.\n    ","inputSchema":{"properties":{"force":{"default":false,"title":"Force","type":"boolean"},"project_path":{"default":"","title":"Project Path","type":"string"}},"title":"index_projectArguments","type":"object"},"name":"index_project"},{"description":"\n    Crea un enlace entre dos recuerdos en el grafo de memoria.\n\n    Args:\n        source_id: ID del recuerdo origen (numérico: memoria_vectorial; string: memory_items).\n        target_id: ID del recuerdo destino.\n        relation_type: Tipo de relación. Valores comunes:\n                       \"related\" (default), \"follow_up\", \"part_of\",\n                       \"references\", \"similar\", \"chain\", \"validates\", \"contradicts\".\n        weight: Peso de la relación (0.0 a 1.0, default 1.0).\n\n    Returns:\n        Confirmación del enlace creado.\n    ","inputSchema":{"properties":{"relation_type":{"default":"related","title":"Relation Type","type":"string"},"source_id":{"title":"Source Id","type":"integer"},"target_id":{"title":"Target Id","type":"integer"},"weight":{"default":1.0,"title":"Weight","type":"number"}},"required":["source_id","target_id"],"title":"link_hipocampoArguments","type":"object"},"name":"link_hipocampo"},{"description":"Lista todas las memorias marcadas como conocimiento del oficio.\n\n    Muestra id, preview, reusability, domain_profile y days since last access.\n    ","inputSchema":{"properties":{},"title":"list_trade_knowledgeArguments","type":"object"},"name":"list_trade_knowledge"},{"description":"Lista los directorios configurados para auto-reindexación.","inputSchema":{"properties":{},"title":"list_watch_dirsArguments","type":"object"},"name":"list_watch_dirs"},{"description":"\n    Lista todos los webhooks registrados.\n\n    Returns:\n        Lista de watches con ID, patrón y URL.\n    ","inputSchema":{"properties":{},"title":"list_watchesArguments","type":"object"},"name":"list_watches"},{"description":"\n    Encuentra el camino más corto entre dos recuerdos en el grafo de memoria.\n\n    Args:\n        from_id: ID del recuerdo origen.\n        to_id: ID del recuerdo destino.\n        max_depth: Profundidad máxima de búsqueda (default 5, max 10).\n\n    Returns:\n        Camino encontrado como secuencia de nodos.\n    ","inputSchema":{"properties":{"from_id":{"title":"From Id","type":"integer"},"max_depth":{"default":5,"title":"Max Depth","type":"integer"},"to_id":{"title":"To Id","type":"integer"}},"required":["from_id","to_id"],"title":"path_hipocampoArguments","type":"object"},"name":"path_hipocampo"},{"description":"\n    Pre-load context for a project or workspace. Extracts relevant memories\n    from the project path and returns them as a compressed summary.\n\n    Use this when starting work on a known project to restore working context.\n\n    Args:\n        project_path: Absolute path to the project or workspace.\n                      If empty, uses current working directory.\n        k: Number of relevant memories to retrieve (default 8, max 20).\n        rerank: Opcional (TypeSafe). Re-ordena los resultados antes de\n                comprimir, con un juicio de relevancia calibrado.\n\n    Returns:\n        Compressed context summary with project-relevant memories.\n    ","inputSchema":{"properties":{"k":{"default":8,"title":"K","type":"integer"},"project_path":{"default":"","title":"Project Path","type":"string"},"rerank":{"default":false,"title":"Rerank","type":"boolean"}},"title":"preload_contextArguments","type":"object"},"name":"preload_context"},{"description":"\n    Guarda un dato de perfil personal en Hipocampo (memory_items).\n\n    A diferencia de save_hipocampo (que guarda en memoria_vectorial técnica),\n    esta herramienta guarda en memory_items, que está diseñado para datos\n    personales: gustos, familia, preferencias, datos biográficos.\n\n    Args:\n        summary: Texto corto con el dato personal. Ej: \"Al usuario le gusta el té de hierbas\".\n        extra: Información adicional en texto plano (opcional).\n        categories: Categorías (opcional). Ej: [\"personal_info\", \"gustos\"].\n\n    Returns:\n        Confirmación con el ID asignado.\n    ","inputSchema":{"properties":{"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"extra":{"default":"","title":"Extra","type":"string"},"summary":{"title":"Summary","type":"string"}},"required":["summary"],"title":"profile_hipocampoArguments","type":"object"},"name":"profile_hipocampo"},{"description":"\n    Búsqueda rápida en el Hipocampo (alias corto de search_hipocampo).\n\n    Es solo lectura — no modifica datos. Comportamiento y argumentos idénticos\n    a search_hipocampo (filtros code:/category:/id:/after:, format compact/full/json,\n    rerank auto/always/never).\n    ","inputSchema":{"properties":{"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"code":{"default":"","title":"Code","type":"string"},"created_after":{"default":"","title":"Created After","type":"string"},"created_before":{"default":"","title":"Created Before","type":"string"},"explain":{"default":false,"title":"Explain","type":"boolean"},"format":{"default":"compact","title":"Format","type":"string"},"ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Ids"},"include_pending":{"default":true,"title":"Include Pending","type":"boolean"},"include_scores":{"default":false,"title":"Include Scores","type":"boolean"},"k":{"default":5,"title":"K","type":"integer"},"memory_type":{"default":"","title":"Memory Type","type":"string"},"nivel":{"default":"","title":"Nivel","type":"string"},"offset":{"default":0,"title":"Offset","type":"integer"},"query":{"default":"","title":"Query","type":"string"},"rerank":{"default":"auto","title":"Rerank","type":"string"},"rerank_budget_ms":{"default":800,"title":"Rerank Budget Ms","type":"integer"},"rerank_top_k":{"default":8,"title":"Rerank Top K","type":"integer"},"session_id":{"default":"","title":"Session Id","type":"string"},"snippet_chars":{"default":300,"title":"Snippet Chars","type":"integer"}},"title":"quick_hipocampo_searchArguments","type":"object"},"name":"quick_hipocampo_search"},{"description":"Fuerza reindexación inmediata de un directorio (o todos los watch).","inputSchema":{"properties":{"path":{"default":"","title":"Path","type":"string"}},"title":"reindex_nowArguments","type":"object"},"name":"reindex_now"},{"description":"Elimina un directorio del watch list.","inputSchema":{"properties":{"path":{"title":"Path","type":"string"}},"required":["path"],"title":"remove_watch_dirArguments","type":"object"},"name":"remove_watch_dir"},{"description":"\n    Restaura una memoria desde memoria_historica a memoria_vectorial.\n\n    Reconstruye embedding automáticamente. La memoria vuelve al tier HOT.\n\n    Args:\n        historica_id: ID de la memoria en memoria_historica.\n    ","inputSchema":{"properties":{"historica_id":{"title":"Historica Id","type":"integer"}},"required":["historica_id"],"title":"restaurar_historicaArguments","type":"object"},"name":"restaurar_historica"},{"description":"\n    Revisa reglas 'automatica' sin revisión en los últimos N días.\n\n    Las reglas automatica son permanentes por diseño, pero pueden degradarse\n    a 'semantica' si no han sido útiles (review_count=0) después de max_age_days.\n\n    Con dry_run=True solo lista las reglas candidatas a degradación.\n    Con dry_run=False las degrada a 'semantica' (no se borran, solo pierden\n    inmunidad de compresión).\n\n    Args:\n        max_age_days: Edad máxima sin revisión antes de considerar degradación (default 30).\n        dry_run: Si True, solo muestra qué se degradaría.\n\n    Returns:\n        Reporte de reglas encontradas.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"},"max_age_days":{"default":30,"title":"Max Age Days","type":"integer"}},"title":"review_automaticaArguments","type":"object"},"name":"review_automatica"},{"description":"Revisa memorias de conocimiento del oficio candidatas a decaer.\n\n    Presenta memorias con domain_profile='infrastructure' que están\n    cerca de su fecha límite de decay (150+ días sin acceso de los 180).\n    El agente puede:\n    - Refuerza (reinforce): resetea el contador de acceso\n    - Permite decay: la memoria sigue el ciclo normal\n\n    Ejecutar cada 3 meses via systemd timer o manualmente.\n    ","inputSchema":{"properties":{"dry_run":{"default":true,"title":"Dry Run","type":"boolean"}},"title":"review_trade_knowledgeArguments","type":"object"},"name":"review_trade_knowledge"},{"description":"\n    Revierte un checkpoint usando el snapshot guardado previamente.\n\n    Busca el snapshot por ID y verifica qué IDs originales fueron comprimidos.\n    Si los originales aún existen, reporta que no se necesita rollback.\n    Si fueron eliminados, intenta restaurarlos.\n\n    Args:\n        snapshot_id: ID del snapshot [CHECKPOINT SNAPSHOT] guardado.\n\n    Returns:\n        Reporte de la operación de rollback.\n    ","inputSchema":{"properties":{"snapshot_id":{"title":"Snapshot Id","type":"integer"}},"required":["snapshot_id"],"title":"rollback_checkpointArguments","type":"object"},"name":"rollback_checkpoint"},{"description":"\n    Guarda un recuerdo en el Hipocampo (memoria_vectorial).\n\n    INSERT inmediato y NO bloqueante: el embedding se genera en background\n    (_finalize_save_bg) junto con dedup semántico, auto-link y auditoría de\n    contradicciones. Hasta que el embedding se backfillea (~segundos), la\n    memoria queda en tier WARM (embedding=NULL) y es recuperable por texto.\n\n    Si ya existe un recuerdo casi idéntico (trigram), se advierte y se omite\n    el guardado a menos que force=True. El dedup semántico (>0.9) corre en\n    background y solo loguea — no bloquea.\n\n    Args:\n        content: Texto del recuerdo a guardar.\n        memory_type: Tipo de memoria. Valores comunes:\n                     \"event\" (evento/experiencia),\n                     \"decision\" (decisión tomada),\n                     \"profile\" (dato personal).\n                     Por defecto: \"event\".\n        code: Código o etiqueta corta para agrupar recuerdos (opcional).\n              Ej: \"documentacion\", \"bugfix\", \"feature\", \"setup\".\n        categories: Lista de categorías (opcional).\n                    Ej: [\"python\", \"mcp\", \"infraestructura\"].\n        session_id: Opcional. Identificador de sesión para aislar memorias.\n        force: Si True, guarda incluso si existe un recuerdo muy similar.\n        auto_link: Si True, busca recuerdos semánticamente similares (>0.75)\n                   y crea enlaces \"similar\" automáticamente.\n        nivel: Nivel de memoria jerárquica:\n               \"episodica\" (default) — detalle completo, comprimible,\n               \"semantica\" — conocimiento consolidado, protegido,\n               \"automatica\" — regla permanente, nunca se comprime.\n        critico: Si True, la memoria NUNCA se olvida ni se archiva.\n                 Protección de por vida independiente del nivel.\n        snapshot_for: Si se proporciona un ID de regla inmunológica,\n                      después de guardar se crea automáticamente un enlace\n                      \"part_of\" desde este recuerdo hacia esa regla.\n                      Esto permite que validate_immune_rule encuentre el\n                      snapshot pre-cambio vinculado.\n        autor: Procedencia del recuerdo (capa de fuente, 2026-10-17):\n               \"agente\" (default; lo escribiste tú en una sesión),\n               \"usuario\" (dictado o habla directa del usuario),\n               \"catalogo\" (entrada generada al indexar archivos).\n               Viaja en metadatos.autor y aparece como línea 🔖 en la\n               búsqueda, para distinguir reencontrar de consultar.\n\n    Returns:\n        Confirmación con el ID asignado.\n    ","inputSchema":{"properties":{"auto_link":{"default":false,"title":"Auto Link","type":"boolean"},"autor":{"default":"agente","title":"Autor","type":"string"},"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"code":{"default":"","title":"Code","type":"string"},"content":{"title":"Content","type":"string"},"critico":{"default":false,"title":"Critico","type":"boolean"},"force":{"default":false,"title":"Force","type":"boolean"},"memory_type":{"default":"event","title":"Memory Type","type":"string"},"nivel":{"default":"episodica","title":"Nivel","type":"string"},"session_id":{"default":"","title":"Session Id","type":"string"},"snapshot_for":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"title":"Snapshot For"}},"required":["content"],"title":"save_hipocampoArguments","type":"object"},"name":"save_hipocampo"},{"description":"\n    Busca código fuente indexado en Hipocampo (RAG).\n\n    Similar a search_hipocampo pero filtra solo recuerdos de tipo\n    code_snippet y devuelve fragmentos de código real con\n    ubicación de archivo.\n\n    Args:\n        query: Consulta en lenguaje natural.\n        k: Número de resultados (default 5, max 20).\n        language: Filtrar por lenguaje (php, javascript, python, sql, etc.).\n                  Vacío = todos los lenguajes.\n\n    Returns:\n        Fragmentos de código relevantes con metadatos de archivo.\n    ","inputSchema":{"properties":{"k":{"default":5,"title":"K","type":"integer"},"language":{"default":"","title":"Language","type":"string"},"query":{"title":"Query","type":"string"}},"required":["query"],"title":"search_codeArguments","type":"object"},"name":"search_code"},{"description":"Busca en el Hipocampo con carriles estructurados + semánticos.\n\n    Es solo lectura (no modifica memorias). Devuelve una salida compacta por\n    defecto: id, relevancia, code/fecha/nivel, un fragmento corto y el motivo.\n\n    Sintaxis de query (opcional, se puede combinar con texto libre):\n      code:opencode_session_forensics\n      category:infraestructura,trigger:mcp\n      nivel:automatica  |  type:decision  |  id:4039  |  #4039\n      after:2026-10-01  |  since:7d  |  before:today\n      \"frase exacta entre comillas\"\n\n    También acepta filtros por argumentos (code=, categories=, nivel=,\n    memory_type=, ids=, created_after=, created_before=). Los argumentos\n    explícitos tienen prioridad sobre la sintaxis de la query.\n\n    Args:\n        query: Texto libre y/o filtros. Puede ir vacío si se usan filtros.\n        session_id: Filtra a una sesión concreta.\n        rerank: \"auto\" (default; re-rankea solo si puede cambiar la decisión),\n                \"always\" (TypeSafe/classifier, acotado) o \"never\".\n                El booleano antiguo se acepta: True≈always, False≈never.\n        k: Resultados a devolver (1-20, default 5).\n        offset: Paginación (0-based).\n        code: Filtro exacto por code.\n        categories: Filtro por una o más categorías (coincidencia cualquiera).\n        nivel: episodica | semantica | automatica.\n        memory_type: event | decision | profile | ...\n        ids: Lista de IDs numéricos de memoria_vectorial.\n        created_after / created_before: Fechas ISO (YYYY-MM-DD) o \"7d\"/\"today\".\n        include_pending: Si False, oculta filas cuyo embedding aún no está listo.\n        rerank_top_k: Cuántos resultados re-rankear (3-20, default 8).\n        rerank_budget_ms: Presupuesto HTTP del re-rank (100-5000 ms, default 800).\n        format: \"compact\" (default), \"full\" (formato histórico) o \"json\".\n        snippet_chars: Longitud del fragmento (80-2000, default 300).\n        include_scores: Muestra el score numérico en la salida compacta.\n        explain: Muestra el desglose de canales (vec/lex/struct).\n\n    Returns:\n        Texto formateado (compact/full) o JSON. Si no hay coincidencias,\n        indica que la búsqueda fue válida pero sin resultados.\n    ","inputSchema":{"properties":{"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"code":{"default":"","title":"Code","type":"string"},"created_after":{"default":"","title":"Created After","type":"string"},"created_before":{"default":"","title":"Created Before","type":"string"},"explain":{"default":false,"title":"Explain","type":"boolean"},"format":{"default":"compact","title":"Format","type":"string"},"ids":{"anyOf":[{"items":{"type":"integer"},"type":"array"},{"type":"null"}],"default":null,"title":"Ids"},"include_pending":{"default":true,"title":"Include Pending","type":"boolean"},"include_scores":{"default":false,"title":"Include Scores","type":"boolean"},"k":{"default":5,"title":"K","type":"integer"},"memory_type":{"default":"","title":"Memory Type","type":"string"},"nivel":{"default":"","title":"Nivel","type":"string"},"offset":{"default":0,"title":"Offset","type":"integer"},"query":{"default":"","title":"Query","type":"string"},"rerank":{"default":"auto","title":"Rerank","type":"string"},"rerank_budget_ms":{"default":800,"title":"Rerank Budget Ms","type":"integer"},"rerank_top_k":{"default":8,"title":"Rerank Top K","type":"integer"},"session_id":{"default":"","title":"Session Id","type":"string"},"snippet_chars":{"default":300,"title":"Snippet Chars","type":"integer"}},"title":"search_hipocampoArguments","type":"object"},"name":"search_hipocampo"},{"description":"\n    Cambia el nivel jerárquico de un recuerdo.\n\n    Niveles:\n      - \"episodica\" — detalle completo, comprimible por checkpoint\n      - \"semantica\" — conocimiento consolidado, protegido de compresión\n      - \"automatica\" — regla permanente, nunca se comprime/checkpointea\n\n    Args:\n        id: ID del recuerdo.\n        nivel: Nuevo nivel: \"episodica\", \"semantica\", o \"automatica\".\n\n    Returns:\n        Confirmación del cambio.\n    ","inputSchema":{"properties":{"id":{"title":"Id","type":"integer"},"nivel":{"title":"Nivel","type":"string"}},"required":["id","nivel"],"title":"set_nivel_hipocampoArguments","type":"object"},"name":"set_nivel_hipocampo"},{"description":"\n    Elimina un enlace del grafo de memoria.\n\n    Args:\n        id: ID del enlace a eliminar (si se conoce).\n        source_id: Si no se provee id, elimina por source+target+type.\n        target_id: ID destino (requerido si no hay id).\n        relation_type: Tipo de relación (opcional si no hay id).\n\n    Returns:\n        Confirmación de eliminación.\n    ","inputSchema":{"properties":{"id":{"default":0,"title":"Id","type":"integer"},"relation_type":{"default":"","title":"Relation Type","type":"string"},"source_id":{"default":0,"title":"Source Id","type":"integer"},"target_id":{"default":0,"title":"Target Id","type":"integer"}},"title":"unlink_hipocampoArguments","type":"object"},"name":"unlink_hipocampo"},{"description":"\n    Elimina un webhook registrado por su ID.\n\n    Args:\n        id: ID del watch a eliminar.\n\n    Returns:\n        Confirmación de eliminación.\n    ","inputSchema":{"properties":{"id":{"title":"Id","type":"integer"}},"required":["id"],"title":"unwatch_hipocampoArguments","type":"object"},"name":"unwatch_hipocampo"},{"description":"\n    Actualiza un recuerdo existente en el Hipocampo (memoria_vectorial).\n\n    Si se proporciona content, el embedding se regenera en BACKGROUND (no\n    bloquea la llamada, igual que save_hipocampo): la fila conserva su\n    embedding anterior hasta el backfill y la búsqueda semántica pasa al\n    nuevo en cuanto esté listo. Los campos no proporcionados no se modifican.\n\n    Args:\n        id: ID numérico del recuerdo a actualizar.\n        content: Nuevo texto del recuerdo (opcional). Si se provee, el embedding\n                 se regenera en background.\n        memory_type: Nuevo tipo de memoria (opcional). Ej: \"event\", \"decision\".\n        code: Código o etiqueta corta (opcional).\n        categories: Nueva lista de categorías (opcional).\n        meta_patch: Dict opcional que se FUSIONA sobre metadatos (sobrescribe\n                    solo las claves incluidas; el resto se conserva). Pensado\n                    para sincronizar md5/bytes sin escribir SQL a mano.\n                    Ej: {\"md5\": \"6dbe9bdb...\", \"bytes\": 52790}\n\n    Returns:\n        Confirmación de la actualización.\n    ","inputSchema":{"properties":{"categories":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"default":null,"title":"Categories"},"code":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Code"},"content":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Content"},"id":{"title":"Id","type":"integer"},"memory_type":{"anyOf":[{"type":"string"},{"type":"null"}],"default":null,"title":"Memory Type"},"meta_patch":{"anyOf":[{"additionalProperties":true,"type":"object"},{"type":"null"}],"default":null,"title":"Meta Patch"}},"required":["id"],"title":"update_hipocampoArguments","type":"object"},"name":"update_hipocampo"},{"description":"\n    Valida una regla inmunológica (Nivel 4).\n\n    Analiza una regla 'automatica' marcada como REGLA INMUNOLÓGICA:\n    1. Verifica snapshots pre-cambio vinculados en memory_links\n    2. Detecta reglas contradictorias sobre el mismo archivo/proyecto\n    3. Reporta reglas huérfanas (>30d sin enlaces entrantes)\n\n    Args:\n        rule_id: ID de la regla inmunológica a validar.\n\n    Returns:\n        Reporte de validación con recomendaciones.\n    ","inputSchema":{"properties":{"rule_id":{"title":"Rule Id","type":"integer"}},"required":["rule_id"],"title":"validate_immune_ruleArguments","type":"object"},"name":"validate_immune_rule"},{"description":"\n    Registra un webhook que se dispara cuando se crea/modifica/elimina\n    un recuerdo cuyo contenido o metadatos contengan el patrón dado.\n\n    Args:\n        pattern: Texto a buscar en contenido o metadatos del recuerdo.\n        webhook_url: URL que recibirá un POST con event, id, content, metadatos.\n\n    Returns:\n        Confirmación con ID del watch creado.\n    ","inputSchema":{"properties":{"pattern":{"title":"Pattern","type":"string"},"webhook_url":{"title":"Webhook Url","type":"string"}},"required":["pattern","webhook_url"],"title":"watch_hipocampoArguments","type":"object"},"name":"watch_hipocampo"}]},"body_sha256":"13fbc422fd9cd53f7f264d4e1300e1384f78c85ec00e071e3157d9af74b54fc1","prev_id":null,"leaf":"0x86937a8c7226b811fc73b494a019e088692e0b1dd5df604aebbe98449e47584b","leaf_text":"{\"body\":\"13fbc422fd9cd53f7f264d4e1300e1384f78c85ec00e071e3157d9af74b54fc1\",\"id\":579141,\"kind\":\"mcp.tools\",\"method\":\"probe.mcp/1\",\"observed_us\":1793143317849254,\"prev\":null,\"subject\":\"825804d4-d32f-4788-833d-dae5f552c35d\",\"subject_kind\":\"endpoint\"}","day":{"day":"2026-10-27","leaves":273461,"root":"0xdd77e5e99da32c3f154180d63e3c3e6fe11e896a2c6896412ef6b5c4bcf7e795","chained":"0x23bb4dfd09f55c15ac3962f53578e02c6114d5bfd9bb451cf8794fb6e2817ef4","anchor_chain":"eip155:5042002","anchor_tx":"0xb2ebd83aafeb765a0ce66e76aefb133ed06606c98038fd56191e2bcd1dcb77b4","anchor_block":69414147},"proof":["0x869380e0aa6050790de57cd1ec5c9a853c60aca6db7b4c99d25c1045e432f527","0xce202152d27e7983f7297fd38016d340cf1c652b8fbcb08946600a557f337a3c","0x766b8304a7d20d8248d135e96cd1bdab69a4bd5b8292cd377a1a5666c482185e","0x93936045f1225e0f41881da819a71ce51337519173558c15e429880836cb952d","0x34f781cc41dc160a591c5e3f2bba80079a930c483daf67e776a07f017fb5c685","0x487a6765292ae6667104e07b806422212fc559dce78470792c65ecf93a36376a","0xf4503b5c1c9d167ab7c76de7c7adc9f63458912e9c56a6de9ce0203b07f17c69","0x9b71a1e41e5d54d4fa9df3fc1520d57006200f1b29e8a86c5a1c10c1714eeac8","0x6379cb39cc0041e9f8862ab6094a764bf7f93412abd49a57f9d6f2204b426bf1","0x62b856b44e16d175a37058c6919f0c4acdf69afdf756c53db4e59cf54aa2a004","0xa422cf0aa2444c11b145e66f51596fb564431c83c30bc600fea79ecf01652ab4","0xe5ce8ac1ba4d6152605e0a032058cac5906d85f82e3fda1ad44852337b713b17","0x07d414626f116f3edc6ddb34183ed02538c3a805fec6db00f9d764f8fd595d04","0x4964f0806efde5ed25f60da2b45d78cd2e0f07d67e64aad2822f6016ad973c47","0x3c500ec3d3edf0c74b87a6ca8fcd77656bfbe03db3d478bd0c184d0c88839c6b","0xfecf3d4646dd4984a13dd715499e842c3fde63692336d97394c2bfd8e877ca5d","0xf30fddbf4811226c58e8f0daf36fddd79fc5f1356b592bb1d99a8061ddbabe66","0x2bf8151e5f157dd183b9de6fa00469551932a7a6e3f33a694895000ac9061197","0x9fc354c0ea3efc3f1b6548bb77ea902a50f2c9647647ea61592efce2bd795699"]}