L’interface est localisée ; les présentations et documents des Skills sont traduits automatiquement par IA dans votre langue. Le code, les commandes, chemins et termes techniques restent en version originale, et le document de l’auteur fait foi.
Explorer les Skills
Déploiement et opérations · SKILL.md

mcp-tool-validator

mcp-tool-validator

Validate MCP (Model Context Protocol) server tools end-to-end after code changes. Use this skill whenever the user is building, modifying, or deploying an MCP server and needs to verify that all registered tools actually work — not just that the server starts. Triggers on mentions of "MCP server", "MCP tools", "tool validation", "tools/list", "tools/call", …

Independent GitHub snapshot · Automated classification · Original documentation governs

Documentation de la Skill

GitHub

name: mcp-tool-validator description: Validate MCP (Model Context Protocol) server tools end-to-end after code changes. Use this skill whenever the user is building, modifying, or deploying an MCP server and needs to verify that all registered tools actually work — not just that the server starts. Triggers on mentions of "MCP server", "MCP tools", "tool validation", "tools/list", "tools/call", or any task where Docker rebuild + health check is followed by a need to confirm tool behavior. Also triggers when the user wants an automated feedback loop that detects tool failures, fixes code, redeploys, and re-tests until green before raising a PR. Do NOT use for general API testing, unit tests, or non-MCP servers.

MCP Tool Validator

This skill provides a complete, drop-in test harness for validating MCP server tools after code changes. It enforces a strict feedback loop: deploy → validate every tool → fix failures → redeploy → re-validate, capped at 5 iterations, before a PR is raised.

Works for both single-repo and monorepo layouts. Override the defaults table below to match your project structure.

Configuration defaults (override per project)

SettingDefault valueHow to override
Server URLhttp://localhost:8080/mcpSet SERVER_URL env var or edit run_validation.sh
Health URLhttp://localhost:8080/healthSet HEALTH_URL env var
Transporthttp (Streamable HTTP)Pass --transport {stdio,sse,http}
Compose filedocker-compose.ymlSet COMPOSE_FILE env var
Compose servicemcp-serverSet COMPOSE_SERVICE env var
Container name<project>-mcpSet in docker-compose.yml container_name:
Scenarios filetests/scenarios.yamlSet SCENARIOS_FILE env var
Test clienttests/mcp_test_client.pySet TEST_CLIENT env var
Orchestratortests/run_validation.shModify path in CLAUDE.md block
Coverage scriptscripts/validate_coverage.pySet COVERAGE_SCRIPT env var

Monorepo note: If your MCP server lives in a subdirectory (e.g. mcp/<server-name>/), prefix all paths above with that subdirectory. Example: SCENARIOS_FILE=mcp/my-server/tests/scenarios.yaml.

When to use this skill

Use this skill when ANY of the following are true:

  • Code changes were made to your MCP server src/ and the server has been rebuilt/redeployed
  • Health check passes but tool-level behavior is not yet verified
  • The user wants autonomous fix-and-retry behavior before raising a PR touching MCP code

Do NOT use this skill for:

  • Pure unit testing of internal handler logic (use npm test or pytest in your MCP server directory)
  • Non-MCP HTTP APIs (use standard contract testing)
  • Load/performance testing (out of scope)

Core principle

A green health check does not mean the tools work. This skill closes that gap by spawning a real MCP client, calling every tool with declared scenarios, and asserting on protocol shape AND semantic content.

Quick start (the 5-step procedure)

  1. Inventory tools — Run python scripts/validate_coverage.py --server-url $SERVER_URL --scenarios tests/scenarios.yaml --transport http from inside your MCP server directory to verify coverage.
  2. Author scenarios — For each tool, you need: 1 happy path, 1 invalid input, 1 edge case. See references/scenario_schema.md to author or extend scenarios.
  3. Drop in the test client — tests/mcp_test_client.py is the client. No modifications needed for standard use.
  4. Wire the loop — Use tests/run_validation.sh as the orchestrator. It handles build → deploy → wait → validate → report.
  5. Enforce the contract — Copy the feedback-loop block from references/feedback_loop.md into your project's CLAUDE.md.

Lazy-loaded references

Read these only when needed for the current task:

  • references/client_skeleton.md — Read when implementing or modifying the test client itself (transport details, session lifecycle, stdio vs HTTP)
  • references/scenario_schema.md — Read when authoring scenarios or extending the assertion DSL
  • references/assertion_library.md — Read when a scenario needs an assertion type not in the starter set
  • references/feedback_loop.md — Read when configuring the autonomous fix-redeploy-retest loop in CLAUDE.md
  • references/docker_orchestration.md — Read when health-check waits, port conflicts, or compose-file orchestration cause issues

Coverage rules (non-negotiable)

Every tool registered via tools/list MUST have:

  • At least 1 happy-path scenario (name contains happy_path)
  • At least 1 input-validation/error scenario (name contains invalid_input)
  • At least 1 edge case (any other name)

Run python scripts/validate_coverage.py --server-url $SERVER_URL --scenarios tests/scenarios.yaml before committing. It fails if any tool is missing scenarios.

Failure-mode guards

These guards prevent the most common ways autonomous loops produce false-green results:

  1. No silent xfail — Marking a scenario as expected-fail requires a # REASON: <one line> comment AND user approval in the conversation.
  2. No scenario softening — Edits to scenarios.yaml require commit message tag [scenario-update] and a one-line justification.
  3. Loop cap — Default 5 fix-redeploy iterations. After cap, STOP and report with file:line evidence. Do NOT raise PR.
  4. Determinism check — Each scenario runs twice on first failure. If results differ, the scenario is flaky → fix the scenario or the tool, not the loop.
  5. Coverage gate — PR creation is blocked if validate_coverage.py exits non-zero.

Output contract

After running validation, produce a report with:

  • Total tools discovered, total scenarios run, pass/fail counts
  • For each failure: tool name, scenario name, expected vs actual, suspected root cause file:line
  • Iteration count if loop was used
  • Final verdict: GREEN (raise PR) | RED (stop, report) | FLAKY (investigate)
Skills enregistrées