Skip to main content
Glama
xavier777501

DevGuard MCP

by xavier777501

DevGuard MCP

Serveur MCP (Model Context Protocol) qui booste le débogage backend FastAPI/Python et la qualité de code, pour n'importe quel agent : Cline, Claude Code, Cursor…

L'idée : au lieu de laisser l'agent deviner, on lui donne des outils déterministes qui rapportent des faits structurés (assertions échouées, traceback localisé, etc.).

Les 7 outils (v1 complète)

Outil

Pilier

Ce qu'il fait

run_pytest

Runtime

Lance pytest, renvoie échecs structurés (assertion + traceback localisé user vs lib).

call_endpoint

Runtime

Frappe un endpoint HTTP ; sur 422, erreurs de validation Pydantic champ par champ.

get_openapi_schema

Doc vérifiée

Synthétise /openapi.json : routes, params, modèle de corps (champs + requis), codes réponse.

parse_traceback

Runtime

Traceback brut → type, message, frames, cause probable (code utilisateur).

pack_debug_context

Contexte

Condense les fichiers d'un bug en un seul document (repomix, multi-langages) : vision holistique instantanée au lieu de longues navigations.

lint

Qualité

ruff en JSON : chaque violation avec code de règle + lien doc officielle + auto-fixable.

log_debug_note

Mémoire

Note une découverte de debug (anti-boucle) dans .devguard/journal.jsonl.

get_debug_notes

Mémoire

Relit les notes du projet (récentes d'abord, filtre par tag).

Boucle de débogage type

  1. get_debug_notes — repartir de ce qui est déjà connu.

  2. run_pytest / call_endpointvoir l'échec réel (assertion, champ 422).

  3. pack_debug_context(error_text=<le traceback>) — condenser les fichiers du bug en un seul document, pour saisir d'un coup comment ils s'articulent.

  4. get_openapi_schema — connaître le contrat exact de l'endpoint (si API).

  5. corriger, lint pour la qualité, re-run_pytest pour valider.

  6. log_debug_note — consigner la cause pour la prochaine fois.

pack_debug_context est agnostique du langage (repomix + tree-sitter) : il marche sur du Python, JS/TS, Go, Java… même si les autres outils ciblent Python.

Forcer le "pack avant debug" (règle harness, pas MCP)

Un MCP ne peut pas forcer l'agent. Pour que le pack soit systématique, ajoute une règle côté client, ex. dans les règles Cline / CLAUDE.md :

« Avant de déboguer un problème touchant plusieurs fichiers, appelle d'abord pack_debug_context avec le traceback pour obtenir une vue consolidée. »

Related MCP server: code-quality-mcp

Installation (dev)

cd devguard-mcp
uv sync
uv run pytest          # tests du MCP lui-même

Brancher dans Cline

Dans les réglages MCP de Cline (cline_mcp_settings.json) :

{
  "mcpServers": {
    "devguard": {
      "command": "uv",
      "args": ["--directory", "D:/mcp/devguard-mcp", "run", "devguard-mcp"]
    }
  }
}

Puis l'agent peut appeler run_pytest(project_dir="D:/mon-projet-fastapi").

Brancher dans Claude Code

claude mcp add devguard -- uv --directory D:/mcp/devguard-mcp run devguard-mcp

Architecture

src/devguard/
  server.py        entrypoint MCP (enregistre les 7 outils)
  models.py        contrats Pydantic (retours structurés stricts)
  core/
    process.py     exécution sous-process robuste (timeout, utf-8)
    parsing.py     parsers traceback + JUnit XML pytest
  tools/
    debug.py       run_pytest
    api.py         call_endpoint + get_openapi_schema
    quality.py     lint (ruff)
    context.py     pack_debug_context (repomix)
    memory.py      journal de débogage

Prérequis

  • Python ≥ 3.11, uv.

  • Node + repomix (npm i -g repomix) pour pack_debug_context.

Développement

uv sync --extra dev
uv run pytest          # 25 tests
uv run python -m ruff check src/

Available Tools

8 tools
call_endpointA

Appelle un endpoint HTTP (FastAPI) et renvoie un diagnostic STRUCTURE.

Sur un 422, extrait les erreurs de validation Pydantic champ par champ (quel champ, quelle contrainte). Sur serveur injoignable, le dit clairement. A utiliser pour reproduire un bug d'API ou verifier un correctif d'endpoint.

url: URL complete, ex 'http://127.0.0.1:8000/login'. method: GET/POST/PUT/PATCH/DELETE. json_body: corps JSON pour POST/PUT/PATCH. headers: en-tetes additionnels (ex: Authorization). params: query string.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
methodNoGET
paramsNo
headersNo
json_bodyNo
timeout_sNo

TDQS

A4.4/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 full burden. It does disclose key behaviors beyond what the schema shows: that it returns a structured diagnostic, that it handles 422 Pydantic validation errors field-by-field, and that it detects unreachable servers. However, it doesn't disclose details about the HTTP response, error states beyond 422, timeout behaviors, or security aspects of making arbitrary HTTP calls. It discloses the most important behaviors but leaves gaps.

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?

The description is reasonably concise with key information front-loaded in the first sentence, followed by behavioral details and parameter documentation. It's structured well with clear line breaks. Slightly verbose in places but each sentence earns its place — the 422 handling detail and unreachable-server detection are valuable behavioral disclosures.

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?

Given this tool has 6 parameters, 0% schema coverage, no output schema, and no annotations, the description does a solid job of compensating. It documents most parameters, clarifies use cases, and discloses important behavioral traits (422 handling, unreachable server detection). It could add more about what the diagnostic output looks like, but for an HTTP-calling tool this is reasonably complete.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate for all 6 parameters. It does: url ('URL complete, ex...'), method (lists the enum values GET/POST/PUT/PATCH/DELETE), json_body (specifies it's for POST/PUT/PATCH), headers (gives Authorization as example), params (query string). The only undocumented parameter is timeout_s, but given the 0% schema coverage, this is strong compensation for the key parameters.

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?

The description starts with a specific verb+resource ('Appelle un endpoint HTTP (FastAPI)') and clearly states what makes this tool special: it produces a STRUCTURAL diagnostic, extracts Pydantic validation errors field-by-field on 422 responses, and clearly reports unreachable servers. This strongly distinguishes it from siblings like parse_traceback and run_pytest.

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

Usage Guidelines5/5

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

The description explicitly states when to use it: 'A utiliser pour reproduire un bug d'API ou verifier un correctif d'endpoint.' This gives clear usage context and purpose. While it doesn't explicitly name alternative tools for exclusions, the purpose statement is specific enough that an agent can distinguish this from run_pytest or get_openapi_schema based on context.

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

get_debug_notesB

Relit les notes de debogage du projet (les plus recentes d'abord). A consulter en debut d'investigation pour repartir de ce qui est deja connu.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagNo
limitNo
project_dirYes

TDQS

B3.4/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 behavioral disclosure burden. It does note that results come in reverse chronological order (most recent first), which is a useful behavioral trait. However, it doesn't mention whether this is a read-only operation, potential side effects, or how much data is returned beyond the implicit limit.

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?

The description is compact and front-loaded with the core action. The 'why use it' guidance is efficiently integrated into the second sentence. No wasted words, though it could arguably use the space saved to document parameters.

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 read tool with 3 parameters and no output schema, the description is reasonably complete on purpose and usage timing but incomplete on parameter semantics. It gives decent context for when to invoke it (start of investigation) but the agent cannot tell what 'tag' filters or how 'limit' behaves without inspecting the schema, and even the schema lacks descriptions.

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

Parameters2/5

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

Schema description coverage is 0%, so the description bears full responsibility for explaining the 3 parameters (project_dir, tag, limit). The description doesn't mention any of them — it doesn't explain what tag filters by, what limit caps, or what project_dir refers to. With 3 parameters and zero coverage, this is a significant gap.

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

Purpose4/5

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

The description clearly states it reads debug notes from the project (most recent first). It uses a specific verb (read) and resource (debug notes). It distinguishes from siblings like log_debug_note (which writes) and parse_traceback (which analyzes errors). However, it's in French and doesn't explicitly name the alternative tools for differentiation.

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

Usage Guidelines4/5

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

The description explicitly says when to use this tool: 'A consulter en debut d'investigation pour repartir de ce qui est deja connu' — consult at the start of an investigation to build on what is already known. This is clear usage context though it doesn't explicitly state when NOT to use it or name alternatives.

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

get_openapi_schemaA

Recupere le schema OpenAPI d'une app FastAPI en marche et le synthetise : toutes les routes, leurs parametres, le modele de corps attendu (champs + requis) et les codes de reponse. A utiliser AVANT d'appeler un endpoint pour connaitre son contrat exact au lieu de le deviner.

base_url: racine de l'app, ex 'http://127.0.0.1:8000'.

ParametersJSON Schema
NameRequiredDescriptionDefault
base_urlYes
timeout_sNo

TDQS

A3.6/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 burden. It discloses that the tool fetches a live ('en marche') FastAPI app's schema and synthesizes it, which is useful behavioral context about network dependency. However, it doesn't disclose error behavior for unreachable URLs, auth requirements, or whether the synthesis is deterministic, leaving some 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?

The description is compact, around 3 sentences, and leads with the primary purpose before giving the base_url usage hint. The placement of the param note after the main purpose statement is reasonable front-loading, with no filler or redundant content.

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 tool with 2 params, no annotations, and no output schema, the description gives a solid purpose and primary parameter but omits timeout_s semantics and error/prerequisite behavior. It adequately covers the main use case but leaves meaningful gaps for edge cases like unreachable URLs or unexpected schema formats.

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 0%, so the description must compensate. It documents base_url with an example format ('ex http://127.0.0.1:8000'), which is genuinely helpful. However, timeout_s is entirely undocumented in both schema and description, so the description fails to fully cover both parameters.

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 clearly states the verb+resource: 'Recupere le schema OpenAPI d'une app FastAPI en marche' and synthesizes routes, parameters, body model, required fields, and response codes. It distinguishes from siblings by being the schema-fetching tool among endpoint-calling and testing tools, though without explicitly naming a sibling alternative.

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

Usage Guidelines4/5

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

The description explicitly tells the agent to use this tool 'AVANT d'appeler un endpoint' to know the exact contract instead of guessing, which is clear when-to-use guidance. However, it doesn't state when NOT to use it or name alternatives like call_endpoint for direct invocation, so it lacks explicit exclusions.

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

lintA

Analyse le code avec ruff. Renvoie chaque violation avec son code de regle, le lien vers la doc officielle, et si elle est auto-corrigeable. A utiliser pour verifier la qualite avant de valider un changement.

project_dir: racine du projet. target: sous-chemin optionnel.

ParametersJSON Schema
NameRequiredDescriptionDefault
targetNo
timeout_sNo
project_dirYes

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions what violations are returned but does not state whether the tool modifies files (ruff can auto-fix), requires an environment/venv, network access for doc links, or side effects of running. For a tool that runs an external linter, these are meaningful gaps.

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?

Description is compact (roughly 3 sentences) and front-loads the purpose before the parameter notes. Every sentence carries information; there is no fluff. Slightly denser than ideal but efficient.

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?

The tool has no output schema and zero annotation coverage, so the description must do more heavy lifting. It covers purpose, return value shape, and key parameters, but omits side effects (potential auto-fix mutation), environment requirements, and timeout_s semantics. Adequate but with notable gaps for an external-code-analysis tool.

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 coverage is 0%, so the description must compensate. It provides brief meaning for project_dir ('racine du projet') and target ('sous-chemin optionnel'), which maps to the two main parameters. However, timeout_s is entirely undocumented in both description and schema, and parameter format/semantics are minimal.

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?

Description clearly states the tool lints code with ruff, lists the specific return type (violations with rule code, doc link, auto-fixability), and distinguishes it from sibling tools focused on testing, debugging, and API endpoints. Verb 'analyser' + resource 'code avec ruff' is specific and differentiated.

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

Usage Guidelines4/5

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

Explicitly says 'A utiliser pour verifier la qualite avant de valider un changement' (use to verify quality before validating a change), giving clear context for when to invoke. Does not name specific alternatives to exclude, but the sibling context (debug/testing/endpoint tools) makes alternatives obvious.

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

log_debug_noteB

Note une decouverte de debogage dans le journal du projet pour ne pas refaire deux fois la meme hypothese. Ex: 'teste: token expire -> FAUX'.

ParametersJSON Schema
NameRequiredDescriptionDefault
noteYes
tagsNo
project_dirYes

TDQS

B3.4/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 some burden. It clearly describes the write/append nature (logging a note) and the intent (avoiding repeated hypotheses), which conveys behavioral traits. However, it doesn't disclose what file gets modified, whether it's versioned, or output/confirmation behavior.

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?

The description is a single efficient sentence with a helpful example. It front-loads the core purpose and includes a concrete usage example ('teste: token expire -> FAUX'), which is valuable. No wasted words.

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 relatively simple write-tool with 3 params, the description is adequate but not complete. The 'tags' parameter is entirely unexplained, and there's no mention of how the journal is organized or whether notes are searchable. Given there's no output schema and no annotations, more context would help.

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 0%, so the description must carry the parameter meaning burden. The description mentions 'note' via the example and 'journal du projet' implying project_dir, but provides no explicit detail on the 'tags' parameter, which remains undefined in both schema and description.

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

Purpose4/5

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

The description clearly states the tool logs a debugging discovery to the project journal ('Note une decouverte de debogage dans le journal du projet') with a concrete example. It distinguishes from siblings like get_debug_notes (reading) and pack_debug_context (packing context), though doesn't explicitly name them.

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 description mentions the purpose is to avoid repeating the same hypothesis ('pour ne pas refaire deux fois la meme hypothese'), implying when to use it. However, it provides no explicit exclusions or guidance about when NOT to use it versus siblings like get_debug_notes or pack_debug_context.

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

pack_debug_contextA

Condense les fichiers pertinents d'un bug en UN SEUL document (repomix), pour une vision holistique instantanee au lieu de longues navigations. Agnostique du langage. A appeler AVANT de deboguer un probleme multi-fichiers.

Fournir SOIT error_text (traceback/log -> fichiers extraits automatiquement), SOIT files (liste explicite). scope='dirs' packe les dossiers entiers. compress=True + remove_comments=True -> code ultra-dense (moins de tokens).

ParametersJSON Schema
NameRequiredDescriptionDefault
filesNo
scopeNofiles
styleNoxml
compressNo
error_textNo
project_dirYes
remove_commentsNo

TDQS

A4.3/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 full behavioral disclosure burden. It explains the output (repomix single document) and how error_text triggers automatic file extraction, compress/remove_comments behavior. However, it doesn't disclose side effects (does packing write a file? modify anything?), authentication needs, or limits on file count/size.

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?

Three compact paragraphs, front-loaded with the core purpose. Every sentence earns its place: purpose, usage timing, parameter semantics, and options are all covered efficiently. Slightly dense typography without accents but structurally sound.

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 7-param tool with 0% schema coverage, no output schema, and no annotations, this description does substantial work. It covers the either/or parameter pattern (error_text vs files), behavioral modes (compress, remove_comments), and when-to-use guidance. Missing: no mention of what the output document looks like or how it's returned, and no explicit exclusion of when NOT to use it, but overall well-covered for its complexity.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate for 7 undocumented parameters. It adds meaning for error_text (traceback/log -> auto extraction), files (explicit list), scope ('dirs' packs whole folders), compress, and remove_comments (produces ultra-dense code). Only style and project_dir are not semantically explained beyond their names.

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?

Clearly states the verb (pack/condense) and resource (pertinent files into one repomix document), and explicitly distinguishes from sibling tools by framing it as a holistic aggregation step ('vision holistique instantanee au lieu de longues navigations'). The 'Agnostique du langage' note adds scope clarity.

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

Usage Guidelines5/5

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

Explicitly states WHEN to call ('A appeler AVANT de deboguer un probleme multi-fichiers') and provides alternatives between error_text vs files, plus scope='dirs' behavior. Though siblings aren't explicitly named, clear usage context is established for when to use vs not use this tool.

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

parse_tracebackA

Transforme un traceback Python brut (ou une repr d'echec pytest) en structure : type d'exception, message, frames localisees, et la frame la plus probable de la cause (derniere du code utilisateur, pas d'une librairie).

ParametersJSON Schema
NameRequiredDescriptionDefault
traceback_textYes

TDQS

A3.9/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 of behavioral disclosure. The description states it returns a structured output specifying exception type, message, frames, and the most probable cause frame (last user code frame, not library). This discloses the output format and heuristic behavior (cause detection), which is useful transparency for a parse function. It doesn't discuss edge cases (malformed input, empty traces) or side effects, but as a pure parsing tool that's less critical.

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?

The description is a single, front-loaded sentence that efficiently conveys the transformation behavior, output fields, and a key heuristic. It's compact with no filler. It could arguably benefit from an explicit statement of when to use it, but as a standalone technical description it's well-structured and concise.

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?

The tool has a single parameter with 0% schema description coverage, but the description clearly indicates the input is a raw Python traceback or pytest failure repr, which compensates well for the single unknown parameter. There is no output schema, and the description adequately enumerates the returned structure (exception type, message, frames, likely cause frame). Given the tool's modest complexity (one input, structured output), the description is reasonably complete, though it doesn't mention what happens with malformed or non-traceback input.

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

Parameters4/5

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

While schema description coverage is 0%, there is only one parameter (traceback_text) whose semantics are well clarified by the description mentioning 'traceback Python brut (ou une repr d'echec pytest)'. The description explicitly defines what sort of text the parameter accepts, so the parameter meaning is effectively communicated even though not in the schema. This compensates for the 0% schema coverage.

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?

The description uses a specific verb ('Transforme') with a concrete resource (raw Python traceback / pytest failure repr) and a clear output target (structured: exception type, message, localized frames, most likely cause frame). It clearly distinguishes from siblings like run_pytest, lint, and call_endpoint. The inclusion of the heuristic behavior (last user code frame rather than library frame) adds specificity beyond a generic 'parse' description.

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 description implies its usage context (parsing tracebacks from failing pytest runs) but does not explicitly state when to use it versus alternatives or when not to use it. There are no sibling tools that obviously compete for this function among the listed names, so the lack of explicit exclusions is somewhat mitigated, but the description relies on inference rather than explicit guidance about its role in a debugging workflow.

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

run_pytestA

Lance pytest et renvoie un resultat STRUCTURE (assertions echouees, attendu/recu, traceback localise). A utiliser des qu'un test echoue ou pour verifier un correctif.

project_dir: racine du projet a tester. test_filter: cible optionnelle - chemin, node id 'file.py::test_x', ou mot-cle -k.

ParametersJSON Schema
NameRequiredDescriptionDefault
timeout_sNo
project_dirYes
test_filterNo

TDQS

A3.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries full burden of behavioral disclosure. It mentions the return is 'STRUCTURED' (French-focused), but doesn't disclose timeout behavior, whether it modifies state, installs dependencies, or the exact output format. For a tool that executes code (running tests), behavioral transparency is notably thin — it doesn't warn about potential 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.

Conciseness5/5

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

Compact description with a clear lead sentence about behavior and output, followed by concise parameter documentation. Zero wasted words, front-loaded with the most important behavioral contract.

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 tool that executes tests, the description covers purpose and parameters well, but lacks output schema details (none exist), so the structured result format is only vaguely referenced. Could mention timeout_s default and any side effects of running tests (e.g., creates temp files). Not fully complete for a code-executing tool.

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

Parameters4/5

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

Schema coverage is 0%, so the description must compensate. It explains project_dir (project root to test) and test_filter including path, node id format 'file.py::test_x', and -k keyword options. This adds meaningful syntax and format guidance beyond the bare schema. timeout_s remains undocumented but is less critical given its default.

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?

Description states it runs pytest and returns a STRUCTURED result with failed assertions, expected/received, and localized traceback. It clearly distinguishes this from siblings like parse_traceback (which parses tracebacks) and lint (static analysis). The verb+resource+output structure is specific.

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

Usage Guidelines4/5

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

States when to use: 'as soon as a test fails or to verify a fix.' Clearly differentiates from sibling tools implicitly (running tests vs parsing tracebacks). However, it doesn't explicitly name alternatives like call_endpoint or lint, but the context is clear for a test-running tool.

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. 8 tool updatesv0.1.0
    • First observedcall_endpoint
    • First observedget_debug_notes
    • First observedget_openapi_schema
    • First observedlint
    • First observedlog_debug_note
    • First observedpack_debug_context
    • First observedparse_traceback
    • First observedrun_pytest

TDQS

A3.8/5.0

Scored across 8 tools

Disambiguation4/5

Most tools have clearly distinct purposes: running code (run_pytest, call_endpoint, lint), inspecting contracts (get_openapi_schema), parsing errors (parse_traceback), and managing debug state (pack_debug_context, log_debug_note, get_debug_notes). The only mild overlap is between run_pytest/call_endpoint (both execute and return structured diagnostics) but their domains—tests vs API—are clear.

Naming Consistency4/5

Tool names follow a consistent verb_noun pattern throughout: parse_traceback, run_pytest, call_endpoint, pack_debug_context, log_debug_note, get_debug_notes, get_openapi_schema, lint. The only deviation is 'lint' which lacks a noun target, and get_openapi_schema/get_debug_notes mix 'get' with different noun shapes, but the overall pattern is coherent and readable.

Tool Count5/5

8 tools is a well-scoped set for a debugging/dev-workflow server. Each tool maps to a distinct step in the debugging lifecycle: parse, execute tests, execute API calls, fetch API contracts, lint, pack context, log notes, retrieve notes. No obvious bloat or redundancy.

Completeness4/5

The surface covers the full debugging workflow from reproduction (run_pytest, call_endpoint), to error analysis (parse_traceback), to knowledge management (log/get_debug_notes), to context gathering (pack_debug_context), to quality (lint) and contract discovery (get_openapi_schema). Minor gaps: no generic log-reading or environment inspection tool, and no tool to understand test output formatting beyond pytest, but these are workable gaps.

Maintenance

ActivitySlowing
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that provides tools for introspecting and analyzing FastAPI applications, including route discovery, model schema extraction, and source code viewing. It enables users to explore API structures, generate documentation, and debug dependency injection hierarchies through natural language.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides deterministic Python code quality analysis using flake8, mypy, McCabe, and vulture, enabling LLMs to access real linting and type checking results.
    1
    -
  • A
    license
    A
    quality
    C
    maintenance
    Probes your live API and classifies why each endpoint failed (root cause, evidence, and a calibrated confidence level), exposed over MCP so your AI assistant debugs from evidence instead of guessing. Works with FastAPI, Express, Next.js, tRPC, and GraphQL.
    8
    10 npm
    2
    Apache 2.0