setup-guard-mcp
Summary: Use this MCP server to ground AI coding agents in a JS/TS project's actual runtime, package manager, lockfile versions, and config paradigms for deterministic compatibility checks, version-pinned setup guidance, and migration steps.
Detect project environment (
detect_project_environment): Node.js version, package manager (npm/pnpm/yarn/bun), locked dependency versions, and config paradigms (ESLint flat config, Tailwind v4 CSS-first, Next.js App/Pages router, tsconfig) from local files offline.Check dependency compatibility (
check_dependency_compatibility): Verifyengines.node,peerDependenciescross-compatibility, and deprecation notices against npm registry metadata withconflict,warning, orunverifiedoutcomes.Get versioned setup guides (
get_versioned_setup_guide): Retrieve citation-backed install commands formatted for the project's package manager, config templates, and obsolete patterns to avoid for a specific library version.Get upgrade steps (
get_upgrade_steps): Retrieve ordered migration guides, breaking changes, and official codemod commands between two library versions with GitHub tag source URLs.Search versioned docs (
search_versioned_docs): Search tag-pinned migration guides, release notes, and deprecation notices using SQLite FTS5 BM25, auto-resolving version from a project path if omitted.Supports 7 core JS/TS libraries:
node,typescript,react,nextjs,vite,tailwindcss,eslint.Safety guardrails: No silent
"latest"substitution, no false"removed"assumptions, read-only execution, and 100% local stdio operation with optional offline mode.
Supports Bun package manager detection via bun.lock and bun.lockb, with version-pinned install commands and compatibility checks.
Provides migration guidance for ESLint v8 to v9, including flat config eslint.config.mjs, .eslintignore removal, @eslint/migrate-config, and typescript-eslint compatibility.
Provides version-aware setup and migration guidance for Next.js projects, including async cookies()/headers()/params in v15, fetch caching default changes, React 19 peer dependency checks, and @next/codemod commands.
Checks Node.js engine compatibility and provides migration guidance for v18, v20, and v22, including require(esm) stabilization and built-in node:sqlite.
Supports npm package manager detection and provides version-pinned install commands and compatibility checks for npm-based projects.
Supports pnpm package manager detection, including v6–v9 and pnpm-workspace.yaml catalogs, with version-pinned install commands and compatibility checks.
Supplies migration steps and compatibility checks for React v18 to v19, covering ref as a prop, forwardRef deprecation, ReactDOMTestUtils.act removal, useActionState, and TypeScript codemods.
Offers version-pinned setup and migration for Tailwind CSS v3 to v4, including @import "tailwindcss", CSS-first @theme config, @tailwindcss/vite and @tailwindcss/postcss plugins, and @tailwindcss/upgrade.
Provides version-aware setup and migration guidance for TypeScript v5, including moduleResolution: "bundler" and verbatimModuleSyntax with importsNotUsedAsValues deprecation.
Delivers version-aware setup and migration for Vite v5 to v6, covering Node.js engine requirements, Environment API, Sass modern API default, and CJS Node API removal.
Supports Yarn Classic v1 and Berry v2+ detection, providing version-pinned install commands and compatibility checks for Yarn projects.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@setup-guard-mcpCheck my lockfile and tell me what breaks if I upgrade Next.js to 15."
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.
version-compat-mcp
"Your agent reads the wrong docs.
version-compatmakes it read the right version."
Version-Aware Setup, Dependency Compatibility & Migration MCP Server for the JavaScript/TypeScript Ecosystem.
version-compat-mcp is not a generic documentation search engine. It is a local Model Context Protocol (MCP) server that analyzes your project's actual Node.js runtime, package manager (npm/pnpm/yarn/bun), lockfile versions, and configuration files to supply deterministic compatibility checks and tag-pinned migration facts to AI coding agents (Google Antigravity, OpenAI Codex, Cursor, Claude Code).
Table of Contents
Related MCP server: installed-version-mcp
1. Why version-compat-mcp? (And How It Differs from Generic Doc MCPs)
Because LLM pre-training weights are frozen at a cutoff date, coding agents routinely make costly setup and migration errors:
Tailwind CSS v4 vs. v3: Proposing
npx tailwindcss init -p,tailwind.config.js, and@tailwind base;in a Tailwind CSS v4 project (which uses@import "tailwindcss";and@tailwindcss/viteor@tailwindcss/postcss).ESLint v9 vs. v8: Generating legacy
.eslintrc.jsonor.eslintignorefiles in an ESLint v9 project that requireseslint.config.mjs(Flat Config).Next.js 15 & React 19: Using synchronous
cookies(),headers(), orparamsin Next.js 15 (where Dynamic Request APIs are asynchronousPromises), or proposing incompatible React 18 / Node.js combinations.Package Manager Mismatch: Suggesting
npm installin a repository locked withpnpm-lock.yaml,bun.lock, oryarn.lock.
How version-compat-mcp Differs from General Documentation MCPs (e.g., Context7)
Dimension | Generic Documentation MCPs |
|
Primary Goal | Retrieve general API docs & tutorials | Ground setup, compatibility & major version migrations in actual project state |
Project Awareness | Unaware of local lockfiles, | Parses |
Compatibility Logic | Probabilistic text search | Deterministic |
Corpus Scope | Broad tutorials & full API reference | Strictly tag-pinned migration guides, breaking changes, and deprecations |
Failure Mode | Silently defaults to | Explicit guardrails ( |
2. Core Architecture
flowchart LR
Agent["Host Agent<br/>(Antigravity / Codex / Cursor / Claude)"] <-->|"JSON-RPC 2.0 (stdio)"| Server["version-compat-mcp"]
subgraph Deterministic["1. Deterministic Engine (Zero RAG / Zero Hallucination)"]
Local["Local File & Lockfile Parser<br/>package.json, pnpm-lock.yaml,<br/>bun.lock, yarn.lock, .nvmrc"]
Registry["npm Registry Abbreviated API<br/>engines.node, peerDependencies,<br/>deprecated (+ ETag Disk Cache)"]
end
subgraph Retrieval["2. Tag-Pinned Retrieval Engine (SQLite FTS5 BM25)"]
SeedDB["Precomputed SQLite FTS5 Index<br/>(seed/index-js-ts.db + SHA-256 Verify)"]
Corpus["Git-Tag Snapshots Only:<br/>Migration Guides, Breaking Changes,<br/>Deprecations & Setup Templates"]
end
Server --> Local
Server --> Registry
Server --> SeedDB
Corpus --> SeedDBStrict Separation of Structured vs. Unstructured Data: Structured data (
package.json, lockfiles, npm registry metadata) is evaluated deterministically without RAG. Unstructured docs (migration guides, breaking changes) are indexed by immutable Git tags in SQLite FTS5.Zero-Config & Precomputed Index: Built on Node.js native
node:sqlite(DatabaseSyncwithFTS5andunicode61 tokenchars '@/_-.')—requiring zero API keys and zero C++node-gypcompilation duringnpxexecution.Strict
stdioProtocol Hygiene:stdoutis strictly reserved for JSON-RPC 2.0 frames. Accidentalconsole.logcalls are intercepted, and internal diagnostics write exclusively toprocess.stderronly whenDEBUG="true"is set.
3. Supported Libraries & Versions
Library | Canonical ID | Indexed Major Versions | Key Migration & Setup Coverage |
Next.js |
|
| Async |
React |
|
|
|
Tailwind CSS |
|
|
|
ESLint |
|
|
|
Vite |
|
| Node.js |
TypeScript |
|
|
|
Node.js |
|
|
|
Supported Package Managers: npm, pnpm (v6–v9 + pnpm-workspace.yaml catalogs), yarn (Classic v1 & Berry v2+), bun (bun.lock & bun.lockb).
4. Quick Start & Host Agent Configuration
Prerequisites
Node.js:
>= 22.5.0
A. Google Antigravity (AGY)
Global MCP Config (~/.gemini/config/mcp_config.json):
{
"mcpServers": {
"version-compat": {
"command": "npx",
"args": ["-y", "version-compat-mcp"]
}
}
}Workspace Rules: This repository also includes workspace rules in
GEMINI.mdandAGENTS.md.
B. OpenAI Codex (CLI & Desktop App)
codex mcp add version-compat -- npx -y version-compat-mcpOr in ~/.codex/config.toml:
[mcp_servers.version-compat]
command = "npx"
args = ["-y", "version-compat-mcp"]
startup_timeout_sec = 15
tool_timeout_sec = 30
enabled = trueC. Cursor
Add to .cursor/mcp.json (project) or ~/.cursor/mcp.json (global):
{
"mcpServers": {
"version-compat": {
"command": "npx",
"args": ["-y", "version-compat-mcp"]
}
}
}(For local development from a cloned repository, use "command": "node" and "args": ["/absolute/path/to/version-compat-mcp/dist/index.js"].)
D. Claude Code & Claude Desktop
claude mcp add version-compat -- npx -y version-compat-mcpE. Smithery CLI
npx -y smithery@latest mcp add eunryong/version-compat-mcp --client cursor
# or for Claude Desktop / Claude Code:
npx -y smithery@latest mcp add eunryong/version-compat-mcp --client claude5. MCP Tools Reference (5 Tools)
Tool Name | Data Source | Description |
| Local file parser (Offline) | Detects Node.js version ( |
| npm Registry API + | Verifies |
| SQLite FTS5 + PM Translator | Returns version-pinned install commands formatted for the project's package manager ( |
| SQLite FTS5 (Tag-Pinned) | Retrieves ordered migration steps, breaking changes, and official codemod commands between |
| SQLite FTS5 BM25 | Searches tag-pinned migration guides, release notes, and deprecations for a specific library version (auto-resolving version from |
6. Real-World Prompt Examples
Once version-compat-mcp is connected to Cursor, Claude Code, Codex, or Antigravity, try asking:
Environment & Compatibility Audit
"Check the current project's Next.js, React, and Node.js versions using
version-compatand let me know if there are any peerDependency or engine compatibility issues."Tailwind CSS v3 → v4 Upgrade
"We want to upgrade Tailwind CSS from v3.4 to v4.0 in this repository. Inspect our project environment first, then give me the exact migration steps, config changes, and commands for our package manager with official source URLs."
ESLint v8 → v9 Flat Config Migration
"Migrate our
.eslintrc.jsonand.eslintignoresetup to ESLint v9 Flat Config. Cite the official ESLint v9 migration docs."Next.js 14 → 15 Breaking Changes
"What breaking changes affect
cookies(),headers(), andparamswhen upgrading from Next.js 14.2 to 15.0, and what is the official codemod command?"
7. Safety & Epistemic Guardrails
No Silent
"latest"Substitution (status: "ambiguous_version"): When a version is omitted without aproject_path, or spans multiple majors (>=13.0.0 <16.0.0), the server refuses to guess"latest"and returns candidate versions.Zero Search Results ≠ Feature Removed (
status: "no_results_found"): Returnsepistemic_notice: "NO_EVIDENCE_DO_NOT_ASSUME_REMOVED"so the host agent never falsely claims an API was removed simply because no breaking-change chunk matched.Explicit Unsupported Scope (
status: "unsupported_library"): Immediately identifies libraries outside the 7 supported targets.Read-Only Execution: Commands and codemods are returned as strings; the server never executes shell commands.
8. Documentation Sources and Data Policy
version-compat-mcpdoes not claim ownership of third-party documentation.Every search result and migration guide step includes original
source_urllinks and version metadata (git_tag,version,collected_at,upstream_license).Indexed documents are strictly limited to migration guides, release notes, deprecation notices, and compatibility-related content. Full documentation websites and general tutorials are excluded.
Documentation sources are collected from official repositories or official documentation sites pinned to immutable Git tags (recorded in
seed/metadata.json).Third-party documentation remains subject to its original license, terms of service, and copyright policy. See
NOTICE.mdandTHIRD_PARTY_NOTICES.mdfor complete attribution details.Upstream maintainers can request modification or removal of any indexed snapshot by opening an issue at https://github.com/Eunryong/version-compat-mcp/issues.
9. Privacy & Security Policy
100% Local Execution: Runs locally on your machine over
stdio. No source code or.envfiles are ever read or uploaded.No Telemetry: Zero analytics or tracking. Outbound network calls are limited to npm registry metadata lookups (
registry.npmjs.org) and can be disabled completely viaVERSION_COMPAT_OFFLINE=1.SHA-256 Integrity: Precomputed index databases are verified against
seed/index-js-ts.db.sha256andseed/manifest.jsonbefore loading.See
SECURITY.mdfor full details.
10. Known Limitations & Roadmap
Current Scope (Phase 1): Focused on the 7 core JS/TS libraries (
node,typescript,react,nextjs,vite,tailwindcss,eslint) using SQLite FTS5 BM25 keyword/symbol retrieval.Phase 2 Roadmap: Hybrid retrieval combining BM25 with local ONNX query embeddings (
transformers.js+sqlite-vecusingXenova/bge-small-en-v1.5) and automated GitHub Actions release asset index updates.Phase 3 Roadmap: Modular ecosystem collections (
@version-compat/mcp-core+ on-demand ecosystem indexes) so large ecosystems can be downloaded selectively into~/.cache/version-compat-mcp/.
11. Testing with MCP Inspector & Evaluation Suite
# Build TypeScript + SQLite FTS5 seed index (manifest.json, index-js-ts.db.sha256, metadata.json)
npm run build
# Run unit tests, 8 fixture project tests, safety guardrail tests, and stdio integration test
npm test
# Run golden dataset retrieval & guardrail benchmark (Recall@1, Recall@5, MRR@10, Leakage)
npm run eval
# Verify MCP protocol via official MCP Inspector CLI
npm run inspect:cli
# Launch interactive MCP Inspector Web UI
npm run inspect
# Verify npm package tarball before publishing
npm pack --dry-run12. License
MIT License. See LICENSE for details.
For third-party documentation and software/model attribution, see NOTICE.md and THIRD_PARTY_NOTICES.md.
Available Tools
5 toolscheck_dependency_compatibilityA
Verifies engines.node, peerDependencies cross-compatibility, and deprecation notices deterministically using npm registry abbreviated metadata.
| Name | Required | Description | Default |
|---|---|---|---|
| dependencies | Yes | Map of production dependencies and their version or range (e.g. {"next": "15.0.3", "react": "18.2.0"}) | |
| devDependencies | No | Optional map of devDependencies and their version or range (e.g. {"eslint": "9.14.0", "typescript": "5.7.2"}) | |
| runtime_version | No | Target Node.js runtime version (e.g. "20.11.0"). If omitted, engines.node checks are reported as unverified. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It usefully discloses that results are deterministic and that npm registry abbreviated metadata is the source, plus what categories are checked, but says nothing about network behavior, failure modes, or what an incompatible result looks like.
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?
A single tightly packed sentence that front-loads the verb and the three check categories, with the metadata source as a trailing qualifier. No padding or redundancy.
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?
It enumerates the checks performed, which is the key information for a validation tool, and there is no output schema requiring explanation. Minor gap: it does not hint at the shape of the verdict (per-dependency results vs. a single pass/fail).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: each of the three parameters is documented in the schema, including the behavior when runtime_version is omitted. The description adds no parameter-level meaning beyond that, so the baseline 3 applies.
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 ("Verifies") and precisely enumerates the resources checked: engines.node, peerDependencies cross-compatibility, and deprecation notices. This clearly separates it from siblings like detect_project_environment or get_upgrade_steps, though it never names an alternative explicitly.
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?
No explicit when-to-use or when-not-to-use statement, and no sibling is named. The scope (compatibility verification against npm metadata) implies the pre-upgrade/validation scenario, but the agent must infer it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
detect_project_environmentA
Detects Node.js runtime, package manager (npm/pnpm/yarn/bun), locked dependency versions, and config paradigms (ESLint flat config, Tailwind v4 CSS-first, Next.js App/Pages router, tsconfig) from local project files without network calls.
| Name | Required | Description | Default |
|---|---|---|---|
| project_path | Yes | Absolute path to the project or workspace package root directory containing package.json |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden; it usefully discloses that detection is local and network-free, which is real behavioral value. However it omits failure/error behavior (e.g. missing package.json), whether it is strictly read-only, and any output shape, leaving notable gaps for an unannotated tool.
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?
A single front-loaded sentence opens with the verb and then enumerates the detectable items. The parenthetical lists are dense but each item is informative, so nearly every token earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with no output schema, the description enumerates what will be detected, which effectively conveys the return content. It is nearly complete, missing only error conditions and confirmation that the operation is non-mutating.
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 a single parameter at 100% schema description coverage, so the schema already documents project_path fully. The description adds only the loose notion of 'local project files' and no syntax or format detail beyond the schema, so the baseline of 3 applies.
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 ('Detects') and enumerates the exact resources: Node.js runtime, package manager, locked dependency versions, and specific config paradigms. The read-only, local-only framing ('from local project files') clearly separates it from the sibling tools, which concern compatibility checking, setup guides, and upgrade steps.
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 phrase 'from local project files without network calls' implies a first-step, offline detection context, but the description never states when to reach for this tool versus siblings like check_dependency_compatibility or get_upgrade_steps. Usage is inferable but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_upgrade_stepsA
Retrieves step-by-step migration guides, breaking changes, and official codemod commands between two versions of a library (e.g. Tailwind v3 -> v4, ESLint v8 -> v9, Next.js v14 -> v15) with GitHub tag source URLs.
| Name | Required | Description | Default |
|---|---|---|---|
| library | Yes | Target library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint) | |
| focus_area | No | Optional keyword or section filter (e.g. "flat config", "caching", "async request", "postcss") | |
| to_version | Yes | Target version after upgrade (e.g. "4.0.0", "9.14.0", "15.0.3") | |
| from_version | Yes | Current version before upgrade (e.g. "3.4.1", "8.57.0", "14.2.0") | |
| package_manager | No | Optional package manager to format codemod and upgrade commands accurately |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It does disclose the nature of the output (guides, breaking changes, codemod commands, GitHub tag source URLs), which is useful, but says nothing about read-only safety, authentication, rate limits, or result size/pagination.
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?
One densely packed sentence that front-loads the core capability and then illustrates it with concrete version-pair examples. No filler, though the trailing parenthetical is long enough that it could be split for readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description usefully enumerates what comes back (migration steps, breaking changes, codemod commands, source URLs). The 5-parameter surface is fully covered by the schema, and no annotations exist to contradict. Only the absence of any guidance on result size or failure modes keeps it from a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters including focus_area and package_manager are fully documented in the schema. The description adds no syntax or format guidance beyond the schema, so baseline 3 is appropriate.
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?
Specific verb ('Retrieves') plus concrete resource ('step-by-step migration guides, breaking changes, and official codemod commands between two versions'), with real-world examples (Tailwind v3->v4, ESLint v8->v9). It implicitly separates itself from search_versioned_docs and get_versioned_setup_guide by scoping to a version-to-version upgrade, though it never names a sibling.
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 is implied by the 'between two versions' framing, so an agent can infer this is the tool for upgrade planning. However there is no explicit when-to-use, when-not-to-use, or routing against the sibling tools (e.g. check_dependency_compatibility vs this one).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_versioned_setup_guideB
Returns citation-backed installation commands (formatted for the project's package manager), initial configuration file examples, and obsolete patterns to avoid for a specific library version.
| Name | Required | Description | Default |
|---|---|---|---|
| library | Yes | Target library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint) | |
| target_version | Yes | Target version to set up (e.g. "4.0.0", "15.0.3", "9.14.0"). Do NOT pass "latest" without checking project versions. | |
| package_manager | Yes | Project package manager detected from detect_project_environment | |
| runtime_version | No | Optional Node.js runtime version (e.g. "20.11.0") | |
| framework_context | No | Optional host framework context (e.g. setting up tailwindcss v4 inside vite vs nextjs) |
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 does usefully disclose the output shape (citation-backed commands, config examples, obsolete patterns), which implies a read-only retrieval operation, but it says nothing about permissions, rate limits, determinism, or whether results are cached/stale. Adequate but incomplete for an unannotated tool.
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?
A single front-loaded sentence listing the three returned artifacts (commands, config examples, obsolete patterns), with zero filler. It is dense but every clause maps to real output content.
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 read-only retrieval tool with fully documented parameters and no output schema, the description conveys the substance of what comes back. The main gap is routing versus siblings like get_upgrade_steps, but the core call decision is covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters including enums and the 'do NOT pass latest' warning. The description only adds that commands are formatted for the project's package manager and scoped to a specific version, which lightly reinforces package_manager and target_version but adds little 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 states a specific verb-and-resource pair — returns installation commands, config file examples, and obsolete patterns for a specific library version — which is far more concrete than the tool name alone. It implicitly separates itself from check_dependency_compatibility and search_versioned_docs by being a setup-oriented, version-pinned guide, though it never names a sibling explicitly.
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 when-to-use guidance, no prerequisites, and no mention of alternatives such as get_upgrade_steps or search_versioned_docs. The agent must infer from the name and description that this is the setup path rather than the upgrade or general-docs path.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_versioned_docsA
Searches tag-pinned migration guides, release notes, and deprecation notices for a specific library version using SQLite FTS5 (BM25). Resolves version from project_path lockfile if version is omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query: config key, API symbol, error message, or migration topic | |
| top_k | No | Maximum number of chunks to return (default: 5) | |
| library | Yes | Target library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint) | |
| version | No | Target library version (e.g. "15.0.3", "4.0.0"). If omitted, project_path must be provided to resolve version from lockfile/package.json. | |
| doc_types | No | Optional filter by document type | |
| project_path | No | Optional path to the project root so the tool can resolve the installed version from lockfile/package.json when version is omitted. |
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 usefully discloses the retrieval engine (FTS5/BM25) and the lockfile-based version fallback, but says nothing about result ranking, chunk format, or any limits beyond the search mechanism itself.
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 dense sentences that front-load the purpose and then the version-resolution behavior. Every clause earns its place with no redundancy.
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 six-parameter search tool with no annotations and no output schema, the description adequately covers purpose and the version fallback, but omits what a result looks like and how ranking/filtering behaves. It is workable but leaves gaps an agent might want covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all six parameters thoroughly. The description restates the version-resolution fallback but adds no syntax or format detail beyond the schema, making the baseline 3 appropriate.
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 (searches) and a well-scoped resource (tag-pinned migration guides, release notes, deprecation notices for a specific library version). It clarifies its retrieval mechanism (SQLite FTS5/BM25), but does not explicitly distinguish itself from siblings like get_versioned_setup_guide or get_upgrade_steps.
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 is implied by the resource description (find version-specific migration information), and the version-resolution fallback is noted, but there is no explicit when-to-use-this-vs-alternatives guidance naming the sibling tools.
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.
5 tool updates
v0.1.0- First observed
check_dependency_compatibility - First observed
detect_project_environment - First observed
get_upgrade_steps - First observed
get_versioned_setup_guide - First observed
search_versioned_docs
TDQS
Scored across 5 tools
Tools target distinct lifecycle stages: environment detection, compatibility verification, setup guide retrieval, upgrade path retrieval, and documentation search. Minor overlap exists between get_versioned_setup_guide and search_versioned_docs, but descriptions clarify scope (specific guide vs general search).
All tools follow a consistent snake_case verb_noun pattern (detect_, check_, get_, search_). The naming is clear and predictable across the set.
Five tools appropriately cover the setup and upgrade assistance domain. Each tool has a unique role and the count is well-scoped without redundancy.
Core workflow from environment detection through compatibility checks to setup/upgrade guidance is covered. Minor gap: no tool to list available library versions or suggest possible upgrades, though search_versioned_docs partially mitigates this.
Related MCP Connectors
Verify npm packages before your AI agent installs them: hallucinations, advisories, API drift.
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
Package intelligence for AI agents across npm, PyPI, crates.io and deps.dev. No API keys.
Check exact npm/PyPI upgrades for evidence-backed breaking changes; query APIs and components.
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables AI agents to safely upgrade JavaScript and TypeScript projects through dependency analysis, upgrade path detection, breaking change identification, codemod application, and PR summary generation.148 npmMIT
- AlicenseAqualityDmaintenanceGives coding agents the exact installed version of each dependency in a project from node_modules and lockfile, preventing deprecated API usage by grounding them in reality.39 npmMIT
- AlicenseAqualityAmaintenanceEnables AI coding agents and CI to vet npm dependencies before they reach the lockfile, flagging hallucinated, slopsquatted, or otherwise risky packages with evidence-backed verdicts.361 npm4MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI coding agents to verify, compare, and safely upgrade npm packages by scoring packages from public signals and sandboxed co-installation, detecting breaking API surface changes, and rewriting code that upgrades break.29 npm8MIT