Servidor de memoria de gráficos de conocimiento MCP DuckDB
Una versión bifurcada del servidor de memoria oficial Knowledge Graph .
Instalación
Instalación mediante herrería
Para instalar DuckDB Knowledge Graph Memory Server para Claude Desktop automáticamente a través de Smithery :
npx -y @smithery/cli install @IzumiSy/mcp-duckdb-memory-server --client claudeInstalación manual
De lo contrario, agregue @IzumiSy/mcp-duckdb-memory-server en su claude_desktop_config.json manualmente ( MEMORY_FILE_PATH es opcional)
{
"mcpServers": {
"graph-memory": {
"command": "npx",
"args": [
"-y",
"@izumisy/mcp-duckdb-memory-server"
],
"env": {
"MEMORY_FILE_PATH": "/path/to/your/memory.data"
}
}
}
}Los datos almacenados en esa ruta son un archivo de base de datos DuckDB.
Estibador
Construir
docker build -t mcp-duckdb-graph-memory .Correr
docker run -dit mcp-duckdb-graph-memoryRelated MCP server: MCP Memory Service
Uso
Utilice la instrucción de ejemplo a continuación
Follow these steps for each interaction:
1. User Identification:
- You should assume that you are interacting with default_user
- If you have not identified default_user, proactively try to do so.
2. Memory Retrieval:
- Always begin your chat by saying only "Remembering..." and search relevant information from your knowledge graph
- Create a search query from user words, and search things from "memory". If nothing matches, try to break down words in the query at first ("A B" to "A" and "B" for example).
- Always refer to your knowledge graph as your "memory"
3. Memory
- While conversing with the user, be attentive to any new information that falls into these categories:
a) Basic Identity (age, gender, location, job title, education level, etc.)
b) Behaviors (interests, habits, etc.)
c) Preferences (communication style, preferred language, etc.)
d) Goals (goals, targets, aspirations, etc.)
e) Relationships (personal and professional relationships up to 3 degrees of separation)
4. Memory Update:
- If any new information was gathered during the interaction, update your memory as follows:
a) Create entities for recurring organizations, people, and significant events
b) Connect them to the current entities using relations
b) Store facts about them as observationsMotivación
Este proyecto mejora el servidor de memoria MCP Knowledge Graph original reemplazando su backend con DuckDB.
¿Por qué DuckDB?
El servidor de memoria original de Knowledge Graph de MCP utilizaba un archivo JSON como almacén de datos y realizaba búsquedas en memoria. Si bien este enfoque funciona bien con conjuntos de datos pequeños, presenta varios desafíos:
Rendimiento : el rendimiento de la búsqueda en memoria se degrada a medida que crece el conjunto de datos
Escalabilidad : el uso de memoria aumenta significativamente cuando se manejan grandes cantidades de entidades y relaciones.
Flexibilidad de consultas : las consultas complejas y las búsquedas condicionales son difíciles de implementar
Integridad de los datos : garantizar la atomicidad de las transacciones y las operaciones CRUD es un desafío
Se eligió DuckDB para abordar estos desafíos:
Procesamiento rápido de consultas : DuckDB está optimizado para consultas analíticas y funciona bien incluso con grandes conjuntos de datos
Interfaz SQL : se puede utilizar SQL estándar para ejecutar consultas complejas fácilmente
Soporte de transacciones : admite el procesamiento de transacciones para mantener la integridad de los datos
Capacidades de indexación : permite la creación de índices para mejorar el rendimiento de la búsqueda.
Base de datos integrada : funciona dentro de la aplicación sin necesidad de un servidor de base de datos externo
Detalles de implementación
Esta implementación utiliza DuckDB como sistema de almacenamiento backend, centrándose en dos aspectos clave:
Estructura de la base de datos
El gráfico de conocimiento se almacena en una estructura de base de datos relacional como se muestra a continuación:
erDiagram
ENTITIES {
string name PK
string entityType
}
OBSERVATIONS {
string entityName FK
string content
}
RELATIONS {
string from_entity FK
string to_entity FK
string relationType
}
ENTITIES ||--o{ OBSERVATIONS : "has"
ENTITIES ||--o{ RELATIONS : "from"
ENTITIES ||--o{ RELATIONS : "to"Este diseño de esquema permite el almacenamiento y la recuperación eficientes de los componentes del gráfico de conocimiento manteniendo al mismo tiempo las relaciones entre entidades, observaciones y relaciones.
Implementación de búsqueda difusa
La implementación combina consultas SQL con Fuse.js para una búsqueda flexible de entidades:
Las consultas SQL de DuckDB recuperan los datos base de la base de datos
Fuse.js proporciona capacidades de coincidencia difusa sobre los datos recuperados
Este enfoque híbrido permite tanto consultas estructuradas como coincidencias de texto flexibles.
Los resultados de la búsqueda incluyen coincidencias exactas y parciales, clasificadas por relevancia.
Desarrollo
Configuración
pnpm installPruebas
pnpm testLicencia
Este proyecto está licenciado bajo la licencia MIT: consulte el archivo de LICENCIA para obtener más detalles.