Skip to main content
Glama

my-pi

What is my-pi?

my-pi is a deterministic local coding capability runtime exposed through the official Model Context Protocol (MCP). It gives MCP-capable coding agents controlled access to a real workspace through explicit workspace authority, bounded reads, guarded writes, structural search, language-server intelligence, and Git operations.

It is aimed at developers who want agentic coding tools to understand and modify code without handing the agent a general-purpose shell or silently granting the current working directory.

Why use it?

  • Local-first: source code and detailed workspace state remain on the host.

  • Read-only by default: writes and language-server process startup require explicit trusted elevation.

  • Safer mutation: writes can require SHA-256 content preconditions instead of blind overwrite semantics.

  • Code-aware search: Tree-Sitter structural search across TypeScript, JavaScript, Python, Rust, and Go.

  • Semantic navigation: LSP symbols, definitions, references, hover, and diagnostics for supported host language servers.

  • Git-aware context: bounded status and diff operations with secret filtering and large-diff spillover.

  • No secondary paid LLM dependency: the core runtime executes locally and does not select models or spawn agents.

Release channel: Alpha. The npm badge above is authoritative for the currently published package version. This repository may contain a newer release candidate before publication completes. Suitable for evaluation and controlled local development; review the security model before enabling the trusted profile.

Related MCP server: Workspace MCP

Install in under a minute

Requires Node.js >=22.6.0.

npm install -g @koonwang03/my-pi
my-pi-mcp --workspace /path/to/your/project

The server starts read-only. For a workspace you explicitly trust:

my-pi-mcp --workspace /path/to/your/project --security-profile trusted

Or inspect a host configuration without a global install:

npx --yes --package @koonwang03/my-pi my-pi-mcp host-config cursor-local

Generate host-specific configuration snippets:

my-pi-mcp host-config claude-code-local
my-pi-mcp host-config cursor-local
my-pi-mcp host-config opencode-current-local

Starting without --workspace or MY_PI_WORKSPACE_ROOT fails closed. Use --allow-cwd only when granting the current directory is intentional.

13-tool MCP surface

Area

Tools

Purpose

Filesystem

fs_read, fs_write, fs_patch, fs_stat

Bounded reads, guarded writes/patches, metadata

Search & workspace

search, workspace_info

Repository exploration and authoritative workspace state

AST & LSP

ast_search, lsp_status, lsp_symbols, lsp_navigate, lsp_diagnostics

Structural and semantic code intelligence

Git

vcs_status, vcs_diff

Repository status and bounded/filtered diffs

Key guarantees

Capability

Behavior

Content-preconditioned mutation

File updates verify raw SHA-256 fingerprints and reject stale guarded overwrites

Pre-read sensitive-path policy

Sensitive paths such as .env*, .aws/, .ssh/, and *.key are denied before content is allocated to model context

Explicit security profiles

Default is read-only; mutation and LSP process startup require explicit elevation

Encoding/mode fidelity

File replacement preserves relevant encoding, line endings, BOM, and POSIX executable mode behavior

Cancellation

Long-running Git/search/LSP subprocess work supports cancellation and cleanup

Architecture

MCP-capable coding host
        │
        │ stdio
        ▼
┌─────────────────────┐
│   my-pi MCP edge    │
└──────────┬──────────┘
           ▼
┌─────────────────────┐
│ capability contracts│
└──────────┬──────────┘
           ▼
┌─────────────────────────────────────────────────────────┐
│ workspace │ policy │ filesystem │ search │ AST │ LSP │ Git │
└─────────────────────────────────────────────────────────┘
           │
           └── local host workspace

The stable public claim is the 13-tool MCP capability surface. The repository also contains an opt-in Production Next coordination/evaluation candidate; those coordination, code-state, change-receipt, evaluation, and feedback features remain experimental and subject to their promotion gates.

Build from source

git clone https://github.com/BoxBoxmari/my-pi.git
cd my-pi
pnpm install --frozen-lockfile
pnpm build

Prerequisites for repository development:

  • Node.js v22.6.0+ or v24 LTS

  • pnpm v11.2.2+

  • Rust stable is optional and currently relevant only to the deferred native-backend scaffold

Verification

# Local code, architecture, boundary, build, tests, gates and smoke verification
pnpm verify

# Unit/integration suite
pnpm test

# SBOM validation
pnpm verify:sbom

# Release admission checks
pnpm bind:evidence
pnpm verify:release

The configured CI matrix covers Ubuntu, Windows, and macOS lanes. See the live workflow badges above for current status rather than relying on static claims in this document.

Benchmarks

The repository contains deterministic synthetic benchmarks for MCP stdio overhead, search/traversal throughput, memory sampling, runtime boundaries, coordination behavior, impact routing, evaluation feedback, and local reliability. Benchmark outputs are candidate evidence; performance claims should be interpreted alongside their qualification criteria and runner variance.

Production Next (experimental)

Start the local coordination candidate for a logical project:

my-pi-daemon --workspace /path/to/your/project
my-pi-mcp --workspace /path/to/your/project --coordination

Add --evaluation only when the evaluation plane is required. The candidate keeps source and detailed code state local, does not select models or spawn agents, and does not require a hosted control plane.

Relevant qualification commands include:

pnpm bench:impact-arms
pnpm bench:evaluation-feedback-arms
pnpm dogfood:self-host
pnpm bench:local-reliability
pnpm verify:production-next

Package topology

packages/
├── contracts/             # Core interfaces, error codes, fingerprinting
├── workspace-runtime/     # Workspace/path normalization and mutation coordination
├── policy/                # Sensitive-path protection
├── artifact-store/        # Disk-backed spillover artifacts
├── observability/         # Tracing and metrics contracts
├── fs/                    # Hardened filesystem capabilities
├── search/                # Grep/glob traversal
├── hashline/              # Hashline-anchored patch engine
├── ast/                   # Tree-Sitter structural search
├── lsp/                   # Multi-language LSP lifecycle/client
├── vcs/                   # Git-backed status and diff
├── mcp-adapter/           # MCP stdio server adapter
├── host-profiles/         # Host configuration renderers
├── change-runtime/        # Content preconditions and change receipts
├── code-state/            # Filesystem/AST/LSP/VCS code state
├── coordination-client/   # Local daemon client
├── coordination-runtime/  # Work graph, claims, intents, sync
├── coordination-store/    # SQLite event/projection store
├── evaluation-runtime/    # Evaluation and feedback flow
└── impact-engine/         # Bounded impact/routing decisions

Search-ignore behavior is documented in docs/SEARCH_IGNORE.md. It is a traversal optimization, not a substitute for sensitive-path policy.

Security

Before using trusted mode, read docs/SECURITY_MODEL.md. Security findings are welcome through the repository's documented reporting process.

Contributing

Issues, reproducible bug reports, benchmark counterexamples, integration feedback, and focused pull requests are welcome. If you are evaluating my-pi in a real coding host, include the host, OS, Node version, security profile, and a minimal reproduction where possible.

License

MIT — see LICENSE.

Available Tools

13 tools
fs_patchC

Apply a hashline-style single-file patch (stale-safe). Mutates exactly one file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
patchYes
expected_hashNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. "Stale-safe" and "mutates exactly one file" are useful hints, but it omits what happens on a hash mismatch, whether the patch is atomic/partial, and any permission requirements — key facts for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with no padding, and the mutation scope is front-loaded alongside the core purpose. The second sentence is slightly redundant with "single-file" already in the first, but it is not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A single-file mutation tool with no annotations, no output schema, 0% parameter coverage, and a nested patch structure. The description does not cover failure behavior, the role of expected_hash, or the hunk format, so it is well short of complete for this complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% across three parameters, including a nested patch.hunks object, and the description explains none of them. "Hashline-style" is unexplained jargon that gestures at the old/new match format but conveys no actionable semantics, and expected_hash is never mentioned.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ("Apply") and resource ("hashline-style single-file patch") and scopes it to one file, which separates it from the whole-file fs_write sibling. However, it never names fs_write or any sibling explicitly, so differentiation is inferential rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance at all. It does not say when to prefer this over fs_write, whether expected_hash is required for the stale-safe guarantee, or what the caller should do on failure — the agent must infer all routing decisions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fs_readC

Read a single file within the workspace and obtain a content fingerprint/snapshot. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
offsetNo
max_bytesNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations are absent, so the description carries the full burden. 'Read-only' is a useful safety signal, but nothing is said about size limits (max_bytes caps at 1 MiB), offset/paging behavior, or how a missing/unreadable path is handled.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, front-loaded with the action and scope, with no wasted filler. It is concise but so sparse that brevity shades into under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no annotations, no output schema, and three undocumented parameters, the definition leaves too much open. It should at least state that it returns file content plus a fingerprint, and clarify how offset/max_bytes bound the read.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description mentions no parameters at all. 'single file' faintly implies path, but offset and max_bytes – both non-obvious paging/truncation controls – are completely unexplained, so the description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Read') and resource ('a single file within the workspace'), and the scope ('single file') implicitly distinguishes it from bulk/search-oriented siblings. It never names fs_stat or search as the alternative for metadata or content search, so sibling differentiation is only partial.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use guidance, no prerequisites, and no alternatives named. The agent must infer from the sibling list whether fs_stat (metadata) or search (content lookup) is the better fit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fs_statC

Stat a single path within the workspace. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden. It does disclose 'Read-only', which establishes the safety profile, but says nothing about what happens on a missing path, symlink handling, permissions, or what metadata is returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two very short, front-loaded sentences with no filler. It is efficient, though the brevity edges into under-specification rather than pure conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema, minimal coverage is defensible, but the description omits what 'stat' actually returns (size, type, timestamps) and error behavior on missing paths, leaving gaps an agent would need to probe.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter 'path' has no description in either the schema or the description beyond 'a single path'. No format, relative-vs-absolute, or workspace-relative semantics are given.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (stat) and resource (a single path) scoped to the workspace, which is more precise than a generic 'get info'. It does not explicitly distinguish itself from sibling fs_read, but the 'stat/single path' phrasing implies metadata rather than content.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this versus fs_read, workspace_info, or search, and no prerequisites or conditions given. The agent must infer that stat is for metadata inspection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

fs_writeB

Write a single file within the workspace (stale-safe). Mutates exactly one file.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
contentYes
expected_hashNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations, so the description carries the burden. It discloses mutation ('Mutates exactly one file') and a 'stale-safe' property, which usefully signals concurrency protection. However, it omits auth requirements, overwrite semantics, atomicity, or failure modes, and 'stale-safe' is jargon without explanation of what happens on a stale write.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short, front-loaded clauses with no filler. The essential action is stated first, and the modifier is second. Nothing wasted.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a mutating, three-parameter tool with no annotations, no output schema, and 0% schema coverage, the description is far too thin. It should explain the write semantics, what 'stale-safe' means (role of expected_hash), and overwrite behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate. It mentions 'single file' but says nothing about path, content (including the 8MB maxLength), or expected_hash and what stale-safety has to do with it. The three parameters are functionally undocumented in both schema and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (Write) and resource (a single file within the workspace), and adds a scope qualifier (single file). It distinguishes from fs_patch (which presumably edits), but doesn't explicitly name that sibling or others, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use, when-not-to-use, or alternative routing is provided. An agent can't tell from this whether to pick fs_write, fs_patch, or another sibling for a given edit scenario.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lsp_diagnosticsC

Language server diagnostics for a file. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral burden. It discloses that the operation is read-only, which is useful, but says nothing about the required LSP server state, permissions, rate limits, error behavior, or what diagnostics are returned.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with the purpose front-loaded and no wasted words. It is efficient, though extremely terse given the incomplete specification elsewhere.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with no output schema and no annotations, the description is still too thin. It does not explain what diagnostics are returned, how to interpret them, or whether an LSP session must already be running.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It says the diagnostics are for a file, implying the path is a file path, but gives no format, relative/absolute expectations, or URI guidance, leaving the single parameter largely undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a clear resource (a file) and purpose (language server diagnostics), making it distinct from siblings such as lsp_symbols and lsp_navigate. However, it does not explicitly name or differentiate against alternatives, so it falls short of the top score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives, no prerequisites, and no exclusions. The agent must infer usage from the name and description alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lsp_navigateC

Navigate (definition/references/hover) via language server. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
lineNo
pathYes
actionYes
columnNo

TDQS

C2.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden, and it delivers only 'Read-only'. It omits whether a language server must already be running (relevant given the lsp_status sibling), how definitions/references/hover are resolved, and any latency or initialization caveats for a language-server-backed call.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short clauses, front-loaded with the verb and the modes, with no filler. It is efficient, though the extreme brevity leaves useful detail on the table rather than being wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 4-parameter tool with no annotations and no output schema, the description is thin: it never explains return shapes for the three modes, prerequisites (server running), or the coordinate parameters. An agent could invoke it but must guess at critical call details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, but it only echoes the action enum values already present in the schema. The required 'path' and, more importantly, the line/column coordinates (instantiation base, cursor semantics, when they are required) are left entirely unexplained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb (navigate) and the three modes (definition/references/hover) executed via a language server, which is clear enough for an agent to know what the tool does. It does not, however, distinguish itself from nearby siblings like lsp_symbols or ast_search, leaving the boundary between them implicit.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance and no named alternatives, despite several overlapping siblings (lsp_symbols, lsp_diagnostics, ast_search). The only usage signal is the terse 'Read-only' tag, which indicates safety but not selection context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lsp_statusC

Language server status. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears the full behavioral burden, and it delivers only the single phrase 'Read-only.' That is a useful safety signal but nothing about failure modes, latency, whether it depends on an active LSP session, or what the caller learns from a negative result.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short fragments, front-loaded and waste-free. It is arguably over-terse rather than padded, but nothing is redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter status probe with no output schema and no annotations, the description covers the minimum (what it is plus read-only) but omits what the status actually conveys to the caller. A returning agent gains no expectation about the shape or meaning of the result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. No argument syntax, defaults, or filtering options are needed here.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

Names the resource (language server status) and not much else. It doesn't say what aspect of status is reported (running servers, capabilities, readiness) or how it differs from the sibling lsp_diagnostics or lsp_symbols, so an agent must guess at the boundary between this and other LSP tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to call this versus the other lsp_* siblings, nor any precondition such as whether a language server must already be attached or how to react when status reports a failure.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

lsp_symbolsC

Symbols for a file. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

TDQS

C2.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are supplied, so the description carries the full behavioral burden. It does disclose one useful trait — that the operation is read-only — but says nothing about prerequisites (e.g. whether an LSP server must be running), latency, or the shape/size of results for a large file.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse fragments, front-loaded with the resource and no filler. It is not padded, though the brevity borders on under-specification rather than disciplined conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a one-parameter tool with no output schema and no annotations, the description should at least say what a "symbol" is in this context (hierarchical document symbols vs flat list) and confirm the path form. Both are missing, leaving an agent to call blindly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% for the single required parameter. "For a file" weakly clarifies that path refers to a file rather than a workspace or directory, but leaves open whether it is an absolute path, workspace-relative path, or file URI — the exact ambiguity an agent would hit when calling it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

"Symbols for a file" identifies the resource (symbols) and the scope (a single file), so an agent can roughly place it against lsp_diagnostics or lsp_navigate. But it is a verb-less noun phrase — it never says whether it lists, extracts, or resolves symbols, and does not state what kind of symbols (declarations, outline, document symbols). Purpose is implied rather than stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no exclusions, and no reference to any sibling tool such as ast_search or lsp_navigate. "Read-only" is a safety trait, not usage guidance. The agent must infer the entire invocation context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vcs_diffD

VCS diff. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

TDQS

D1.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full behavioral burden, and all it offers is "Read-only." It does not disclose output shape, whether it requires a clean working tree, or whether uncommitted/staged changes are included.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness2/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two terse fragments with no wasted words, but this is under-specification rather than conciseness; the brevity leaves the definition functionally empty.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness1/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

A zero-annotation, zero-output-schema tool with an undocumented parameter requires far more from the description than a name restatement and a read-only note. Nothing an agent needs to call this correctly is present.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There is one parameter (path) at 0% schema description coverage, and the description never mentions it, so its meaning (file vs directory vs whole repo default) is entirely undocumented. The description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"VCS diff" essentially restates the tool name with no verb or explanation of what a diff operation returns. It does not distinguish this tool from sibling vcs_status or from search/fs_read that also surface change-related data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines1/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no when-to-use guidance, no prerequisites, and no mention of the obvious alternative (vcs_status) or whether a path is needed for a workspace-wide diff. The agent is left to infer everything.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vcs_statusC

VCS status. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

TDQS

C2.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. "Read-only" is the one useful disclosure (non-mutating), but nothing is said about required auth, repository state assumptions, or what is returned when no repo is present.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

It is very short and front-loaded with no filler, which is good, but the brevity comes from under-specification rather than tight editing. Two fragments do not constitute an adequately structured definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and an undocumented parameter, this description leaves nearly everything an agent needs unanswered. Only the read-only nature is communicated.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0% and the description never mentions the single `path` parameter. An agent cannot tell whether path means a repo root, a working directory, or a file to scope the status to.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose2/5

Does the description clearly state what the tool does and how it differs from similar tools?

"VCS status" largely restates the tool name vcs_status rather than describing a distinct verb+resource outcome. It does not distinguish itself from the sibling vcs_diff, and an agent learns nothing about what status information is returned.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus alternatives such as vcs_diff or workspace_info. "Read-only" is a weak implicit hint that this is a safe inspection call, but no context, prerequisites, or exclusions are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

workspace_infoB

Inspect the configured workspace. Read-only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. 'Read-only' is a meaningful disclosure about the safety profile, but the tool takes no parameters and no output schema exists, so the description is silent on what is actually returned (paths, config values, roots). It discloses the mutation behavior but little else.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste, and the core purpose is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool this is nearly complete on mechanics, but with no output schema and no annotations, the description should say what the inspection yields (e.g., workspace root, name, configuration). What an agent gets back is unknown, which is a real gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Zero parameters, so the baseline of 4 applies per the rubric. The description correctly implies no arguments are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Inspect') and resource ('the configured workspace'), so the agent knows it reports on workspace configuration rather than reading or searching files. It doesn't explicitly distinguish itself from siblings like fs_stat or lsp_status, which also report status, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no indication of when to call this versus alternatives such as fs_stat (file metadata) or lsp_status (language-server state). Usage is implied by the resource name but no context or exclusions are given.

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.

  1. 13 tool updates
    • First observedast_search
    • First observedfs_patch
    • First observedfs_read
    • First observedfs_stat
    • First observedfs_write
    • First observedlsp_diagnostics
    • First observedlsp_navigate
    • First observedlsp_status
    • First observedlsp_symbols
    • First observedsearch
    • First observedvcs_diff
    • First observedvcs_status
    • First observedworkspace_info

TDQS

C2.9/5.0

Scored across 13 tools

Disambiguation5/5

Each tool maps to a distinct resource/action: filesystem stat/read/write/patch, text vs structural search, VCS status/diff, and LSP status/diagnostics/symbols/navigate. Overlaps like fs_stat vs fs_read and search vs ast_search are resolved by clear descriptions.

Naming Consistency4/5

All tools use snake_case, but suffixes mix nouns and verbs (workspace_info, vcs_status vs fs_read, ast_search, lsp_navigate). The prefix-based grouping is predictable, so mostly consistent with minor deviations.

Tool Count5/5

13 tools is well-scoped for a workspace/code-intelligence server, covering file ops, search, VCS, and LSP without obvious redundancy. Each tool appears to earn its place.

Completeness4/5

Core read/write/patch/search/VCS/LSP workflows are covered, but there is no explicit delete/move/rename for files and VCS is limited to status/diff. These are minor gaps workable around for an inspection/editing agent.

Maintenance

ActivityMaintained
ResponsivenessUnresponsive

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Local-first code intelligence and safety layer for AI coding agents. MCP server exposes dependency graph, impact analysis, and AST-compressed repo context, backed by typed local memory, patch-scope safety gates, and git-independent transaction rollback.
    1
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Secure local development platform that exposes controlled developer capabilities (FS, Git, search, command execution) to AI assistants via MCP with deny-by-default security and audit logging.
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first code intelligence MCP server that enables coding agents to search code, inspect structure, read exact ranges, and explore Git history with explicit token budgets.
    23
    Apache 2.0