hybrid server
The server is able to function both locally and remotely, depending on the configuration or use case.
Integrations
Uses Docker and Docker Compose to manage Neo4j database instances, with preconfigured settings for ports, credentials, plugins, and health checks.
Provides a knowledge graph management interface for storing and retrieving information in Neo4j graph databases, with tools for creating entities and relationships, searching and filtering data, updating entities, and introspecting database schema.
Servidor MCP Neo4j
Esta es una implementación de servidor del Protocolo de Control de Memoria (MCP) que utiliza Neo4j como almacenamiento backend para la gestión de grafos de conocimiento. Proporciona una interfaz basada en stdio para almacenar y recuperar conocimiento en un formato de base de datos de grafos.
Prerrequisitos
- Python 3.8+
- Base de datos Neo4j (local o remota)
- Poesía (gestor de paquetes de Python)
- Docker y Docker Compose (para ejecutar Neo4j)
- Go Task (opcional, para automatización de tareas)
Instalación
- Clonar el repositorio:
- Instala Poetry si aún no lo has hecho:
- Instalar dependencias:
Configuración
Configuración del escritorio de Claude
Para los usuarios de Ubuntu que ejecutan Claude Desktop, pueden configurar el servidor MCP agregándolo a su archivo de configuración de Claude Desktop en:
Antes de configurar, debe crear el ejecutable independiente:
Esto creará un binario en dist/neo4j_mcp_server
. Asegúrate de actualizar la ruta en tu configuración para que apunte a este ejecutable compilado.
Se proporciona un ejemplo de configuración en example_mcp_config.json
. Puede copiar y modificar este archivo:
Luego edite la ruta command
en el archivo de configuración para que apunte al ejecutable creado:
La configuración incluye:
- Nombre y descripción del servidor
- Comando para iniciar el servidor (ruta al ejecutable compilado)
- Herramientas disponibles y sus parámetros
- Campos obligatorios y tipos de datos
Ejecución del servidor
Uso de la tarea (recomendado)
Si tiene Go Task instalado, puede utilizar el Taskfile proporcionado para administrar el servidor:
Usando Docker Compose directamente
- Inicie el contenedor Neo4j:
- Espere a que Neo4j esté listo (el contenedor se mostrará como "saludable" en
docker ps
)
Ejecutar el servidor MCP directamente
Inicie el servidor con:
El servidor se iniciará en modo stdio, listo para aceptar mensajes del protocolo MCP.
Herramientas disponibles
1. Crear entidades
Crea nuevas entidades en el grafo de conocimiento. Cada entidad debe tener un tipo y propiedades. El ID se establecerá automáticamente a partir de la propiedad de nombre si no se proporciona explícitamente.
Parámetros:
entities
: Lista de objetos de entidad, cada uno conteniendo:type
: Cadena - El tipo de entidad (por ejemplo, Persona, Organización)properties
: Objeto - Pares clave-valor de propiedades de entidad (debe incluir 'id' o 'name')
Ejemplo de entrada:
2. Crear relaciones
Crea relaciones entre entidades existentes en el grafo de conocimiento. Todas las entidades referenciadas deben existir antes de crear relaciones.
Parámetros:
relations
: Lista de objetos de relación, cada uno conteniendo:type
: Cadena - El tipo de relación (por ejemplo, SABE, TRABAJA_PARA)from
: Cadena - ID de la entidad de origento
: Cadena - ID de la entidad de destino
Ejemplo de entrada:
3. Entidades de búsqueda
Busca entidades en el grafo de conocimiento con potentes funciones de coincidencia y filtrado de texto. Permite buscar por texto, listar entidades por tipo, encontrar entidades con propiedades específicas o cualquier combinación de estos filtros.
Parámetros:
search_term
: Cadena (opcional) - Texto de búsqueda en las propiedades de la entidad. Si no se proporciona, devuelve las entidades según otros filtros.entity_type
: Cadena (opcional) - Filtra los resultados por tipo de entidad (p. ej., Persona, Organización). Si se proporciona solo, devuelve todas las entidades de ese tipo.properties
: List[String] (opcional) - Lista de nombres de propiedades para filtrar por:- Con search_term: busca estas propiedades para el término
- Sin término de búsqueda: Devuelve entidades que tienen alguna de estas propiedades definidas
include_relationships
: Booleano (opcional, predeterminado: falso) - Si se deben incluir entidades y relaciones conectadasfuzzy_match
: Booleano (opcional, valor predeterminado: verdadero) - Si se debe utilizar una coincidencia parcial sin distinción entre mayúsculas y minúsculas cuando se proporciona search_term
Entradas de ejemplo:
Devoluciones:
Notas:
- Cuando no se proporcionan filtros, devuelve todas las entidades
- El filtrado de tipo de entidad es de coincidencia exacta (no difusa)
- La comprobación de existencia de la propiedad se realiza con
IS NOT NULL
- La búsqueda de texto admite coincidencias parciales sin distinción entre mayúsculas y minúsculas cuando fuzzy_match es verdadero
- Los resultados vacíos se devuelven como una matriz vacía, no como un error.
- Consideraciones de rendimiento:
- Filtrar por tipo es más eficiente que la búsqueda de texto
- Se optimizan las comprobaciones de existencia de propiedades
- Considere utilizar propiedades específicas en lugar de buscar todas las propiedades
- Es posible que los conjuntos de resultados grandes se paginaran en versiones futuras
4. Actualizar entidades
Actualiza las entidades existentes en el grafo de conocimiento. Permite añadir o eliminar propiedades y etiquetas.
Parámetros:
updates
: Lista de objetos de actualización, cada uno conteniendo:id
: cadena (obligatoria) - ID de la entidad a actualizarproperties
: Objeto (opcional) - Propiedades para actualizar o agregarremove_properties
: List[String] (opcional) - Nombres de propiedades para eliminaradd_labels
: List[String] (opcional) - Etiquetas para agregar a la entidadremove_labels
: List[String] (opcional) - Etiquetas para eliminar de la entidad
Ejemplo de entrada:
5. Eliminar entidades
Elimina entidades del gráfico de conocimiento con eliminación en cascada opcional de relaciones.
Parámetros:
entity_ids
: List[String] (obligatorio) - Lista de ID de entidades para eliminarcascade
: booleano (opcional, predeterminado: falso): si se deben eliminar las relaciones conectadasdry_run
: Booleano (opcional, predeterminado: falso) - Vista previa del impacto de la eliminación sin realizar cambios
Ejemplo de entrada:
Devoluciones:
success
: Booleano: si la operación fue exitosadeleted_entities
: Lista de entidades eliminadasdeleted_relationships
: Lista de relaciones eliminadaserrors
: Lista de mensajes de error (si los hay)impacted_entities
: Lista de entidades que se verían afectadas (solo ejecución en seco)impacted_relationships
: Lista de relaciones que se verían afectadas (solo ejecución en seco)
6. Esquema de introspección
Recupera información completa sobre el esquema de la base de datos Neo4j, incluidas las etiquetas de los nodos, los tipos de relación y sus propiedades.
Parámetros: No se requiere ninguno
Devoluciones:
schema
: Objeto que contiene:node_labels
: Lista de todas las etiquetas de nodo en la base de datosrelationship_types
: Lista de todos los tipos de relacionesnode_properties
: Mapa de la etiqueta a la lista de nombres de propiedadesrelationship_properties
: Mapa del tipo de relación a la lista de nombres de propiedades
Ejemplo de entrada:
Pruebas
Scripts de prueba
El proyecto incluye varios scripts de prueba para diferentes aspectos del sistema:
mcp_neo4j_knowledge_graph/test_mcp_client.py
: prueba la funcionalidad del cliente MCP- Verifica el inicio del servidor
- Listado de herramientas de prueba
- Prueba la introspección del esquema
- Prueba la creación de entidades GXP18
mcp_neo4j_knowledge_graph/test_mcp_config.py
- Prueba la configuración de MCP- Valida la carga del archivo de configuración
- Prueba la conexión del servidor utilizando el SDK oficial de MCP
- Verifica que todas las herramientas necesarias estén disponibles GXP19
mcp_neo4j_knowledge_graph/test_neo4j_connection.py
- Prueba la conexión a la base de datos Neo4j- Verifica la conectividad de la base de datos
- Prueba la funcionalidad básica de consulta
- Comprueba la configuración del entorno GXP20
Ejecución de pruebas
Puedes ejecutar las pruebas de varias maneras:
- Ejecute todas las pruebas juntas:Copy
- Ejecutar tipos de pruebas individuales:Copy
- Ejecute pruebas con pytest directamente:Copy
Desarrollo
Uso de la tarea
El proyecto incluye varias tareas de desarrollo:
Corriendo directamente
Este proyecto utiliza varias herramientas de desarrollo que se instalan automáticamente con Poetry:
black
para formato de códigoisort
para la clasificación de importacionesflake8
para quitar pelusapytest
para pruebas
Puedes ejecutar estas herramientas usando Poetry:
Manejo de errores
El servidor incluye un manejo integral de errores para:
- Problemas de conexión a la base de datos
- Consultas no válidas
- Nodos faltantes
- Formatos de solicitud no válidos
- Errores de validación del esquema
- Fracasos en la creación de relaciones
- Conflictos de actualización de entidades
Todos los errores se devuelven con mensajes de error apropiados en el formato del protocolo MCP.
Configuración de Docker
El contenedor Neo4j está configurado con las siguientes configuraciones:
- Puertos: 7474 (HTTP) y 7687 (Bolt)
- Credenciales predeterminadas: neo4j/contraseña
- Complemento APOC habilitado
- Importación/exportación de archivos habilitada
- Comprobación de estado configurada
Puede modificar estas configuraciones en el archivo docker-compose.yml
.
Referencia de comandos de tarea
task
- Mostrar tareas disponiblestask run
: iniciar Docker y el servidor MCPtask dev
- Iniciar entorno de desarrollo (Docker + Servidor + Prueba)task docker
: iniciar la base de datos de Neo4jtask server
: ejecutar el servidor MCPtask test
- Ejecutar todas las pruebastask test-client
: ejecutar pruebas de cliente MCPtask test-config
: ejecuta pruebas de configuración de MCPtask test-db
- Ejecutar pruebas de base de datostask test-integration
- Ejecutar pruebas de integracióntask down
: detenga todos los servicios de Dockertask format
: Formatear código usando black e isorttask lint
- Ejecutar flake8 lintertask help
: muestra ayuda detallada para todas las tareas
This server cannot be installed
Permite el almacenamiento y la recuperación de conocimiento en un formato de base de datos de gráficos, lo que permite a los usuarios crear, actualizar, buscar y eliminar entidades y relaciones en un gráfico de conocimiento impulsado por Neo4j a través del lenguaje natural.