sbkg mcp
graph LR
subgraph Clients
A[Claude Code]
B[ChatGPT]
C[Any MCP Host]
end
subgraph MCP Protocol
D[Tools & Resources]
end
subgraph SBKG Server
E[Oxigraph Store
RDF Triples]
F[Ontologies
sbkg + SKOS
DC + DOAP]
end
A --> D
B --> D
C --> D
D --> E
E --> F为什么是知识图谱?
平面笔记和书签会丢失。知识图谱可以让你:
- 连接 跨主题的信息——一个关于React钩子的书签会自动与你的JavaScript笔记、前端项目和教程集相关联
- 查询 精确地显示所有标记的书签
python“我还没有读过”是一个SPARQL查询 - 构建层次结构 --SKOS让你表达
react是一个更狭义的概念frontend,所以搜索frontend找到一切 - 与其他MCP服务器结合 --从其他MCP连接器中提取电子邮件、日历事件或GitHub问题,并将其链接到您的图表中
快速开始
安装
# Clone and install
git clone https://github.com/netsemantics/sbkg-mcp.git
cd sbkg-mcp
uv pip install -e .MCP配置
添加到您的Claude Code MCP配置中(~/.claude/settings.json 或项目级别):
{
"mcpServers": {
"sbkg": {
"command": "uv",
"args": ["run", "--directory", "/path/to/sbkg-mcp", "sbkg-mcp"]
}
}
}第一步
连接后,在LLM客户端中尝试以下操作:
> "Add a bookmark for https://docs.pytest.org/ titled 'pytest docs' tagged with python and testing"
> "What bookmarks do I have?"
> "Show me everything tagged with 'python'"例子
添加书签并查询
User: Save this link — https://hypothesis.readthedocs.io/
Title it "Hypothesis Property-Based Testing" and tag it with python and testing.
LLM calls: sbkg_add_bookmark(
title="Hypothesis Property-Based Testing",
url="https://hypothesis.readthedocs.io/",
tags=["python", "testing"],
status="ToRead"
)User: What testing resources do I have?
LLM calls: sbkg_query_sparql("""
PREFIX sbkg:
SELECT ?title ?url WHERE {
?b a sbkg:Bookmark .
?b sbkg:hasTag ?tag .
?tag sbkg:title "testing" .
?b sbkg:title ?title .
?b sbkg:sourceUrl ?url .
}
""")使用SPARQL UPDATE批量导入
不要一次添加一个书签,而是在一次调用中插入多个书签:
User: Add these three bookmarks about Python testing.
LLM calls: sbkg_update_sparql("""
PREFIX sbkg:
INSERT DATA {
a sbkg:Bookmark ;
sbkg:title "pytest documentation" ;
sbkg:sourceUrl "https://docs.pytest.org/" ;
sbkg:hasTag ;
sbkg:hasTag ;
sbkg:hasStatus sbkg:Reference .
a sbkg:Bookmark ;
sbkg:title "Hypothesis property-based testing" ;
sbkg:sourceUrl "https://hypothesis.readthedocs.io/" ;
sbkg:hasTag ;
sbkg:hasTag ;
sbkg:hasStatus sbkg:ToRead .
a sbkg:Bookmark ;
sbkg:title "Coverage.py" ;
sbkg:sourceUrl "https://coverage.readthedocs.io/" ;
sbkg:hasTag ;
sbkg:hasTag ;
sbkg:hasStatus sbkg:ToRead .
}
""")使用SKOS构建概念层次结构
User: Set up a tag hierarchy — "react" and "vue" should be
subtopics of "frontend".
LLM calls: sbkg_update_sparql("""
PREFIX sbkg:
PREFIX skos:
INSERT DATA {
skos:broader .
skos:broader .
skos:narrower ;
skos:narrower .
}
""")然后查询“前端下的所有内容”,包括子主题:
PREFIX sbkg:
PREFIX skos:
SELECT ?title ?url WHERE {
?tag skos:broader* .
?b sbkg:hasTag ?tag .
?b sbkg:title ?title .
?b sbkg:sourceUrl ?url .
}跟踪软件项目
User: Register my-app as a project — it's a Python web app on GitHub.
LLM calls: sbkg_add_project(
name="my-app",
description="A web application for task management",
homepage="https://github.com/user/my-app",
repository="https://github.com/user/my-app.git",
programming_language="Python",
maintainers=["Jane Developer"],
tags=["python", "web"]
)这创建了一个包含存储库、维护器和标签三元组的DOAP项目,不需要原始SPARQL。
多MCP工作流程:电子邮件到知识图谱
直接接收电子邮件 --如果您有原始电子邮件文本,请使用 sbkg_add_note_from_email 对于一步解析:
User: Add this email to my knowledge graph.
LLM calls: sbkg_add_note_from_email(raw_email=email_content)
→ Creates FleetingNote with sender as creator, recipients as mentions, "email" tag合成音符 --当与电子邮件MCP服务器(如Gmail、Outlook)结合使用时,LLM可以将多封电子邮件汇总到一个注释中:
User: Check my recent emails about the conference and save
any useful info to my knowledge graph.
LLM calls: gmail_search(query="PyCon 2026", max_results=5)
→ Returns 3 emails with schedule and travel details
LLM calls: sbkg_add_note(
title="PyCon 2026 - Travel & Schedule",
content="Conference runs May 15-17. Talk accepted for Day 2. ..."
tags=["conference", "python", "travel"],
project="pycon-2026"
)
LLM calls: sbkg_add_bookmark(
title="PyCon 2026 Schedule",
url="https://us.pycon.org/2026/schedule/",
tags=["conference", "python"]
)看 docs/examples.md 更多工作流程,包括GitHub集成、日历事件和研究管道。
工具
创建数据
| 工具 | 目的 | 关键参数 |
|---|---|---|
sbkg_add_note | 使用元数据和三元组 | 标题、内容、note_type、标签、链接、项目、区域、状态创建注释 |
sbkg_add_bookmark | 创建书签条目 | 标题、url、描述、标签、状态 |
sbkg_add_project | 注册DOAP软件项目 | 名称、描述、主页、存储库、编程语言、维护人员、开发人员、标签 |
sbkg_add_note_from_email | 将原始电子邮件解析为FleetingNote | raw_email |
sbkg_extract_from_markdown | 将本地.md文件解析到图形 | 路径中 |
sbkg_bulk_import | 从内存中的字符串批量加载RDF | 数据,格式 |
sbkg_update_sparql | 执行SPARQL更新(插入/删除) | 更新 |
查询数据
| 工具 | 目的 | 关键参数 |
|---|---|---|
sbkg_get_note | 按标题 | title获取笔记的所有属性 |
sbkg_search | 按标题子字符串 | 查询、实体类型、标签、限制搜索笔记/书签 |
sbkg_query_sparql | 运行SPARQL SELECT/ASK/CONSTRUCT/DESCRIBE | SPARQL |
sbkg_query_natural | 获取自然语言的本体上下文→ SPARQL | 问题 |
sbkg_get_related_notes | 通过标签、链接、项目/区域 | title、max_results查找相关笔记 |
sbkg_get_stats | 图形统计(三重计数、实体计数) | -- |
sbkg_get_ontology | 以摘要或Turtle | 格式返回本体 |
sbkg_usage_guide | 加载全面的LLM使用指南 | -- |
修改和管理数据
| 工具 | 目的 | 关键参数 |
|---|---|---|
sbkg_update_note | 更新笔记的字段(内容、标签、状态等) | 标题、内容、标签,状态、项目、区域、链接、note_type |
sbkg_update_sparql | SPARQL UPDATE用于批量修改/删除/插入 | 更新 |
sbkg_delete_note | 删除注释及其所有三元组 | 标题 |
sbkg_delete_bookmark | 删除书签及其三元组 | title |
sbkg_export_triples | 以RDF格式导出图形 | 格式,路径 |
sbkg_import_triples | 从文件导入RDF | 路径、格式 |
sbkg_clear_all | 擦除所有数据并重新加载本体 | 确认(必须为真) |
本体论
SBKG使用从以下位置加载的模块化本体 ontology/*.ttl:
| 文件 | 词汇 | 它涵盖了什么 |
|---|---|---|
sbkg.ttl | 核心 | 笔记、书签、概念、项目、区域、人员、工具 |
skos.ttl | 简约知识组织系统 | 概念层次结构——更宽、更窄、相关、ConceptScheme |
dc.ttl | 都柏林核心元数据集 | 资源元数据——创建者、日期、许可证、格式、关系 |
doap.ttl | DOAP | 软件项目——存储库、语言、版本、维护者 |
核心 sbkg:Concept 类作为子类对齐 skos:Concept,使SKOS层次结构查询能够跨所有标签工作。
数据存储
- 数据库:
~/Library/Application Support/sbkg/oxigraph/(macOS)或等效的XDG路径 - 格式:Oxigraph持久存储(RocksDB支持)
- 出口:
~/Library/Application Support/sbkg/exports/
发展
# Run tests
uv run pytest tests/ -v
# Run the server directly
uv run sbkg-mcp许可证
麻省理工学院
