DevTwin MCP
DevTwin MCP is a local, read-only-first MCP server that gives AI coding agents a structured, evidence-based view of a developer's environment so they can diagnose why builds/tests fail or why a repo isn't ready to run.
Detect project type and ecosystems (Python, Node, JVM, Go, Rust, .NET, Swift, Ruby, PHP, generic) with file-based evidence
Run a full health check scoring 0-100 across runtimes, dependencies, services, ports, and Git state
Scan monorepos/subdirectories for multiple ecosystems with per-ecosystem health reports
Compare required vs. installed runtime/tool versions (drift detection)
Explain a given error message by cross-referencing project type, runtimes, services, ports, and dependencies into ranked root causes
Inspect project details: build tools, commands, env var names, OS, Git state
Check dependency/lockfile state and whether packages are installed locally
Detect required local services (Postgres, Redis, compose services) and whether they're running
Run recognized project test/lint commands (e.g. pytest, npm test, gradlew test) safely via a fixed allowlist with timeout
Generate a never-executed preparation plan for freshly cloned repos, classifying each step's blast radius
Produce a read-only commit-readiness summary including staged secret-looking files
Guarantee privacy: never reads/returns secret values, only presence/absence
Checks whether required Docker containers and containerized services are available and running, helping diagnose issues caused by missing or unhealthy local service dependencies.
Inspects the local Git repository state, including working-tree and branch status, to catch environment-related failures caused by repository state rather than code.
Checks Gradle version and wrapper vs system Gradle usage to diagnose build failures caused by project-level Gradle version mismatches.
Checks the installed Node.js runtime against project requirements such as .nvmrc and package.json engines to identify version mismatches.
Checks whether required local Redis services are running and reports unavailable Redis instances that could explain application or test failures.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@DevTwin MCPWhy does npm test fail on my machine?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
DevTwin MCP
Give AI coding agents a live, structured understanding of your local development environment.
DevTwin is a Model Context Protocol (MCP) server that answers one central question for an AI coding agent: why is this developer's environment different, broken, or unhealthy?
It detects project technology, checks installed runtime versions against what a project actually requires, inspects dependency and lockfile state, finds required local services (Postgres, Redis, ...) and whether they're running, checks ports and Git state, and turns all of that into structured, evidence-based diagnostics -- without ever sending your environment to a cloud backend, and without ever exposing secret values to the model.
Quick Start (2 minutes)
1. Install (pick one):
uv pip install devtwin-mcp # fastest
# or
pipx install devtwin-mcp # simplest
# or
pip install devtwin-mcp # standard2. Add to your MCP client (Claude Code, Claude Desktop, Cursor, etc.):
{
"mcpServers": {
"devtwin": {
"command": "devtwin"
}
}
}3. Try it:
Ask Claude: "Check my development environment"
or "Why does `npm test` fail?"That's it. Next time you ask Claude about your project, it'll have access to real environment data instead of guessing.
Why use DevTwin instead of just asking Claude to run bash commands?
The problem: Claude can run bash, but developers lose:
Secrets — environment variable reads leak API keys and passwords into conversation
Parsing hell — Claude has to guess the right 5–6 commands to run, parsing messy output each time
No safety — anything goes, even destructive commands
Inconsistent — every project handles environment checks differently (or not at all)
DevTwin solves it:
No secrets ever leak — environment checks report presence only, values never read
One call, one answer —
dev_health()bundles 10+ checks into structured JSONSafety by design — only allowlisted, read-only operations
Same check every time — exact same detection logic across all projects
Token efficiency: ~800 tokens (one call + schema) vs. ~1500–2000 tokens (5–6 bash commands + parsing).
See the side-by-side comparison: MCP vs raw Claude
Related MCP server: devscope
What makes DevTwin different
Feature | Raw Bash | DevTwin |
Safety | Any command possible | Only safe, allowlisted checks |
Secrets | Risk of leaking keys/passwords | Never reads or returns secret values |
Consistency | Different per project | Same checks across all projects |
Tokens | 5–6 commands, ~1500–2000 tokens | 1 call, ~800–1200 tokens (after schema tax) |
Works in Claude Code | ✓ (has shell) | ✓ (any MCP client) |
Works in Claude Desktop | ✗ (no shell) | ✓ |
Works in Cursor / Windsurf | (conditional) | ✓ |
Contents
Why DevTwin exists
AI coding agents read code well, but are blind to the environment that code actually runs in.
"Why does
npm testfail on my machine?" usually has nothing to do with the code -- it's a Node version mismatch, a service that isn't running, or dependencies that were never installed.DevTwin gives an agent the same signal a senior engineer would gather by hand --
node --version,git status,lsof -i :5432,docker ps-- as structured tool calls instead of guesswork.
FAQ: Claude CLI already has a shell, so why an MCP at all?
This is usually the first question a developer asks, and it's a fair one.
In a client like Claude Code that already has a Bash tool, you can just
ask it to run node --version, docker ps, lsof -i :5432, etc.
directly -- no MCP server required. The gap DevTwin closes isn't "can
this be done at all" -- it's these:
Without DevTwin (raw Bash) | With DevTwin |
The agent can run anything, including destructive commands, even unintentionally. | Zero arbitrary execution -- a fixed allowlist of read-only/safe checks only. See Security model. |
Picks a different investigation each session; can miss ecosystem edge cases (Gradle wrapper vs. system Gradle, | The same curated, tested check every time, for every ecosystem. |
A command like | Structurally never returns secret values -- presence/absence only. See Privacy model. |
Only works in clients that have a shell tool at all (not Claude Desktop, some IDE plugins). | Works in any MCP client, shell or no shell. |
~6 separate round-trips to diagnose one failure; ~1500–2000 tokens per check (5–6 bash commands, scattered output). | 1 call; ~800–1200 tokens per check. See the worked example. |
Honest answer for Claude CLI specifically: since it already has Bash, DevTwin's win there is smaller than "capability you didn't have" -- it's safety guarantees and consistent, structured output, not brand-new access. That's also why it isn't free -- see Token cost for what connecting it actually costs, and when it's worth it.
A few more questions worth asking before adopting this:
"Isn't this just a doctor script (make doctor, bin/setup) with extra
steps?" Conceptually, yes -- plenty of mature repos already hand-write
one. DevTwin's difference is that most repos don't have one, writing a
good one per-ecosystem is real work, its output is structured JSON an
agent can reason over rather than plain text a human reads, and the same
10 tools work identically across every repo instead of a bespoke script
per project with its own conventions and blind spots.
"Does this only work with Claude / Claude Code?" No. DevTwin speaks the standard Model Context Protocol -- any MCP-compatible client (Claude Desktop, Cursor, Windsurf, etc.) can connect to it the same way. Nothing about it is Claude-specific.
"Is this safe to depend on -- is it actively maintained?" It's Alpha status and a young project -- read the code (it's short) before trusting it in a workflow you depend on, same as you would any new dev-tooling dependency.
"Could it suggest something wrong, or run a bad recommendation
automatically?" No tool here executes a recommendations string --
those are just text for the agent (or you) to read and decide on.
dev_check is the only tool that executes anything, and only commands it
recognized itself against a fixed allowlist -- see
Security model.
"Does it phone home or send telemetry anywhere?" No. Zero network calls of its own -- see Local-first architecture.
"I don't want an MCP server running any commands on my machine."
9 of the 10 tools are pure read-only (file reads, version checks). Only
dev_check executes anything, and only commands DevTwin itself
recognized from project files, checked against an allowlist, with
shell=False and a timeout -- see Security model for
exactly what that does and doesn't allow.
Benefits
Fewer wrong diagnoses. Without DevTwin, an agent debugging a failure can only read code and guess -- it will often propose a code fix for what's actually a Node version mismatch or a stopped database. DevTwin gives it ground truth instead of a guess.
One call instead of many. A single
dev_healthcall bundles ~10 underlying checks (runtime versions, dependency state, services, ports, Git) into one structured, scored result -- instead of an agent making a dozen separate shell round-trips and parsing raw CLI output each time.Same check every time. The exact checks per ecosystem (Gradle wrapper vs. system Gradle,
.nvmrcvs.package.jsonengines, ...) are encoded once, so the diagnosis is consistent across sessions instead of depending on what an agent happens to think to run.Safer than handing an agent a shell. No arbitrary command execution, no destructive operations, ever -- see Security model.
Secrets never touched. Environment variables that look secret are checked for presence only; values are never read or returned -- see Privacy model.
Works even where the agent has no shell. MCP clients without a Bash tool (some IDE assistants, restricted agents) get this capability at all, not zero capability.
Token cost
Real numbers, not an estimate -- measured directly from this server's own
MCP tool schemas (mcp.list_tools()) and a real dev_health() response,
using the standard ~4-characters-per-token approximation.
Two different moments spend tokens, and they cost very differently:
When | What happens | Cost |
The moment the client connects to DevTwin | All 10 tool schemas (name, description, parameters) are added to every request in that session -- whether or not any tool is ever called. This is true of any MCP server, not specific to DevTwin. | ≈1,400 tokens, every single turn |
Only when a tool is actually called | That one tool's JSON response is added to context, once. | ~120-200 tokens per call (varies with how many issues are found) |
Per-tool schema breakdown (measured):
Tool | Schema size | ≈ tokens |
| 440 chars | ~110 |
| 500 chars | ~125 |
| 470 chars | ~117 |
| 793 chars | ~198 |
| 523 chars | ~130 |
| 507 chars | ~126 |
| 507 chars | ~126 |
| 771 chars | ~192 |
| 645 chars | ~161 |
| 481 chars | ~120 |
Total (all 10 tools) | 5,637 chars | ≈1,400 |
The honest bottom line: for a single one-off diagnosis in a session that otherwise never touches an environment question, raw Bash can come out cheaper in total tokens -- the ~1,400-token fixed schema tax often outweighs the savings from replacing several shell commands with one call. See the worked comparison below for real numbers on both sides.
DevTwin's case gets stronger the more environment questions come up in one session (the fixed tax is paid once; every question after that is ~150 tokens on DevTwin vs. hundreds more on raw Bash each time) -- and its real advantage isn't raw token count at all, it's consistency, safety, and working in MCP clients that have no Bash tool. See Benefits and Honest tradeoffs.
Practical implication: register DevTwin per-project, not user-wide, so the fixed tax is only paid in sessions where it's actually useful -- see Using it on another project.
Honest tradeoffs
DevTwin is not a daily-use tool for a stable environment -- nobody needs to re-check "is Postgres running" on every function they write. It's a break-glass tool: high value at specific moments (fresh clone, a build that mysteriously fails, right before a commit), and idle the rest of the time. That's the intended usage pattern, not a shortcoming.
Token overhead is paid on every turn the moment it's connected, whether used or not -- see Token cost for real measured numbers.
It doesn't reliably win on tokens for a single one-off question; it wins on consistency, safety, and reach into clients with no shell -- see Benefits.
If an agent already has full shell access to a repo you fully control and rarely has environment drift, you may not need DevTwin there at all.
DevTwin earns its keep most on: shared/onboarding repos, less-trusted or shell-less agent setups, and multi-ecosystem monorepos where "what do I even check" is itself the hard part.
With vs. without DevTwin: a worked example
Say you ask an agent "why does npm test fail?" and the real cause is a
Node version mismatch plus Postgres not running.
Without DevTwin (agent using raw Bash) -- it has to guess the right sequence, one command at a time:
cat package.json # spot "engines": {"node": ">=20"}
node --version # v16.20.0 -- mismatch found
grep -i "pg\|postgres" package.json # spot the Postgres dependency
cat .env # risk: may print a real secret into context
lsof -i :5432 # nothing listening
docker ps # check if it's in a container insteadSix round-trips, an investigation path the agent had to invent, a real chance of a secret leaking into the conversation at step 4, and roughly 400-800 tokens of command + output text (varies with file sizes and how many Docker containers are running).
With DevTwin, one call:
dev_health(){
"status": "error",
"summary": "2 issues found: runtime drift, service down",
"issues": [
"Node 16.20.0 installed, project requires >=20 (from package.json engines)",
"Postgres required (found in docker-compose.yml) but not running on 5432"
],
"recommendations": [
"nvm install 20 && nvm use 20",
"docker compose up -d postgres"
]
}Same conclusion, ~150 tokens for the response -- plus the ~1,400-token fixed schema tax already paid that turn regardless (see Token cost). One call instead of six, no possibility of leaking a secret, and the exact same curated check every time instead of a freehand investigation that varies session to session.
Example questions this unlocks
"Check my development environment."
"Why is my Kotlin project failing to build?"
"Is my Node version correct for this repo?"
"Why can't my app connect to Postgres?"
"Does my environment drift from what this repository expects?"
"What should I run before I commit?"
"I just cloned this repo -- what do I need to do to get it running?"
"Check all ecosystems in this monorepo" (uses
dev_health_allfor Android/iOS/React/Python)"Which of my backend/frontend/mobile apps is ready to ship?"
Per-language examples
One row per supported ecosystem: a question you'd actually ask, what
DevTwin checks to answer it, and the test/build command it recognizes for
dev_check.
Ecosystem | Example question | What gets checked | Recognized command(s) |
Python | "Is my Python version right for this repo?" |
|
|
Node.js | "Why does |
|
|
JVM (Java + Kotlin + Android) | "Why won't my Android app build after a fresh clone?" |
|
|
Go | "Is my Go version correct for this repo?" |
|
|
Rust | "Why does |
|
|
.NET | "Why does |
|
|
Swift (iOS/macOS) | "Why does my iOS build fail?" |
|
|
Ruby | "Why does |
|
|
PHP | "Why does my PHP app fail to boot?" |
|
|
Generic (fallback) | "This repo isn't in any language above -- what can you tell me?" |
|
|
Architecture
One MCP server, many ecosystem adapters -- not a separate server per language.
MCP server -> core (workspace/detector/health/drift/diagnostics) ->
adapters (python/node/jvm/go/rust/dotnet/swift/ruby/php/generic) ->
system inspection (os/process/ports/env/fs/docker) ->
service detection (postgres/redis/generic)Full details in docs/architecture.md. How to add
a new language adapter: docs/adapters.md.
Supported ecosystems
Ecosystem | Detected from | Runtime checked | Package managers |
Python |
|
| uv, pip, poetry, pipenv |
Node.js |
|
| npm, pnpm, yarn, bun |
JVM (Java + Kotlin) |
|
| Gradle (wrapper-aware), Maven (wrapper-aware) |
Go |
|
| go modules |
Rust |
|
| cargo |
.NET |
|
| NuGet |
Swift (iOS/macOS) |
|
| SPM, CocoaPods |
Ruby |
|
| Bundler |
PHP |
|
| Composer |
Generic (fallback) |
| -- | make/task/just/docker |
Any project not matching a specific adapter still gets useful output from the generic adapter -- DevTwin never returns nothing for an unrecognized project.
Installation
Prerequisites:
macOS/Linux (Windows: WSL)
Python 3.10+
One package manager:
uv,pipx, orpip
Pick one method:
Option 1: uv (fastest, recommended)
# Install uv first (if not already installed)
brew install uv
# Then install devtwin
uv pip install devtwin-mcpOption 2: pipx (simplest, no venv needed)
# Install pipx first (if not already installed)
brew install pipx
# Then install devtwin
pipx install devtwin-mcpOption 3: pip (standard, may need venv on newer macOS)
pip install devtwin-mcp
# or with venv:
python3 -m venv ~/.devtwin-venv
source ~/.devtwin-venv/bin/activate
pip install devtwin-mcpAll methods install the devtwin binary globally so it works in any MCP client.
Troubleshooting installation
"zsh: command not found: uv"
brew install uv
uv pip install devtwin-mcp"error: externally-managed-environment" (on newer macOS)
Use pipx (simplest solution):
brew install pipx
pipx install devtwin-mcp"pip: command not found"
Use pipx or uv (above), or create a venv:
python3 -m venv ~/.devtwin-venv
source ~/.devtwin-venv/bin/activate
pip install devtwin-mcpVerify installation:
devtwin --version
# Should print: devtwin X.Y.ZFor local development against a clone of this repo, see
docs/development.md.
MCP client configuration
Exact configuration syntax differs by client -- consult your client's docs. Generically, DevTwin is a stdio MCP server invoked as:
{
"mcpServers": {
"devtwin": {
"command": "devtwin"
}
}
}For local development from a clone (without installing the package):
{
"mcpServers": {
"devtwin": {
"command": "uv",
"args": ["run", "--directory", "/absolute/path/to/devtwin-mcp", "devtwin"]
}
}
}Verify tool discovery with the MCP Inspector:
npx @modelcontextprotocol/inspector uv run devtwinUsing it on another project (for other developers)
DevTwin is one binary -- point any number of projects at the same install, no per-project reinstall needed. Two scopes:
Scope | Loads | When to use |
Project (recommended default) | Only in this repo | Default choice -- see Token cost for why |
User | Every project, every session | Once you're reaching for DevTwin across most of your repos |
Project scope -- drop a .mcp.json in the project root:
{
"mcpServers": {
"devtwin": {
"command": "/absolute/path/to/devtwin-mcp/.venv/bin/devtwin"
}
}
}or with the Claude Code CLI:
claude mcp add devtwin /absolute/path/to/devtwin-mcp/.venv/bin/devtwin --scope projectUser scope:
claude mcp add devtwin /absolute/path/to/devtwin-mcp/.venv/bin/devtwin --scope userAfter adding it, restart the client (or reconnect the MCP server), then just ask normal questions -- see Example questions this unlocks.
Monorepo tip: in a repo mixing platforms (e.g. Android + iOS +
backend), point questions at the specific subfolder rather than the repo
root -- e.g. "check the health of the android/ app". dev_detect at the
root of a mixed repo reports every ecosystem it finds, which is useful
once but noisy for a targeted check.
Tool reference
All tools return {status, summary, data, issues, recommendations}.
status is one of ok, warning, error, unknown.
Tool | Class | Description |
| read-only | Fast, file-based project/ecosystem detection with evidence. |
| read-only | Full 0-100 health score combining runtime, dependency, service, and Git state. |
| read-only | Scan subdirectories for multiple ecosystems; run comprehensive health checks on all with detailed per-ecosystem reports: health score, runtime versions, dependency state, services, issues (build errors, conflicts, misconfigurations), and recommendations. Perfect for monorepos. |
| read-only | Compares required vs. actually-installed runtime/tool versions. |
| read-only | Diagnoses a given error message into ranked, evidence-backed root causes. |
| read-only | Detailed project inspection: runtimes, build tools, commands, OS, Git. |
| read-only | Per-ecosystem dependency/lockfile state. |
| read-only | Required local services (Postgres, Redis, compose services) and their running state. |
| safe execution | Runs recognized test/lint commands (e.g. |
| plans only | Produces a preparation plan for a freshly-cloned repo; never executes it. |
| read-only | Commit-readiness summary: Git state, health, staged-secret-looking files. |
dev_health_all detailed output
For monorepos with multiple ecosystems, dev_health_all returns per-ecosystem details:
Each ecosystem report includes:
health_score (0-100): Overall ecosystem health
status: ok/warning/error
runtime_summary: Actual vs. required versions (Java/Swift/Node/Python)
dependency_summary: Lockfile state, conflicts, missing packages
service_summary: Required services (Postgres, Redis, etc.) and running status
issues: Detailed problems found:
Build errors (Gradle, xcodebuild, npm, pip)
Dependency conflicts
Version mismatches
Missing SDKs or tools
recommendations: Specific fixes for each issue
Example: For Android, you get Gradle build errors, missing SDK paths, Java version mismatches. For iOS, you get CocoaPods errors, Swift version issues. For React, you get npm conflicts. For Python, you get pip version conflicts.
Security model
No arbitrary command execution. There is no
execute_shelltool.dev_checkonly runs commands DevTwin itself recognized from project files, checked against an allowlist, run withshell=Falseand a timeout.No destructive actions, ever. DevTwin never runs
git reset --hard,rm -rf,kill -9,docker compose down, lockfile deletion, or.envmutation.dev_prepareonly plans. It classifies every proposed step (read_only/safe/requires_approval/dangerous) and never executes anything itself.
Full details: docs/security.md.
Privacy model
Environment variables are checked for presence only when their name looks secret (
PASSWORD,TOKEN,SECRET,API_KEY,PRIVATE_KEY,ACCESS_KEY,AUTH,CREDENTIAL, ...) -- values are never returned..envfiles are scanned for variable names only.dev_precommitflags secret-looking staged filenames without reading or reporting their contents.
Local-first architecture
No server component, no account, no network calls of its own beyond the local commands it inspects (
git,docker, language toolchains).Everything it reports comes from files and processes already on the machine it runs on.
Adoption & team setup
For team leads: See ADOPTION.md for per-project setup, FAQ, and how to announce DevTwin to your team.
Copy-paste messaging: See MESSAGING.md for Slack, email, GitHub, and internal docs templates.
Key idea: Register DevTwin per-project in .mcp.json (so the fixed token tax only applies to sessions that use it). Individual developers install once (uv pip install devtwin-mcp), and every project they work on gets it automatically.
Development
uv sync --all-extras
uv run pytest
uv run ruff check .
uv run mypy src
uv run devtwinSee docs/development.md for the full workflow.
Contributing
See CONTRIBUTING.md. Adding a new language ecosystem
is the most common contribution -- see docs/adapters.md
for a template, or src/devtwin/adapters/swift.py,
ruby.py, and
php.py for real, merged examples to
model yours after.
Roadmap
Additional ecosystem adapters: Elixir, Dart, Scala, C/C++ (CMake/Bazel/Buck), Nix (see
docs/adapters.mdfor how to add one)Additional service detectors (MySQL/MariaDB, MongoDB, Kafka, RabbitMQ)
Richer drift comparison against CI configuration (e.g. GitHub Actions runtime matrices)
Optional local caching of expensive checks across tool calls within a session
License
Apache-2.0 -- see LICENSE.
Available Tools
10 toolsdev_checkA
Run recognized project checks (tests/lint) detected from project files,
e.g. pytest, ./gradlew test, npm test, cargo test. Only commands
DevTwin itself recognized are ever executed (never an arbitrary string),
each with a timeout. Pass run to restrict to a subset of the recognized
commands (call dev_project_info first to see what's available).
| Name | Required | Description | Default |
|---|---|---|---|
| run | No | ||
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states that only DevTwin-recognized commands are ever executed (never arbitrary strings) and that each command has a timeout, which is valuable safety information. It doesn't mention side effects or output specifics, but the core behavioral constraints are transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences, front-loaded with the core purpose, then safety details, then usage guidance. Every sentence earns its place with specific, actionable information and 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?
The tool has an output schema, so return values are documented separately. The description covers safety, usage flow, and available options, but omits any mention of the workspace parameter and doesn't clarify behavior when no checks are recognized. Given the tool's complexity and the availability of an output schema, these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains the 'run' parameter (restrict to a subset of recognized commands) and directs the agent to dev_project_info to see valid values. However, the 'workspace' parameter is completely unaddressed; an agent might not know it represents the working directory. The explanation for 'run' is helpful but not comprehensive for both parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs recognized project checks (tests/lint) with concrete examples (pytest, gradlew test, npm test, cargo test). It uses a specific verb 'Run' and a well-defined resource, distinguishing it from sibling tools like dev_detect or dev_health which have different purposes.
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?
The description advises calling dev_project_info first to discover available commands and to use the 'run' parameter to restrict execution to a subset. This provides clear context and a specific prerequisite, though it doesn't explicitly contrast with alternatives or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_dependenciesC
Dependency state per detected ecosystem: package manager, lockfile presence/consistency signals, dependency counts, and whether packages appear installed locally (e.g. node_modules/, .venv/).
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description alone must disclose behavior. It describes output content but does not state whether the tool is read-only, scans the filesystem, requires network access, or has side effects. It also omits any performance or error implications. The behavior is not transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no filler. It front-loads the key concept and lists specifics efficiently. While it could be slightly more structured with an explicit verb, it is economical and easy to parse.
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?
The tool has one undocumented parameter and no annotations. Even though an output schema exists (which may clarify return values), the description omits critical context about the workspace parameter and how ecosystems are detected. It is incomplete for an agent to call correctly without further inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'workspace' has zero schema description coverage (0%), and the description does not mention it at all. The agent has no idea what workspace does, how it affects the results, or what values are acceptable. The description fails to compensate for the undocumented schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool reports dependency state per ecosystem, listing specific data points (package manager, lockfile, counts, local install). It is specific about content, though it lacks an explicit action verb like 'get' or 'list'. It does not differentiate from siblings, but the purpose is unambiguous.
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?
There is no guidance on when to use this tool versus alternatives like dev_detect, dev_health, or dev_drift. No mention of context that would trigger this tool, no exclusions, and no mention of alternatives. The agent must infer when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_detectB
Detect what kind of project lives at workspace: languages, ecosystems,
and the evidence (files) behind each detection. Fast, file-based only.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It adds two meaningful traits: 'file-based only' (implying read-only, local operation) and 'fast' (performance). However, it lacks depth—no mention of error handling, what happens if the workspace is invalid, or whether it caches results. It provides some transparency but not comprehensive 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?
The description is two sentences with no fluff. It leads with the core purpose, then appends the behavioral notes. Every word contributes; nothing is redundant or unnecessary. This is an exemplary concise structure.
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?
Given the tool's simplicity (one optional parameter, output schema exists), the description covers the essentials: what it does, the parameter, and some behavior. However, it omits usage context—when to choose this over siblings—and lacks deeper behavioral details like edge cases or side effects. It is adequate for basic use but not fully complete without referencing alternatives.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema description coverage is 0%, so the description must compensate. It explains 'workspace' as the location where the project lives, which clarifies the parameter's role. The default '.' is also consistent. While it doesn't detail accepted path formats, for a single optional parameter this is sufficient and adds meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'detect' and the resource 'project at workspace', and specifies the outputs: languages, ecosystems, and evidence files. It distinguishes itself from a tautology and conveys a specific capability, though it does not explicitly contrast with sibling tools like dev_project_info.
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?
There is no explicit guidance on when to use this tool versus alternatives. The phrase 'Fast, file-based only' hints at scope and performance but does not state when a developer should pick this over siblings such as dev_health or dev_project_info, nor does it mention exclusion criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_driftA
Compare expected project state (required runtime/tool versions from project files) against what's actually installed locally. Reports each mismatch as a structured drift item.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It uses non-mutating verbs ('compare', 'reports') which strongly imply a read-only operation, but it does not explicitly state that it does not modify anything or disclose any side effects, permissions, or limitations. The lack of explicit transparency is a moderate gap for a tool that could potentially access local installations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no unnecessary words. It front-loads the core comparison action and then specifies the output format. Every word contributes to understanding the tool's function and result.
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 tool with a single optional parameter, an output schema, and no annotations, the description provides sufficient context to call it correctly. The purpose and result are clear, and the workspace parameter is implied. It could mention edge cases (e.g., invalid workspace) or what happens when no drift is found, but the output schema likely covers the return structure, so the description is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema describes 'workspace' with a default but no description, and schema description coverage is 0%. The description's mention of 'project files' and 'installed locally' gives context that the workspace parameter specifies which directory to inspect, but it does not explicitly describe the parameter's purpose or acceptable values. It adds some meaning but does not fully compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb (compare), resource (expected vs installed project state), and outcome (reports mismatch as structured drift items). It distinguishes itself from sibling tools by specifying the exact comparison of required runtime/tool versions against local installations, which is not ambiguous.
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?
The description implies the intended use case (detecting version drift) but does not explicitly state when to prefer this tool over alternatives, nor does it mention any exclusions or conditions. With many siblings, explicit routing would be helpful, but the core purpose is clear enough that an agent can infer appropriate usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_explain_failureA
Diagnose a development failure. Give it the error/output text (and optionally the command that produced it); it cross-references project type, runtimes, services, ports, and dependencies to rank likely root causes with evidence -- never asserting certainty beyond the evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| command | No | ||
| workspace | Yes | ||
| error_message | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the tool 'cross-references project type, runtimes, services, ports, and dependencies' and that it 'ranks likely root causes with evidence'. It also clarifies a behavioral trait: 'never asserting certainty beyond the evidence'. This is transparent about the tool's inductive reasoning and its limitation. The description doesn't mention any destructive actions or side effects, but the name suggests (and the description confirms) it is purely diagnostic. Given the lack of annotations, this is a good level of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences long, with the main purpose and inputs at the front. It packs a lot of information: the input, the cross-referencing behavior, the output (ranked root causes with evidence), and a critical limitation ('never asserting certainty beyond the evidence'). No fluff, every clause earns its place. The structure is clear: first sentence states the action, second expands on internals and output.
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?
Given the tool's complexity (diagnostic reasoning tool with multiple input parameters and an output schema), the description covers the core functionality well: it explains what the tool does, what it takes, and what it returns. The output schema exists (though not provided in the input schema here, but the signal says 'Has output schema: true'), so the description doesn't need to detail return values. The main missing piece is explicit mention of the 'workspace' parameter – it is implied by 'project type, runtimes, services' but not directly stated as an input. Other than that, the description is complete enough for an agent to invoke the tool 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?
The schema description coverage is 0%, so the description must compensate for the parameters. The description mentions 'error/output text' and 'command that produced it' and 'workspace' implicitly. It doesn't explicitly name the workspace parameter, but it says 'cross-references project type, runtimes, services, ports, and dependencies' which implies the workspace is the project context. The description adds value by explaining what the parameters are used for (error_message as the primary input, command as optional context). It does not cover all parameter semantics in detail (e.g., format of workspace), but given the high-level nature, it provides enough meaning beyond the schema's bare property names.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: diagnose a development failure. It specifies the inputs (error/output text, optionally the command) and the output (ranks likely root causes with evidence). The verb 'diagnose' and the resource 'development failure' are specific, and the description distinguishes it from siblings by focusing on failure analysis rather than detection, health, or project info.
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?
The description explicitly tells the agent when to use this tool: when you have error/output text and optionally the command that produced it. It implies that the tool is for diagnosing failures, not for general health checks or detection. While it doesn't explicitly name alternatives, the context signals and sibling names (dev_check, dev_detect) suggest it's for failure analysis, and the description gives a clear condition for invocation. This is a strong usage guideline, essentially 'use this when you have error text and want root cause analysis'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_healthA
Full environment health check: combines project detection, runtime versions, dependency state, required services, ports, and Git state into a 0-100 health_score with concrete issues and recommendations.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It does convey that the tool is non-mutating (a 'check' that produces a score and issues), implying a read-only operation, but it stops short of explicitly stating side-effect-free behavior, performance implications, or what happens if the workspace doesn't exist. It also doesn't describe the structure of the 'issues and recommendations' it returns, though an output schema is present. The overall intent is clear, but some behavioral specifics are left to inference.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, densely informative sentence that front-loads the core purpose ('Full environment health check') and immediately enumerates the covered areas. Every element earns its place—no filler, no repetition. It is compact while conveying both scope and outcome, making it highly efficient for an agent to parse.
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?
The description provides a good high-level overview of functionality and output, and the presence of an output schema relieves it of fully explaining return values. However, it omits any guidance on the `workspace` parameter (its purpose and valid values), which is necessary for correct invocation. It also doesn't mention prerequisites (e.g., must be inside a project) or how to interpret the health score beyond 'issues and recommendations'. For a tool that combines many aspects, these gaps are moderate, leaving the description slightly incomplete.
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 is one parameter, `workspace` (default '.'), and the schema provides zero description coverage (0%). The tool description never mentions this parameter or explains its meaning (e.g., directory path, project root). Although the name is somewhat self-explanatory and there is a sensible default, the description fails to compensate for the missing schema documentation. The agent is left to infer what value to pass, which is a notable gap for a parameter that affects the scope of the health check.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb ('health check') applied to the environment, lists the concrete aspects it combines (project detection, runtime versions, dependency state, services, ports, Git state), and defines the single 0-100 health_score output. It unambiguously distinguishes itself from narrower sibling tools like dev_dependencies or dev_services by being a 'Full environment health check' that aggregates many dimensions.
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?
The description implies a comprehensive, one-stop check by explicitly enumerating what it covers, which signals when to use it (when a holistic overview is needed). However, it does not explicitly exclude alternatives (e.g., 'use dev_dependencies for dependency-only checks') nor call out situations where a narrower tool is preferred. This is clear context without exclusions, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_precommitA
Read-only commit-readiness summary: Git status (dirty/staged/conflicts), project health, and staged files that look like secrets. Never commits, stages, or modifies anything.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It explicitly states 'Read-only' and 'Never commits, stages, or modifies anything.' This fully discloses the tool's side-effect-free nature, which is the critical behavioral trait. The description goes beyond a simple purpose statement by reassuring the agent of safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, with the core purpose front-loaded. The first sentence states what it does, the second reinforces the read-only guarantee. No fluff or redundant details; every word adds value.
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?
The description covers the tool's purpose, scope, and behavioral safeguards. An output schema exists, so return values are presumed documented elsewhere. The only notable gap is the undocumented 'workspace' parameter, which prevents the description from being fully complete for a drop-in usage understanding.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter ('workspace') with 0% description coverage, and the tool description does not mention it at all. This leaves the agent to infer that 'workspace' refers to a path, but there is no explicit guidance, default behavior, or allowed values. The description fails to compensate for the missing schema documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific verb+resource: 'Read-only commit-readiness summary' and details the specific checks (Git status, project health, secrets). It also explicitly states what it never does, which distinguishes it from mutation tools. The purpose is unambiguous and distinct from sibling dev_* tools.
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?
Usage context is implied by the name and description: it is for checking commit readiness, presumably before committing. However, the description does not explicitly state when to use this tool versus its siblings (e.g., dev_health, dev_check) or provide any exclusion criteria. It offers clear context but no explicit comparisons.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_prepareA
Produce a preparation plan for a (likely newly-cloned) repository: ordered steps to align runtimes, start required services, install dependencies, and run the project's build/test commands. This tool NEVER executes anything -- it only plans, and classifies each step's blast radius (read_only/safe/requires_approval/dangerous) for the caller.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral burden. It explicitly states 'This tool NEVER executes anything -- it only plans' — a critical guarantee that prevents an agent from expecting side effects. It also discloses the output behavior (classifying each step's blast radius). This is thorough and transparent for a planning tool with zero side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core purpose and then the key behavioral caveat. Every clause adds value: scope, typical use case, and the critical non-execution guarantee. No filler, no redundancy. It is concise and well-structured for an agent to parse quickly.
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?
Given its simplicity (one optional param, no execution), the description is almost complete. It covers what the plan includes (steps, blast radius classification) and what it never does. The output schema exists, so return details are covered implicitly. Minor omission: it doesn't specify the format or granularity of the plan, but that is not essential for invocation. Overall, an agent can confidently call this tool 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?
The schema has a single optional 'workspace' parameter with 0% description coverage, so the description must compensate. It does not directly explain 'workspace', but the purpose 'for a repository' implies the workspace is the repository path. Since the parameter is simple, optional, and has a sensible default, the lack of explicit parameter explanation is a minor gap. This warrants a middle score.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Produce a preparation plan'), a specific resource ('repository'), and the scope ('align runtimes, start services, install deps, run build/test'). It also explicitly disclaims execution, which clearly distinguishes it from sibling tools like dev_check or dev_detect that likely run commands. The purpose is unambiguous and differentiated without needing to name siblings.
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?
The description implies usage — 'for a (likely newly-cloned) repository' — and clarifies it is for planning, not execution. However, it does not explicitly state when to prefer this over sibling tools (e.g., dev_check for actual validation, dev_services for service management). The context is present but no alternatives or exclusions are given, so guidance is implied rather than explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_project_infoA
Detailed project inspection: detected ecosystems, runtimes (installed vs required), build tools, test/build commands, environment variables in use, OS info, and Git state. Broader and slower than dev_detect.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the scope of inspection and a performance characteristic (slower), but does not explicitly state read-only behavior, required permissions, or potential side effects. The word 'inspection' implies non-mutating, yet it is not stated outright.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences that are front-loaded with the purpose and a detailed list, followed by a comparative note. Every word earns its place, with no redundancy or 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?
An output schema exists, so return-value details are already covered. The description specifies a rich set of inspected aspects and includes a performance caveat. It does not explain the workspace parameter's role, but that is captured under parameter semantics. Overall, the description gives sufficient context for an agent to decide to call the tool and understand its high-level behavior.
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 0% and the description does not mention the 'workspace' parameter at all. The parameter name is self-explanatory, but the description adds no contextual meaning about what value to provide (e.g., project root path) or how it affects the inspection.
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 'inspection' with a specific resource ('project') and enumerates concrete content: ecosystems, runtimes, build tools, commands, environment variables, OS info, Git state. It also differentiates from dev_detect by noting 'broader and slower', making the purpose unmistakable.
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 contrasts with dev_detect ('Broader and slower than dev_detect'), giving a comparative usage cue. It implies choosing this tool when depth is needed over speed, though it does not list explicit when-not-to-use conditions or mention any other sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dev_servicesA
Local service detection: which services (Postgres, Redis, and compose-defined services) this project appears to need, whether each is currently running/listening, and the evidence behind that conclusion.
| Name | Required | Description | Default |
|---|---|---|---|
| workspace | No | . |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses that the tool performs local detection, checks whether services are running/listening, and provides evidence, which implies a read-only, non-destructive operation. However, it does not state that it has no side effects, does not start services, or what happens if services are missing. It is more transparent than a bare 'detect services' but still lacks explicit safety details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, dense sentence that front-loads the core purpose ('Local service detection') and packs in the three key outputs (needed services, running status, evidence). There is no filler or irrelevant information, making it highly efficient.
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?
The output schema exists (though not detailed here), so return values need not be explained. The description covers the essential scope: which services, whether running, and evidence. It omits explicit clarification of the 'workspace' parameter and any limitations, but for a detection tool with a single optional parameter, it is close to complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has one parameter 'workspace' with a default of '.' and zero description coverage (0%). The description does not mention the parameter at all, leaving the agent to infer that it refers to the project directory. The name and default give some hint, but the description adds no semantic value beyond the schema, and the schema itself provides no description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('detection') and resource ('services'): it identifies which services (Postgres, Redis, compose-defined) the project needs, whether they are running, and provides evidence. This clearly distinguishes it from sibling tools like dev_dependencies (dependencies) or dev_health (health status).
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?
The description gives no explicit guidance on when to use this tool versus alternatives. It does not mention any conditions, alternatives, or exclusions. An agent would have to infer from the title and sibling names that this is about service detection, but there is no explicit routing or 'use this when' statement.
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. Dates show when Glama detected each change.
10 tool updates
v0.1.0- First observed
dev_check - First observed
dev_dependencies - First observed
dev_detect - First observed
dev_drift - First observed
dev_explain_failure - First observed
dev_health - First observed
dev_precommit - First observed
dev_prepare - First observed
dev_project_info - First observed
dev_services
TDQS
Each tool targets a distinct aspect of the development environment: detection, health, drift, failure diagnosis, project info, dependencies, services, checks, preparation, and precommit. Even similar tools like dev_detect and dev_project_info are clearly differentiated by scope and speed. There is no ambiguous overlap that would cause an agent to select the wrong tool.
All tool names follow the consistent pattern `dev_` + lower_snake_case, using descriptive verbs or nouns (detect, health, drift, explain_failure, etc.). The naming convention is uniform and predictable, with no mixing of camelCase or inconsistent verb styles.
With 10 tools, the server is well-scoped and each tool serves a clear purpose within the domain of development environment analysis and preparation. The count is within the ideal range and avoids both bloat and insufficient coverage.
The tool set covers the full lifecycle for a diagnostics/preparation server: detection, health assessment, drift checking, failure explanation, dependency and service checks, test execution, preparation planning, and precommit readiness. No obvious gaps exist for the stated purpose, and the tools work together to provide comprehensive environment insight.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Code intelligence platform for AI agents. 20 tools for architecture, security & impact analysis.
Production-readiness for your AI coding agents.
Lints + auto-fixes how AI coding agents discover any new product. 24 rules, 6 tools, score 0-100.
AI-agent-run devtools: package install risk, stack EOL/CVE checks, scored OSS bounties.
Related MCP Servers
- AlicenseAqualityDmaintenanceZero-config MCP server that gives AI coding assistants a real-time diagnostic snapshot of your local dev environment. Detects framework, running services, recent errors, git state, and provides a health diagnosis in one call.3401MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to detect development environments, install missing tools, scan local code projects, and generate visual reports.16MIT
- AlicenseAqualityCmaintenanceEnables LLM clients to inspect local development environment, including Docker container health, pnpm workspace integrity, and stuck process diagnosis.4MIT
- AlicenseNot gradedqualityCmaintenanceEnables LLM clients to inspect local dev environments—Docker container health, pnpm workspace integrity, and stuck process detection—without manual terminal copy-pasting.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/JaydeepDhamecha/devtwin'
If you have feedback or need assistance with the MCP directory API, please join our Discord server