](https://mseep.ai/app/n-r-w-knowledgegraph-mcp)
警告
我对这样的自动化上下文管理工具感到失望,因为它几乎不可能控制。过了一段时间,我总是不得不手动清理混乱或纠正不恰当的LLM笔记。 相反,我创建了一个工具,让LLM代理访问动态加载的上下文。但是,上下文本身是用户创建的:https://github.com/n-r-w/agent-standards-mcp
知识图谱MCP服务器
一种在对话中为LLM提供持久内存的简单方法。此服务器允许Claude或vscode使用知识图记住有关您、您的项目和您的偏好的信息。
主要特点:
- 多个存储后端:PostgreSQL(推荐)或SQLite(本地文件)
- 项目分离:保持不同项目的隔离(使用提示自动检测)
- 更好的搜索:使用模糊搜索和分页查找信息
完整安装指南
按照以下步骤操作,以使知识图与Claude一起工作:
步骤1:选择安装方法
选项A:NPX(最简单-无需下载)
# Test that it works
npx knowledgegraph-mcp --help选项B:Docker
# Clone and build
git clone https://github.com/n-r-w/knowledgegraph-mcp.git
cd knowledgegraph-mcp
docker build -t knowledgegraph-mcp .第二步:选择数据库
SQLite(默认-无需设置):
- 无需安装数据库
- 在中自动创建的数据库文件
[you home folder]/.knowledge-graph/ - 非常适合个人使用和大多数场景
- 这是默认后端
PostgreSQL(适用于高级用户):
- 在您的系统上安装PostgreSQL
- 创建数据库:
CREATE DATABASE knowledgegraph; - 更适合多个并发用户的生产使用
步骤3:配置客户端
克劳德桌面
编辑您的Claude Desktop配置文件:
查找您的配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 视窗:
%APPDATA%\Claude\claude_desktop_config.json - Linux:
~/.config/Claude/claude_desktop_config.json
如果选择NPX+SQLite(默认且最简单):
{
"mcpServers": {
"Knowledge Graph": {
"command": "npx",
"args": ["-y", "knowledgegraph-mcp"]
}
}
}备注:SQLite将在中自动创建数据库[you home folder]/.knowledge-graph/knowledgegraph.db。要使用自定义位置,请添加:"KNOWLEDGEGRAPH_SQLITE_PATH": "/path/to/your/database.db"
如果您选择Docker+SQLite(默认):
{
"mcpServers": {
"Knowledge Graph": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-v", "[you home folder]/.knowledge-graph:/app/.knowledge-graph",
"knowledgegraph-mcp"
]
}
}
}备注:卷挂载可确保您的数据在Docker运行之间保持不变。对于自定义路径,请添加: -e KNOWLEDGEGRAPH_SQLITE_PATH=/app/.knowledge-graph/custom.db如果你选择PostgreSQL:
{
"mcpServers": {
"Knowledge Graph": {
"command": "npx",
"args": ["-y", "knowledgegraph-mcp"],
"env": {
"KNOWLEDGEGRAPH_STORAGE_TYPE": "postgresql",
"KNOWLEDGEGRAPH_CONNECTION_STRING": "postgresql://postgres:yourpassword@localhost:5432/knowledgegraph"
}
}
}
}VS Code
如果您还想将其与VS Code一起使用,请将其添加到您的用户设置(JSON)中或创建 .vscode/mcp.json:
使用NPX+SQLite(默认):
{
"mcp": {
"servers": {
"Knowledge Graph": {
"command": "npx",
"args": ["-y", "knowledgegraph-mcp"],
}
}
}
}使用Docker(默认SQLite):
{
"mcp": {
"servers": {
"Knowledge Graph": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "KNOWLEDGEGRAPH_CONNECTION_STRING=sqlite://./knowledgegraph.db",
"knowledgegraph-mcp"
]
}
}
}
}使用Docker+PostgreSQL:
首先,确保你的PostgreSQL数据库已经设置好:
# Create the database (run this once)
psql -h 127.0.0.1 -p 5432 -U postgres -c "CREATE DATABASE knowledgegraph;"然后配置VS代码:
{
"mcp": {
"servers": {
"Knowledge Graph": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--network", "host",
"-e", "KNOWLEDGEGRAPH_STORAGE_TYPE=postgresql",
"-e", "KNOWLEDGEGRAPH_CONNECTION_STRING=postgresql://postgres:yourpassword@127.0.0.1:5432/knowledgegraph",
"knowledgegraph-mcp"
]
}
}
}
}Docker+PostgreSQL的替代方案(如果 --network host 不起作用):
{
"mcp": {
"servers": {
"Knowledge Graph": {
"command": "docker",
"args": [
"run", "-i", "--rm",
"--add-host", "host.docker.internal:host-gateway",
"-e", "KNOWLEDGEGRAPH_STORAGE_TYPE=postgresql",
"-e", "KNOWLEDGEGRAPH_CONNECTION_STRING=postgresql://postgres:yourpassword@host.docker.internal:5432/knowledgegraph",
"knowledgegraph-mcp"
]
}
}
}
}重要说明: - 替换yourpassword使用您的实际PostgreSQL密码 - 确保knowledgegraph启动前数据库已存在 - 如果您遇到连接错误,请尝试上述替代配置 - 有关Docker+PostgreSQL问题的疑难解答,请参阅 常见问题 章节
步骤4:选择LLM系统提示
定制:
- 根据您的域修改实体类型
- 根据您的数据模式调整搜索策略
- 添加特定于域的标签和关系类型
LLM兼容性:
- 所有LLM的行为都不同。对一些人来说,一般的说明就足够了,而另一些人则需要详细描述一切
- 使用LLM解释为什么它没有使用知识图。问
Explain STEP-BY-STEP why you didn't use the knowledge graph? DO NOT DO ANYTHING ELSE以获得详细的报告并确定说明中的问题。
可用提示:
步骤5:重新启动克劳德桌面(或VS代码)
关闭并重新打开Claude Desktop。现在,您应该在可用工具中看到“知识图谱”。
步骤6:测试它是否有效
LLM的快速测试命令:
- “记住,我更喜欢上午的会议”→ 创建首选项实体
- “约翰·史密斯在谷歌担任软件工程师”→ 创建个人+公司+关系
- “查找所有在谷歌工作的人”→ 测试搜索和关系
- “将上午的会议偏好标记为紧急”→ 测试标签
备注:该服务包括全面的输入验证,以防止错误。如果您遇到任何问题,请检查 故障排除指南 共同的解决方案。
工作原理-LLM电源特性
知识图通过四个相互关联的概念实现了强大的查询:
1.实体-您的知识节点
将人员、项目、公司、技术存储为可搜索的实体。
实例-项目管理:
{
"name": "Sarah_Chen",
"entityType": "person",
"observations": ["Senior React developer", "Leads frontend team", "Available for urgent tasks"],
"tags": ["developer", "team-lead", "available"]
}LLM福利: 通过标签搜索立即找到“所有可用的团队线索”。
2.关系-启用发现查询
连接实体以回答复杂的问题,如“谁在做什么?”
真实示例-团队结构:
{
"from": "Sarah_Chen",
"to": "Project_Alpha",
"relationType": "leads"
}LLM福利: 查询“查找Sarah领导的所有项目”或“谁领导Alpha项目?”
3.观察-原子事实
存储有关实体的特定、可搜索的事实。
真实示例-可操作信息:
- “可用于紧急任务”→ 查找可用人员
- “使用React 18.2”→ 寻找具有特定技术的项目
- “截止日期:2024年3月15日”→ 查找即将到来的截止日期
4.标签-即时过滤
启用即时状态和类别搜索。
实例-项目工作流程:
["urgent", "in-progress", "frontend"]→ 查找紧急前端任务["completed", "bug-fix"]→ 跟踪已完成的错误修复["available", "senior"]→ 查找可用的高级职员
配置选项
环境变量
服务器支持多种环境变量进行自定义:
数据库配置
KNOWLEDGEGRAPH_STORAGE_TYPE:数据库类型(sqlite或postgresql,默认值:sqlite)KNOWLEDGEGRAPH_CONNECTION_STRING:数据库连接字符串KNOWLEDGEGRAPH_SQLITE_PATH:自定义SQLite数据库路径(可选)KNOWLEDGEGRAPH_PROJECT:数据隔离的项目标识符(默认值:knowledgegraph_default_project)
搜索配置
KNOWLEDGEGRAPH_SEARCH_MAX_RESULTS:数据库搜索返回的最大结果数(默认值:100,最大值:1000)KNOWLEDGEGRAPH_SEARCH_BATCH_SIZE:处理大型查询数组的批处理大小(默认值:10,最大值:50)KNOWLEDGEGRAPH_SEARCH_MAX_CLIENT_ENTITIES:客户端搜索要加载的最大实体数(默认值:10000,最大值:100000)KNOWLEDGEGRAPH_SEARCH_CLIENT_CHUNK_SIZE:用于在客户端搜索中处理大型数据集的块大小(默认值:1000,最大值:10000)
备注:搜索限制会自动验证并限制在安全范围内,以防止性能问题。
性能优化
搜索系统包括几个性能优化:
实体加载限制:
KNOWLEDGEGRAPH_SEARCH_MAX_CLIENT_ENTITIES限制客户端搜索加载的实体数量- 防止大型数据集的内存问题
- 达到限制时记录警告
- 适用于SQLite和PostgreSQL后端
块状处理:
KNOWLEDGEGRAPH_SEARCH_CLIENT_CHUNK_SIZE控制大型实体集的块大小- 当实体计数超过块大小时自动使用
- 提高内存使用率和搜索性能
- 通过重复数据删除保持结果准确性
按数据集大小推荐的值:
- 小型(\10000个实体):尽可能使用数据库级搜索,或
KNOWLEDGEGRAPH_SEARCH_MAX_CLIENT_ENTITIES=2000,KNOWLEDGEGRAPH_SEARCH_CLIENT_CHUNK_SIZE=200
性能监控:
- 应用限制时记录警告
- 自动记录分块以提高透明度
- 配置验证可防止次优设置
可用工具
服务器提供以下工具来管理您的知识图谱:
数据创建工具
create_entities
创建 知识图中的新实体(人、概念、对象)。
- 什么时候: 用于尚未存在的实体
- 约束: 每个实体必须有≥1个非空观察值
- 行为: 忽略具有现有名称的实体(使用add_observations进行更新)
输入:
entities(Entity\[\]):实体对象数组。每项要求:
- name (string):唯一标识符,非空 - entityType (string):类别(例如,“人”、“项目”),非空 - observations (string\[\]):关于实体的事实,必须包含≥1个非空字符串 - tags (string\[\],可选):用于过滤的精确匹配标签
project_id(字符串,可选):用于隔离数据的项目名称
创建关系
连接 实体,以实现强大的查询和发现。
- 即时利益: 查找公司的所有人员、使用某项技术的所有项目、所有依赖关系
- 关键在于: 团队结构、项目依赖关系、技术栈
- 示例: “John在谷歌工作”,“React依赖于JavaScript”,“Sarah管理的Project Alpha”
输入:
relations(Relations\[\]):关系对象数组。每项要求:
- from (string):源实体名称(必须存在) - to (string):目标实体名称(必须存在) - relationType (string):活动语音中的关系类型(works_at、manages、depends_on、uses)
project_id(字符串,可选):用于隔离数据的项目名称
添加观察结果
加 对现有实体的事实观察。
- 要求: 目标实体必须存在,每次更新≥1个非空观察值
- 最佳实践: 保持观察的原子性和特异性
输入:
observations(ObservationUpdate\[\]):观测更新数组。每项要求:
- entityName (string):目标实体名称(必须存在) - observations (string\[\]):要添加的新事实,必须包含≥1个非空字符串
project_id(字符串,可选):用于隔离数据的项目名称
添加标签
加 用于即时筛选的状态/类别标签。
- 即时利益: 按状态(紧急、已完成、进行中)或类型(技术、个人)查找实体
- 必修的: 用于高效的项目管理和快速检索
- 示例: \[“目标”、“完成”、“错误”、“功能”、“个人”\]
输入:
updates(TagUpdate\[\]):标签更新数组。每项要求:
- entityName (string):目标实体名称(必须存在) - tags (string\[\]):要添加的状态/类别标签(精确匹配,区分大小写)
project_id(字符串,可选):用于隔离数据的项目名称
数据检索工具
read_graph
检索 包含所有实体和关系的完整知识图。
- 用例: 全面概述,了解当前状态,查看所有连接
- 范围: 返回指定项目中的所有内容
输入:
project_id(字符串,可选):用于隔离数据的项目名称
搜索知识
搜索 通过文本或标签显示实体。 支持多个查询 用于批量搜索。
- 强制性策略: 1) 首先尝试searchMode='exact'2)如果没有结果,则使用searchMode='模糊'3)如果仍然为空,则将模糊阈值降低到0.1
- 精确模式: 完美的子字符串匹配(快速、精确)
- 模糊模式: 相似/拼写错误的术语(较慢、较宽)
- 标签搜索: 使用exactTags进行精确的类别过滤
- 多个查询: 使用自动重复数据删除功能在一次调用中搜索多个对象
输入:
query(string | string\[\],可选):用于文本搜索的搜索查询。对于多对象搜索,可以是单个字符串或字符串数组。当exactTags仅用于标签搜索时为可选。searchMode(字符串,可选):“精确”或“模糊”(默认值:“确切”)。仅当精确返回无结果时才使用模糊fuzzyThreshold(数字,可选):模糊相似性阈值。0.3=默认值,0.1=非常宽泛,0.7=非常严格。值越低,结果越多exactTags(string\[\],可选):用于精确匹配搜索的标签(区分大小写)。用于类别筛选tagMatchMode(string,可选):对于exactTags:“any”=具有any标签的实体,“all”=具有all标签的实体(默认值:“any”)page(数字,可选):分页页码(从0开始,默认值:0)pageSize(数字,可选):每页结果数(1-1000,默认值:50)project_id(字符串,可选):用于隔离数据的项目名称
示例:
- 基本搜索:
search_knowledge(query="JavaScript", searchMode="exact") - 分页搜索:
search_knowledge(query="React", page=0, pageSize=20) - 大型数据集:
search_knowledge(query="components", page=2, pageSize=100) - 多个查询:
search_knowledge(query=["JavaScript", "React"], page=0, pageSize=30) - 标签+分页:
search_knowledge(query="React", exactTags=["frontend"], page=1, pageSize=25) - 仅标记搜索:
search_knowledge(exactTags=["urgent", "bug"], tagMatchMode="all")-无需查询
分页优势:
- 演出:使用OFFSET/LIMIT进行数据库级分页,以实现高效的大型数据集处理
- 记忆:通过限制每个请求的结果来减少内存使用
- 导航:分页元数据提供totalPages、currentPage和导航提示
- 可扩展性:高效处理包含数千个实体的知识图
open_nodes
检索 特定实体的确切名称及其相互连接。
- 返回: 请求的实体及其之间的关系
- 用例: 当你知道确切的实体名称并想要详细信息时
输入:
names(string\[\]):要检索的实体名称数组project_id(字符串,可选):用于隔离数据的项目名称
数据管理工具
删除内容
永久删除 实体及其所有关系。
- 警告: 无法撤消,级联以删除所有连接
- 用例: 实体不再相关或创建错误
输入:
entityNames(string\[\]):要删除的实体名称数组project_id(字符串,可选):用于隔离数据的项目名称
删除观察
移除 在保持实体完整的同时,对实体进行具体观察。
- 用例: 纠正错误信息或删除过时的细节
- 保存: 实体和其他意见保持不变
输入:
deletions(ObservationDeleation\[\]):删除请求数组。每项要求:
- entityName (string):目标实体名称 - observations (string\[\]):要删除的具体观察结果
project_id(字符串,可选):用于隔离数据的项目名称
删除关系
更新 当连接发生变化时的关系结构。
- 关键在于: 作业更改(删除旧的“works_at”)、项目完成(删除“assigned_to”)、技术迁移(删除旧“use”)
- 维护: 准确的网络结构,防止混淆
- 工作流: 创建新关系时,始终删除过时的关系
输入:
relations(关系\[\]):要删除的关系数组。每项要求:
- from (string):源实体名称 - to (string):目标实体名称 - relationType (string):要删除的确切关系类型
project_id(字符串,可选):用于隔离数据的项目名称
移除标签
更新 通过删除过时的标签来显示实体状态。
- 关键: 对于状态跟踪-完成时删除“进行中”,解决后删除“紧急”
- 维护: 干净的搜索结果和准确的状态
- 工作流: 添加新状态标签时,始终删除旧状态标签
输入:
updates(TagUpdate\[\]):标签删除请求数组。每项要求:
- entityName (string):目标实体名称 - tags (string\[\]):要删除的过时标签(精确匹配,区分大小写)
project_id(字符串,可选):用于隔离数据的项目名称
开发和测试
多后端测试
该项目包括全面的多后端测试,以确保SQLite和PostgreSQL之间的兼容性:
对两个后端运行测试:
npm run test:multi-backend运行所有测试(原始+多后端):
npm run test:all-backends使用Taskfile(如果已安装):
task test:multi-backend
task test:comprehensive开发设置
克隆和设置:
git clone https://github.com/n-r-w/knowledgegraph-mcp.git
cd knowledgegraph-mcp
npm install
npm run build运行测试:
npm test # All tests including multi-backend
npm run test:unit # Unit tests only
npm run test:performance # Performance benchmarks故障排除
如果您在设置或使用过程中遇到任何问题,请参阅我们的综合 故障排除指南,其中包括:
- 输入验证错误
- 数据库连接问题
- 配置问题
- Docker相关挑战
- 测试执行失败
- 性能优化
该指南包括常见问题的分步解决方案和诊断命令,以帮助识别问题。
基于MCP内存服务器
这是官方的增强版 MCP内存服务器 具有附加功能:
- 多种存储选项:PostgreSQL(推荐)或SQLite(本地文件)
- 项目分离:将不同的项目隔离开来
- 更好的搜索:使用模糊搜索查找信息
- 轻松设置:Docker支持和简单安装
许可证
MIT许可证-您可以自由使用、修改和分发此软件。
