bundle
Fetches a symbol's body, callers, callees, and similar matches—or full PR impact and project rankings—in one call, replacing four separate lookups.
Instructions
Multi-source bundle — replaces 4 round-trips (show → callers → callees → similar) with 1. Three modes: symbol (body + callers + callees + similar for a named symbol; ~10ms), pr-impact (changed symbols + transitive callers + tests for a git base ref; ~50ms), project (top-N symbols by reverse call-graph indegree; ~5ms). Prefer over chaining find_symbol/show/callers/callees when you need cross-section context on one symbol or a PR. Mode-specific args are validated server-side; only mode is universally required. Response shape is uniform — { protocol_version, capabilities, _meta, results: { mode, items[], mode_hints } }. Each items[i] carries 13.11 signals plus a role discriminator (body | caller | callee | similar | changed | transitive_caller | test | top). Scope filters (include / exclude / exclude_tests) apply only in pr-impact mode (changed files plus the caller and test rows); symbol and project modes ignore them.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| base | No | (mode: pr-impact) Git base revision to diff against (e.g. `origin/main`, `HEAD~3`, a SHA) | |
| mode | Yes | Bundle assembly mode | |
| depth | No | (mode: pr-impact) Transitive callers walk depth | |
| top_n | No | (mode: project) Max number of top-ranked symbols | |
| symbol | No | (mode: symbol) Symbol name to resolve via the symbol FST | |
| exclude | No | Blacklist results by path glob; wins over include (repeatable) | |
| include | No | Whitelist results by path glob (repeatable) | |
| path_glob | No | (mode: project) Single path glob filter applied to ranked symbols (e.g. `src/**`); separate from the universal `include`/`exclude` arrays | |
| tests_max | No | (mode: pr-impact) Max test-classified items | |
| auto_update | No | Auto-update the index if stale, or bootstrap if missing, before running (default: true) | |
| callees_max | No | (mode: symbol) Max direct callees | |
| callers_max | No | (mode: symbol) Max direct callers | |
| similar_max | No | (mode: symbol) Max semantic-similar matches; gated on `vex index --semantic` | |
| async_update | No | With auto_update, refresh a stale index in the background instead of waiting for it: results come from the index already on disk and _meta.vex.dev/stale says so (default: false) | |
| project_root | No | Absolute path to the project root (defaults to the MCP working directory) | |
| exclude_tests | No | Drop test files from the results (tests/ dirs, *_test.*, test_*.py, *.spec.ts, __tests__/, tests.rs, ...; same set as tests_for). Composes with include/exclude. Path-based only: Rust unit tests inside a `#[cfg(test)] mod tests` block of a non-test file are not excluded. | |
| no_stale_check | No | Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true. |