Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

vex

MCPB · VEX-MCP-X86_64-UNKNOWN-LINUX-GNU.MCPB · 3 COMPONENTS

Local code search for agents: symbols, usages, call graph, AST patterns, grep and semantic search

+2 this week 48 Trust /100

Last scanned (8 hours ago)

Scores higher than 78% of MCPB servers

Category Code Search and Documentation

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security0
  • No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.Unverified
  • Known CVEs could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
  • Install-script risk not yet assessed.Unverified
  • Dependency health could not be checked: we found no dependency list to check in this bundle: either it runs a compiled binary, whose bundled manifests we do not read, or none of the package.json, requirements.txt, pyproject.toml or uv.lock files it ships for its runtime declares a dependency we can read (a requirements.txt that only points at a setup.py project, a local path, or a nested requirements file we cannot follow counts as none).Unverified
Provenance & Transparency48
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 17 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability62
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 14844 tokens (~530/item across 28 items; 28 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety75
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "eval" implies "eval" and declares no destructiveHint at all, which the MCP spec reads as destructive by default. See how to fix → Fail
  • An AI judge read all 28 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities20
  • Spec-recency check failed: implements MCP spec 2024-11-05; the latest is 2026-07-28. See how to fix → Fail

Unverified: 1 category

A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Nov 26 0
    • Stability: 0.97 → pass security
  • 1 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 93 to 97. That category is still filling its 30-day observation window: 28 days of observed history at the previous scan, 29 at this one. The score rises as the window fills, whether or not the server changes.

  • 30 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 87 to 90. That category is still filling its 30-day observation window: 26 days of observed history at the previous scan, 27 at this one. The score rises as the window fills, whether or not the server changes.

  • 28 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 80 to 83. That category is still filling its 30-day observation window: 24 days of observed history at the previous scan, 25 at this one. The score rises as the window fills, whether or not the server changes.

  • 26 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.

  • 24 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.

  • 22 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.

  • 20 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed mcpb/https://github.com/tenatarika/vex/releases/download/v1.28.0/vex-mcp-x86_64-unknown-linux-gnu.mcpb@1.28.0

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem mcpb
Reason No attestation published

Background: How many MCP packages publish verified provenance →

MCP tools · 28 exposed · ~14,844 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
bundle ~719

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.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap if missing, before running (default: true)
basestring–(mode: pr-impact) Git base revision to diff against (e.g. `origin/main`, `HEAD~3`, a SHA)
callees_maxinteger–(mode: symbol) Max direct callees
callers_maxinteger–(mode: symbol) Max direct callers
depthinteger–(mode: pr-impact) Transitive callers walk depth
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob (repeatable)
modestringyesBundle assembly mode
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
path_globstring–(mode: project) Single path glob filter applied to ranked symbols (e.g. `src/**`); separate from the universal `include`/`exclude` arrays
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
similar_maxinteger–(mode: symbol) Max semantic-similar matches; gated on `vex index --semantic`
symbolstring–(mode: symbol) Symbol name to resolve via the symbol FST
tests_maxinteger–(mode: pr-impact) Max test-classified items
top_ninteger–(mode: project) Max number of top-ranked symbols

No output schema declared.

No examples provided.

callees ~783

Direct callees of a function via the persistent call-graph FST (~4ms when indexed; falls back to live-scan). Prefer over Read+manual scanning when you want to know what a function calls without reading the whole body — callees gives the resolved outgoing edges as records. Phase 14.2 + 14.2.2 + 14.2.1: Python/Java decorators, Kotlin annotations, C# method/constructor attributes, TypeScript method decorators, and Rust outer attributes on fns/methods are surfaced as callees of the decorated function (decorator factories like `@lru_cache(maxsize=128)`, `@Inject`, `@Get("/x")`, or `#[tokio::test]` appear as the path-rightmost identifier `lru_cache` / `Inject` / `Get` / `test` alongside regular body calls). Rust `#[derive(...)]` is intentionally filtered. Supports diff scoping: `since` / `since_branched` / `changed_only` (mutually exclusive) to restrict callees to recently-touched code.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running — enables the call-graph fast path (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
symbolstringyesExact function name — canonical key (v1.7+).
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

callers ~885

Direct callers of a function via the persistent call-graph FST (~4ms when indexed; falls back to live-scan). Prefer over grep for `who calls Foo?` — grep on the function name hits doc comments and string literals; the call-graph edges are resolved at parse time. Phase 14.2 + 14.2.2 + 14.2.1: Python/Java function/method decorators, Kotlin annotations / C# method+constructor attributes, and TypeScript method decorators / Rust outer attributes on fns/methods emit forward edges, so `callers GetMapping` lists every Spring handler, `callers get` lists every FastAPI route, `callers HttpGet` every ASP.NET action, `callers JvmStatic` every Kotlin function annotated `@JvmStatic`, `callers Get` every Nest.js `@Get(...)`, `callers test` every Rust `#[tokio::test]` (the rightmost identifier of the decorator/attribute path becomes the callee; arguments are ignored — `#[serde(rename = "x")]` → `serde`, not `rename`). Rust `#[derive(...)]` is filtered (compile-time codegen, not call edges). Note the rightmost-identifier convention means `callers get` mixes decorator handlers with any regular `.get()` call — narrow with `include`/`exclude` if needed. Pair with `paths` for multi-hop chains. Supports diff scoping: `since` / `since_branched` / `changed_only` (mutually exclusive) to restrict callers to recently-touched code.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running — enables the call-graph fast path (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
symbolstringyesExact function name — canonical key (v1.7+).
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

capabilities ~19

Return vex protocol version + capability matrix for client capability negotiation.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

check ~334

Batch existence probe: confirm whether one or more symbol names exist in the index without paying for body extraction or ranked search (~4ms total). Use before show / usages / callers when working from an unverified list — skip the symbols that don't exist instead of letting downstream tools error.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
namesarray–DEPRECATED — use `symbols`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
symbolsarrayyesExact symbol names to probe — canonical key (v1.7+).
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

diff ~260

Symbol-level diff between a git revision and the working tree: lists added / removed / moved / body-changed symbols on the touched files. Prefer over `git diff` + manual scanning for PR review — git diff returns line hunks while this returns structured symbol records, so an agent can iterate over changed-functions directly instead of parsing unified-diff text.

NameTypeReqDescription
basestringyesGit revision to compare against (e.g. main, HEAD~3, origin/main). Working tree is the new side.
excludearray–Blacklist changes by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist changes by path glob, gitignore syntax (repeatable)
limitinteger–Max changes to return
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)

No output schema declared.

No examples provided.

duplicates ~638

Repo-wide near-duplicate scan: pairs of symbols whose embeddings exceed `threshold`. Use for refactor planning (`where else does this logic live?`) and dedup. Prefer over manual similar-walks — duplicates evaluates all pairs once with `min_body_lines` filtering out trivial bodies. Requires `vex index --semantic`. Supports diff scoping: `since` (rev), `since_branched`, `changed_only` (mutually exclusive) and `no_stale_check`.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict pairs to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist pairs by path glob — a pair is dropped when either side matches (repeatable)
exclude_testsboolean–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 insid…
explainboolean–Include reasoning per pair: identifier-set Jaccard overlap + truncated unified diff between the two bodies
filter_pathstring–Substring path filter — keep pairs where at least one symbol's path contains this substring. Legacy alias: `filter`.
includearray–Whitelist pairs by path glob — a pair is kept when at least one side matches (repeatable)
limitinteger–Max pairs to return
min_body_linesinteger–Skip symbols with body shorter than this many lines (filters trivial wrappers)
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict pairs to files changed between `<rev>..HEAD`. Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict pairs to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
thresholdnumber–Minimum cosine similarity (0.0..1.0); 0.9 keeps only very close pairs
whyboolean–Surface a JSON trace under `_meta.why`: applied threshold + min_body_lines, pairs before/after path filter, filter snapshot.

No output schema declared.

No examples provided.

eval ~254

Run the ranking-quality harness against a golden query set and return nDCG@10 / recall@10 / MRR per query and aggregated. Indexless in the sense that it never builds — consumes whatever index already lives at the project root (run `index` first if missing). Intended as a CI regression guard. MCP defaults to `json: true` so agents receive structured `EvalReport` JSON instead of the human-readable summary the CLI emits.

NameTypeReqDescription
benchstring–Path to the golden-set TOML. Defaults to the bundled `benches/ranking_golden/queries.toml` on the CLI side; pass this when running against a fixture.
jsonboolean–Emit the EvalReport as JSON to stdout. Default `true` in MCP context (agents want structured output) — note the CLI default is `false`. Set explicitly to `false` to fall back to the human-readable su…
min_ndcgnumber–Fail with non-zero exit if mean nDCG@10 drops below this floor. Default 0.0 (always succeed). CI pins a recorded floor.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)

No output schema declared.

No examples provided.

find_similar ~369

Semantic-only search by natural-language description (e.g. 'payment processing' → ChargeUseCase, BillingService). Uses the HNSW vector index built by `vex index --semantic` (~7-15ms). Prefer over search when you do not know any concrete identifier and want concept-level matching; prefer search when you have a partial name (search fuses semantic + lexical channels for better recall on identifier-shaped queries).

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
querystringyesNatural-language description of the concept (not an identifier; use find_symbol for those).

No output schema declared.

No examples provided.

find_symbol ~400

Resolve a symbol by exact name (with prefix fallback) against the FST inverted index (~4ms). Prefer over search when the symbol name is known and you want exactly that record back, not a fused-rank list. Prefer over grep for `git grep 'class Foo'`-style definition lookup — grep scans every byte; this is a constant-time index probe.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
symbolstringyesExact symbol name (function/class/struct/etc.) — canonical key (v1.7+). Use search for partial or fuzzy names.

No output schema declared.

No examples provided.

grep ~437

Regex content search across files (ripgrep-equivalent, no index needed). Use this for searching inside string literals, comments, config values, or any non-symbol text. Prefer search / find_symbol / usages for identifier lookups — those are index-backed (~4ms) while grep is a full-scan and returns raw line matches without symbol context.

NameTypeReqDescription
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
filter_pathstring–Substring path filter applied to result paths (single substring; use include/exclude for glob patterns). Legacy alias: `filter`.
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
patternstringyesRegex pattern (Rust regex syntax) to match against file contents.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
textboolean–Force-read every file, bypassing the binary-file skip (extension denylist + NUL/high-control content sniff). Escape hatch for a legitimately-textual file that got misclassified as binary; a genuinely…
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

history ~659

Every historical version of a symbol reachable from a chosen tip. With `vex index --history` previously run, queries hit a persistent FST sidecar (~ms); without it, shells out to `git log` (~seconds). Indexed mode also finds symbols whose name has been DELETED from HEAD — the walker can't. Use this to inspect how a function's body / signature changed over time, find when a bug was introduced, or recover a deleted symbol's last definition. NOTE: omitting `limit` returns the full history (walker mode is unbounded by default — set `limit` to cap latency on long-lived repos). `exact_presence: true` adds seconds-scale latency per file — only pass when you specifically need the exact commit set, not the convex-hull span. v1.20.0 (D5) surface — the CLI subcommand has existed since v1.15.0 but was MCP-invisible.

NameTypeReqDescription
authorstring–Keep only entries whose commit author contains this substring (case-insensitive). Walker-only — the indexed path rejects this with an error pointing at `no_index: true`.
branchstring–Restrict the walk to this revision (`refs/heads/foo`, `origin/main`, a SHA). Defaults to `HEAD`.
depthinteger–Max commits to walk per file (walker mode). Unbounded by default; bump down on long-lived repos to keep latency in check.
diffboolean–Render unified diffs between consecutive historical versions of the same `(symbol, kind)` pair instead of repeating the full body for each entry. Cuts output noise on deep histories. Mutually exclusi…
exact_presenceboolean–For each entry, list the exact set of commits where its blob lived in the file. Defeats the convex-hull span representation (LIMITATIONS §4c #4). Adds latency.
kindstring–Keep only entries whose symbol kind matches exactly (lowercase: `function` / `struct` / `impl` / …).
limitinteger–Cap the total result set. Omit for unbounded (walker mode) — set explicitly on long-lived repos to keep latency in check. The walker stops as soon as the limit is reached.
namestring–DEPRECATED alias for `symbol`; still accepted, emits a deprecated_args notice in _meta.
no_indexboolean–Force the v1.16 query-time walker even when a `git_history` section is present. Default (`HistoryMode::Auto`) picks the indexed path when available and falls back to the walker otherwise. Use for reg…
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Keep only entries whose commit date is `>= YYYY-MM-DD` (inclusive).
symbolstringyesSymbol name to walk through history. Matched whole-word via `git grep --word-regexp`, then filtered post-parse to exact `name == query`.
untilstring–Keep only entries whose commit date is `<= YYYY-MM-DD` (inclusive).

No output schema declared.

No examples provided.

impact ~812

Delete-safety blast-radius report. Composes four independent reference channels — strict refs (binder-resolved v5 edges), the legacy FST refs, `grep \b<Name>\b` against the project, and direct call-graph callers — into a single verdict (`safe` / `unsafe` / `uncertain`). Use this BEFORE proposing to delete or rename a symbol; one call collapses what CLAUDE.md previously documented as a manual dance across usages → grep → callers. Verdict rule: `unsafe` if strict_refs > 0 OR call_graph_callers > 0 (binder/graph confirmed real usage); `uncertain` if only text channels (FST / grep) hit (likely string-dispatch / decorator / comment mentions); `safe` only when every channel reports zero hits. `results` shape: { symbol, verdict, verdict_explanation, channels: { strict_refs, fst_refs, grep_word_boundary, call_graph_callers } } where each channel block has { available, count, sample[], truncated }.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
depthinteger–(v1.21.0) BFS hop budget for transitive callers. `1` (default) reports direct callers only via `call_graph_callers`; `>= 2` enables the `transitive_callers` channel, walking the call graph backward u…
excludearray–Blacklist results by path glob; wins over include (repeatable).
exclude_docsboolean–(v1.20.1, D4 parity) Opt-in: drop text-channel hits in prose-format files (`*.md`/`*.markdown`/`*.txt`/`*.rst`/`*.adoc`). Default off so a symbol mentioned only in CHANGELOG still yields `uncertain`;…
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable). Applied to every channel — useful for scoping to e.g. `src/**` when assessing a library symbol.
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
symbolstringyesExact symbol name to assess — canonical key.
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

implementations ~564

Find every concrete type that extends a base class / implements a trait / interface. Walks the indexed inheritance edges (covers generic-parameterised bases). Prefer over grep for `find all subclasses of Foo` — grep misses `: Foo<T>`, indirect inheritance, and trait impls; this resolves the real hierarchy. Supports diff scoping: `since` / `since_branched` / `changed_only` (mutually exclusive) to restrict to recently-touched code.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
symbolstringyesExact name of the base class / trait / interface — canonical key (v1.7+).

No output schema declared.

No examples provided.

index ~301

Build or rebuild the vex index from scratch. Run once per project; use `update` afterward for incremental refreshes. Set semantic=true to also generate embeddings (slower; required for find_similar / similar / duplicates).

NameTypeReqDescription
devicestring–Advanced: pin a specific embedding execution provider (cpu | auto | cuda | directml | coreml). Mutually exclusive with `gpu`.
gpuboolean–Use the GPU for embedding generation if this vex build supports it (DirectML on Windows / CoreML on macOS prebuilts; CUDA via source build), with silent CPU fallback. Only speeds up cold/large semant…
project_rootstringyesAbsolute path to the project root to index
semanticboolean–Also generate per-symbol embeddings (enables semantic search / similar / duplicates; adds ~30-90s on a medium repo)
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

modules ~707

De-facto modules: clusters of symbols that call/reference each other (deterministic Leiden-CPM over call + ref + hierarchy edges, computed on full `vex index`). Without `symbol`: list clusters with a label (dominant path prefix; a bare file path when the cluster is a single file), size, cohesion and hub symbols. With `symbol`: that symbol's cluster and its members (`limit` caps the matching symbols). Use for `what are the modules` / `which module is X in` instead of reading directory listings. Requires a v9 index built by `vex index`; after `vex update` clusters are frozen and flagged `stale`. Returns an empty result with `empty_reason` and a hint on older indexes or when built with `--no-clusters`. Cluster ids are stable only within one full-index generation: do not persist them across `vex index` runs.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist members by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist members by path glob, gitignore syntax (repeatable). A cluster is shown iff at least one member is in scope.
limitinteger–Max clusters to list, or max matching symbols when `symbol` is given (per repo with `workspace`). Must be at least 1.
membersinteger–Members to list per cluster, ordered by path then line (default: 0 when listing, 25 for a `symbol` lookup). Must be in `[0, 10000]`.
min_sizeinteger–Hide clusters with fewer in-scope symbols than this. List mode only; ignored when `symbol` is given. Must be in `[1, 1000000]`.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sortstring–Order clusters by in-scope size or by cohesion; ties by cluster id.
symbolstring–Symbol whose cluster to show. Omit to list all clusters.
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

outline ~151

List every symbol (kind + line range) in a single source file via cached tree-sitter parse. Prefer over Read when you only need the file's structure (what's in here?) rather than the full byte stream — outline returns ~50 lines of structured records vs reading thousands of lines of source.

NameTypeReqDescription
filestring–DEPRECATED — use `path`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
pathstringyesFilesystem path to the source file — canonical key (v1.7+). Absolute or relative to project_root.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)

No output schema declared.

No examples provided.

paths ~411

Enumerate every caller chain from `from` to `to` in the persistent call graph (multi-hop, max 6 by default). Prefer over repeated `callers` calls when you need to know how a function gets reached from a known entry point — paths walks the edges itself in a single response. Requires a v4 index with call graph (built without `--no-call-graph`).

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist intermediate steps by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
fromstringyesExact name of the starting function (caller / entry point).
includearray–Whitelist intermediate steps by path glob, gitignore syntax (repeatable)
max_hopsinteger–Maximum hops between from and to
max_pathsinteger–Maximum paths to enumerate (caps output, aborts traversal early)
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
tostringyesExact name of the destination function (callee being investigated).

No output schema declared.

No examples provided.

pattern ~644

Structural AST pattern matching: match code by shape, not text. Metavars: `$NAME` captures an identifier or balanced expression, `$_` is a wildcard, `$$$` is an anonymous ellipsis, `$$$NAME` / `$$NAME` is a named ellipsis that captures multi-line bodies or arg lists, repeated metavars enforce back-reference equality. Composition: space-flanked ` && ` and ` || ` join sub-patterns (AND requires both shapes in the file with shared captures agreeing; OR takes the union). Prefer over grep / ast-grep for cross-language structural queries — grep cannot match nested syntax, and ast-grep needs per-language scripts; vex pattern works on the cached tree-sitter parse with a skeleton prefilter (~10-50ms). Set `why: true` to inspect indexed vs live-scan mode. Supports diff scoping: `since` (rev), `since_branched` (since this branch diverged from main), `changed_only` (working-tree changes) — mutually exclusive.

NameTypeReqDescription
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
langstringyesLanguage: rust, python, typescript, go, java, csharp, ruby, kotlin, swift, cpp, php, sql, markdown
limitinteger–Max matches to return
patternstringyesStructural pattern with $METAVARS (e.g. `fn $NAME($$ARGS) -> Result<$T, $E> { $$$BODY }`, `interface $N || class $N`). NOT regex — see grep for regex.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
whyboolean–Surface a ScanTrace under `_meta.why` in the response: mode (indexed/live_scan), root_kind_inferred, candidate_files / total_files, fallback_reason.

No output schema declared.

No examples provided.

reachable ~439

Every symbol that transitively calls `target` (the full upstream blast radius). Prefer over repeated `callers` walks when assessing the impact of changing a function — reachable does the closure in one call. Requires a v4 index with call graph.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
max_hopsinteger–Maximum hops to walk back from target
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
targetstringyesExact symbol name whose callers (direct + transitive) you want.
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

search ~1,165

Hybrid structural + semantic code search across the indexed codebase. Fuses FST exact + BM25 + semantic channels in a single ranked list (~4ms FST hit, ~7-15ms with semantic). Prefer over grep for symbol or identifier lookup — grep does a full-scan (seconds on large repos) and returns line matches; this returns ranked symbol records with kind, signature, and line ranges. Use this when you need to find a definition by name, signature shape, or meaning rather than guessing a regex. Supports `filter` (substring path filter), `kind` (kind-boost / restrict), `context_path` (proximity hint), `no_bm25` (disable BM25 channel), and `no_stale_check` (skip pre-call staleness probe).

NameTypeReqDescription
async_onlyboolean–Keep only async/suspend functions
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
code_onlyboolean–(v1.20.0 D4) Drop results in prose-format files (`*.md`/`*.markdown`/`*.txt`/`*.rst`/`*.adoc`). Default off so 'README' still finds the README; pass for code-intent queries where CHANGELOG/README hea…
context_pathstring–Boost results near this file path (e.g. the agent's current editor file).
excludearray–Blacklist results by path glob (wins over include); repeat for multiple globs
exclude_generatedboolean–Drop machine-generated files (protobuf stubs, sqlc output, bindgen bindings, ORM schemas) from the results, recognised from the generator's header banner. Pass on repos that check in generated code,…
exclude_testsboolean–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 insid…
filter_pathstring–Substring path filter applied to result paths (single substring; use include/exclude for glob patterns). Legacy alias: `filter`.
includearray–Whitelist results by path glob, gitignore syntax (e.g. 'tests/**'); repeat for multiple globs
kindarray–Boost results matching one or more kinds (repeatable). Canonical names (function, struct, class, …) plus aliases: def, comment, test, ref.
limitinteger–Max results
no_asyncboolean–Exclude async/suspend functions
no_bm25boolean–Disable the BM25 channel for this query (auto-on when the index has BM25 data otherwise).
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true (which already refreshes).
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
querystringyesFree-text query: symbol name, partial name, signature snippet, or natural-language description. Not for regex (use grep) or exact-only resolution (use find_symbol).
sealed_onlyboolean–Keep only sealed (or Java-`final`) types
semanticboolean–Enable the semantic vector channel (requires `vex index --semantic`); adds ~3-10ms but lets natural-language queries hit
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
static_onlyboolean–Keep only static class members
visibilitystring–Keep only symbols whose signature contains this explicit visibility keyword (no inferred defaults)
whyboolean–Surface a JSON trace under `_meta.why` in the response: normalized query, per-channel hits (FST/BM25/semantic/fuzzy), filter_applied snapshot
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

show ~764

Extract the full source body of one or more symbols by name (function, class, struct, etc.) using cached symbol byte-offsets (~4ms per symbol). Prefer over Read when you need a specific definition — show returns just that body, while Read pulls the entire file (often 10-100x more tokens). Accepts an array, so a single call replaces several Read calls. Phase 13.3 truncation: `signature_only` (signature line only), `head` (first N body lines), `no_body` (signature + leading doc only), `collapsed` (collapse nested methods — v1.9 NO-OP). Also supports `filter` (substring path filter), `kind` (kind-restrict), `context_path` (proximity hint), and `no_stale_check`.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
collapsedboolean–Phase 13.3: collapse nested methods inside a class/impl/module. v1.9 NO-OP (flag-shape stable; emits a stderr warning). Mutually exclusive with `signature_only`, `head`, `no_body`.
context_pathstring–Boost results near this file path (e.g. the agent's current editor file).
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
filter_pathstring–Substring path filter applied to result paths (single substring; use include/exclude for glob patterns). Legacy alias: `filter`.
headinteger–Phase 13.3: print only the first N body lines and append `... (M more lines)`. Mutually exclusive with `signature_only`, `no_body`, `collapsed`.
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
kindarray–Boost results matching one or more kinds (repeatable). Same vocabulary as `search.kind`.
limitinteger–Max bodies returned per symbol name (handles overloads / duplicates)
no_bodyboolean–Phase 13.3: print signature + leading docstring only; drop the body. Mutually exclusive with `signature_only`, `head`, `collapsed`.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
signature_onlyboolean–Phase 13.3: print only the signature line(s). Mutually exclusive with `head`, `no_body`, `collapsed`.
symbolstring–DEPRECATED — use `symbols: [name]`. Pre-v1.7 singular alias, still accepted; emits a deprecated_args notice in _meta.
symbolsarrayyesExact symbol names to extract — canonical key (v1.7+). Pass the array form even for a single symbol.

No output schema declared.

No examples provided.

similar ~673

Nearest neighbours of an EXISTING symbol by its stored embedding (HNSW lookup, ~7-15ms). Distinct from find_similar (which embeds a free-text query). Use this when you have a function in hand and want `what else in this repo looks like it?` — useful for dedup, refactor planning, and finding parallel implementations. Requires `vex index --semantic`. Supports diff scoping: `since` (rev), `since_branched`, `changed_only` (mutually exclusive) and `no_stale_check`.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
explainboolean–Include reasoning per match: identifier-set Jaccard overlap + truncated unified diff between bodies
filter_pathstring–Substring path filter applied to result paths (single substring; use include/exclude for glob patterns). Legacy alias: `filter`.
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD`. Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
symbolstringyesExact name of an existing indexed symbol to use as the seed — canonical key (v1.7+).
thresholdnumber–Minimum cosine similarity (0.0..1.0); raise to tighten matches
whyboolean–Surface a JSON trace under `_meta.why`: seed resolution, applied threshold, candidates before/after path filter, filter snapshot.

No output schema declared.

No examples provided.

status ~60

Report index statistics: symbol count, byte size, embedding presence, last-update timestamp. Use to confirm an index exists and is fresh before running search-shaped tools.

NameTypeReqDescription
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)

No output schema declared.

No examples provided.

subtypes ~639

Find every TRANSITIVE subtype of a base class / interface — the full descendant tree via extends/implements edges (not just direct implementations; use `implementations` for direct-only). Requires a v8+ index with hierarchy edges (no live-walk fallback) — if the index predates this feature or has no hierarchy section, this returns an empty result with a hint to re-run `vex index`. Supports diff scoping: `since` / `since_branched` / `changed_only` (mutually exclusive) to restrict to recently-touched code.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
depthinteger–Max BFS hops (transitive descent) from the queried type. Bounds how many inheritance levels deep the search goes; independent of the mandatory cycle-detection guard. Must be in `[1, 4096]` (64 is a g…
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
symbolstringyesExact name of the base class / trait / interface — canonical key.

No output schema declared.

No examples provided.

tests_for ~480

Find test functions that transitively cover a target symbol (Phase 13.10). Walks the call graph backwards from `<target>`, keeps rows under recognized test-path globs (Rust / Python / TS-JS / Go / Java / Kotlin / C# / C++), stamps each row with a `framework` label (`pytest`, `jest`, `go-test`, …) so an agent can pick the right runner without parsing paths. Prefer over grep `test.*Foo` — that misses transitively-covered helpers and produces lots of false positives. v1.20.0 (D5) surface — the CLI subcommand exists since v1.19.0 but was MCP-invisible.

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
excludearray–Blacklist results by path glob; wins over include (repeatable)
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
include_fixturesboolean–Admit non-test-named helpers (fixtures) under test paths via a one-hop forward callee walk. Default off — only `test_*` / `*Test` names surface.
limitinteger–Max results to return.
max_hopsinteger–Maximum reverse-call-graph hops from `target`. Default 6.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
symbolstring–DEPRECATED alias for `target`; still accepted, emits a deprecated_args notice in _meta.
targetstringyesSymbol whose test coverage to find — the function/method/class you want to know is tested.
test_patternarray–Glob patterns for test paths (repeatable). When set, REPLACES the default pattern set (does NOT append) — pass the full set you want.

No output schema declared.

No examples provided.

update ~278

Incremental index refresh: only re-parses files whose mtime changed since the last index. Prefer over `index` when an index already exists — typically <1s on small change sets vs full rebuild cost. Most other tools default to auto_update=true and call this implicitly.

NameTypeReqDescription
devicestring–Advanced: pin a specific embedding execution provider (cpu | auto | cuda | directml | coreml). Mutually exclusive with `gpu`.
gpuboolean–Use the GPU for embedding generation if this vex build supports it, with silent CPU fallback. Mostly a no-op for incremental updates (few/zero embeddings recomputed). Omit to let .vex.toml gpu/device…
project_rootstringyesAbsolute path to the project root whose index should be refreshed
semanticboolean–Also refresh embeddings for changed files
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

usages ~999

Find every reference to a symbol across the codebase. Prefer over grep for refactor-style `find all callers` queries — grep on a common identifier returns string-literal and comment noise; usages with strict=true uses the scope-binder to resolve real cross-file refs (Rust/TypeScript/Python/C#/C++). Without strict, runs the legacy refs FST (~4ms) — v1.20.0 also strips the row at the symbol's own definition line and prose mentions in `*.md`/`*.markdown`/`*.txt`/`*.rst`/`*.adoc` (override with `include_self` / `include_docs`).

NameTypeReqDescription
async_updateboolean–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)
auto_updateboolean–Auto-update the index if stale, or bootstrap it if missing, before running (default: true)
changed_onlyboolean–Restrict results to working-tree changes (staged + unstaged + untracked). Mutually exclusive with `since` and `since_branched`.
excludearray–Blacklist results by path glob; wins over include (repeatable)
exclude_testsboolean–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 insid…
filter_pathstring–Substring path filter applied to result paths (single substring; use include/exclude for glob patterns). Legacy alias: `filter`.
includearray–Whitelist results by path glob, gitignore syntax (repeatable)
include_docsboolean–(non-strict only) Keep matches in `*.md` / `*.markdown` / `*.txt` / `*.rst` / `*.adoc` files. v1.20.0+ strips them by default — README/CHANGELOG mentions of a symbol are prose, not callers. No-op whe…
include_selfboolean–(non-strict only) Keep the row at the symbol's own definition line. v1.20.0+ strips it by default — `find all callers` queries don't want the declaration showing up as a usage. No-op when `strict=tru…
limitinteger–Max results
namestring–DEPRECATED — use `symbol`. Pre-v1.7 alias, still accepted; emits a deprecated_args notice in _meta.
no_stale_checkboolean–Skip the staleness check that runs before each call; assumes the index is fresh. Redundant when `auto_update` is true.
project_rootstring–Absolute path to the project root (defaults to the MCP working directory)
sincestring–Restrict results to files changed between `<rev>..HEAD` (accepts anything `git diff` understands: `main`, `HEAD~3`, `origin/main`, SHA). Mutually exclusive with `since_branched` and `changed_only`.
since_branchedboolean–Restrict results to files changed since this branch diverged from `origin/main` (or `main`/`master`). Mutually exclusive with `since` and `changed_only`.
strictboolean–Use scope-resolved (type-aware) references from the binder — drops string-literal/comment/wrong-scope noise. Recommended for refactor work; falls back to legacy refs FST on languages without binder s…
symbolstringyesExact symbol name to find references to — canonical key (v1.7+).
whyboolean–Surface a JSON trace under `_meta.why`: mode (strict/fst_lookup), mode_legacy (back-compat alias for v1.9.x consumers, removed in v1.12), hits before/after path filter, prefix-suggestion count when n…
workspaceboolean–Multi-repo: fan out across every repo declared in the nearest `.vex-workspace.toml` (set `project_root` at or above it — the manifest is found by walking up). Results become an object `{workspace, re…

No output schema declared.

No examples provided.

Install

How do I install the vex MCP server?

vex ships as an MCPB bundle, a single file you download and open in an MCP host that supports MCPB bundles, such as Claude Desktop. The host reads the launch command from the bundle's own manifest, so there is no command to copy. Before opening it, check the file's SHA-256 matches the one the MCP registry declares for it, 58b85689adb781d16d63c0672d0a29b7b56c412e6ef693b4bce3d3b7d5d8352d; the commands to do that are on this page. If it does not match, do not open it.

mcpb · vex-mcp-x86_64-unknown-linux-gnu.mcpb

Download bundle

Check the download matches the SHA-256 the MCP registry declares before you open it. If it does not match, do not open the file.

SHA-256

58b85689adb781d16d63c0672d0a29b7b56c412e6ef693b4bce3d3b7d5d8352d

macOS / Linux

echo "58b85689adb781d16d63c0672d0a29b7b56c412e6ef693b4bce3d3b7d5d8352d  vex-mcp-x86_64-unknown-linux-gnu.mcpb" | shasum -a 256 -c

Windows (PowerShell)

(Get-FileHash -Algorithm SHA256 .\vex-mcp-x86_64-unknown-linux-gnu.mcpb).Hash -eq "58b85689adb781d16d63c0672d0a29b7b56c412e6ef693b4bce3d3b7d5d8352d"

Run it in the folder you saved the bundle to, then open the file with an MCPB-capable host such as Claude Desktop.

Common questions

What is the vex MCP server?

vex is an MCP server listed in the public MCP registry as io.github.tenatarika/vex. Local code search for agents: symbols, usages, call graph, AST patterns, grep and semantic search. This page covers its MCPB bundle (https://github.com/tenatarika/vex/releases/download/v1.28.0/vex-mcp-x86_64-unknown-linux-gnu.mcpb).

Is the vex MCP server safe to use?

vex scores 48 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the vex MCP server expose?

vex exposes 28 tools: search, find_symbol, find_similar, outline, index, and 23 more. Their descriptions and schemas cost roughly 14,844 tokens of context every time the server is loaded.

What licence is the vex MCP server under?

vex declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.