skeletongraph — Claude Code MCP server: ranked code search
Indexes a repository with tree-sitter, no LLM involved, and returns the agent a ranked list of functions that fit the task.
claude mcp add skeletongraph -- uvx skeletongraphWhat skeletongraph does
SkeletonGraph parses your code into function nodes joined by call edges using tree-sitter. No language model touches the index. Three signals then rank the same symbols: BM25, code embeddings, and the call graph. Reciprocal-rank fusion merges them, and the agent gets functions back with file and line.
It speaks MCP, so it plugs into Claude, Codex, Cursor, GitHub Copilot, Windsurf, Cline, Zed, and Gemini CLI. Parsing covers Python, JavaScript, TypeScript, Go, Rust, Java, C#, C++, Ruby, and PHP. The server launches through uvx, which means uv has to be on the machine first — otherwise the command fails.
The author built a study around this retriever: 3,433 agent runs with every patch checked against the project's tests, plus 500 retrieval evaluations without an agent. The result is worth reading before you install. Retrieval is genuinely better than the agents' own search — the right file came first on 80–92% of tasks versus 61–90%. But production agents already read code from the correct file on 96–100% of tasks, so the search advantage rarely survives into the actual fix. Evaluation covered Python repositories.
What it helps with
- locate the function to edit from an issue description
- get ranked symbols instead of a grep dump
- follow call edges between functions during search
- wire structural code search into an agent over MCP
- compare BM25, embeddings, and structure on the same symbols
Example prompts for the agent
- Use skeletongraph to find the functions I need to change for this issue
- Index the repo and show the top 5 functions matching "payment handling"
- Which functions does
process_ordercall? Show me the call graph
How to install skeletongraph
Platform CLI
claude mcp add skeletongraph -- uvx skeletongraphuvx runs the command named after the package; if the README names another one, use uvx --from skeletongraph <command>
Platform CLI
codex mcp add skeletongraph -- uvx skeletongraphuvx runs the command named after the package; if the README names another one, use uvx --from skeletongraph <command>
Config file
{
"mcpServers": {
"skeletongraph": {
"command": "uvx",
"args": [
"skeletongraph"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from skeletongraph <command>
Config file
{
"servers": {
"skeletongraph": {
"type": "stdio",
"command": "uvx",
"args": [
"skeletongraph"
]
}
}
}uvx runs the command named after the package; if the README names another one, use uvx --from skeletongraph <command>
Platform CLI
gemini mcp add skeletongraph uvx skeletongraphuvx runs the command named after the package; if the README names another one, use uvx --from skeletongraph <command>
Step by step, with commands for each platform: How to add an MCP server to Claude Code, Codex, Cursor, VS Code, Gemini CLI and more
Questions about skeletongraph
How do I install skeletongraph in Claude Code?
Run claude mcp add skeletongraph -- uvx skeletongraph. That registers the MCP server in your Claude config.
What does skeletongraph do?
It indexes your repository with tree-sitter and ranks functions by relevance to a query. The agent gets symbols with file and line instead of a pile of files.
Does indexing need a language model?
No. Parsing runs through tree-sitter and no LLM is involved. Ranking relies on BM25, code embeddings, and the call graph.