Skip to main content
Glama

version-compat-mcp

"Your agent reads the wrong docs. version-compat makes it read the right version."

npm version Smithery License: MIT Node.js MCP Zero Config

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

  1. Why version-compat-mcp? (And How It Differs from Generic Doc MCPs)

  2. Core Architecture

  3. Supported Libraries & Versions

  4. Quick Start & Host Agent Configuration

  5. MCP Tools Reference (5 Tools)

  6. Real-World Prompt Examples

  7. Safety & Epistemic Guardrails

  8. Data Collection, Upstream Licenses & Attribution Policy

  9. Privacy & Security Policy

  10. Known Limitations & Roadmap

  11. Testing with MCP Inspector & Evaluation Suite

  12. License


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/vite or @tailwindcss/postcss).

  • ESLint v9 vs. v8: Generating legacy .eslintrc.json or .eslintignore files in an ESLint v9 project that requires eslint.config.mjs (Flat Config).

  • Next.js 15 & React 19: Using synchronous cookies(), headers(), or params in Next.js 15 (where Dynamic Request APIs are asynchronous Promises), or proposing incompatible React 18 / Node.js combinations.

  • Package Manager Mismatch: Suggesting npm install in a repository locked with pnpm-lock.yaml, bun.lock, or yarn.lock.

How version-compat-mcp Differs from General Documentation MCPs (e.g., Context7)

Dimension

Generic Documentation MCPs

version-compat-mcp

Primary Goal

Retrieve general API docs & tutorials

Ground setup, compatibility & major version migrations in actual project state

Project Awareness

Unaware of local lockfiles, .nvmrc, or config style

Parses package.json, lockfiles, .nvmrc, eslint.config.*, tsconfig.json locally

Compatibility Logic

Probabilistic text search

Deterministic semver verification against npm registry (engines, peerDependencies, deprecated)

Corpus Scope

Broad tutorials & full API reference

Strictly tag-pinned migration guides, breaking changes, and deprecations

Failure Mode

Silently defaults to "latest" or hallucinates

Explicit guardrails (ambiguous_version, NO_EVIDENCE_DO_NOT_ASSUME_REMOVED)


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 --> SeedDB
  1. Strict 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.

  2. Zero-Config & Precomputed Index: Built on Node.js native node:sqlite (DatabaseSync with FTS5 and unicode61 tokenchars '@/_-.')—requiring zero API keys and zero C++ node-gyp compilation during npx execution.

  3. Strict stdio Protocol Hygiene: stdout is strictly reserved for JSON-RPC 2.0 frames. Accidental console.log calls are intercepted, and internal diagnostics write exclusively to process.stderr only when DEBUG="true" is set.


3. Supported Libraries & Versions

Library

Canonical ID

Indexed Major Versions

Key Migration & Setup Coverage

Next.js

nextjs

v13, v14, v15

Async cookies()/headers()/params, fetch caching defaults, React 19 peer deps, @next/codemod

React

react

v18, v19

ref as a prop (forwardRef deprecation), ReactDOMTestUtils.act removal, useActionState, TypeScript codemods

Tailwind CSS

tailwindcss

v3, v4

@import "tailwindcss", @theme CSS-first config, @tailwindcss/vite, @tailwindcss/postcss, @tailwindcss/upgrade

ESLint

eslint

v8, v9

eslint.config.mjs Flat Config default, .eslintignore removal, @eslint/migrate-config, typescript-eslint

Vite

vite

v5, v6

Node.js >=18/20/22 requirements, Environment API, Sass modern API default, CJS Node API removal

TypeScript

typescript

v5

moduleResolution: "bundler", verbatimModuleSyntax (importsNotUsedAsValues deprecation)

Node.js

node

v18, v20, v22

engines.node compatibility, require(esm) stabilization, built-in node:sqlite

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.md and AGENTS.md.

B. OpenAI Codex (CLI & Desktop App)

codex mcp add version-compat -- npx -y version-compat-mcp

Or in ~/.codex/config.toml:

[mcp_servers.version-compat]
command = "npx"
args = ["-y", "version-compat-mcp"]
startup_timeout_sec = 15
tool_timeout_sec = 30
enabled = true

C. 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-mcp

E. 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 claude

5. MCP Tools Reference (5 Tools)

Tool Name

Data Source

Description

detect_project_environment

Local file parser (Offline)

Detects Node.js version (.nvmrc, .node-version, volta, engines), package manager (packageManager > lockfile), locked versions (node_modules > lockfile > package.json), and config paradigms (flat_config, v4_css_first, app_router).

check_dependency_compatibility

npm Registry API + semver

Verifies engines.node, peerDependencies, and deprecated status deterministically with ETag caching. Reports conflict, warning, or unverified (workspace:*).

get_versioned_setup_guide

SQLite FTS5 + PM Translator

Returns version-pinned install commands formatted for the project's package manager (pnpm add -D, bun add, etc.), config templates, and obsolete patterns to avoid.

get_upgrade_steps

SQLite FTS5 (Tag-Pinned)

Retrieves ordered migration steps, breaking changes, and official codemod commands between from_version and to_version with GitHub tag source_url citations.

search_versioned_docs

SQLite FTS5 BM25

Searches tag-pinned migration guides, release notes, and deprecations for a specific library version (auto-resolving version from project_path if omitted).


6. Real-World Prompt Examples

Once version-compat-mcp is connected to Cursor, Claude Code, Codex, or Antigravity, try asking:

  1. Environment & Compatibility Audit

    "Check the current project's Next.js, React, and Node.js versions using version-compat and let me know if there are any peerDependency or engine compatibility issues."

  2. 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."

  3. ESLint v8 → v9 Flat Config Migration

    "Migrate our .eslintrc.json and .eslintignore setup to ESLint v9 Flat Config. Cite the official ESLint v9 migration docs."

  4. Next.js 14 → 15 Breaking Changes

    "What breaking changes affect cookies(), headers(), and params when 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 a project_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"): Returns epistemic_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-mcp does not claim ownership of third-party documentation.

  • Every search result and migration guide step includes original source_url links 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.md and THIRD_PARTY_NOTICES.md for 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 .env files 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 via VERSION_COMPAT_OFFLINE=1.

  • SHA-256 Integrity: Precomputed index databases are verified against seed/index-js-ts.db.sha256 and seed/manifest.json before loading.

  • See SECURITY.md for 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-vec using Xenova/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-run

12. 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 tools
check_dependency_compatibilityA

Verifies engines.node, peerDependencies cross-compatibility, and deprecation notices deterministically using npm registry abbreviated metadata.

ParametersJSON Schema
NameRequiredDescriptionDefault
dependenciesYesMap of production dependencies and their version or range (e.g. {"next": "15.0.3", "react": "18.2.0"})
devDependenciesNoOptional map of devDependencies and their version or range (e.g. {"eslint": "9.14.0", "typescript": "5.7.2"})
runtime_versionNoTarget Node.js runtime version (e.g. "20.11.0"). If omitted, engines.node checks are reported as unverified.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
project_pathYesAbsolute path to the project or workspace package root directory containing package.json

TDQS

A3.7/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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

For a one-parameter tool with no output schema, 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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
libraryYesTarget library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint)
focus_areaNoOptional keyword or section filter (e.g. "flat config", "caching", "async request", "postcss")
to_versionYesTarget version after upgrade (e.g. "4.0.0", "9.14.0", "15.0.3")
from_versionYesCurrent version before upgrade (e.g. "3.4.1", "8.57.0", "14.2.0")
package_managerNoOptional package manager to format codemod and upgrade commands accurately

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
libraryYesTarget library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint)
target_versionYesTarget version to set up (e.g. "4.0.0", "15.0.3", "9.14.0"). Do NOT pass "latest" without checking project versions.
package_managerYesProject package manager detected from detect_project_environment
runtime_versionNoOptional Node.js runtime version (e.g. "20.11.0")
framework_contextNoOptional host framework context (e.g. setting up tailwindcss v4 inside vite vs nextjs)

TDQS

B3.2/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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

There is no when-to-use guidance, no 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesSearch query: config key, API symbol, error message, or migration topic
top_kNoMaximum number of chunks to return (default: 5)
libraryYesTarget library name (supported: node, typescript, react, nextjs, vite, tailwindcss, eslint)
versionNoTarget 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_typesNoOptional filter by document type
project_pathNoOptional path to the project root so the tool can resolve the installed version from lockfile/package.json when version is omitted.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 5 tool updatesv0.1.0
    • First observedcheck_dependency_compatibility
    • First observeddetect_project_environment
    • First observedget_upgrade_steps
    • First observedget_versioned_setup_guide
    • First observedsearch_versioned_docs

TDQS

A3.7/5.0

Scored across 5 tools

Disambiguation4/5

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).

Naming Consistency5/5

All tools follow a consistent snake_case verb_noun pattern (detect_, check_, get_, search_). The naming is clear and predictable across the set.

Tool Count5/5

Five tools appropriately cover the setup and upgrade assistance domain. Each tool has a unique role and the count is well-scoped without redundancy.

Completeness4/5

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

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    Enables AI agents to safely upgrade JavaScript and TypeScript projects through dependency analysis, upgrade path detection, breaking change identification, codemod application, and PR summary generation.
    14
    8 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Gives 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.
    3
    9 npm
    MIT
  • A
    license
    A
    quality
    A
    maintenance
    Enables 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.
    3
    61 npm
    4
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables 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 npm
    8
    MIT