Neo4j知识图谱记忆服务器

一个基于Neo4j图数据库的模型上下文协议(MCP)服务器,提供持久化记忆功能,支持复杂关系存储和多会话知识查询分析。

  • by neo4j-contrib
  • Python
  • 本地部署
  • 989 星标
  • 更新于
在 GitHub 查看 neo4j-contrib/mcp-neo4j

使用说明

🧠🕸️ Neo4j知识图内存MCP服务器

mcp名称:io.github.neo4j-contrib/mcp-neo4j-memory

🌟 概述

一种模型上下文协议(MCP)服务器实现,通过Neo4j图形数据库集成提供持久内存功能。

通过将信息存储在图形结构中,该服务器将实体之间的复杂关系作为内存节点进行维护,并能够长期保留可以在多个对话或会话中查询和分析的知识。

随着 Neo4j光环 您可以免费托管自己的数据库服务器,也可以与合作者共享。否则,您可以在本地运行自己的Neo4j服务器。

MCP服务器利用Neo4j的图形数据库功能创建了一个作为外部存储系统的互连知识库。通过Cypher查询,它允许探索和检索存储的信息,分析不同数据点之间的关系,并从积累的知识中生成见解。克劳德的能力可以进一步增强这种记忆。

🕸️ 图形架构

  • Memory -用名称、类型和观察值表示实体的节点。
  • Relationship -具有类型的两个实体之间的关系。

🔍 用法示例

Let's add some memories 
I, Michael, living in Dresden, Germany work at Neo4j which is headquartered in Sweden with my colleagues Andreas (Cambridge, UK) and Oskar (Gothenburg, Sweden)
I work in Product Management, Oskar in Engineering and Andreas in Developer Relations.

结果Claude调用了create_entities和create_relations工具。

📦 组件

🔧 工具

服务器提供以下核心工具:

🔎 查询工具

  • read_graph

    • 阅读整个知识图谱
    • 无需输入
    • 返回:包含实体和关系的完整图
  • search_nodes

    • 基于查询搜索节点
    • 输入:
      • query (string):搜索与名称、类型、观察结果匹配的查询
    • 返回:匹配子图
  • find_nodes

    • 按名称查找特定节点
    • 输入:
      • names (字符串数组):要检索的实体名称
    • 返回:具有指定节点的子图

♟️ 实体管理工具

  • create_entities

    • 在知识图中创建多个新实体
    • 输入:
      • entities:对象数组,包含:
        • name (string):实体名称
        • type (string):实体的类型
        • observations (字符串数组):对实体的初步观察
    • 返回:已创建实体
  • delete_entities

    • 删除多个实体及其关联关系
    • 输入:
      • entityNames (字符串数组):要删除的实体名称
    • 返回:成功确认

🔗 关系管理工具

  • create_relations

    • 在实体之间创建多个新关系
    • 输入:
      • relations:对象数组,包含:
        • source (string):源实体的名称
        • target (string):目标实体的名称
        • relationType (string):关系类型
    • 返回:已创建关系
  • delete_relations

    • 从图中删除多个关系
    • 输入:
      • relations:与create_relations具有相同架构的对象数组
    • 返回:成功确认

📝 观测管理工具

  • add_observations

    • 向现有实体添加新的观察结果
    • 输入:
      • observations:对象数组,包含:
        • entityName (string):要添加的实体
        • contents (字符串数组):要添加的观察值
    • 返回:添加了观察详细信息
  • delete_observations

    • 从实体中删除具体观察结果
    • 输入:
      • deletions:对象数组,包含:
        • entityName (string):要从中删除的实体
        • observations (字符串数组):要删除的观察值
    • 返回:成功确认

🔧 使用Claude Desktop

💾 安装

pip install mcp-neo4j-memory

⚙️ 配置

将服务器添加到您的 claude_desktop_config.json 配置如下:

"mcpServers": {
  "neo4j": {
    "command": "uvx",
    "args": [
      "mcp-neo4j-memory@0.4.5",
      "--db-url",
      "neo4j+s://xxxx.databases.neo4j.io",
      "--username",
      "<your-username>",
      "--password",
      "<your-password>"
    ]
  }
}

或者,您可以设置环境变量:

"mcpServers": {
  "neo4j": {
    "command": "uvx",
    "args": [ "mcp-neo4j-memory@0.4.5" ],
    "env": {
      "NEO4J_URL": "neo4j+s://xxxx.databases.neo4j.io",
      "NEO4J_USERNAME": "<your-username>",
      "NEO4J_PASSWORD": "<your-password>"
    }
  }
}

命名空间

对于多租户部署,请添加 --namespace 在工具名称前添加前缀:

"args": [ "mcp-neo4j-memory@0.4.5", "--namespace", "myapp", "--db-url", "..." ]

工具变成: myapp-read_graph, myapp-create_entities等等。

也可以使用 NEO4J_NAMESPACE 环境变量。

🌐 HTTP传输模式

服务器支持基于web的部署和微服务的HTTP传输:

# Basic HTTP mode (defaults: host=127.0.0.1, port=8000, path=/mcp/)
mcp-neo4j-memory --transport http

# Custom HTTP configuration
mcp-neo4j-memory --transport http --host 127.0.0.1 --port 8080 --path /mcp/

HTTP配置的环境变量:

export NEO4J_TRANSPORT=http
export NEO4J_MCP_SERVER_HOST=127.0.0.1
export NEO4J_MCP_SERVER_PORT=8080
export NEO4J_MCP_SERVER_PATH=/mcp/
export NEO4J_NAMESPACE=myapp
mcp-neo4j-memory

🔄 运输方式

服务器支持三种传输模式:

  • 工作室 (默认):本地工具和Claude Desktop的标准输入/输出
  • 上海证券交易所:基于web的部署的服务器发送事件
  • 超文本传输协议:适用于现代web部署和微服务的流式HTTP

🐳 使用Docker

"mcpServers": {
  "neo4j": {
    "command": "docker",
    "args": [
      "run",
      "--rm",
      "-e", "NEO4J_URL=neo4j+s://xxxx.databases.neo4j.io",
      "-e", "NEO4J_USERNAME=<your-username>",
      "-e", "NEO4J_PASSWORD=<your-password>",
      "mcp/neo4j-memory:0.4.5"
    ]
  }
}

🔒 安全保护

服务器包括全面的安全保护 安全默认值 在使用HTTP传输时,可以防止常见的基于网络的攻击,同时保留完整的MCP功能。

🛡️ DNS重新绑定保护

可信主机中间件 验证主机标头以防止DNS重新绑定攻击:

默认安全:

  • 仅 localhost 和 127.0.0.1 默认情况下允许主机

环境变量:

export NEO4J_MCP_SERVER_ALLOWED_HOSTS="example.com,www.example.com"

🌐 CORS保护

跨源资源共享(CORS) 默认情况下,保护会阻止基于浏览器的请求:

环境变量:

export NEO4J_MCP_SERVER_ALLOW_ORIGINS="https://example.com,https://app.example.com"

🔧 完成安全配置

开发设置:

mcp-neo4j-memory --transport http \
  --allowed-hosts "localhost,127.0.0.1" \
  --allow-origins "http://localhost:3000"

生产设置:

mcp-neo4j-memory --transport http \
  --allowed-hosts "example.com,www.example.com" \
  --allow-origins "https://example.com,https://app.example.com"

🚨 安全最佳实践

对于 allow_origins:

  • 请具体说明: ["https://example.com", "https://example.com"]
  • 从不使用 "*" 在生产中持有证书
  • 在生产中使用HTTPS源

对于 allowed_hosts:

  • 包括您的实际域名: ["example.com", "www.example.com"]
  • 仅包括用于开发的localhost
  • 从不使用 "*" 除非你了解风险

🐳 Docker部署

Neo4j内存MCP服务器可以使用Docker进行远程部署。Docker部署应该使用HTTP传输来实现web可访问性。为了将此部署与Claude Desktop等应用程序集成,您必须在MCP配置中使用代理,例如 mcp-remote.

📦 使用您的内置图像

在当地建造后 docker build -t mcp-neo4j-memory:latest .:

# Run with http transport (default for Docker)
docker run --rm -p 8000:8000 \
  -e NEO4J_URI="bolt://host.docker.internal:7687" \
  -e NEO4J_USERNAME="neo4j" \
  -e NEO4J_PASSWORD="password" \
  -e NEO4J_DATABASE="neo4j" \
  -e NEO4J_TRANSPORT="http" \
  -e NEO4J_MCP_SERVER_HOST="0.0.0.0" \
  -e NEO4J_MCP_SERVER_PORT="8000" \
  -e NEO4J_MCP_SERVER_PATH="/mcp/" \
  mcp/neo4j-memory:latest

# Run with security middleware for production
docker run --rm -p 8000:8000 \
  -e NEO4J_URI="bolt://host.docker.internal:7687" \
  -e NEO4J_USERNAME="neo4j" \
  -e NEO4J_PASSWORD="password" \
  -e NEO4J_DATABASE="neo4j" \
  -e NEO4J_TRANSPORT="http" \
  -e NEO4J_MCP_SERVER_HOST="0.0.0.0" \
  -e NEO4J_MCP_SERVER_PORT="8000" \
  -e NEO4J_MCP_SERVER_PATH="/mcp/" \
  -e NEO4J_MCP_SERVER_ALLOWED_HOSTS="example.com,www.example.com" \
  -e NEO4J_MCP_SERVER_ALLOW_ORIGINS="https://example.com" \
  mcp/neo4j-memory:latest

🔧 环境变量

变量 默认值 描述
NEO4J_URI bolt://localhost:7687 Neo4j连接URI
NEO4J_USERNAME neo4j Neo4j用户名
NEO4J_PASSWORD password Neo4j密码
NEO4J_DATABASE neo4j Neo4j数据库名称
NEO4J_TRANSPORT stdio (本地), http (远程) 传输协议(stdio, http,或 sse)
NEO4J_MCP_SERVER_HOST 127.0.0.1 (本地) 要绑定的主机
NEO4J_MCP_SERVER_PORT 8000 HTTP/SSE传输端口
NEO4J_MCP_SERVER_PATH /mcp/ 访问MCP服务器的路径
NEO4J_MCP_SERVER_ALLOW_ORIGINS (空-默认安全) 允许的CORS源的逗号分隔列表
NEO4J_MCP_SERVER_ALLOWED_HOSTS localhost,127.0.0.1 以逗号分隔的允许主机列表(DNS重新绑定保护)
NEO4J_NAMESPACE (空-无前缀) 工具名称的命名空间前缀(例如。, myapp-read_graph)

🌐 传统Web访问的SSE传输

当使用SSE传输(用于传统web客户端)时,服务器会公开一个HTTP端点:

# Start the server with SSE transport
docker run -d -p 8000:8000 \
  -e NEO4J_URI="neo4j+s://demo.neo4jlabs.com" \
  -e NEO4J_USERNAME="recommendations" \
  -e NEO4J_PASSWORD="recommendations" \
  -e NEO4J_DATABASE="neo4j" \
  -e NEO4J_TRANSPORT="sse" \
  -e NEO4J_MCP_SERVER_HOST="0.0.0.0" \
  -e NEO4J_MCP_SERVER_PORT="8000" \
  --name neo4j-memory-mcp-server \
  mcp-neo4j-memory:latest

# Test the SSE endpoint
curl http://localhost:8000/sse

# Use with MCP Inspector
npx @modelcontextprotocol/inspector http://localhost:8000/sse

🚀 发展

📦 先决条件

  1. 安装 uv (通用虚拟环境):
# Using pip
pip install uv

# Using Homebrew on macOS
brew install uv

# Using cargo (Rust package manager)
cargo install uv
  1. 克隆存储库并设置开发环境:
# Clone the repository
git clone https://github.com/yourusername/mcp-neo4j-memory.git
cd mcp-neo4j-memory

# Create and activate virtual environment using uv
uv venv
source .venv/bin/activate  # On Unix/macOS
.venv\Scripts\activate     # On Windows

# Install dependencies including dev dependencies
uv pip install -e ".[dev]"

🐳 码头工人

构建并运行Docker容器:

# Build the image
docker build -t mcp/neo4j-memory:latest .

# Run the container
docker run -e NEO4J_URL="neo4j+s://xxxx.databases.neo4j.io" \
          -e NEO4J_USERNAME="your-username" \
          -e NEO4J_PASSWORD="your-password" \
          mcp/neo4j-memory:latest

📄 许可证

此MCP服务器根据MIT许可证获得许可。这意味着您可以根据MIT许可证的条款和条件自由使用、修改和分发软件。有关更多详细信息,请参阅项目存储库中的LICENSE文件。