知识图谱服务

一个基于MCP协议的个性化知识图谱服务,用于存储笔记、书签、概念及其关系,并通过SPARQL查询。

  • by netsemantics
  • Python
  • 本地部署
  • 更新于
在 GitHub 查看 netsemantics/sbkg-mcp

使用说明

sbkg mcp

A. 个人知识图 暴露为A 主控程序 服务器。将笔记、书签、概念及其关系存储为 RDF三元组 持续地 Oxigraph 数据库——然后用 SPARQL 从任何兼容MCP的LLM客户端。

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<br/>RDF Triples]
        F[Ontologies<br/>sbkg + SKOS<br/>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: <http://sb.ai/kg/>
  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: <http://sb.ai/kg/>
  INSERT DATA {
    <http://sb.ai/kg/bookmark/pytest-docs> a sbkg:Bookmark ;
      sbkg:title "pytest documentation" ;
      sbkg:sourceUrl "https://docs.pytest.org/" ;
      sbkg:hasTag <http://sb.ai/kg/concept/python> ;
      sbkg:hasTag <http://sb.ai/kg/concept/testing> ;
      sbkg:hasStatus sbkg:Reference .
    <http://sb.ai/kg/bookmark/hypothesis> a sbkg:Bookmark ;
      sbkg:title "Hypothesis property-based testing" ;
      sbkg:sourceUrl "https://hypothesis.readthedocs.io/" ;
      sbkg:hasTag <http://sb.ai/kg/concept/python> ;
      sbkg:hasTag <http://sb.ai/kg/concept/testing> ;
      sbkg:hasStatus sbkg:ToRead .
    <http://sb.ai/kg/bookmark/coverage-py> a sbkg:Bookmark ;
      sbkg:title "Coverage.py" ;
      sbkg:sourceUrl "https://coverage.readthedocs.io/" ;
      sbkg:hasTag <http://sb.ai/kg/concept/python> ;
      sbkg:hasTag <http://sb.ai/kg/concept/testing> ;
      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: <http://sb.ai/kg/>
  PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
  INSERT DATA {
    <http://sb.ai/kg/concept/react>
      skos:broader <http://sb.ai/kg/concept/frontend> .
    <http://sb.ai/kg/concept/vue>
      skos:broader <http://sb.ai/kg/concept/frontend> .
    <http://sb.ai/kg/concept/frontend>
      skos:narrower <http://sb.ai/kg/concept/react> ;
      skos:narrower <http://sb.ai/kg/concept/vue> .
  }
""")

然后查询“前端下的所有内容”,包括子主题:

PREFIX sbkg: <http://sb.ai/kg/>
PREFIX skos: <http://www.w3.org/2004/02/skos/core#>
SELECT ?title ?url WHERE {
  ?tag skos:broader* <http://sb.ai/kg/concept/frontend> .
  ?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

许可证

麻省理工学院