Semantic-graph code context: one function instead of a whole file, and minimal test selection.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Girder gives coding agents exactly the code they need, instead of whole files. It parses your repository into a living semantic graph β functions, definitions, call edges β and answers questions against that graph: exact function source, callers and callees, impact analysis, minimal test selection, and verified graph-addressed edits. It is one static Rust binary that any agent can drive over MCP, plus an optional native IDE.
Languages: Rust, Python, TypeScript/TSX, and Go. Rust and Python are the most mature; TypeScript and Go are measured and gated, with their limits written down (TypeScript, Go).
Tiers: the free tier is permanent and needs no account β get_source,
find_definition, search_code, ask_codebase, review_changes, and
orient on a single repository. The impacted_tests tool needs a
paid license. Keys are verified offline; the binary never phones
home.
On the committed 15-task orient measurement, one bundled call per task
returned 48,814 output bytes versus 101,302, using 15 calls versus 78
for the equivalent command chain, with 37/37 gated checks passing after
the disclosed fixes. See the post-fix observation
and limitations. These are output bytes,
not tokens, and the baseline is Girder's separate commands.
A prebuilt binary, no Rust toolchain needed:
Or from source:
This builds the default headless profile and installs the girder binary to
~/.cargo/bin (make sure it's on your PATH). No GPU, display, network, or API
key is required β the default AI provider is an offline MockProvider. The GUI
and live AI providers are opt-in Cargo features not included in a plain
install; see The GUI and Local-first AI below.
Each Windows release also includes Girder-<version>-setup.exe. It installs
for the current user under %LOCALAPPDATA%\Programs\Girder, adds Girder to the
user PATH, creates a Start Menu shortcut, and does not request administrator
access. Open a new terminal after installation so it sees the updated PATH.
The installer includes the desktop GUI, and its Start Menu shortcut opens it.
The archives and npm installation continue to provide the headless CLI.
The installer is not code-signed yet, so Windows SmartScreen will warn on first run. After downloading the installer from the GitHub release, double-click it, choose More info on the βWindows protected your PCβ dialog, verify that the app is Girder and the publisher is shown as unknown, then choose Run anyway. If those details do not match, cancel instead.
Exact-symbol lookup is Girder's strongest search path. Natural-language intent search is experimental: it reached 41.9% top-1 and 77.4% top-5 accuracy on the committed 31-item corpus, below the precommitted 75% and 90% thresholds. See the observation and policy.
On the 20-task modest cross-language base set, Girder passed 5/20 versus Ripwire's 7/20 β a loss. But across the 60 attempts where both products passed, Girder returned 35,764 bytes versus Ripwire's 158,514 β 77.4% fewer β at identical call counts (120 each). GitNexus could not be scored: its install exceeded the frozen 1 GiB ceiling on this measurement machine, which is a fact about install footprint on a constrained host, not a claim about its quality.
No product in this benchmark reached full correctness, and the benchmark does not establish an overall best product. See the full report for methodology, per-language results, and everything the numbers above don't establish.
girder mcp serves the read-only graph commands over the
Model Context Protocol, so an agent can ask
about your codebase instead of reading files into its context window.
Preview the changes, then configure detected agents:
setup detects Claude Code (~/.claude or an existing in-home project
.mcp.json), Codex (~/.codex or an in-home CODEX_HOME), and Cursor
(~/.cursor). It merges the girder MCP entry into each detected agent's
documented config and installs nested PreToolUse and PostToolUse hooks for
Claude Code and Codex. Pre hooks cover structured Read, read_file, and
mcp__.*__read_file events; post hooks cover Claude's
Edit|Write|NotebookEdit and Codex's apply_patch|Edit|Write edit names.
Shell commands are intentionally not parsed. Cursor is MCP-only: its documented
post-edit hook input and output semantics do not establish the standalone
additional-context protocol used by this launcher, so setup does not register a
hook there. A generic MCP client has no universal config path and is reported as
not detected. Setup never writes outside your home directory. Existing foreign
girder entries remain untouched, including with --force; girder setup --uninstall removes only setup-owned changes.
The packaged hook launcher forwards each event to the pinned native girder hook
executable and fails open on errors. Only standalone PreToolUse JSON is
forwarded on stdout; post-edit native diagnostics pass through stderr, and MCP
continues to use JSON-RPC on its own stdout. The read advisory only gives
guidance when project.aether already exists. The post-edit advisory uses that
saved graph snapshot, does not scan or rebuild the project, and describes the
last analyzed version of changed files. See the setup and client path
guide for config paths, ownership, and the manual JSON
fallback.
For clients setup cannot detect, add this entry to their documented MCP config manually:
With a binary already installed, "command": "girder", "args": ["mcp", "."]
skips npm entirely.
Girder 0.2.6 and later can opt into a cached graph generation with
girder mcp . --watch or npx -y girder-mcp . --watch. The server keeps
one validated graph generation in memory and incrementally reparses changed
files. The committed watcher measurement matched fresh cold analysis after all
45 mutations while reusing 98.70% of file extractions; the claim is limited to
preserving cold-analysis resolution while reusing parsing. See the
watcher result and limitations.
Seven tools, all read-only:
| Tool | What it answers | Tier |
|---|---|---|
get_source | The source of specific functions, without the file around them. | Free |
find_definition | Where an exact identifier is declared. Not a substring search. | Free |
search_code | Which functions match a description, when you don't know the name. | Free |
ask_codebase | Callers, callees, and blast radius, by graph traversal. | Free |
impacted_tests | Only the tests that can reach what changed. | Paid |
review_changes | What changed in the working tree, as semantics rather than text. | Free |
orient | Source, callers, callees, tests, and impact for one node, in one call. | Free |
orient bundles what get_source + ask_codebase (callers, callees, and
impact) + impacted_tests otherwise answer across 5-6 separate calls into
one. On a 15-task corpus spanning ten pinned repositories, that one call used
fewer aggregate bytes than the chain it replaces (48,814 vs 101,302,
a 0.48 ratio) while cutting 78 round trips to 15 β one per task β and, after
two disclosed defects were fixed, 37 of 37 gated checks pass. The first
run found impacted_tests --quiet silently dropping non-Rust/Python test
names (orient's own test-coverage section did not share the bug, which is
how it was found); that filter is now removed. Its natural-language intent
input still inherits search_code's accuracy β all three intent tasks in
this corpus resolved to the wrong node, unchanged and out of scope for this
fix β but orient's confidence heuristic, which originally caught none of
the three, now flags all three "confidence": "low" with candidate scores
attached, at the cost of also flagging some correct resolutions when a
runner-up is close. See docs/orient-tool.md and
the committed policy /
original observation /
post-fix observation.
Two additional precommitted measurements, both counting bytes of command output rather than tokens (no tokenizer was run):
get_source against a naive whole-file-read baseline: 97.85% fewer bytes across ten
functions sampled by source-size decile, cheaper on all ten
(docs/context-vs-read-cost.md).find_definition against a plain-grep baseline: 97.98% fewer bytes across ten
identifiers (docs/names-cost.md).Both are single-repository measurements. The direction is structural β files
are much larger than the functions in them, and grep returns every mention
where find_definition returns only declarations β but the exact percentages
are not portable.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/girder)<a href="https://allmcps.com/mcp/girder"><img src="https://allmcps.com/api/badge/girder?style=directory" alt="Girder on AllMCPs" /></a>