memento-mcp

by gannonh
Verified

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Integrations

  • Enables GitHub Copilot to access the persistent knowledge graph memory system through the model context protocol.

  • Uses Neo4j as the storage backend for the knowledge graph, providing unified graph storage and vector search capabilities.

  • Leverages OpenAI's embedding models for semantic search capabilities, supporting multiple models including text-embedding-3-small/large.

Memento MCP: un sistema de memoria de gráficos de conocimiento para LLM

Sistema de memoria de grafos de conocimiento escalable y de alto rendimiento con recuperación semántica, recuerdo contextual y reconocimiento temporal. Proporciona a cualquier cliente LLM compatible con el protocolo de contexto de modelo (p. ej., Claude Desktop, Cursor, Github Copilot) una memoria ontológica a largo plazo resiliente, adaptativa y persistente.

Conceptos básicos

Entidades

Las entidades son los nodos principales del grafo de conocimiento. Cada entidad tiene:

  • Un nombre único (identificador)
  • Un tipo de entidad (por ejemplo, "persona", "organización", "evento")
  • Una lista de observaciones
  • Incrustaciones vectoriales (para búsqueda semántica)
  • Historial completo de versiones

Ejemplo:

{ "name": "John_Smith", "entityType": "person", "observations": ["Speaks fluent Spanish"] }

Relaciones

Las relaciones definen conexiones dirigidas entre entidades con propiedades mejoradas:

  • Indicadores de fuerza (0,0-1,0)
  • Niveles de confianza (0,0-1,0)
  • Metadatos enriquecidos (fuente, marcas de tiempo, etiquetas)
  • Conciencia temporal con historial de versiones
  • Decadencia de la confianza basada en el tiempo

Ejemplo:

{ "from": "John_Smith", "to": "Anthropic", "relationType": "works_at", "strength": 0.9, "confidence": 0.95, "metadata": { "source": "linkedin_profile", "last_verified": "2025-03-21" } }

Backend de almacenamiento

Memento MCP utiliza Neo4j como su backend de almacenamiento, proporcionando una solución unificada tanto para el almacenamiento de gráficos como para las capacidades de búsqueda de vectores.

¿Por qué Neo4j?

  • Almacenamiento unificado : consolida el almacenamiento de gráficos y vectores en una única base de datos
  • Operaciones gráficas nativas : diseñadas específicamente para recorridos y consultas de gráficos
  • Búsqueda de vectores integrada : búsqueda de similitud de vectores para incrustaciones integradas directamente en Neo4j
  • Escalabilidad : mejor rendimiento con grandes gráficos de conocimiento
  • Arquitectura simplificada : diseño limpio con una única base de datos para todas las operaciones

Prerrequisitos

  • Neo4j 5.13+ (necesario para las capacidades de búsqueda vectorial)

Configuración de escritorio de Neo4j (recomendada)

La forma más fácil de comenzar a utilizar Neo4j es utilizar Neo4j Desktop :

  1. Descargue e instale Neo4j Desktop desde https://neo4j.com/download/
  2. Crear un nuevo proyecto
  3. Agregar una nueva base de datos
  4. Establezca la contraseña en memento_password (o su contraseña preferida)
  5. Iniciar la base de datos

La base de datos Neo4j estará disponible en:

  • URI de Bolt : bolt://127.0.0.1:7687 (para conexiones de controlador)
  • HTTP : http://127.0.0.1:7474 (para la interfaz de usuario del navegador Neo4j)
  • Credenciales predeterminadas : nombre de usuario: neo4j , contraseña: memento_password (o la que haya configurado)

Configuración de Neo4j con Docker (alternativa)

Alternativamente, puedes usar Docker Compose para ejecutar Neo4j:

# Start Neo4j container docker-compose up -d neo4j # Stop Neo4j container docker-compose stop neo4j # Remove Neo4j container (preserves data) docker-compose rm neo4j

Al utilizar Docker, la base de datos Neo4j estará disponible en:

  • URI de Bolt : bolt://127.0.0.1:7687 (para conexiones de controlador)
  • HTTP : http://127.0.0.1:7474 (para la interfaz de usuario del navegador Neo4j)
  • Credenciales predeterminadas : nombre de usuario: neo4j , contraseña: memento_password

Persistencia y gestión de datos

Los datos de Neo4j persisten después de reiniciar el contenedor e incluso de actualizar la versión debido a la configuración del volumen de Docker en el archivo docker-compose.yml :

volumes: - ./neo4j-data:/data - ./neo4j-logs:/logs - ./neo4j-import:/import

Estas asignaciones garantizan que:

  • El directorio /data (contiene todos los archivos de base de datos) persiste en su host en ./neo4j-data
  • El directorio /logs persiste en su host en ./neo4j-logs
  • El directorio /import (para importar archivos de datos) persiste en ./neo4j-import

Puede modificar estas rutas en su archivo docker-compose.yml para almacenar datos en diferentes ubicaciones si es necesario.

Actualización de la versión de Neo4j

Puedes cambiar ediciones y versiones de Neo4j sin perder datos:

  1. Actualice la versión de la imagen de Neo4j en docker-compose.yml
  2. Reinicie el contenedor con docker-compose down && docker-compose up -d neo4j
  3. Reinicialice el esquema con npm run neo4j:init

Los datos persistirán durante este proceso mientras las asignaciones de volumen sigan siendo las mismas.

Restablecimiento completo de la base de datos

Si necesita restablecer completamente su base de datos Neo4j:

# Stop the container docker-compose stop neo4j # Remove the container docker-compose rm -f neo4j # Delete the data directory contents rm -rf ./neo4j-data/* # Restart the container docker-compose up -d neo4j # Reinitialize the schema npm run neo4j:init
Copia de seguridad de datos

Para hacer una copia de seguridad de sus datos de Neo4j, simplemente puede copiar el directorio de datos:

# Make a backup of the Neo4j data cp -r ./neo4j-data ./neo4j-data-backup-$(date +%Y%m%d)

Utilidades CLI de Neo4j

Memento MCP incluye utilidades de línea de comandos para administrar operaciones de Neo4j:

Conexión de prueba

Pruebe la conexión a su base de datos Neo4j:

# Test with default settings npm run neo4j:test # Test with custom settings npm run neo4j:test -- --uri bolt://127.0.0.1:7687 --username myuser --password mypass --database neo4j

Inicializando el esquema

Para un funcionamiento normal, la inicialización del esquema de Neo4j se realiza automáticamente cuando Memento MCP se conecta a la base de datos. No es necesario ejecutar ningún comando manual para su uso habitual.

Los siguientes comandos solo son necesarios para escenarios de desarrollo, pruebas o personalización avanzada:

# Initialize with default settings (only needed for development or troubleshooting) npm run neo4j:init # Initialize with custom vector dimensions npm run neo4j:init -- --dimensions 768 --similarity euclidean # Force recreation of all constraints and indexes npm run neo4j:init -- --recreate # Combine multiple options npm run neo4j:init -- --vector-index custom_index --dimensions 384 --recreate

Funciones avanzadas

Búsqueda semántica

Encuentre entidades semánticamente relacionadas basándose en el significado en lugar de solo palabras clave:

  • Incrustaciones vectoriales : las entidades se codifican automáticamente en un espacio vectorial de alta dimensión utilizando los modelos de incrustación de OpenAI
  • Similitud de coseno : encuentre conceptos relacionados incluso cuando utilicen terminología diferente
  • Umbrales configurables : establezca puntuaciones mínimas de similitud para controlar la relevancia de los resultados
  • Búsqueda intermodal : consulta con texto para encontrar entidades relevantes independientemente de cómo se describieron
  • Compatibilidad con múltiples modelos : compatible con múltiples modelos de incrustación (OpenAI text-embedding-3-small/large)
  • Recuperación contextual : recupere información basándose en el significado semántico en lugar de coincidencias exactas de palabras clave
  • Valores predeterminados optimizados : parámetros ajustados para lograr un equilibrio entre precisión y recuperación (umbral de similitud de 0,6, búsqueda híbrida habilitada)
  • Búsqueda híbrida : combina búsqueda semántica y por palabras clave para obtener resultados más completos.
  • Búsqueda adaptativa : el sistema elige de forma inteligente entre búsqueda de solo vectores, solo palabras clave o híbrida según las características de la consulta y los datos disponibles.
  • Optimización del rendimiento : prioriza la búsqueda de vectores para la comprensión semántica mientras mantiene mecanismos de respaldo para la resiliencia.
  • Procesamiento consciente de consultas : ajusta la estrategia de búsqueda en función de la complejidad de la consulta y las incrustaciones de entidades disponibles

Conciencia temporal

Realice un seguimiento del historial completo de entidades y relaciones con la recuperación de gráficos de puntos en el tiempo:

  • Historial de versiones completo : cada cambio en una entidad o relación se conserva con marcas de tiempo
  • Consultas de punto en el tiempo : recupera el estado exacto del gráfico de conocimiento en cualquier momento del pasado
  • Seguimiento de cambios : registra automáticamente las marcas de tiempo createdAt, updatedAt, validFrom y validTo
  • Coherencia temporal : mantener una visión históricamente precisa de cómo evolucionó el conocimiento
  • Actualizaciones no destructivas : las actualizaciones crean nuevas versiones en lugar de sobrescribir los datos existentes
  • Filtrado basado en el tiempo : filtra elementos del gráfico según criterios temporales
  • Exploración histórica : investigar cómo cambió información específica a lo largo del tiempo

Decadencia de la confianza

Las relaciones pierden confianza automáticamente con el tiempo según una vida media configurable:

  • Decadencia basada en el tiempo : la confianza en las relaciones disminuye naturalmente con el tiempo si no se refuerza.
  • Vida media configurable : define con qué rapidez la información se vuelve menos segura (valor predeterminado: 30 días)
  • Pisos de confianza mínimos : establezca umbrales para evitar el deterioro excesivo de información importante
  • Metadatos de desintegración : cada relación incluye información detallada del cálculo de desintegración
  • No destructivo : los valores de confianza originales se conservan junto con los valores decaídos
  • Aprendizaje por refuerzo : Las relaciones recuperan la confianza cuando se refuerzan con nuevas observaciones
  • Flexibilidad de tiempo de referencia : calcule la descomposición basándose en tiempos de referencia arbitrarios para el análisis histórico

Metadatos avanzados

Compatibilidad completa con metadatos tanto para entidades como para relaciones con campos personalizados:

  • Seguimiento de fuentes : registre dónde se originó la información (entrada del usuario, análisis, fuentes externas)
  • Niveles de confianza : Asigne puntuaciones de confianza (0,0-1,0) a las relaciones en función de la certeza.
  • Fuerza de la relación : Indica la importancia o fuerza de las relaciones (0,0-1,0)
  • Metadatos temporales : rastrea cuándo se agregó, modificó o verificó la información
  • Etiquetas personalizadas : agregue etiquetas arbitrarias para clasificación y filtrado
  • Datos estructurados : almacene datos estructurados complejos dentro de campos de metadatos
  • Soporte de consultas : búsqueda y filtrado según las propiedades de metadatos
  • Esquema extensible : agregue campos personalizados según sea necesario sin modificar el modelo de datos principal

Herramientas de API de MCP

Las siguientes herramientas están disponibles para los hosts de clientes LLM a través del Protocolo de contexto de modelo:

Gestión de entidades

  • crear_entidades
    • Crear múltiples entidades nuevas en el gráfico de conocimiento
    • Entrada: entities (matriz de objetos)
      • Cada objeto contiene:
        • name (cadena): identificador de entidad
        • entityType (cadena): clasificación de tipos
        • observations (string[]): Observaciones asociadas
  • añadir_observaciones
    • Agregar nuevas observaciones a entidades existentes
    • Entrada: observations (matriz de objetos)
      • Cada objeto contiene:
        • entityName (cadena): entidad de destino
        • contents (string[]): Nuevas observaciones para agregar
  • eliminar_entidades
    • Eliminar entidades y sus relaciones
    • Entrada: entityNames (cadena[])
  • eliminar_observaciones
    • Eliminar observaciones específicas de las entidades
    • Entrada: deletions (matriz de objetos)
      • Cada objeto contiene:
        • entityName (cadena): entidad de destino
        • observations (string[]): Observaciones para eliminar

Gestión de relaciones

  • crear_relaciones
    • Crear múltiples relaciones nuevas entre entidades con propiedades mejoradas
    • Entrada: relations (matriz de objetos)
      • Cada objeto contiene:
        • from (string): Nombre de la entidad de origen
        • to (cadena): nombre de la entidad de destino
        • relationType (cadena): tipo de relación
        • strength (número, opcional): Fuerza de la relación (0,0-1,0)
        • confidence (número, opcional): Nivel de confianza (0,0-1,0)
        • metadata (objeto, opcional): campos de metadatos personalizados
  • obtener_relación
    • Obtenga una relación específica con sus propiedades mejoradas
    • Aporte:
      • from (string): Nombre de la entidad de origen
      • to (cadena): nombre de la entidad de destino
      • relationType (cadena): tipo de relación
  • actualizar_relación
    • Actualizar una relación existente con propiedades mejoradas
    • Entrada: relation (objeto):
      • Contiene:
        • from (string): Nombre de la entidad de origen
        • to (cadena): nombre de la entidad de destino
        • relationType (cadena): tipo de relación
        • strength (número, opcional): Fuerza de la relación (0,0-1,0)
        • confidence (número, opcional): Nivel de confianza (0,0-1,0)
        • metadata (objeto, opcional): campos de metadatos personalizados
  • eliminar_relaciones
    • Eliminar relaciones específicas del gráfico
    • Entrada: relations (matriz de objetos)
      • Cada objeto contiene:
        • from (string): Nombre de la entidad de origen
        • to (cadena): nombre de la entidad de destino
        • relationType (cadena): tipo de relación

Operaciones gráficas

  • leer_gráfico
    • Lea el gráfico de conocimiento completo
    • No se requiere entrada
  • nodos de búsqueda
    • Búsqueda de nodos según la consulta
    • Entrada: query (cadena)
  • nodos abiertos
    • Recuperar nodos específicos por nombre
    • Entrada: names (cadena[])

Búsqueda semántica

  • búsqueda semántica
    • Búsqueda de entidades semánticamente utilizando incrustaciones vectoriales y similitud
    • Aporte:
      • query (cadena): La consulta de texto que se buscará semánticamente
      • limit (número, opcional): Máximo de resultados a devolver (predeterminado: 10)
      • min_similarity (número, opcional): umbral mínimo de similitud (0,0-1,0, predeterminado: 0,6)
      • entity_types (string[], opcional): Filtrar resultados por tipos de entidad
      • hybrid_search (booleano, opcional): combina búsqueda por palabras clave y semántica (valor predeterminado: verdadero)
      • semantic_weight (número, opcional): peso de los resultados semánticos en la búsqueda híbrida (0,0-1,0, valor predeterminado: 0,6)
    • Características:
      • Selecciona de forma inteligente el método de búsqueda óptimo (vector, palabra clave o híbrido) según el contexto de la consulta.
      • Maneja con elegancia las consultas sin coincidencias semánticas a través de mecanismos de respaldo
      • Mantiene un alto rendimiento con decisiones de optimización automáticas
  • obtener_entidad_incrustada
    • Obtener la incrustación vectorial para una entidad específica
    • Aporte:
      • entity_name (cadena): El nombre de la entidad para la que se obtendrá la incrustación

Características temporales

  • obtener_historial_de_entidades
    • Obtener el historial de versiones completo de una entidad
    • Entrada: entityName (cadena)
  • obtener_historial_de_relaciones
    • Obtener el historial de versiones completo de una relación
    • Aporte:
      • from (string): Nombre de la entidad de origen
      • to (cadena): nombre de la entidad de destino
      • relationType (cadena): tipo de relación
  • obtener_gráfico_en_tiempo
    • Obtener el estado del gráfico en una marca de tiempo específica
    • Entrada: timestamp (número): marca de tiempo de Unix (milisegundos desde la época)
  • obtener_gráfico_decaído
    • Obtener un gráfico con valores de confianza decaídos en el tiempo
    • Entrada: options (objeto, opcional):
      • reference_time (número): marca de tiempo de referencia para el cálculo de la decadencia (milisegundos desde la época)
      • decay_factor (número): anulación del factor de decaimiento opcional

Configuración

Variables de entorno

Configure Memento MCP con estas variables de entorno:

# Neo4j Connection Settings NEO4J_URI=bolt://127.0.0.1:7687 NEO4J_USERNAME=neo4j NEO4J_PASSWORD=memento_password NEO4J_DATABASE=neo4j # Vector Search Configuration NEO4J_VECTOR_INDEX=entity_embeddings NEO4J_VECTOR_DIMENSIONS=1536 NEO4J_SIMILARITY_FUNCTION=cosine # Embedding Service Configuration MEMORY_STORAGE_TYPE=neo4j OPENAI_API_KEY=your-openai-api-key OPENAI_EMBEDDING_MODEL=text-embedding-3-small # Debug Settings DEBUG=true

Opciones de línea de comandos

Las herramientas CLI de Neo4j admiten las siguientes opciones:

--uri <uri> Neo4j server URI (default: bolt://127.0.0.1:7687) --username <username> Neo4j username (default: neo4j) --password <password> Neo4j password (default: memento_password) --database <n> Neo4j database name (default: neo4j) --vector-index <n> Vector index name (default: entity_embeddings) --dimensions <number> Vector dimensions (default: 1536) --similarity <function> Similarity function (cosine|euclidean) (default: cosine) --recreate Force recreation of constraints and indexes --no-debug Disable detailed output (debug is ON by default)

Modelos de incrustación

Modelos de integración de OpenAI disponibles:

  • text-embedding-3-small : Eficiente y rentable (1536 dimensiones)
  • text-embedding-3-large : Mayor precisión, mayor coste (3072 dimensiones)
  • text-embedding-ada-002 : Modelo heredado (1536 dimensiones)

Configuración de la API de OpenAI

Para utilizar la búsqueda semántica, deberá configurar las credenciales de la API de OpenAI:

  1. Obtenga una clave API de OpenAI
  2. Configure su entorno con:
# OpenAI API Key for embeddings OPENAI_API_KEY=your-openai-api-key # Default embedding model OPENAI_EMBEDDING_MODEL=text-embedding-3-small

Nota : En entornos de prueba, el sistema simulará la generación de incrustaciones si no se proporciona una clave API. Sin embargo, se recomienda usar incrustaciones reales para las pruebas de integración.

Integración con Claude Desktop

Configuración

Agregue esto a su claude_desktop_config.json :

{ "mcpServers": { "memento": { "command": "npx", "args": [ "-y", "@gannonh/memento-mcp" ], "env": { "MEMORY_STORAGE_TYPE": "neo4j", "NEO4J_URI": "bolt://127.0.0.1:7687", "NEO4J_USERNAME": "neo4j", "NEO4J_PASSWORD": "memento_password", "NEO4J_DATABASE": "neo4j", "NEO4J_VECTOR_INDEX": "entity_embeddings", "NEO4J_VECTOR_DIMENSIONS": "1536", "NEO4J_SIMILARITY_FUNCTION": "cosine", "OPENAI_API_KEY": "your-openai-api-key", "OPENAI_EMBEDDING_MODEL": "text-embedding-3-small", "DEBUG": "true" } } } }

Alternativamente, para el desarrollo local, puede utilizar:

{ "mcpServers": { "memento": { "command": "/path/to/node", "args": [ "/path/to/memento-mcp/dist/index.js" ], "env": { "MEMORY_STORAGE_TYPE": "neo4j", "NEO4J_URI": "bolt://127.0.0.1:7687", "NEO4J_USERNAME": "neo4j", "NEO4J_PASSWORD": "memento_password", "NEO4J_DATABASE": "neo4j", "NEO4J_VECTOR_INDEX": "entity_embeddings", "NEO4J_VECTOR_DIMENSIONS": "1536", "NEO4J_SIMILARITY_FUNCTION": "cosine", "OPENAI_API_KEY": "your-openai-api-key", "OPENAI_EMBEDDING_MODEL": "text-embedding-3-small", "DEBUG": "true" } } } }

Importante : Siempre especifique explícitamente el modelo de inserción en su configuración de Claude Desktop para garantizar un comportamiento consistente.

Indicaciones del sistema recomendadas

Para una integración óptima con Claude, agregue estas declaraciones al aviso de su sistema:

You have access to the Memento MCP knowledge graph memory system, which provides you with persistent memory capabilities. Your memory tools are provided by Memento MCP, a sophisticated knowledge graph implementation. When asked about past conversations or user information, always check the Memento MCP knowledge graph first. You should use semantic_search to find relevant information in your memory when answering questions.

Prueba de búsqueda semántica

Una vez configurado, Claude puede acceder a las capacidades de búsqueda semántica a través del lenguaje natural:

  1. Para crear entidades con incrustaciones semánticas:
    User: "Remember that Python is a high-level programming language known for its readability and JavaScript is primarily used for web development."
  2. Para buscar semánticamente:
    User: "What programming languages do you know about that are good for web development?"
  3. Para recuperar información específica:
    User: "Tell me everything you know about Python."

El poder de este enfoque es que los usuarios pueden interactuar de forma natural, mientras que el LLM maneja la complejidad de seleccionar y utilizar las herramientas de memoria adecuadas.

Aplicaciones en el mundo real

Las capacidades de búsqueda adaptativa de Memento brindan beneficios prácticos:

  1. Versatilidad de consultas : los usuarios no necesitan preocuparse por cómo formular las preguntas: el sistema se adapta automáticamente a diferentes tipos de consultas.
  2. Resiliencia ante fallos : incluso cuando no hay coincidencias semánticas disponibles, el sistema puede recurrir a métodos alternativos sin intervención del usuario.
  3. Eficiencia de rendimiento : al seleccionar de forma inteligente el método de búsqueda óptimo, el sistema equilibra el rendimiento y la relevancia para cada consulta.
  4. Recuperación de contexto mejorada : las conversaciones LLM se benefician de una mejor recuperación de contexto, ya que el sistema puede encontrar información relevante en gráficos de conocimiento complejos.

Por ejemplo, cuando un usuario pregunta "¿Qué sabes sobre aprendizaje automático?", el sistema puede recuperar entidades conceptualmente relacionadas, incluso si no mencionan explícitamente el "aprendizaje automático", como por ejemplo entidades sobre redes neuronales, ciencia de datos o algoritmos específicos. Sin embargo, si la búsqueda semántica no arroja suficientes resultados, el sistema ajusta automáticamente su enfoque para garantizar que se devuelva información útil.

Solución de problemas

Diagnóstico de búsqueda vectorial

Memento MCP incluye capacidades de diagnóstico integradas para ayudar a solucionar problemas de búsqueda de vectores:

  • Verificación de incrustación : el sistema verifica si las entidades tienen incrustaciones válidas y las genera automáticamente si faltan.
  • Estado del índice del vector : verifica que el índice del vector exista y esté en estado EN LÍNEA
  • Búsqueda de respaldo : si la búsqueda vectorial falla, el sistema recurre a la búsqueda basada en texto.
  • Registro detallado : registro completo de operaciones de búsqueda de vectores para la resolución de problemas

Herramientas de depuración (cuando DEBUG=verdadero)

Cuando se habilita el modo de depuración, aparecen herramientas de diagnóstico adicionales:

  • diagnosis_vector_search : información sobre el índice de vectores de Neo4j, los recuentos de incrustaciones y la funcionalidad de búsqueda
  • force_generate_embedding : Fuerza la generación de una incrustación para una entidad específica
  • debug_embedding_config : información sobre la configuración actual del servicio de incrustación

Reinicio del desarrollador

Para restablecer completamente su base de datos Neo4j durante el desarrollo:

# Stop the container (if using Docker) docker-compose stop neo4j # Remove the container (if using Docker) docker-compose rm -f neo4j # Delete the data directory (if using Docker) rm -rf ./neo4j-data/* # For Neo4j Desktop, right-click your database and select "Drop database" # Restart the database # For Docker: docker-compose up -d neo4j # For Neo4j Desktop: # Click the "Start" button for your database # Reinitialize the schema npm run neo4j:init

Construcción y desarrollo

# Clone the repository git clone https://github.com/gannonh/memento-mcp.git cd memento-mcp # Install dependencies npm install # Build the project npm run build # Run tests npm test # Check test coverage npm run test:coverage

Instalación

Instalación mediante herrería

Para instalar memento-mcp para Claude Desktop automáticamente a través de Smithery :

npx -y @smithery/cli install @gannonh/memento-mcp --client claude

Instalación global con npx

Puedes ejecutar Memento MCP directamente usando npx sin instalarlo globalmente:

npx -y @gannonh/memento-mcp

Este método se recomienda para utilizar con Claude Desktop y otros clientes compatibles con MCP.

Instalación local

Para desarrollar o contribuir al proyecto:

# Install locally npm install @gannonh/memento-mcp # Or clone the repository git clone https://github.com/gannonh/memento-mcp.git cd memento-mcp npm install

Licencia

Instituto Tecnológico de Massachusetts (MIT)

ID: r8o11c6krf