JevTrace
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@JevTraceshow me the code that handles refresh token validation and what calls it"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
JevTrace
Retrieval benchmark on 19 JS/TS tasks with labels written by the JevTrace authors — see the method, per-task results and limitations.
Give it a coding task; it returns the JS/TS code that task needs, within a token budget. It uses the TypeScript compiler to follow calls, types, callers and tests, and uses the Jev decision model (via OpenRouter by default) to judge relevance.
Quick start
git clone https://github.com/123wwwa/JevTrace && cd JevTrace
npm install && npm run build
export OPENROUTER_API_KEY=your-key # or add --offline to run without a provider
node dist/cli.js query --root /path/to/your/project --task "Fix refresh token validation"In Claude Code (searches whichever project you open; key read from JevTrace's .env):
claude mcp add jevtrace --scope user -- node --env-file=/path/to/JevTrace/.env /path/to/JevTrace/dist/cli.jsAsk about one behaviour or area of an existing TS/JS codebase ("where is X decided, what else touches it"). Project-wide requests such as "find bugs" or "review everything" get per-area subtasks to call it with instead of code. Supports .ts/.tsx/.js/.jsx/.mjs/.cjs and Vue components, ES modules and CommonJS, with or without a tsconfig/jsconfig, up to 20,000 source files; not Svelte/Astro — see supported projects.
Related MCP server: ts-language-mcp
Docs
Usage: CLI options, providers, MCP tools and parameters, benchmarks
Architecture: how discovery, compiler expansion and ranking work, and their limits
Requires Node.js 20+. MIT license.
Available Tools
3 toolsdiscover_entriesB
Diagnostics: returns the raw discovery candidates and scores as JSON, not source code. For finding the code a task needs, use retrieve_dependency_context instead.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | ||
| maxFiles | No | ||
| maxLeads | No | ||
| maxJevFiles | No | ||
| maxCandidates | No | ||
| maxRelevantFiles | No | ||
| maxRelevantDirectories | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a meaningful trait: the return is raw candidates and scores as JSON, not source code, which prevents misuse. However it says nothing about permissions, whether the operation is read-only, rate limits, or the shape/size of the result beyond 'raw'. Partial disclosure only.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, zero waste, with the most important constraint (JSON diagnostics, not code) front-loaded ahead of the alternative-tool pointer. Nothing needs trimming or reordering.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 7-parameter tool with no annotations and no output schema, the definition is too thin: the output is described only as 'raw candidates and scores as JSON' with no structure, and none of the tuning parameters are explained. An agent would know when to call it but not how to call it or what it will get back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage across 7 parameters (task, maxFiles, maxLeads, maxJevFiles, maxCandidates, maxRelevantFiles, maxRelevantDirectories), so the description must compensate and does not. No parameter is named or explained; the meaning of the various caps and their interaction is left entirely to inference from names and defaults.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (returns) and resource (raw discovery candidates and their scores as JSON), and explicitly frames the tool as diagnostics rather than source retrieval. It clearly distinguishes itself from retrieve_dependency_context, though it never spells out what domain the 'discovery' covers. An agent can tell it apart from its siblings, which is the key bar.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It names the alternative ('For finding the code a task needs, use retrieve_dependency_context instead') and the condition that selects it, plus the 'Diagnostics' label implies the intended context. It stops short of an explicit positive 'use this when...' statement, but the exclusions are clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_dependency_contextRetrieve JevTrace contextA
Use first when a JS/TS task needs code you have not located yet ("where is X handled", "change how Y works"): give the task in plain words and get the implementing functions plus the callers, callees, types and tests the TypeScript compiler links to them, within a token budget. Cheaper than searching and reading files one by one. Do not pass a file or line; describe the task.
| Name | Required | Description | Default |
|---|---|---|---|
| task | Yes | The coding task, including the intended change or bug | |
| maxChars | No | ||
| maxFiles | No | ||
| maxLeads | No | ||
| scopeCheck | No | Project-wide tasks ("find bugs", "review the codebase", "scaffold the project") get a repository map instead of code; set false to retrieve for the exact wording anyway | |
| maxJevFiles | No | ||
| tokenBudget | No | ||
| reverseFanIn | No | ||
| maxCandidates | No | ||
| contextRanking | No | jev | |
| maxRelevantFiles | No | ||
| perLeadNodeLimit | No | ||
| lexicalMergeLimit | No | ||
| perLeadTokenBudget | No | ||
| includeLexicalParallel | No | ||
| maxRelevantDirectories | No | ||
| neighborhoodTokenBudget | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With zero annotations the description carries the full behavioral burden. It does disclose the retrieval mechanism (TypeScript compiler links) and a token-budget constraint plus a cost comparison ('cheaper than searching and reading files'), which is useful context. However, it omits notable behavior it should flag itself — notably that project-wide tasks silently return a repository map rather than code (only documented in the scopeCheck schema field), and says nothing about error modes or result determinism.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences, front-loaded with the trigger condition, then the output, then the constraint. Every clause earns its place; no filler or restatement of the name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 17-parameter tool with no output schema and no annotations, the description adequately covers what the tool returns and when to reach for it, which is the core need. But it leaves the repo-map fallback behavior and the entire tuning-parameter surface unexplained, so an agent cannot reason about anything but the default call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 12% across 17 parameters, so the description must compensate and it largely does not. It adds real meaning for the one required parameter ('give the task in plain words', 'describe the task' rather than a file/line), but the 16 budget/ranking/limit knobs (maxLeads, contextRanking, reverseFanIn, etc.) get no explanation in either schema or description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource (retrieve TypeScript-linkage context for a task) and enumerates exactly what comes back: implementing functions plus callers, callees, types and tests. The qualifier 'when a JS/TS task needs code you have not located yet' implicitly separates it from retrieve_from_entry (entry-point retrieval) and discover_entries, so an agent can pick it without opening sibling schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use first when ...' gives an explicit ordering cue, and the example queries ('where is X handled', 'change how Y works') define the right context concretely. It also rules out a wrong invocation ('Do not pass a file or line; describe the task'). It stops short of naming the alternative tools or the condition that selects them, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retrieve_from_entryRetrieve from explicit entry (compatibility)B
Compatibility path for callers that already have a trusted JS/TS entry location. Use only when the user or an upstream tool explicitly provides the file/line, symbol, or structured evidence; do not infer an entry to call this instead of retrieve_dependency_context.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | ||
| line | No | ||
| task | Yes | ||
| symbol | No | ||
| endLine | No | ||
| reverse | No | ||
| evidence | No | ||
| maxChars | No | ||
| maxDepth | No | ||
| maxNodes | No | ||
| tokenBudget | No | ||
| visitPolicy | No | score | |
| reverseFanIn | No | ||
| bodyThreshold | No | ||
| omitThreshold | No | ||
| wrapperLookahead | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It signals that this is a compatibility/legacy path and that an explicit trusted entry is required, but it does not describe whether it is read-only, what it returns, or any safety or performance characteristics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tightly written sentences, front-loaded with the compatibility-path context and followed immediately by the usage restriction. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 16-parameter tool with a nested evidence object, no annotations, and no output schema, the definition is incomplete. It covers routing relative to a sibling but leaves parameter semantics and behavioral expectations largely unexplained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 16 parameters, so the description must compensate. It mentions file, line, symbol, and structured evidence, but does not explain the required task parameter or the many tuning parameters such as maxDepth, maxNodes, tokenBudget, or visitPolicy.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description calls itself a 'compatibility path' for callers with a trusted JS/TS entry location, but it never states what is actually retrieved (e.g., dependency context, call graph, symbol body). It differentiates itself from retrieve_dependency_context, but the core verb+resource remains implicit rather than explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives an explicit when-to-use condition: only when the user or an upstream tool explicitly provides file/line, symbol, or structured evidence. It also states when not to use it ('do not infer an entry') and names the alternative to use instead (retrieve_dependency_context).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
3 tool updates
v0.1.0- First observed
discover_entries - First observed
retrieve_dependency_context - First observed
retrieve_from_entry
TDQS
Scored across 3 tools
retrieve_dependency_context and retrieve_from_entry both retrieve dependency context but are clearly differentiated by input: one takes a natural language task, the other requires an explicit entry point. discover_entries is explicitly for diagnostics only. Descriptions strongly guide correct selection, though the two retrieve tools could still be confused without careful reading.
All names use snake_case and follow a verb_noun or verb_preposition_noun pattern. The consistent use of retrieve_ for the two retrieval tools and discover_ for the diagnostics tool is a minor deviation from a single verb pattern, but overall the naming is predictable and readable.
With only three tools, the set is tightly scoped to the server's purpose of retrieving dependency context from JS/TS code. Each tool has a distinct role: primary retrieval, compatibility entry-based retrieval, and diagnostics. No tool feels redundant or missing for the stated scope.
The server covers the core retrieval workflow: task-based context, entry-point-based context, and raw discovery diagnostics. This is likely sufficient for most JS/TS code navigation tasks. Minor gaps might exist for specialized queries, but no obvious dead ends are present.
Maintenance
Related MCP Connectors
Codebase intelligence for agents: 152 structured artifacts across 21 programs, one call.
Codebase graphs, caller impact analysis, and recorded project context for AI coding agents.
Token-efficient search for coding agents over public and private documentation.
Stateless TS/JS compiler facts for agents: references, imports, impact. No repo index or OAuth.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceEnables AI assistants to surgically extract and analyze code, reducing token usage and costs by up to 200x compared to reading entire files.18MIT- AlicenseAqualityBmaintenanceEnables AI coding agents to interact with TypeScript projects through compiler-level code intelligence, providing tools for navigation, type information, diagnostics, refactoring, and semantic search.29122 npm3Apache 2.0
- AlicenseNot gradedqualityBmaintenanceContext compiler for AI coding agents that indexes TypeScript codebases to extract and serve only the relevant symbols and files for a task, reducing token usage and search overhead.1MIT
- AlicenseAqualityBmaintenanceEnables AI coding agents to reduce token usage by condensing source code into AST skeletons, extracting specific symbols, compressing logs, and estimating token budgets.4MIT