mcpField
S
skeletongraph

skeletongraph

本地服务
github.com开发工具72 周前更新

关于 skeletongraph

SkeletonGraph 用 tree-sitter 对仓库进行无 LLM 解析,并通过 MCP 为编码 Agent 提供按相关性排序的函数检索。它面向 IDE 中的编码 Agent,也提供终端工作流。

主要功能

  1. 01tree-sitter 函数级索引
  2. 02BM25、嵌入与结构信号融合
  3. 03按调用图扩展候选代码
  4. 04MCP 检索服务
  5. 05终端路由与执行工作流
  6. 06支持增量更新索引

适用场景

  1. 01为编码 Agent 查找相关函数
  2. 02在代码修改后更新仓库索引
  3. 03生成任务上下文文件
  4. 04通过终端路由编码任务

MCP 相关

SkeletonGraph 提供 MCP 上下文服务,将相关函数及其文件和行号提供给编码客户端。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"yashdoke7-skeletongraph": {
"command": "uvx",
"args": [
"skeletongraph"
]
}
}
}
启动命令uvx skeletongraph

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiskeletongraph0.2.0

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

SkeletonGraph — 排序函数,而非一堆文件。一个 MCP 服务,使用 tree-sitter 为你的代码库建立索引,然后通过 BM25、嵌入和调用图为符号排序,并使用倒数排名融合进行整合。

PyPI Python 版本 预印本 MIT 许可证 MCP 服务 MCP Registry 零大模型索引

兼容  Cursor Claude Code GitHub Copilot Codex Antigravity Windsurf Cline 任何 MCP 客户端

可解析  Python JavaScript TypeScript Go Rust Java C# C++ Ruby PHP

**SkeletonGraph 使用 tree-sitter 为你的代码库建立索引——无需大模型——并通过 MCP 向编码 Agent 提供与其任务相关函数的排序列表。**它也是一项研究的实验工具,旨在探究更好的代码检索究竟能为必须修复代码的 Agent 带来什么;研究涵盖两个生产级 Agent、两种 Claude 行为模式和两个基准测试。简短答案如下;它比单看 token 比率更有用,也没那么好听。 在真实的 django/django 任务中演示 SkeletonGraph:tree-sitter 在不使用大模型的情况下将代码库解析为函数节点,并用调用边连接;Agent 使用问题文本调用 sg_search;BM25、代码嵌入和调用图分别以不同方式为相同符号排序;倒数排名融合将正确的函数排在首位,并返回其文件和行号。

使用 tree-sitter 一次性建立索引(无需大模型)→ 三种信号为相同符号排序 → 倒数排名融合返回带文件和行号的排序函数,并通过 MCP 提供给你的 Agent。

我们的发现

我们在所有可行的设置中运行了同一检索器:不使用 Agent、在开源权重模型上运行受控 Agent 循环,以及在 Claude Code(探索和精简模式)和 Codex CLI 中运行;测试数据为 SWE-bench Verified 和去污染后的 SWE-rebench—— 3,433 次 Agent 运行,每个补丁都通过运行项目测试进行验证,另有 500 次不使用 Agent 的检索评估;所有 Agent 对比均按任务配对。评估涵盖 Python 代码库。

1. 它的代码查找效果优于每个 Agent 自带的搜索

不使用 Agent,在 100 个 SWE-bench Verified 任务上(文件级别):

排序器MRRrecall@5recall@10
grep0.1590.2360.348
BM250.4820.6260.719
sg-rerank(BM25 + 结构)0.5180.7010.824
BM25 + 密集向量0.5510.7140.843
sg-fusion(BM25 + 密集向量 + 结构)0.6580.7850.856

在所有任务的 Agent 运行中,SkeletonGraph 的首次搜索在 80–92% 的任务中返回了修复涉及的文件,而 Agent 自带的首次搜索为 61–90%(在 Agent 实际调用搜索的任务中,分别为 87–96% 和 60–93%)。差距最大的是 Codex:在调用搜索的任务中,正确文件有 71% 的概率排在首位,而 Agent 自带搜索的这一比例为 32%。

2. 但 Agent 已经找到了正确代码——因此这项提升并未影响修复结果

六种 Agent 设置的漏斗图:首次搜索命中正确文件、读取其代码、编辑该文件、编辑修复涉及的函数以及解决任务的比例,对比使用和不使用 SkeletonGraph 的结果。在每种生产环境 Agent 中,两条线都在第二阶段时汇合;只有 ReAct 循环在编辑阶段仍存在差距。

无论是否使用 SkeletonGraph,生产环境 Agent 都会在 96–100% 的任务中读取正确文件中的代码——在 SWE-bench Verified 上,通常通过第一个工具调用完成——并在 88–97% 的任务中编辑该文件。在函数级别上,Agent 的表现远非完美(63–69% 的任务中编辑了修复涉及的函数),而 SkeletonGraph 也未能改变这一情况。在结果不同的 69 个任务中,有 61 个任务的两组都已编辑了正确文件:差异在于修改是否正确,而非修改位置。没有任何生产环境 Agent 设置显示出检索带来的、在统计上可检测的解决率提升。只有经常无法自行找到代码的 Agent——受控循环中,不使用搜索的组仅在 65% 的任务中编辑了正确文件——从中获益(解决任务数从 35 增至 42,但不具有统计显著性)。

3. 它改变的是成本——方向由 Agent 决定

八种设置下每项任务的输入 token 数对比,按 Agent 自行消耗的 token 数排序。在最精简的两种设置中,SkeletonGraph 会增加 token 数;在消耗较高的六种设置中,它会减少 token 数。

设置Agent 自行处理每项任务的 token 数使用 SkeletonGraph
Claude 探索式,SWE-rebench1,048,603−24%(−256k token,−4.7 轮,−12¢)
Claude 探索式(7 月)644,504−24%(−152k token,−3.1 轮,−6¢)
Claude 探索式(9 月)530,478−18%(−93k token,−1.9 轮,−3¢)
ReAct 循环(开放权重模型)344,642−48%(−165k token,−1.7 轮,−1¢)
Codex CLI 0.155.0134,955+6%(+8k token,−0.3 轮,−0.4¢)
Claude 精简模式112,813+58%(+66k token,+2.5 轮,+2¢)

如果 Agent 花费大量时间搜索、阅读和反复检查,SkeletonGraph 就能取代这些工作并节省成本;如果 Agent 已经能通过一两次调用找到代码,检索器就是额外叠加的开销,成本会略有增加。开销幅度小且有上限;Agent 原本花费越多,节省也越多。

4. Agent 会在你不知情时发生变化

在相隔三周的两个 Claude Code 窗口中——同一任务和提示词下,探索式版本为 2.1.274,精简版本为 2.1.278——内置 Agent 每项任务的工具调用轮数从 10.9 降至 4.7,阅读量减少到原来的五分之一,编辑后运行代码的任务数从 40 个降至 2 个,而它自己的首次搜索在 85 个任务中把正确文件排在首位,此前为 59 个。相同的检索后端在更精简的集成下,效果从每项任务节省 93k token 变为增加 66k token。产品版本、可用工具、账户加载的技能、集成方式,以及可能还有所使用的模型,都同时发生了变化。我们可以描述这两种情况,但不能把这种变化单独归因于版本号。这种波动性本身就是结果的一部分:有意义的评估单位是完整且版本固定的 Agent 环境。

使用时需要了解的事项
  • 期待首次搜索效果提升,而非解决更多任务。 当前前沿 Agent 的瓶颈在于如何将找到的代码转化为正确的修复,而检索无法解决这一问题。
  • 节省效果取决于完整的 Agent 环境。 对探索较多的 Agent 和任务,节省效果最大;对精简型 Agent,效果也可能变成少量开销。请在自己的配置上进行测量。
  • 集成说明会消耗 token。 在 Codex 上,与普通集成增加 8k token 相比,随附集成每项任务增加了 53k token,且可解率没有可检测的差异。

包含置信区间和注意事项的所有结果都在 docs/RESULTS.md 中;复现方法见 eval/README.md。2026 年 7 月的预印本只报告了 Claude Code 的首个发布窗口。

SkeletonGraph 提供两种产品形态:

  • SG IDE:适用于 Cursor、Claude Code、Copilot、Codex、 Antigravity、Windsurf 和其他 Agent IDE 的 MCP 上下文服务。
  • SG CLI:用于路由、准备、试运行、提供商执行 和成本感知模型选择的终端工作流。

工作原理

SkeletonGraph 会将代码库解析为函数级结构、跨文件调用图 和 PageRank 中心性,无需调用 LLM——确定性强、成本低,并且每次编辑后都能即时重建。在查询时,它会解析问题中提及的符号,向外遍历调用图,并根据三种信号对候选项排序——BM25、代码嵌入和结构确认——再通过倒数排名融合进行合并。

prompt -> (optional) retrieval planner -> classify task -> find target nodes -> expand graph -> assemble packet

sg-rerank 是产品默认设置,会跳过稠密检索部分,以使用更轻量的索引;sg-fusion 会加入该部分,并在我们的检索基准测试中排名最高(见上表)。

安装

pip install skeletongraph           # core: indexing, MCP server, CLI (no API key needed)
pip install "skeletongraph[llm]"    # + litellm for sg run --execute / sg summarize --tier cloud
pip install "skeletongraph[all]"    # everything, including the evaluation harness

快速开始:SG IDE

如果你已在 Cursor、Claude Code、Copilot、Codex、 Antigravity 或其他支持 MCP 的编码环境中工作,请使用此路径。

cd your-project
sg init
sg build
sg doctor

sg init 会为所选 IDE 写入 MCP 配置和 Agent 指令文件。SG IDE 无需 API 密钥。你的 IDE 订阅/模型仍负责推理和编辑;SkeletonGraph 提供检索能力。

支持的 IDE 设置目标包括:

IDE集成方式模型切换
CursorMCP + 规则在 IDE 中手动切换
Claude CodeMCP + CLAUDE.md/model 命令
GitHub CopilotMCP + 指令在 IDE 中手动切换
CodexMCP + AGENTS.md在 Agent 中手动切换
AntigravityMCP + 规则在 IDE 中手动切换
WindsurfMCP + 规则在 IDE 中手动切换

快速开始:SG CLI

如果你希望使用以终端为先的上下文和模型路由流水线,请使用此路径。

cd your-project
sg build
sg route "fix the auth token validation bug"
sg prepare "fix the auth token validation bug" --out .skeletongraph/context.md
sg run "fix the auth token validation bug" --dry-run

sg route、sg prepare 和 sg run --dry-run 无需 API 密钥。

要调用服务商:

sg config --cli-provider anthropic
$env:ANTHROPIC_API_KEY = "..."
sg run "fix the auth token validation bug" --execute

要在本地测试且不使用付费服务商密钥:

ollama pull qwen3-coder:latest
ollama serve
sg config --cli-provider local
sg run "fix the auth token validation bug" --dry-run
sg run "fix the auth token validation bug" --execute

本地执行适用于低成本的流水线测试。除非基准测试专门针对本地模型,否则请使用服务商模型进行质量基准测试。

模型依赖、预热与保持索引最新

SG 首次使用时会下载两个小型嵌入模型,均通过 sentence-transformers 下载(这是硬性依赖,不可选):

  • jinaai/jina-embeddings-v2-base-code(SG_DENSE_MODEL)——fusion/sg_search 的语义检索部分。在运行 sg warm 时或 Agent 首次发起密集检索查询时加载。使用 trust_remote_code=True 加载(Jina 在 HF Hub 上提供自定义建模代码)——这会执行该模型仓库中的代码,与任何 trust_remote_code 模型相同。
  • all-MiniLM-L6-v2(SG_EMBED_MODEL)——一个更小的独立模型,仅在索引时用作置信度评分的平局判定器。它会在**首次运行 sg build**时自动下载,而非在运行 sg warm 时下载。

每个模型在一台机器上首次使用时都需要联网——之后,两个模型都会缓存在本地(Hugging Face 的模型缓存,以及 SG 自身的内容哈希缓存:密集检索部分使用 .skeletongraph/dense_cache,置信度平局判定器使用 .skeletongraph/embeddings.npz),因此后续构建都是增量式的:只有文本实际发生变化的函数才会重新生成嵌入。

启动 Agent 前先进行预热,这样相关开销会发生在设置阶段,而不是 Agent 首次真正搜索时:

sg build                 # parse + structural index (no LLM, fast)
sg warm --path .          # prebuild BM25 + dense caches (one-time; minutes on CPU)
sg warm --path . --mode rerank   # skip the dense leg entirely (no embedding cost)

如果不这样做,Agent 发起的首次 sg_search 调用会在执行过程中承担冷启动编码开销——在大型仓库中,这可能超过密集检索部分的内部超时时间(SG_DENSE_TIMEOUT_S,默认值为 20s),此时系统会静默降级为双信号结果(词法 + 结构),而不是彻底失败。预热可完全避免依赖这种回退。

文件变更时保持索引最新——有两种方式,请根据你的工作方式选择:

sg update --path .        # one-shot: re-index only files that changed since last build
sg watch --path .         # background daemon: auto-reindexes on save (needs `pip install "skeletongraph[daemon]"`)

sg watch 是持续开发时无需操心的选项——它会对快速连续的保存操作进行防抖处理,并调用与 sg update 相同的增量更新路径,因此编辑文件后无需手动重建,索引也会随之更新。

模型路由

SkeletonGraph 将面向 IDE 的模型标签与 CLI 服务商模型名称分开处理。

对于 IDE,模型层级仅供参考:

层级典型用途
SLM文档、解释、简单查找
MLM常规编码、调试、测试、审查
LLM架构设计、大范围迁移、低置信度任务

对于 CLI 执行,SkeletonGraph 可以路由到服务商模型名称:

sg config --cli-provider anthropic
sg config --cli-provider openai
sg config --cli-provider google
sg config --cli-provider local

动态路由会使用任务模式、置信度、候选项数量、令牌量和复杂度。代码变更任务默认设有 MLM 下限,因此节省成本不会以让较弱模型不安全地编辑代码为代价。在大型模型运行前,检索规划可以使用小型模型基于 AST/摘要提出目标。

IDE 集成

运行 sg init 和 sg build 后,将 SG 注册为 MCP 服务并写入 IDE 钩子:

sg install --ide claude-code   # Claude Code: hooks + MCP server + CLAUDE.md rules
sg install --ide cursor        # Cursor: MCP + .cursor/rules/skeletongraph.mdc + hooks
sg install --ide cline         # Cline: MCP config + rules block
sg install --ide roo           # Roo: MCP config + rules block
sg install --ide copilot       # GitHub Copilot: MCP + copilot-instructions.md
sg install --ide windsurf      # Windsurf: MCP + .windsurfrules
sg install --ide zed           # Zed: MCP config + rules block
sg install --ide continue      # Continue: MCP config + rules block
sg install                     # auto-detect all installed IDEs

codex 和 antigravity 是可接受的别名,目前会使用 Copilot 风格的 MCP 安装程序。

对于其他支持 MCP 的客户端,或要手动配置,请参阅 mcp.example.json 中的原始服务配置(sg serve --path /path/to/your/project)。上文测得的“纯净”集成是通过 SG_MCP_PLAIN=1 启动的服务,它会从工具描述和结果中移除引导文本,且注册时不包含 sg install 写入的规则和钩子。

安装后,请重启编辑器。SkeletonGraph 会作为后台 MCP 服务(sg serve --path .)运行,IDE 会自动连接。

MCP 工具

向 Agent 提供七种工具:

工具调用时机返回内容
sg_overview会话开始时——每个会话调用一次约束 + Top-N 函数(按 PageRank 排序)+ 最近的轮次 + 索引统计
sg_search "query"主要检索方式排名前 3 的匹配项,包含正文摘录 + 摘要 + 1 跳调用者;第 4 至 N 个匹配项以签名 + 摘要形式返回
sg_get "fqn"已知确切 FQN 时签名 + 摘要 + 1 跳调用者 + 被调用者
sg_expand "target"需要的正文内容多于 sg_search 返回的内容时完整函数正文 / 文件 / 行范围(受 token 数量限制)
sg_constraint list / propose提出更改前已确认 + 已提议的项目规则
sg_log查看最近的会话轮次时最近 N 个轮次的摘要及涉及的文件
sg_decision做出设计 / 实现选择时(选定或否决,并说明原因)记录选择,使其在上下文压缩后仍然保留——之后可通过 sg_log(kind="decision") 回顾

智能上下文路由。 每次触发 UserPromptSubmit 时,SG 都会对提示词分类(架构 / 解释 / 决策 / 调试 / 测试 / 审查 / 通用),并从 .skeletongraph/ 中加入匹配的 MD 文件——例如,仅在设计 / 重构查询时加入 architecture.md,仅在询问“这个代码库是什么”时加入 project.md。约束 + 会话摘要 + 相关函数始终会被注入。

冷启动。 如果调用 MCP 工具时不存在 .skeletongraph/ 索引,SG 会在首次调用时自动构建(参见配置中的 auto_build_on_query)。

CLI 参考

索引与状态

命令用途
sg init [--agent cursor]配置项目、IDE 预设、MCP 和约束
sg index完整索引(sg build 的别名)
sg index --incremental仅重新索引已更改的文件
sg build执行完整索引并输出详细信息
sg update增量更新
sg status显示索引状态
sg doctor检查索引、路由、提供商和 Ollama 的就绪状态
sg overview项目骨架:主要函数、约束、会话
sg install [--ide <name>]写入 IDE 钩子和 MCP 配置

检索

命令用途
sg search "query"BM25 + 图搜索(无需 API 密钥)
sg get "fqn"获取函数签名、摘要和调用者
sg expand "target"展开函数体、文件或行范围

约束与会话

命令用途
sg constraint list列出所有约束
sg constraint propose "text"添加一项提案
sg constraint confirm <id>将提案提升为 decisions.md 中的决策
sg constraint remove <id>移除一项约束
sg constraint aggregate从 IDE 规则文件导入
sg log [--last-n 10]显示最近的会话轮次

摘要生成

命令用途API 密钥
sg summarize --tier localOllama Tier-0.5(免费,在设备上运行)否
sg summarize --tier cloud云端 LLM Tier-1提供商密钥
sg summarize --tier cloud --force重新生成所有函数的摘要提供商密钥

模型路由与执行

命令用途API 密钥
sg route "task"显示任务模式、层级和推荐模型否
sg run "task" --dry-run规划路由执行否
sg run "task" --execute调用已配置的提供商提供商密钥或本地运行
sg config [--agent cursor]配置 IDE 和 CLI 模型否
sg config --cli-provider anthropic设置 CLI 执行提供商否

后台索引

命令用途
sg watch守护进程:保存文件时自动重新索引

sg run --execute 的提供商输出会写入 .skeletongraph/runs/。

Python API

from skeletongraph.engine import SGEngine

engine = SGEngine(project_root=".")
result = engine.query("fix the content-length bug", delivery="cli")

print(result.context_text)
print(result.query_mode)
print(result.model_tier)
print(result.recommended_model)
print(result.routing_reason)

仓库布局

src/skeletongraph/      the package
  parser/                 AST extraction (tree-sitter)
  graph/                  dependency graph and ranking
  storage/                .skeletongraph persistence
  retrieval/              classification, resolution, model routing
  assembly/               context packet construction
  session/                memory and dedup
  server/                 MCP server
  install/                per-IDE hook + MCP config writers (`sg install`)
  hooks/                  IDE hook handlers
  llm/                    LiteLLM wrapper for optional CLI execution
  cli/                    Click commands
  engine.py               unified query pipeline
tests/                  unit tests (pytest)
eval/                   the evaluation harness — see eval/README.md
  datasets/               the frozen task sets
docs/
  RESULTS.md              every result, with confidence intervals and caveats
  assets/                 README images and the script that draws the banner and hero

复现结果

所有内容——任务集、每个 Agent 的驱动程序、验证,以及生成每个数字和图表的脚本——都位于 eval/ 中。每次运行的记录和转录文件有数 GB,将随标记版本发布,而不纳入 git。eval/results_summary.json 保存了计算得出的结果,因此无需这些文件也能重新生成图表:

pip install -e ".[all]"
python -m eval.scripts.make_submission_figures

许可证

SkeletonGraph 根据 MIT License 发布——可免费用于商业和私人项目,也可自由使用、修改和分发。

引用

如果 SkeletonGraph 对您的研究有所帮助,请引用这篇预印本:

@misc{doke2026skeletongraph,
  title  = {SkeletonGraph: A Zero-LLM Structural Retrieval Engine for Coding Agents,
            and Why Its Gains Land in the Cost Tail, Not the Median},
  author = {Doke, Yash},
  year   = {2026},
  note   = {Preprint, Research Square},
  doi    = {10.21203/rs.3.rs-10749266/v1},
  url    = {https://doi.org/10.21203/rs.3.rs-10749266/v1}
}

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。