DevProjex MCP Server
Through the DevProjex MCP server, you can securely explore, search, analyze, and package local project code as read-only, secret-redacted context for AI agents.
List configured projects, profiles, and baseline filters.
Inspect filtered project structure and file names via trees.
Analyze selection size, token estimates, largest files, and document metrics.
Search file contents with regex, including symbol and declaration search.
Trace static dependencies and dependents for up to 16 seed files.
Read single or batched files, line ranges, or known symbols with mandatory secret and private-data redaction.
Pack multi-file context as Markdown, text, JSON, or XML, with token budgets, Git scopes, profiles, and related-file expansion.
Read oversized stored packs back in paginated line and character ranges.
Use Git-aware scopes such as staged, changes, and diff, plus tracked-only filters, include/exclude globs, and size limits.
Opt in to remote Git repositories by URL and branch.
All tools are read-only; secret redaction is always on, and a root jail prevents access outside configured projects.
Provides Git-aware scoping of a project's contents: restrict the returned tree, files, search results, and packed context to files tracked by Git, to staged files, to all current unstaged/staged changes, or to files changed between two refs (diff:refA..refB), while honoring .gitignore rules.
Allows using Git repository URLs (e.g. GitHub repos) as project sources, so an agent can inspect, analyze, export, or search a remote repository from its URL, including checking out a specific branch, backed by a managed local clone cache.
DevProjex: MCP / GUI / CLI / TUI all in one
π Selected by the Avalonia UI team for the App Showcase
Clean, token-efficient codebase context for AI chats and coding agents. You see exactly what leaves your project, and secrets are masked before it goes.
DevProjex turns any folder or Git repository into clean context for AI. Paste it into ChatGPT or Claude, or let Claude Code, Codex, and Cursor read the project through its read-only MCP server. A desktop app, a Terminal Workspace, a CLI, and the MCP server share one engine, one set of filters, and one masking pipeline, on Windows, macOS, and Linux.
Tick what you need in a file tree, check the live preview and its token estimate, then copy or export the result as ASCII, Markdown, JSON, or XML, or as a clean copy of the project in a folder or ZIP.
π Read-only and telemetry-free by design. DevProjex does not upload your project contents or collect telemetry.
App demo πΌοΈ

Related MCP server: code2prompt
Download π
Microsoft Store: π DevProjex
Latest GitHub release (Windows, macOS, Linux): π github.com/Avazbek22/DevProjex/releases/latest
WinGet (Windows): winget install OlimoffDev.DevProjex
Run without installing
The CLI, the Terminal Workspace, and the MCP server run straight from npm or NuGet, or from a direct release binary:
npx devprojex tree . # Node.js 20+
dnx devprojex tree . # .NET SDK 10
./DevProjex tree . # release binary (DevProjex.exe on Windows)The npm and NuGet packages contain the CLI, the Terminal Workspace, and the MCP server, but not the desktop app. Requirements per platform, the direct headless archives, and the non-root Docker image are all covered in Docs/Installation.md.
Why DevProjex? π‘
Copying files into a chat window one by one doesn't scale. Packing tools are fast, but you see the result after it's packed, not while you choose. And a coding agent with plain file access reads .env as easily as Program.cs, unless every tool it uses is told to ignore it.
DevProjex works differently: visual, precise, and local-first.
You see what leaves your project: file tree, live preview, token estimate, and an agent journal that keeps a receipt of every MCP session.
You control what leaves it: Smart Ignore, Git modes, secret and private-data masking, name filters, saved profiles.
Your agent gets the same rules: the MCP server is read-only, secret masking there has no off switch, and with Live Context the files you tick are the agent's focus.
You get more than text: a real project copy as a folder or ZIP.
The numbers, with their caveats. In the final blind series against Repomix (11 tasks, 8 repositories, 6 languages, 22 sessions per side, Claude Haiku 4.5 as the agent and as the judge), DevProjex used 973,020 tokens against 1,174,907, and the judge trusted the DevProjex answer in 17 pairs of 22 against 3. With seven planted credentials, neither tool leaked a value, but the code around them stayed readable through DevProjex in 7 files of 7 against 1 of 7. The tasks were written by the author, Repomix needs fewer tool calls, and it wins broad "how does X work" questions. The whole series, with the agents' and the judge's verdicts verbatim, is in Docs/Benchmark-History.md.
Use it for
AI assistants: clean input for ChatGPT, Claude, DeepSeek, Qwen, Kimi.
AI agents: any MCP client reads your project through a server that only reads and always masks, and you steer its focus with checkboxes.
CI pipelines: fail a build when secrets would leak into packed context, without ever printing the values.
Restricted environments: get the same clean context where AI agents, remote indexing, or IDE plugins are not allowed.
Large codebases: pull out one module instead of the whole repository.
Code reviews and teaching: share the structure and only the files that matter.
Get started
Open or drop a project folder.
Choose folders, files, filters, ignore rules, and output mode.
Preview, then copy, export, run the same workflow from the terminal, or connect your coding agent through MCP β Live context.
Works with any language, repository, or project structure.
Feature overview β¨
Choose and control
Smart Ignore: hides build output, dependency folders, and caches, and checks for evidence before hiding anything. How it works β
Hide Secrets: masks detected credential values where they stand, in everything you export and in every MCP response. How it works β
Hide private data: optionally masks emails, IPs, MACs, phones, and user paths. How it works β
Code compression: keeps declarations and signatures, empties implementation bodies; pure code gets about 3Γ smaller. How it works β
Strip comments and strip blank lines: syntax-aware cleanup across 20 language packs, without modifying source files.
File tree with checkboxes, search, and name filters.
Git modes:
.gitignore, tracked files, staged files, all current changes, or a ref-to-ref diff.
AI agents
Read-only MCP server: eight tools for any MCP client, on the same engine as the desktop app. Details β
Live Context: tick files in the desktop app and the agent works with that selection on its very next call. How it works β
Agent journal: a receipt for every session with calls, delivered paths, tokens, and masked values, never file bodies. Details β
Hard boundaries: root jail, untrusted-data markers against prompt injection, and an agent that can only narrow what it sees. Details β
Preview and export
Live preview (tree, content, or both) with live counters for lines, characters, and a token estimate.
Scrollbar markers show search matches and masking findings at a glance.
Export as ASCII, Markdown, JSON, or XML, to a file or the clipboard, tree only, content only, or both.
Export a clean copy of your project to a folder or ZIP archive. Details β
Workflow and interface
Desktop app, Terminal Workspace, CLI, and MCP server: the same engine, four ways to work.
Git tools built in: clone by URL, switch branches, update cached copies.
Local profiles remember your settings per project.
Light, dark, and system themes; platform-native keyboard shortcuts; localization in 20 languages.
Stays smooth even on very large folders.
Project copy export
Use File β Export project β To folderβ¦ or To ZIP archiveβ¦ to create a separate copy of your current selection. The same workflow is available through devprojex export project.
Project copies respect your chosen root folders, file types, ignore rules, and checked items; if nothing is checked, the whole current tree is exported. Directory structure, binary files, and included empty folders are preserved. When Hide Secrets or Hide private data is enabled, detected values in text files are replaced, binary files remain unchanged, and the result is intentionally not a byte-for-byte copy, so it may not build or run. The source project is never modified, and the result can't be written inside it.
MCP server π€
DevProjex ships a built-in secure Model Context Protocol server, on the official C# MCP SDK, that turns any local folder or Git repository into token-efficient codebase context for AI agents: Claude Code, Codex, Claude Desktop, Cursor, Google Antigravity, VS Code, or any MCP client. It runs on the same engine as the desktop app, the Terminal Workspace, and the CLI. One line connects Claude Code, with or without the desktop app installed:
claude mcp add devprojex -- npx -y devprojex mcp --root /absolute/path/to/projectUnder the hood every client starts the same command, devprojex mcp --root /path/to/project, and talks to it over stdio.
Connect a client
Desktop app: MCP β Live context or MCP β Standard, then Open in Claude Code, Codex, Cursor, or VS Code. The submenu you pick decides whether the registration follows the checked tree.
Terminal Workspace:
mcp connect <client> [live|standard]registers the server without opening another terminal; live mode is the default here.CLI:
devprojex mcp connect . --client <client>(standard mode unless--mode liveis given). Add--opento launch the client, or--printwhen only a manual configuration fragment is needed.Without the desktop app: the npm or NuGet package runs the same server through
npx -y devprojexordnx devprojex. Snippets for every client are in Docs/McpServer.md.
Cursor and VS Code get a project-local .cursor/mcp.json or .vscode/mcp.json; other servers in those files are left alone. For a first-call check, inspect DevProjex with /mcp in Claude Code or run codex mcp list, then ask: βThrough DevProjex, show the tree of the current selection.β That call appears in the agent journal.
Live Context: your checkboxes become the agent's focus

Open the project in the desktop app and connect through MCP β Live context. From then on the tree you tick is what the agent works with:
Tick, untick, done. The agent sees the new selection on its very next call, through the shared local project profile. No restart, no new prompt.
Focus, not a cage. Tree, search, analysis, dependency, and pack operations stay inside the checked selection. A file outside the ticks can still be read by name, with an outside-focus notice.
Your filters stay the limit. The desktop app's filters and secret masking apply to everything the agent reads; files your filters exclude stay out of reach.
Saved results stay honest. A stored pack is pinned to the selection that created it; change the ticks and the agent rebuilds it explicitly.
See what the agent took. Every file the agent received is marked in the tree with a count, the window title names the active client or session count, and focused paths are restored when you reopen the project.
Live context uses --live; Standard connects the same server but does not follow the window selection.
Eight read-only tools
Eight read-only tools cover the whole workflow: list_projects, get_tree, analyze, search_project, related_files, get_file, pack_context, and read_pack.
search_projectfinds text or declarations by name, andget_filereads an exact line range or one declaration instead of a whole file.related_filesanswers "what does this file actually use, and who uses it" from real imports, for one file or a handful of seeds, so following a thread never widens the selection.pack_contextpacks a selection undermax_tokens: files are admitted in a deterministic order while they fit, the rest are reported as skipped, andtop_filesshows where the tokens go.pack_contextandrelated_filesstore an oversized result as a session pack;read_packreads it back in line ranges instead of flooding the agent's context. Long operations report standard MCP progress notifications.Trees default to compact Markdown, content declares the root once and uses relative paths, and every tree ends with a line naming the active filters, so the agent knows what it did not see.
git_scopenarrows any tool to staged files, current changes, or a ref-to-ref diff;profileswitches between built-in defaults, your saved desktop selections, or a portable profile file.
Agent journal: a receipt for every session

The local agent journal records metadata and counts for MCP sessions, never file bodies or detected secret values. Each session shows the client, the mode, and its totals: calls, characters, token estimate, delivered files, masked values, and duration. Open a session and every tool call is listed with its arguments summary, revision, timing, and notices. Read it from the desktop app (MCP β Journal), the Terminal Workspace, or the CLI, and export a Markdown or JSON context receipt showing calls, delivered paths, and totals. Want to audit what the agent gets? Open the same project in the desktop app: the engine and the masking pipeline are shared, and filters match when the same profile and parameters are used.
Security boundaries
The server enforces hard security boundaries on top of DevProjex's read-only design:
Read-only by design. Tools cannot modify project files or run project code; network access is disabled unless
--allow-remoteis explicitly enabled for Git URL projects.Secret masking is always on in MCP mode and has no off switch. Not in the server flags, not in the tool schemas, so neither a config mistake nor the agent itself can turn it off.
Optional private-data masking via
devprojex mcp --hide-private-data, mirroring the CLI flag.Root jail. Local access is pinned to startup roots; opt-in remote Git URL checkouts are pinned on first use; symlink and junction escapes are rejected.
The agent can only narrow the view. Agent paths and globs can only narrow the selection, and the
.gitadministrative area is never exposed.Git's view by default. Smart Ignore and
.gitignoreapply, whileDockerfile,.github/, dot-files, and empty files stay visible. Widening that view is your startup decision, never the agent's: an--excludebaseline, the--unrestrictedpreset, or the opt-in--allow-agent-exclusionsflag.Prompt-injection hardening. Returned file contents are wrapped in untrusted-data markers.
The missing off switch is a control guarantee, not a detection guarantee. DevProjex detects common secret formats, but detection is heuristic; review each pack before publishing it outside your environment.
See Docs/McpServer.md for client setup, the full tool reference, and the security model. The measurements behind the MCP server, from 5.1 to 5.2, with the agents' and the blind judge's verdicts verbatim, are in Docs/Benchmark-History.md.
Command line βοΈ
DevProjex also runs from the terminal: a keyboard-first Terminal Workspace for interactive work, and a CLI for repeatable, script-friendly project analysis and AI-context export.

devprojex # open the Terminal Workspace
devprojex open . --preview # desktop app on this folder, preview pane open
devprojex tree . # project tree
devprojex tree https://github.com/owner/repo --branch main # tree of a remote repository
devprojex analyze . --format json # files, lines, tokens, largest files
devprojex analyze . --git-mode tracked --exclude smart-ignore # tracked files only, with Smart Ignore applied
devprojex analyze . --hide-secrets --findings --fail-on-findings # CI gate: findings, never values
devprojex export context . --format markdown -o ../context.md # packed context for a chat
devprojex export context https://github.com/owner/repo -o - # straight from a Git URL to stdout
git diff --name-only | devprojex export context . --select-from - -o - # only the changed files
devprojex export project . --as zip --hide-secrets -o ../submission.zip # masked project copy
devprojex search Configure . --symbols # declarations by name
devprojex related src/App.cs --direction both # what a file uses, and who uses it
devprojex profile save . --hide-secrets on # remember these settings for this project
devprojex cache update https://github.com/owner/repo # refresh a cached cloneWhat the CLI adds
Scriptable exports for CI pipelines: JSON reports, stdout output, deterministic files.
Git repository URLs as project sources: analyze, export, open, or start the Terminal Workspace on a repository straight from its URL through a managed clone cache (
devprojex cache,devprojex recent).A secret pre-flight for CI:
--findingslists rule, category, file, and line, never the values, and--fail-on-findingsfails the pipeline when findings exist.Composable selection: pipe a file list from
git diffor any tool into--select-from -.Project search and relations:
devprojex searchfinds text,--regexpatterns, or declarations by name with--symbols;devprojex relatedlists the files a file uses and the files that use it.Documented aliases and short flags (
export ctx,export proj,-f,-n,-q), plusdevprojex help <command>and shell completion for bash, zsh, fish, and PowerShell.A keyboard-first Terminal Workspace with a searchable Action Palette, no desktop app needed, and the same Git modes, exclusions, and profiles as the desktop app.
See Docs/CommandLine.md for the full command reference, and Docs/TerminalWorkspace.md for the interactive terminal interface.
What DevProjex never does π‘οΈ
DevProjex only reads your project. The one exception is an explicit Cursor or VS Code MCP connection, which creates or updates .cursor/mcp.json or .vscode/mcp.json. Beyond that, DevProjex:
Does not edit, rename, move, or delete files in the opened source project.
Does not commit, merge, push, or switch branches in the source repository opened from the user's filesystem; branch operations are limited to application-owned cached clones.
Does not include binary file contents in text or AI-context output; masking rules do not scan binary data.
Writes generated files and project copies only to destinations you choose, outside the source project.
How Smart Ignore works π§
Smart Ignore is a local, deterministic filter: not an AI model, and not one big blacklist for the whole folder. It knows where each project starts and ends, and applies the right rules only inside that project.
It knows project boundaries. DevProjex finds project markers like .csproj, package.json, pyproject.toml, go.mod, or Cargo.toml. Rules for that stack (node_modules, bin/obj, virtual environments, build caches) apply only inside the project that owns them. A .NET service won't hide bin in an unrelated folder next to it, and a frontend app won't hide node_modules somewhere it doesn't belong.
It checks before it hides anything. Folder names like build, dist, or vendor can mean generated files or real source code. Smart Ignore looks for real signs first: package files, compiler output, known build layouts. If there's no clear sign, the folder stays visible.
It keeps monorepos separate. Each nested project (frontend, backend, tools, docs) is filtered on its own, based on its own markers. Nothing crosses over between unrelated parts of your workspace.
Git modes are a separate setting, not part of Smart Ignore:
Mode | What it shows |
| Tracked files plus untracked files that repository-local |
Tracked-files-only | Only files currently recorded in the Git index |
Staged | Files with staged changes |
Changes | Staged, unstaged, and non-ignored untracked files |
Diff | Files changed between two Git references |
You stay in control. Smart Ignore, the Git mode, and basic filters (hidden files, dot-files, empty folders) all work together and can be turned on or off one by one. "Ignored" means excluded from the current view, copy, or export; it never deletes anything from your project.
π Full technical details, including signature matching, worktree handling, and edge cases, are in Docs/SmartIgnore.md.
How code compression works ποΈ
An AI rarely needs every implementation line; it needs the shape of your code. Compression keeps declarations, signatures, fields, and class structure, and empties named implementation bodies:
// Before: what's in your file (unchanged on disk)
private Command BuildMcpCommand()
{
var command = new Command("mcp", L("Terminal.Command.Mcp"));
// β¦ ~40 more lines of implementation
}
// After: what goes into the packed context
private Command BuildMcpCommand()
{ }Measured on DevProjex's own C# sources (619 files), the packed context shrinks by about 69%, roughly 3Γ smaller. On a mixed repository the saving is lower, because compression only touches code, never test fixtures, JSON assets, or documentation.
It covers 14 languages, parsing with Tree-sitter grammars and applying DevProjex's own per-language rules about what must survive (properties in Kotlin, val/var in Scala, free lambdas everywhere), and it is deliberately conservative: a file it can't process safely stays complete. Comment and blank-line stripping extend the same syntax engine to 20 packs in total, the 14 plus six comments-only packs such as HTML, CSS, YAML, and XML project files. The same transformed content feeds token metrics, context documents, and folder or ZIP exports, in the desktop app and via --compress-code in the CLI.
π Per-language rules and edge cases are in Docs/CodeCompression.md.
How Hide Secrets and Hide private data work π
Two independent layers. Both replace values inside the output; they never delete a file and never modify your project.
Hide Secrets finds credential values (API keys, tokens, connection strings) and masks each one where it stands, keeping the file and all surrounding code:
var botToken = "110201543:AAHdqTcvEβ¦"; // in your file
var botToken = "DEVPROJEX_REDACTED[telegram-bot-api-token#1]"; // in the exportDetection runs a pinned, reviewed Gitleaks rule set on DevProjex's own engine, and one secret never costs you the whole file. Findings are marked on the preview scrollbar, and a false positive can be excluded per match right in the preview. You enable it with one switch in the desktop app or --hide-secrets in the CLI; the MCP server keeps it on, see Security boundaries. For pipelines, --findings prints rule, category, file, and line, never the value, and --fail-on-findings fails the build.
Hide private data is the second, optional layer for personal traces: emails, global IPs, local-user paths, MAC addresses, and international phone numbers become DEVPROJEX_REDACTED[email#1], [ipv4#1], [local-user#1], and so on, with the same placeholder for the same finding on every surface, so exported code stays consistent. It is off by default: real projects are full of version strings that look like IPs and sample emails that are not personal. Turn it on per profile in the desktop app, or with --hide-private-data in the CLI and MCP.
π Detection rules and edge cases: Docs/HideSecrets.md Β· Docs/HidePrivateData.md
Documentation π
Installation Β· Smart Ignore Β· Hide Secrets Β· Hide private data Β· Code Compression Β· Command Line Β· Terminal Workspace Β· MCP Server Β· Agent Journal Β· Related files Β· Benchmark History Β· Security policy Β· Contributing Β· Code of Conduct Β· Discussions
Tech stack π§©
Built with .NET 10 and Avalonia UI, with Tree-sitter grammars, Gitleaks rules, and the official MCP C# SDK; attributions in THIRD-PARTY-NOTICES.md. 20,000+ automated tests (unit, integration, terminal, UI) run on Windows, Linux, and macOS.
Build from source
git clone https://github.com/Avazbek22/DevProjex.git
cd DevProjex
dotnet build -c Release
dotnet testContributing π€
Issues and pull requests are welcome. Good places to start: UX, performance tuning, tests, localization, documentation and screenshots. Not sure where? Check issues labeled good first issue.
See CONTRIBUTING.md for details.
Support π
License (Apache-2.0) π
DevProjex is licensed under the Apache License 2.0: free to use, modify, and distribute, with an explicit patent grant. Copyright (c) 2025βpresent Avazbek Olimov. See LICENSE for details.
Code signing: Free code signing provided by SignPath.io, certificate by SignPath Foundation. See the code signing policy.
Available Tools
8 toolsanalyzeAnalyze projectARead-onlyIdempotent
Measures a selection before packaging: protected metrics, estimates, document size, and largest files. Use it to choose pack_context filters or max_tokens; use get_tree for structure and pack_context for content. Returns measured and estimated metrics without file bodies. Key parameters: detail=full|compact|signatures, top_files, git_scope, paths, include_patterns, exclude_patterns, profile, and max_file_bytes. Last detail_by_pattern match wins. max_tokens reports pack_context's greedy admission; rank and focus require it. Project: unique listed name, absolute path returned by list_projects, or #index.
| Name | Required | Description | Default |
|---|---|---|---|
| rank | No | Orders the selection with importance-v1 and controls max_tokens admission; omission keeps ordinary order and avoids dependency or Git-history work. | |
| focus | No | Seeds focus-v1 order from 1..16 selected paths; requires rank=importance and never widens selection. | |
| paths | No | Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary. | |
| branch | No | Remote Git branch; invalid for local projects. | |
| detail | No | Content transform: full adds no transformations; transformations enabled by the active profile still apply. Compact removes comments and blank lines, and signatures keeps supported code signatures; other languages remain unchanged. | full |
| profile | No | Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project. | |
| project | No | unique listed name, absolute path returned by list_projects, or #index. | |
| git_scope | No | Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree. | |
| top_files | No | Returns this many largest text files by estimated tokens. | |
| max_tokens | No | Sets greedy content admission; document structure and its report are outside this heuristic token budget. | |
| tracked_only | No | Restricts results to Git-tracked files; accepts a boolean or its string form. | |
| max_file_bytes | No | Excludes selected files larger than this byte count; accepts an integer or numeric string. | |
| exclude_patterns | No | Removes paths with the same project-relative glob syntax as include_patterns. | |
| include_patterns | No | Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected. | |
| detail_by_pattern | No | Overrides detail by file in array order; the last match wins, never widens selection, and unmatched or invalid entries are reported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint/idempotentHint/non-destructive/closed-world, so safety is covered. The description still adds non-obvious behavior beyond the schema: it is a measurement pass that 'Returns measured and estimated metrics without file bodies,' and it discloses the rank/focus dependency on max_tokens. No auth, rate-limit, or error behavior is mentioned, keeping it short of a 5.
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?
Front-loaded with purpose, then routing, then return behavior, then parameter notes. The mid-sentence enumeration of key parameter names is somewhat redundant given full schema coverage, but overall it is dense and mostly earns its space.
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 15-parameter, zero-required tool with no output schema, the description covers purpose, routing, return shape, and key parameter interactions adequately. It does not explain the shape of the returned metric report in detail, but annotations and the schema carry the remaining load.
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 coverage is 100%, so the baseline is 3, but the description adds genuine cross-parameter semantics the schema cannot express: 'Last detail_by_pattern match wins' and 'max_tokens reports pack_context's greedy admission; rank and focus require it.' That interaction guidance raises it above baseline.
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 opening sentence gives a specific verb ('Measures') and enumerates the concrete outputs (protected metrics, estimates, document size, largest files), and it explicitly positions the tool against siblings get_tree and pack_context. An agent can tell what it does and how it differs from neighbors without opening a schema.
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 it to choose pack_context filters or max_tokens; use get_tree for structure and pack_context for content' names the alternatives and the exact condition that selects each. This is explicit when-to-use routing rather than implied context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fileGet project fileARead-onlyIdempotent
Reads selected text after mandatory secret and configured private-data replacement. Use it after get_tree or search_project; use pack_context for broad multi-file context. Use path for one page or requests for up to eight files and sixteen file/range/symbol selections; forms are exclusive. Send one batched call whenever you want more than one file, range, or known symbol: requests=[{"path":"src/a.ts","symbol":"Router.load"}]. Items report ok, partial, not-returned, or unavailable; overlapping ranges share a 1,000-line/50,000-character cap. Coordinates use returned text; start_column continues a page. Project: unique listed name, absolute path returned by list_projects, or #index.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Single-file form. Exactly one of path or requests is required. Names an existing selected file; Markdown escapes from the default get_tree format are accepted, while format=text supplies literal names. | |
| branch | No | Remote Git branch; invalid for local projects. | |
| symbol | No | Reads a qualified, or file-unique simple, declaration with path instead of a range; search_project supplies names. Cannot combine with line or column fields; missing, unavailable, or non-unique declarations return DPX-MCP-INVALID-ARGUMENTS. | |
| profile | No | Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project. | |
| project | No | unique listed name, absolute path returned by list_projects, or #index. | |
| end_line | No | Last inclusive 1-based returned-text line; accepts integer or numeric string. | |
| requests | No | Batch form. Exactly one of requests or path is required. Reads up to eight files and sixteen selections; a path reads the whole file, while ranges or symbol narrow it. Single-file ranges cannot accompany requests. | |
| start_line | No | First 1-based returned-text line; accepts integer or numeric string. | |
| start_column | No | First 1-based Unicode character on start_line; use a returned continuation value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish a safe read-only, idempotent profile, but the description adds substantial context beyond them: mandatory secret/private-data replacement, per-item statuses (ok, partial, not-returned, unavailable), a shared 1,000-line/50,000-character cap on overlapping ranges, and the exclusivity of the path vs requests forms.
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?
Dense for a nine-parameter tool but front-loaded with the core read behavior before any detail, and every sentence (redaction, routing, batching, caps, projects) carries actionable information. It is long, but the length is justified by the tool's complexity.
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?
With no output schema, the description still conveys return semantics via the per-item status vocabulary and the cap behavior, and it covers the mandatory redaction pipeline and form exclusivity. Nothing an agent needs to invoke it correctly appears to be missing.
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 coverage is 100%, so the schema documents all nine parameters and a baseline of 3 would apply. The description still adds meaning on top of the schema: the exclusivity of path and requests, the batching model (up to eight files and sixteen selections), and the project-name resolution forms (#index, absolute path, listed name).
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 with scope: 'Reads selected text after mandatory secret and configured private-data replacement.' It also names the siblings it is not (get_tree, search_project, pack_context), so an agent can distinguish it without opening a schema.
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?
Explicit routing guidance: 'Use it after get_tree or search_project; use pack_context for broad multi-file context.' It further instructs batching ('Send one batched call whenever you want more than one file, range, or known symbol'), covering when-to-use and the alternative.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_treeGet project treeARead-onlyIdempotent
Returns filtered structure without contents. Use it to find files by name; use analyze instead for size and token metrics, or pack_context for multi-file content. Returns Markdown/text/JSON/XML within 2,000 lines and 50,000 characters. paths selects literal locations; include_patterns selects names or directories in one call, e.g. include_patterns=["src/middleware/{powered-by,body-limit,bearer-auth}/**/handler.ts"]. format=markdown|text|json|xml; max_depth=0..1000 counts levels below the project root; git_scope and filters only narrow. Project: unique listed name, absolute path returned by list_projects, or #index.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary. | |
| branch | No | Remote Git branch; invalid for local projects. | |
| format | No | Selects the tree representation; markdown is the compact default. | markdown |
| project | No | unique listed name, absolute path returned by list_projects, or #index. | |
| git_scope | No | Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree. | |
| max_depth | No | Limits levels below the project root without descending below a paths entry; omit it for the deepest complete tree that fits. | |
| tracked_only | No | Restricts results to Git-tracked files; accepts a boolean or its string form. | |
| max_file_bytes | No | Excludes selected files larger than this byte count; accepts an integer or numeric string. | |
| exclude_patterns | No | Removes paths with the same project-relative glob syntax as include_patterns. | |
| include_patterns | No | Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/closed-world, so the safety profile is covered. The description adds genuinely useful behavior: results are structure without file contents, output is capped at 2,000 lines and 50,000 characters, and git_scope/filters only narrow rather than expand. It does not say what happens when the cap is hit (truncation vs error), which keeps it below 5.
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?
Front-loads the purpose and the alternative routing in the first sentence, then packs format, limits, and parameter semantics into tight clauses. It is dense and semicolon-heavy, but every clause carries information; nothing is redundant with the name or title.
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?
With no output schema, the description compensates by naming the four return formats and the size envelope. All 10 parameters are documented in the schema, and the description clarifies the two most easily confused selection mechanisms. Only the over-limit behavior is left unstated.
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 coverage is 100%, so the baseline is 3, but the description goes beyond the schema: it contrasts literal `paths` against glob-based `include_patterns` with a concrete brace/glob example, explains that max_depth counts levels below the project root, and notes branch/scope filters only narrow. That is real added meaning over the field descriptions.
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 ('Returns filtered structure without contents') and immediately scopes it against siblings by naming analyze for metrics and pack_context for multi-file content. An agent can distinguish get_tree from the other read tools without opening any schema.
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?
Gives an explicit use case ('find files by name') plus two named alternatives with the conditions that select them (size/token metrics, multi-file content). This is the routing information an agent needs to pick the right sibling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_projectsList projectsARead-onlyIdempotent
Lists local projects, profiles, and baseline filters. Use it to choose a root or inspect policy; use get_tree for structure. Returns indexes, protected names and paths, root types, profiles, and Git/exclusion policy. A local project accepts a unique listed name, #index, or absolute path returned by list_projects; remote URLs require opt-in. No parameters.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnlyHint, idempotent, non-destructive, closed-world), so the description's added value is in the disclosed output contents (indexes, protected names/paths, root types, profiles, Git/exclusion policy) and the remote-URL opt-in constraint. It does not describe ordering or pagination, but for a zero-parameter listing tool this is solid behavioral context.
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?
Front-loads purpose in the first sentence, then usage, then return contents. Dense but every sentence carries information; the middle return-value sentence is a compact list rather than prose padding.
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?
With no output schema, the description must convey return content, and it does so reasonably well (indexes, protected names, root types, profiles, policy). The project-reference convention and remote opt-in are also covered, leaving only minor gaps like result ordering.
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?
There are no parameters, so the baseline is 4. The description reinforces this ('No parameters') and adds useful semantics about how projects are referenced elsewhere (unique name, #index, absolute path), which is relevant to invoking downstream tools correctly.
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 ('Lists local projects, profiles, and baseline filters') and immediately distinguishes itself from the sibling get_tree by scope (policy/root selection vs. structure). An agent can route between the two without opening a schema.
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?
Explicitly says when to use it ('to choose a root or inspect policy') and names the alternative with its own condition ('use get_tree for structure'). This is direct routing guidance, not inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pack_contextPack project contextARead-only
Builds multi-file project context. Use it after get_tree, search_project, or analyze; use get_file for one file. Returns inline untrusted project data, or pack_id plus a preview above 50,000 characters for read_pack. Key parameters: detail, view=tree|content|tree-content, format, rank, focus, max_tokens, git_scope, and detail_by_pattern. detail=full still transforms content. expand_related adds resolved selected neighbours. focus requires rank=importance; max_tokens admits greedily by estimate. Last pattern override wins. Project: unique listed name, absolute path returned by list_projects, or #index.
| Name | Required | Description | Default |
|---|---|---|---|
| rank | No | Orders the selection with importance-v1 and controls max_tokens admission; omission keeps ordinary order and avoids dependency or Git-history work. | |
| view | No | Chooses tree, file content, or both for the pack. | tree-content |
| focus | No | Seeds focus-v1 order from 1..16 selected paths; requires rank=importance and never widens selection. | |
| paths | No | Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary. | |
| branch | No | Remote Git branch; invalid for local projects. | |
| detail | No | Content transform: full adds no transformations; transformations enabled by the active profile still apply. Compact removes comments and blank lines, and signatures keeps supported code signatures; other languages remain unchanged. | full |
| format | No | Chooses readable markdown/text or structured JSON/XML output. | markdown |
| profile | No | Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project. | |
| project | No | unique listed name, absolute path returned by list_projects, or #index. | |
| git_scope | No | Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree. | |
| max_tokens | No | Sets greedy content admission; document structure and its report are outside this heuristic token budget. | |
| tracked_only | No | Restricts results to Git-tracked files; accepts a boolean or its string form. | |
| expand_related | No | Adds resolved neighbours of seed files without widening filters or Git scope; stops at 400 files and reports the limit. | |
| max_file_bytes | No | Excludes selected files larger than this byte count; accepts an integer or numeric string. | |
| exclude_patterns | No | Removes paths with the same project-relative glob syntax as include_patterns. | |
| include_patterns | No | Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected. | |
| detail_by_pattern | No | Overrides detail by file in array order; the last match wins, never widens selection, and unmatched or invalid entries are reported. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, destructive=false, openWorld=false, so the safety profile is covered. The description adds genuinely new behavioral context: output is inline 'untrusted project data', there is a 50,000-character threshold that switches the return to pack_id plus preview, and 'detail=full still transforms content'. Some rules it repeats (focus requires rank, greedy admission, last-match-wins) are already in the schema, which keeps this from a 5.
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?
Purpose and routing are correctly front-loaded, but the closing 'Key parameters: ...' enumeration and the 'Project: unique listed name...' clause duplicate a 100%-covered schema verbatim, which is waste rather than conciseness. The semicolon-chained cross-parameter rules are also hard to parse in a single breath.
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 17-parameter tool with nested objects and no output schema, the description covers the essentials: what it produces, the inline-vs-pack_id return split, and the routing to read_pack and get_file. It stops short of describing selection/ordering behavior in depth, but with 100% schema coverage that gap is minor.
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 100%, so all 17 parameters are already documented in the schema, including cross-parameter rules like 'requires rank=importance' and 'last match wins'. The description's parameter list and the 'Project:' clause largely restate the schema, adding no syntax or semantics the schema lacks. Baseline 3 is correct when the schema does the heavy lifting.
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 opening sentence states a specific verb+resource ('Builds multi-file project context') and immediately contrasts with the sibling it is not: 'use get_file for one file.' An agent can distinguish it from get_tree, search_project, analyze and get_file without opening a schema.
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?
Explicit sequencing guidance is given ('Use it after get_tree, search_project, or analyze'), the alternative for single files is named (get_file), and the downstream handoff is spelled out (pack_id plus preview above 50,000 characters for read_pack). Both when-to-use and which-other-tool conditions are covered.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_packRead context packARead-onlyIdempotent
Reads a stored result page created by pack_context, search_project, or related_files. Use its pack_id; use pack_context instead when no valid stored result exists. Returns untrusted data up to 1,000 lines or 50,000 characters with trusted continuation or range notes. Protection changes invalidate stored content; selection-only changes retain it with a warning. Ranges and columns are inclusive and 1-based.
| Name | Required | Description | Default |
|---|---|---|---|
| pack_id | Yes | Session id returned by pack_context, search_project, or related_files. | |
| end_line | No | Last inclusive 1-based returned-text line; accepts integer or numeric string. | |
| start_line | No | First 1-based returned-text line; accepts integer or numeric string. | |
| start_column | No | First 1-based Unicode character on start_line; use a returned continuation value. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover safety (readOnly, idempotent, non-destructive), so the description adds the non-obvious traits: returned data is untrusted, capped at 1,000 lines / 50,000 characters, continuation and range notes are trusted, and invalidation semantics depend on protection vs selection changes.
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?
Four dense sentences, each carrying distinct information (identity, alternative, return limits, invalidation behavior, indexing convention) with the core purpose front-loaded. No filler.
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?
With no output schema, the description carries the return-value burden and does so: size caps, trusted vs untrusted content, and the continuation mechanism are all disclosed. Combined with full schema coverage, an agent has everything needed to call and interpret this tool.
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 coverage is 100%, so the baseline is 3, but the description adds semantics the schema does not state as a whole: ranges and columns are inclusive and 1-based, and it points to the returned continuation value as the intended input for start_column. It does not explain the integer-or-numeric-string duality, which the schema covers.
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 ('Reads a stored result page created by pack_context, search_project, or related_files') and names the sibling it is not, pack_context, plus the condition that selects the alternative. An agent can distinguish it from list_projects/get_tree/get_file without opening any schema.
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?
Explicit routing rule: use the pack_id from a prior call, and 'use pack_context instead when no valid stored result exists.' It also warns when stored content is invalidated (protection changes) versus retained (selection-only changes), which tells the agent when a read will fail.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_projectSearch projectARead-onlyIdempotent
Searches transformed text with a timed .NET regex. It matches file content, never paths; find names with get_tree include_patterns. Use it for symbols or phrases; symbols=true finds declarations, not uses; use related_files for dependency links. Returns grouped numbered matches, merged context, complete|partial status, inspected/retained/written counts, and continuation. Line numbers use returned text; generated redaction replacements never match. Key parameters: pattern, paths, context_lines, ignore_case, max_results=1..200, git_scope, include_patterns, exclude_patterns, and max_file_bytes. The best unique declaration includes up to 1,800 protected body characters within the same cap. Project: unique listed name, absolute path returned by list_projects, or #index.
| Name | Required | Description | Default |
|---|---|---|---|
| paths | No | Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary. | |
| branch | No | Remote Git branch; invalid for local projects. | |
| pattern | Yes | Required .NET regex with a 2-second timeout over redacted file content, never paths; use get_tree include_patterns for names. Text inserted by redaction never matches. | |
| project | No | unique listed name, absolute path returned by list_projects, or #index. | |
| symbols | No | Match declarations of the name in pattern (Foo, class Foo, Foo|Bar), not uses. | |
| git_scope | No | Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree. | |
| ignore_case | No | Enables case-insensitive matching; accepts a boolean or its string form. | |
| max_results | No | Limits displayed match lines while scanning continues; the boundary reports encountered, retained, and written counts. | |
| tracked_only | No | Restricts results to Git-tracked files; accepts a boolean or its string form. | |
| context_lines | No | Context lines per match; overlapping windows merge. | |
| max_file_bytes | No | Excludes selected files larger than this byte count; accepts an integer or numeric string. | |
| exclude_patterns | No | Removes paths with the same project-relative glob syntax as include_patterns. | |
| include_patterns | No | Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), and the description adds real behavior on top: a 2-second regex timeout, operation over redacted content where redaction-inserted text never matches, line numbers keyed to returned text, and a cap of 1,800 protected body characters on the best unique declaration. None of that is inferable from the annotations or schema.
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?
Purpose and routing come first, then return shape, then parameters β a sensible front-loaded order for a 13-parameter tool with no output schema. The trailing 'Project: unique listed name, absolute path returned by list_projects, or #index.' is a verbatim copy of the schema text and the parameter enumeration is somewhat redundant, but overall it is dense rather than padded.
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?
With no output schema, the description carries the return contract itself: grouped numbered matches, merged context, complete|partial status, inspected/retained/written counts, and continuation. Combined with annotations covering safety and a fully documented schema, an agent has everything needed to invoke it correctly.
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 100% and the schema documents each parameter in more detail than the description does (e.g. include_patterns glob rules, git_scope semantics). The description's parameter list ('pattern, paths, context_lines, ignore_case, max_results=1..200...') largely restates what the schema already states, so it lands at the baseline rather than adding meaning.
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 ('Searches transformed text with a timed .NET regex') and immediately bounds the scope: it matches file content, never paths. It also names the sibling to use for the adjacent need ('find names with get_tree include_patterns'), so an agent can distinguish it from get_tree, related_files, and get_file without opening any schema.
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?
Gives explicit routing: use get_tree include_patterns for names, use this for symbols or phrases, use symbols=true for declarations rather than uses, and use related_files for dependency links. That is when-to-use, when-not-to-use, and named alternatives in a few lines.
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.
8 tool updates
v5.2.0- Changed
analyze28 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Optional Git branch for a remote project URL; invalid for local project paths."New value: +"Remote Git branch; invalid for local projects." - changed
Input schema / properties / detail / descriptionPrevious value: -"Collapse code to signatures or strip comments/blank lines to fit large projects into a budget; unsupported languages are returned unchanged."New value: +"Content transform: full adds no transformations; transformations enabled by the active profile still apply. Compact removes comments and blank lines, and signatures keeps supported code signatures; other languages remain unchanged." - added
Input schema / properties / detail_by_patternAdded value: +{ + "description": "Overrides detail by file in array order; the last match wins, never widens selection, and unmatched or invalid entries are reported.", + "items": { + "additionalProperties": false, + "properties": { + "detail": { + "enum": [ + "full", + "compact", + "signatures" + ], + "type": "string" + }, + "patterns": { + "description": "Uses the include_patterns glob syntax.", + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 32, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "patterns", + "detail" + ], + "type": "object" + }, + "maxItems": 16, + "type": "array" +} - changed
Input schema / properties / exclude_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/' to exclude additional paths."New value: +"Removes paths with the same project-relative glob syntax as include_patterns." - removed
Input schema / properties / exclude_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / exclude_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / exclude_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / exclude_patterns / typeRemoved value: -"array" - added
Input schema / properties / focusAdded value: +{ + "description": "Seeds focus-v1 order from 1..16 selected paths; requires rank=importance and never widens selection.", + "oneOf": [ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 16, + "minItems": 1, + "type": "array" + } + ] +} - changed
Input schema / properties / git_scope / descriptionPrevious value: -"Further restrict results to staged files, all current changes, or files changed between two Git refs."New value: +"Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree." - changed
Input schema / properties / include_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/'. They only narrow built-in and gitignore filtering."New value: +"Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected." - removed
Input schema / properties / include_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / include_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / include_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / include_patterns / typeRemoved value: -"array" - changed
Input schema / properties / max_file_bytes / descriptionPrevious value: -"Exclude otherwise selected files strictly larger than this byte count; integer or numeric string."New value: +"Excludes selected files larger than this byte count; accepts an integer or numeric string." - added
Input schema / properties / max_tokensAdded value: +{ + "description": "Sets greedy content admission; document structure and its report are outside this heuristic token budget.", + "oneOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "pattern": "^0*[1-9][0-9]*$", + "type": "string" + } + ] +} - changed
Input schema / properties / paths / descriptionPrevious value: -"Existing project-relative files or directories that narrow the selection."New value: +"Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary." - removed
Input schema / properties / paths / itemsRemoved value: -{ - "maxLength": 4096, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / paths / maxItemsRemoved value: -256 - added
Input schema / properties / paths / oneOfAdded value: +[ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / paths / typeRemoved value: -"array" - changed
Input schema / properties / profile / descriptionPrevious value: -"Selection profile: 'standard', 'local', or a portable profile JSON path inside the project root."New value: +"Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project." - changed
Input schema / properties / project / descriptionPrevious value: -"Absolute root path returned by list_projects, or a Git URL when the server allows remote sources. Optional only when one local root is configured."New value: +"unique listed name, absolute path returned by list_projects, or #index." - added
Input schema / properties / rankAdded value: +{ + "description": "Orders the selection with importance-v1 and controls max_tokens admission; omission keeps ordinary order and avoids dependency or Git-history work.", + "enum": [ + "importance" + ], + "type": "string" +} - changed
Input schema / properties / top_files / descriptionPrevious value: -"Number of largest text files to return by estimated tokens; default 10; integer or numeric string."New value: +"Returns this many largest text files by estimated tokens." - changed
Input schema / properties / tracked_only / descriptionPrevious value: -"Restrict results to files tracked by Git; accepts a boolean or the string 'true' or 'false'."New value: +"Restricts results to Git-tracked files; accepts a boolean or its string form." - changed
Output schema / (root)Previous value: -{ - "additionalProperties": false, - "properties": { - "characters": { - "type": "integer" - }, - "detail": { - "enum": [ - "full", - "compact", - "signatures" - ], - "type": "string" - }, - "files": { - "type": "integer" - }, - "tokens": { - "type": "integer" - }, - "topFiles": { - "items": { - "additionalProperties": false, - "properties": { - "path": { - "type": "string" - }, - "tokens": { - "type": "integer" - } - }, - "required": [ - "path", - "tokens" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "files", - "characters", - "tokens", - "detail", - "topFiles" - ], - "type": "object" -}New value: +null
- Changed
get_file10 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Optional Git branch for a remote project URL; invalid for local project paths."New value: +"Remote Git branch; invalid for local projects." - changed
Input schema / properties / end_line / descriptionPrevious value: -"Last 1-based line, inclusive; integer or numeric string."New value: +"Last inclusive 1-based returned-text line; accepts integer or numeric string." - changed
Input schema / properties / path / descriptionPrevious value: -"Existing file path inside the effective project selection."New value: +"Single-file form. Exactly one of path or requests is required. Names an existing selected file; Markdown escapes from the default get_tree format are accepted, while format=text supplies literal names." - added
Input schema / properties / profileAdded value: +{ + "description": "Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project.", + "minLength": 1, + "type": "string" +} - changed
Input schema / properties / project / descriptionPrevious value: -"Absolute root path returned by list_projects, or a Git URL when the server allows remote sources. Optional only when one local root is configured."New value: +"unique listed name, absolute path returned by list_projects, or #index." - added
Input schema / properties / requestsAdded value: +{ + "description": "Batch form. Exactly one of requests or path is required. Reads up to eight files and sixteen selections; a path reads the whole file, while ranges or symbol narrow it. Single-file ranges cannot accompany requests.", + "items": { + "additionalProperties": false, + "properties": { + "path": { + "description": "Existing selected project file.", + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "ranges": { + "description": "Inclusive transformed-text line ranges for this file.", + "items": { + "additionalProperties": false, + "properties": { + "end_line": { + "description": "Last inclusive 1-based transformed-text line.", + "oneOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "pattern": "^0*[1-9][0-9]*$", + "type": "string" + } + ] + }, + "start_line": { + "description": "First 1-based transformed-text line.", + "oneOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "pattern": "^0*[1-9][0-9]*$", + "type": "string" + } + ] + } + }, + "required": [ + "start_line", + "end_line" + ], + "type": "object" + }, + "maxItems": 16, + "minItems": 1, + "type": "array" + }, + "symbol": { + "description": "Reads this named declaration instead of ranges; the two forms cannot combine.", + "maxLength": 512, + "minLength": 1, + "type": "string" + } + }, + "required": [ + "path" + ], + "type": "object" + }, + "maxItems": 8, + "minItems": 1, + "type": "array" +} - added
Input schema / properties / start_columnAdded value: +{ + "description": "First 1-based Unicode character on start_line; use a returned continuation value.", + "oneOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "pattern": "^0*[1-9][0-9]*$", + "type": "string" + } + ] +} - changed
Input schema / properties / start_line / descriptionPrevious value: -"First 1-based line; integer or numeric string."New value: +"First 1-based returned-text line; accepts integer or numeric string." - added
Input schema / properties / symbolAdded value: +{ + "description": "Reads a qualified, or file-unique simple, declaration with path instead of a range; search_project supplies names. Cannot combine with line or column fields; missing, unavailable, or non-unique declarations return DPX-MCP-INVALID-ARGUMENTS.", + "maxLength": 512, + "minLength": 1, + "type": "string" +} - removed
Input schema / requiredRemoved value: -[ - "path" -]
- Changed
get_tree18 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Optional Git branch for a remote project URL; invalid for local project paths."New value: +"Remote Git branch; invalid for local projects." - changed
Input schema / properties / exclude_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/' to exclude additional paths."New value: +"Removes paths with the same project-relative glob syntax as include_patterns." - removed
Input schema / properties / exclude_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / exclude_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / exclude_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / exclude_patterns / typeRemoved value: -"array" - changed
Input schema / properties / format / descriptionPrevious value: -"Tree representation. Markdown is the compact default; text uses drawing characters, while JSON and XML are structured."New value: +"Selects the tree representation; markdown is the compact default." - changed
Input schema / properties / git_scope / descriptionPrevious value: -"Further restrict results to staged files, all current changes, or files changed between two Git refs."New value: +"Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree." - changed
Input schema / properties / include_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/'. They only narrow built-in and gitignore filtering."New value: +"Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected." - removed
Input schema / properties / include_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / include_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / include_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / include_patterns / typeRemoved value: -"array" - changed
Input schema / properties / max_depth / descriptionPrevious value: -"Maximum tree depth from 0 to 1000; accepts an integer or numeric string."New value: +"Limits levels below the project root without descending below a paths entry; omit it for the deepest complete tree that fits." - changed
Input schema / properties / max_file_bytes / descriptionPrevious value: -"Exclude otherwise selected files strictly larger than this byte count; integer or numeric string."New value: +"Excludes selected files larger than this byte count; accepts an integer or numeric string." - added
Input schema / properties / pathsAdded value: +{ + "description": "Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary.", + "oneOf": [ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } + ] +} - changed
Input schema / properties / project / descriptionPrevious value: -"Absolute root path returned by list_projects, or a Git URL when the server allows remote sources. Optional only when one local root is configured."New value: +"unique listed name, absolute path returned by list_projects, or #index." - changed
Input schema / properties / tracked_only / descriptionPrevious value: -"Restrict results to files tracked by Git; accepts a boolean or the string 'true' or 'false'."New value: +"Restricts results to Git-tracked files; accepts a boolean or its string form."
- Changed
list_projects1 field changed- changed
Output schema / (root)Previous value: -{ - "additionalProperties": false, - "properties": { - "profiles": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "project": { - "type": "string" - } - }, - "required": [ - "project", - "name" - ], - "type": "object" - }, - "type": "array" - }, - "projects": { - "items": { - "additionalProperties": false, - "properties": { - "name": { - "type": "string" - }, - "path": { - "type": "string" - }, - "type": { - "enum": [ - "git-repository", - "local-folder" - ], - "type": "string" - } - }, - "required": [ - "path", - "name", - "type" - ], - "type": "object" - }, - "type": "array" - } - }, - "required": [ - "projects", - "profiles" - ], - "type": "object" -}New value: +null
- Changed
pack_context29 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Optional Git branch for a remote project URL; invalid for local project paths."New value: +"Remote Git branch; invalid for local projects." - changed
Input schema / properties / detail / descriptionPrevious value: -"Collapse code to signatures or strip comments/blank lines to fit large projects into a budget; unsupported languages are returned unchanged."New value: +"Content transform: full adds no transformations; transformations enabled by the active profile still apply. Compact removes comments and blank lines, and signatures keeps supported code signatures; other languages remain unchanged." - added
Input schema / properties / detail_by_patternAdded value: +{ + "description": "Overrides detail by file in array order; the last match wins, never widens selection, and unmatched or invalid entries are reported.", + "items": { + "additionalProperties": false, + "properties": { + "detail": { + "enum": [ + "full", + "compact", + "signatures" + ], + "type": "string" + }, + "patterns": { + "description": "Uses the include_patterns glob syntax.", + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 32, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "patterns", + "detail" + ], + "type": "object" + }, + "maxItems": 16, + "type": "array" +} - changed
Input schema / properties / exclude_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/' to exclude additional paths."New value: +"Removes paths with the same project-relative glob syntax as include_patterns." - removed
Input schema / properties / exclude_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / exclude_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / exclude_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / exclude_patterns / typeRemoved value: -"array" - added
Input schema / properties / expand_relatedAdded value: +{ + "additionalProperties": false, + "description": "Adds resolved neighbours of seed files without widening filters or Git scope; stops at 400 files and reports the limit.", + "properties": { + "direction": { + "default": "both", + "description": "Traversal direction, matching related_files.", + "enum": [ + "dependencies", + "dependents", + "both" + ], + "type": "string" + }, + "hops": { + "default": 1, + "description": "Number of edges to follow from each seed.", + "maximum": 2, + "minimum": 1, + "type": "integer" + }, + "seeds": { + "description": "Selected project-relative seed files; directories and globs are invalid.", + "items": { + "type": "string" + }, + "maxItems": 16, + "minItems": 1, + "type": "array" + } + }, + "required": [ + "seeds" + ], + "type": "object" +} - added
Input schema / properties / focusAdded value: +{ + "description": "Seeds focus-v1 order from 1..16 selected paths; requires rank=importance and never widens selection.", + "oneOf": [ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 16, + "minItems": 1, + "type": "array" + } + ] +} - added
Input schema / properties / format / descriptionAdded value: +"Chooses readable markdown/text or structured JSON/XML output." - changed
Input schema / properties / git_scope / descriptionPrevious value: -"Further restrict results to staged files, all current changes, or files changed between two Git refs."New value: +"Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree." - changed
Input schema / properties / include_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/'. They only narrow built-in and gitignore filtering."New value: +"Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected." - removed
Input schema / properties / include_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / include_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / include_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / include_patterns / typeRemoved value: -"array" - changed
Input schema / properties / max_file_bytes / descriptionPrevious value: -"Exclude otherwise selected files strictly larger than this byte count; integer or numeric string."New value: +"Excludes selected files larger than this byte count; accepts an integer or numeric string." - changed
Input schema / properties / max_tokens / descriptionPrevious value: -"Maximum estimated content tokens to include; accepts an integer or numeric string. Document structure is outside this budget."New value: +"Sets greedy content admission; document structure and its report are outside this heuristic token budget." - changed
Input schema / properties / paths / descriptionPrevious value: -"Existing project-relative files or directories that narrow the selection."New value: +"Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary." - removed
Input schema / properties / paths / itemsRemoved value: -{ - "maxLength": 4096, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / paths / maxItemsRemoved value: -256 - added
Input schema / properties / paths / oneOfAdded value: +[ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / paths / typeRemoved value: -"array" - changed
Input schema / properties / profile / descriptionPrevious value: -"Selection profile: 'standard', 'local', or a portable profile JSON path inside the project root."New value: +"Selection profile: standard uses all eight exclusion toggles plus gitignore; local uses the desktop profile listed by list_projects.profiles; otherwise give a portable profile path inside the project." - changed
Input schema / properties / project / descriptionPrevious value: -"Absolute root path returned by list_projects, or a Git URL when the server allows remote sources. Optional only when one local root is configured."New value: +"unique listed name, absolute path returned by list_projects, or #index." - added
Input schema / properties / rankAdded value: +{ + "description": "Orders the selection with importance-v1 and controls max_tokens admission; omission keeps ordinary order and avoids dependency or Git-history work.", + "enum": [ + "importance" + ], + "type": "string" +} - changed
Input schema / properties / tracked_only / descriptionPrevious value: -"Restrict results to files tracked by Git; accepts a boolean or the string 'true' or 'false'."New value: +"Restricts results to Git-tracked files; accepts a boolean or its string form." - added
Input schema / properties / view / descriptionAdded value: +"Chooses tree, file content, or both for the pack."
- Changed
read_pack4 fields changed- changed
Input schema / properties / end_line / descriptionPrevious value: -"Last 1-based line, inclusive; integer or numeric string."New value: +"Last inclusive 1-based returned-text line; accepts integer or numeric string." - changed
Input schema / properties / pack_id / descriptionPrevious value: -"Session-scoped id returned by pack_context."New value: +"Session id returned by pack_context, search_project, or related_files." - added
Input schema / properties / start_columnAdded value: +{ + "description": "First 1-based Unicode character on start_line; use a returned continuation value.", + "oneOf": [ + { + "minimum": 1, + "type": "integer" + }, + { + "pattern": "^0*[1-9][0-9]*$", + "type": "string" + } + ] +} - changed
Input schema / properties / start_line / descriptionPrevious value: -"First 1-based line; integer or numeric string."New value: +"First 1-based returned-text line; accepts integer or numeric string."
- Added
related_files - Changed
search_project21 fields changed- changed
Input schema / properties / branch / descriptionPrevious value: -"Optional Git branch for a remote project URL; invalid for local project paths."New value: +"Remote Git branch; invalid for local projects." - changed
Input schema / properties / context_lines / descriptionPrevious value: -"Context lines from 0 to 20; default 2; integer or numeric string."New value: +"Context lines per match; overlapping windows merge." - changed
Input schema / properties / exclude_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/' to exclude additional paths."New value: +"Removes paths with the same project-relative glob syntax as include_patterns." - removed
Input schema / properties / exclude_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / exclude_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / exclude_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / exclude_patterns / typeRemoved value: -"array" - changed
Input schema / properties / git_scope / descriptionPrevious value: -"Further restrict results to staged files, all current changes, or files changed between two Git refs."New value: +"Narrows to staged, changed (including untracked files), or diff:<ref>..<ref> paths; content stays from the current working tree." - changed
Input schema / properties / ignore_case / descriptionPrevious value: -"Case-insensitive matching; accepts a boolean or the string 'true' or 'false'."New value: +"Enables case-insensitive matching; accepts a boolean or its string form." - changed
Input schema / properties / include_patterns / descriptionPrevious value: -"Project-relative glob patterns using '/'. They only narrow built-in and gitignore filtering."New value: +"Narrows with project-relative '/' globs: '*' and '?' stay in one segment, '**/' spans depths, and '{a,b}' alternates; matching is case-sensitive, while '!' and '[...]' are rejected." - removed
Input schema / properties / include_patterns / itemsRemoved value: -{ - "maxLength": 512, - "minLength": 1, - "type": "string" -} - removed
Input schema / properties / include_patterns / maxItemsRemoved value: -256 - added
Input schema / properties / include_patterns / oneOfAdded value: +[ + { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 512, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } +] - removed
Input schema / properties / include_patterns / typeRemoved value: -"array" - changed
Input schema / properties / max_file_bytes / descriptionPrevious value: -"Exclude otherwise selected files strictly larger than this byte count; integer or numeric string."New value: +"Excludes selected files larger than this byte count; accepts an integer or numeric string." - changed
Input schema / properties / max_results / descriptionPrevious value: -"Maximum matches from 1 to 200; default 50; integer or numeric string."New value: +"Limits displayed match lines while scanning continues; the boundary reports encountered, retained, and written counts." - added
Input schema / properties / pathsAdded value: +{ + "description": "Narrows selection to literal paths for existing project-relative files or directories; glob characters are ordinary.", + "oneOf": [ + { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + { + "items": { + "maxLength": 4096, + "minLength": 1, + "type": "string" + }, + "maxItems": 256, + "type": "array" + } + ] +} - changed
Input schema / properties / pattern / descriptionPrevious value: -"A .NET regular expression evaluated against redacted text with a 2-second timeout."New value: +"Required .NET regex with a 2-second timeout over redacted file content, never paths; use get_tree include_patterns for names. Text inserted by redaction never matches." - changed
Input schema / properties / project / descriptionPrevious value: -"Absolute root path returned by list_projects, or a Git URL when the server allows remote sources. Optional only when one local root is configured."New value: +"unique listed name, absolute path returned by list_projects, or #index." - added
Input schema / properties / symbolsAdded value: +{ + "default": false, + "description": "Match declarations of the name in pattern (Foo, class Foo, Foo|Bar), not uses.", + "oneOf": [ + { + "type": "boolean" + }, + { + "enum": [ + "true", + "false" + ], + "type": "string" + } + ] +} - changed
Input schema / properties / tracked_only / descriptionPrevious value: -"Restrict results to files tracked by Git; accepts a boolean or the string 'true' or 'false'."New value: +"Restricts results to Git-tracked files; accepts a boolean or its string form."
7 tool updates
v5.1.0- First observed
analyze - First observed
get_file - First observed
get_tree - First observed
list_projects - First observed
pack_context - First observed
read_pack - First observed
search_project
TDQS
Scored across 8 tools
Each tool targets a distinct action (list roots, tree structure, metrics, packaging, stored pack reads, text/symbol search, dependency analysis, file reads) and descriptions explicitly cross-reference when to use alternatives. No overlapping purpose causes misselection.
Nearly all tools use snake_case verb_noun (list_projects, get_tree, pack_context, read_pack, search_project, get_file). Minor deviations: 'analyze' is a bare verb and 'related_files' is noun_plural, but convention remains predictable.
Eight tools form a tight, well-scoped workflow for project context assembly, with each tool earning its place. No redundant or filler tools; count is ideal for the domain.
Surface covers listing projects, structure, metrics, packaging, stored result reads, text/symbol search, dependency analysis, and file reading. Complete for a read-only project-context server; no obvious lifecycle gaps.
Maintenance
Related MCP Connectors
An MCP server that gives your AI access to the source code and docs of all public github repos
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Remote MCP server exposing your Node Command fleet (files, shell, processes, browser) to AI hosts.
1Turn a GitHub repo or docs site into agent-ready context: pack it or search it, over MCP.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceRepomix MCP Server enables AI models to efficiently analyze codebases by packaging local or remote repositories into optimized single files, with intelligent compression via Tree-sitter to significantly reduce token usage while preserving code structure and essential signatures.96,740 npm28,808MIT
- AlicenseNot gradedqualityAmaintenanceA code ingestion tool that transforms your code into AI-optimized prompts instantly. Gather the relevant context with code2prompt under the hood. Learn more at code2prompt.dev7,722MIT
- AlicenseNot gradedqualityDmaintenanceSecure multi-source MCP server for reading local, GitHub, GitLab, Bitbucket, and network source code with read-only-by-default access, enabling AI assistants to inspect repositories safely.1MIT
- AlicenseNot gradedqualityCmaintenanceA read-only MCP server for AI coding agents to inspect repositories, audit code quality, route engineering skills, and plan safe issue/PR workflows.1MIT