Skip to main content
Glama

forja-mcp

Objetivo: que cualquier IA —incluso un modelo pequeño y gratuito en local— trabaje en proyectos reales y grandes sin perderse, porque forja le dice, con el mínimo de palabras, qué hay en el proyecto, qué está roto exactamente, si su cambio funciona de verdad y qué error ya cometió antes en ese proyecto.

Dónde falla la IA

Respuesta de forja

Contexto limitado: lee archivos enteros y .md

overview, outline, source en cada error, respuestas compactas

Dice "terminado" sin comprobar

gate; un paso sin comprobar nunca es ok

No sabe probar un proyecto desconocido

detección multi-lenguaje + .forja.toml

Se pierde en el bucle de errores

historial fixed/new/seen, errores agrupados por causa, campo next

Repite errores que ya arregló

memoria SQLite por proyecto: recall y avisos de repetido

Tests débiles dan falsa confianza

mutate

Modelos pequeños: poco contexto, tool calling frágil

pocas herramientas, parámetros simples, salida mínima

Principios: funciona con cualquier cliente MCP y modelo · cada carácter cuenta · nunca un falso éxito · sin internet ni sudo · no toca el código salvo fix.

No es un linter, una IA ni un IDE: es el traductor entre las herramientas que ya existen y la IA.

Herramientas

Herramienta

Para qué

overview(path)

Mapa del proyecto en una llamada: lenguajes, carpetas, cómo se comprueba, puntos de entrada, índice de la documentación (solo títulos) y git. En vez de leer README y listar carpetas

outline(path)

Funciones y clases de un archivo o carpeta con su rango de líneas, para leer solo ese trozo

check(path)

Sintaxis, tipos y lint de todos los lenguajes del proyecto, sin ejecutarlo

fix(path)

Aplica las correcciones seguras y dice qué tocó

test(path)

Ejecuta los tests de todos los lenguajes y localiza cada fallo

gate(path)

check + test: la puerta final, ok solo si todo pasa

mutate(path)

¿Los tests sirven? Mete bugs pequeños en copias y mira si los detectan (Python)

recall(path)

Memoria del proyecto: errores que se repiten, abiertos, patrones, recientes, lecciones

learn(path, lesson)

Guarda una lección; aparecerá sola junto a ese error si vuelve

Cada respuesta trae next: el siguiente paso en una frase, para que un modelo pequeño no tenga que deducirlo.

Related MCP server: Fix Memory MCP

Lenguajes

Lenguaje

check

test

Python

ruff + mypy

pytest (+ coverage, mutate)

JavaScript / TypeScript

node --check, tsc y eslint si el proyecto los trae

vitest, node --test

Rust

cargo clippy / check

cargo test

Go

go vet

go test

PHP

php -l

phpunit si está en vendor/bin

Shell (sh/bash)

shellcheck (incluido en forja)

—

fish

fish --no-execute

—

Lua

luac -p

—

JSON / YAML / TOML

interno

—

Cualquier otro

.forja.toml

.forja.toml

Un proyecto con varios lenguajes se revisa entero. Para una herramienta que forja no conoce:

# .forja.toml
[[check]]
name = "phpstan"
cmd = ["vendor/bin/phpstan", "analyse", "--error-format=raw", "--no-progress"]  # salida archivo:línea: mensaje

[[test]]
name = "phpunit"
cmd = ["vendor/bin/phpunit", "--log-junit", "{junit}"]   # {junit}: forja lee ese XML

[forja]
disable = ["data"]   # opcional

Memoria por proyecto

Cada check, test, gate y edición vista por el hook se guarda sola en una base SQLite por proyecto (~/.local/share/forja/), fuera de la carpeta del proyecto. forja anota qué errores aparecen, cuáles se arreglan y cuáles vuelven después de arreglados. recall devuelve un resumen corto y ordenado por importancia (repetidos → críticos → patrones → recientes → lecciones), y un error que la IA repite llega con memory: "repetido: ya lo arreglaste…". Si una herramienta no llegó a ejecutarse, nada se da por resuelto.

Cómo ahorra contexto

  • overview / outline: medido en proyectos reales, −84 % a −92 % frente a leer los .md y listar archivos, y −98 % frente a leer un script entero para encontrar una función.

  • Forma compacta: sin campos vacíos; un check limpio es {"ok": true, "next": ...}.

  • source: cada error trae su línea de código.

  • Duplicados agrupados (ruff + mypy, tests con la misma causa) y trazas limpias.

  • Historial: en llamadas repetidas lo ya visto llega resumido (full=true para todo).

Reglas que nunca se rompen

  • Una herramienta que no pudo ejecutarse aparece con ran: false y el resultado nunca es ok: true: un paso sin comprobar no cuenta como éxito.

  • Un proyecto sin tests no pasa test: "no hay tests" no es "los tests pasan".

  • forja no escribe en el proyecto (cachés en ~/.cache/forja-mcp, memoria en ~/.local/share/forja), salvo fix, que lo pide explícitamente.

  • mutate trabaja en copias temporales y se niega a empezar si los tests no pasan sin mutar.

Instalación

Requisitos: Python 3.12+ y uv. Las herramientas de cada lenguaje (php, cargo, go, node…) se usan si están instaladas; shellcheck, ruff y mypy vienen incluidas.

git clone <este repo> forja-mcp && cd forja-mcp
uv sync
uv run pytest            # comprueba que todo funciona en tu máquina

El servidor es <ruta>/forja-mcp/.venv/bin/forja-mcp (MCP por stdio).

Claude Code

claude mcp add --scope user forja -- <ruta>/forja-mcp/.venv/bin/forja-mcp

Hook opcional que revisa cada archivo editado (en .claude/settings.json del proyecto):

{"hooks": {"PostToolUse": [{"matcher": "Edit|Write|MultiEdit",
  "hooks": [{"type": "command", "command": "<ruta>/forja-mcp/.venv/bin/forja-hook", "timeout": 90}]}]}}

opencode

En ~/.config/opencode/opencode.jsonc:

"mcp": {
  "forja": { "type": "local", "command": ["<ruta>/forja-mcp/.venv/bin/forja-mcp"], "enabled": true }
}

Modelo local gratuito (Ollama)

Hace falta un modelo que haga tool calling de verdad (la familia qwen2.5-coder, por ejemplo, devuelve la llamada como texto y no ejecuta nada). Con 4 GB de VRAM funciona qwen3.5:4b:

ollama pull qwen3.5:4b
ollama launch opencode --model qwen3.5:4b     # o configúralo como proveedor openai-compatible
ollama launch claude --model qwen3.5:4b       # Claude Code contra el modelo local

Con modelos pequeños, desactiva en el proyecto los servidores MCP que no uses: cada herramienta extra ocupa contexto en todos los mensajes y le cuesta elegir la correcta.

Estructura

src/forja_mcp/
  server.py           servidor MCP y campo `next`
  model.py            formato único, forma compacta y combinación de lenguajes
  memoria.py          memoria SQLite por proyecto
  mapa.py             overview y outline
  files.py            archivos del proyecto (respeta .gitignore)
  parsers.py          lectores compartidos (formato gcc)
  junit.py            lector de JUnit XML
  history.py          comparación con la llamada anterior
  runner.py           ejecución de comandos con tiempo límite
  hook.py             hook PostToolUse
  adapters/
    base.py           clase base y revisión archivo por archivo
    python.py, python_mutation.py
    scripting.py      PHP, Lua, JavaScript/TypeScript
    compiled.py       Rust, Go
    shell.py          sh/bash, fish
    data.py           JSON, YAML, TOML
    custom.py         .forja.toml

Añadir un lenguaje

Una clase que herede de BaseAdapter con name, extensions y check; test, fix y mutate son opcionales (por defecto "no aplica"). Regístrala en ADAPTERS (adapters/__init__.py). per_file y parse_gcc resuelven la mayoría de los casos en pocas líneas, y junit_run cualquier runner de tests que escriba JUnit XML.

Licencia

Copyright (C) 2026 Asced1807

forja-mcp es software libre: puedes usarlo, estudiarlo, modificarlo y compartirlo bajo los términos de la GNU Affero General Public License v3.0 o posterior.

En resumen: cualquiera puede usarlo y mejorarlo, pero debe mantener este aviso de autoría, y si distribuye una versión modificada o la ofrece como servicio por la red, tiene que publicar su código bajo la misma licencia. Las contribuciones son bienvenidas.

Available Tools

9 tools
checkA

Comprueba el proyecto sin ejecutarlo: sintaxis, tipos y lint de TODOS sus lenguajes.

Args:
    path: ruta absoluta al proyecto o a cualquier archivo dentro de él.
    timeout: segundos máximos por herramienta.
    full: true para recibir todos los campos, incluido el detalle de lo ya visto.
ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
pathYes
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and does well: it discloses that nothing is executed (implying a safe, non-mutating check), the coverage dimensions (syntax/types/lint, all languages), and per-tool timeout behavior. It does not explicitly state permissions or side-effect safety, which keeps it short of a 5.

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 core behavior is front-loaded in a single tight sentence; the Args block is docstring-style but each line is informative. Minimal waste, though the Args formatting is slightly verbose for a description field.

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?

An output schema exists, so return values need not be explained, and the description covers purpose, parameters, and non-execution behavior. The 'detalle de lo ya visto' notion is a bit opaque, but overall it is complete enough for an agent to invoke correctly.

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, and it documents all three params: path accepts an absolute project path or any file within it, timeout is max seconds per tool, and full returns all fields including already-seen detail. This adds real meaning beyond the bare schema titles.

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 (Comprueba) and resource (el proyecto) with concrete scope: syntax, types, and lint across all languages. The phrase 'sin ejecutarlo' implicitly separates it from test/run siblings, though no sibling is named 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?

The contrast with execution ('sin ejecutarlo') implies when to use it versus test, but no alternative tools are named and no when-not guidance is given. Usage must be inferred from the sibling list.

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

fixC

Aplica las correcciones automáticas SEGURAS y vuelve a comprobar.

Modifica archivos: `fixed` dice qué se corrigió y dónde.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
timeoutNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/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, and it does disclose two important traits: it writes to files and it re-checks after fixing. It still omits permissions needed, reversibility/rollback behavior, whether the re-check can fail the call, and idempotency, so the behavioral picture is only partially filled in.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

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

Two short sentences with the core action front-loaded and the side effect immediately after, so nothing is padded. But the brevity here reads as under-specification rather than efficiency, since essential calling context is absent.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

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

An output schema exists, so return values need not be described, yet the definition still omits parameter semantics, prerequisites, and usage routing for a mutation tool that has no annotations to lean on. It is insufficient for an agent to call this confidently versus its siblings.

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% for both parameters, so the description must compensate. It implies a file target via 'Modifica archivos' but never explains 'path' semantics (file vs directory vs glob) or the 'timeout' parameter at all, leaving the schema's bare titles as the only guidance.

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 action ('Aplica las correcciones automáticas SEGURAS y vuelve a comprobar') and discloses the side effect ('Modifica archivos'), so the verb and resource are clear. However, 'fix' is generic and the description never contrasts itself with siblings like check, mutate, or gate, leaving the agent to infer the distinction.

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?

The word 'SEGURAS' hints that only a safe subset of corrections is applied and implies some other operation handles unsafe ones, but no explicit when-to-use, prerequisite, or alternative tool is named. Nothing tells the agent whether to run check/test/gate before or after this.

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

gateA

check + test en una llamada: la puerta final. ok solo si TODO pasa.

Args:
    path: ruta absoluta al proyecto o a cualquier archivo dentro de él.
    coverage: true para incluir las líneas sin cubrir por los tests.
    timeout: segundos máximos por fase.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
timeoutNo
coverageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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, and it does disclose the meaningful all-or-nothing semantics ('ok solo si TODO pasa'). It stops short of stating whether the tool is read-only or executes project code, what happens on partial failure, or any permission/runtime constraints — only that ok requires everything to pass.

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?

One summary line followed by a compact argument list — no filler, and the outcome rule is front-loaded before the parameter details. Appropriate size for a three-parameter tool.

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?

Return values are covered by the existing output schema and all parameters are explained, so the definition is largely serviceable. The remaining gap is usage context: nothing says when this gate is preferable to the separate 'check' and 'test' sibling tools, leaving selection ambiguous for an agent with all three available.

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 description coverage is 0%, so the description must compensate, and it documents all three parameters: 'path' must be absolute and may point at the project or any file inside it, 'coverage' includes uncovered lines, and 'timeout' is seconds per phase. The 'per phase' detail is genuinely additive beyond the schema's bare number type, though value formats/limits are still unstated.

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 concrete composite action — 'check + test en una llamada' — and its outcome rule ('ok solo si TODO pasa'), which distinguishes it from the standalone 'check' and 'test' siblings. It is clear enough to select, but it never explains what 'check' or 'test' actually verify within this server, so the agent must infer the scope from sibling names.

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?

'La puerta final' implies this is intended as a terminal validation step, and 'check + test en una llamada' implies it replaces running both separately. However, there is no explicit when-to-use/when-not statement, no mention of prerequisites (e.g. whether tests must be discoverable), and no direct routing against the 'check' and 'test' siblings.

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

learnA

Guarda una lección del proyecto para no repetir un error (p. ej. "usar Decimal, nunca float, para dinero"). Aparecerá sola junto a ese error si vuelve a ocurrir.

Args:
    path: ruta absoluta al proyecto.
    lesson: la lección, en una frase.
    about: opcional, a qué se aplica: código de error (F821), archivo o nombre de test.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
aboutNo
lessonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations, so the description carries the full behavioral burden. It does disclose a real trait — the lesson reappears on its own next to the matching error — but says nothing about persistence, deduplication on repeat calls, or any write-side permissions/effects.

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?

Front-loads the core action, then the example, then the behavioral note, followed by a tidy Args block. Efficient overall, with only mild redundancy between the main sentence and the Args section.

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?

An output schema exists, so return values need not be explained, and parameters are well covered. For a simple write tool it is nearly complete; the main gap is no link to the 'recall' sibling that would make the store/retrieve pair obvious.

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?

With 0% schema coverage, the description fully documents all three params: path as an absolute project path, lesson as a one-sentence statement, and about as optional scoping (error code like F821, file, or test name). This adds substantial meaning and format hints the bare schema lacks.

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+resource ("Guarda una lección del proyecto") and reinforces it with a concrete example ("usar Decimal, nunca float, para dinero"). It does not explicitly differentiate itself from the sibling 'recall', which likely retrieves these lessons, so it falls short of the top band.

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?

Gives clear usage context: record a lesson so you don't repeat an error, and notes it will resurface automatically alongside that error. It never states when NOT to use it nor names 'recall' as the retrieval alternative, so no explicit exclusions.

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

mutateA

¿Los tests son buenos? Mete bugs pequeños en COPIAS del código y mira si los tests los detectan. Cada superviviente es algo que ningún test comprueba (algunos son equivalentes: júzgalos). Hoy solo para Python.

Args:
    path: ruta absoluta al proyecto.
    file: opcional, solo muta este archivo (ruta relativa al proyecto).
    max_mutants: máximo de mutaciones a probar.
    timeout: segundos máximos en total.
ParametersJSON Schema
NameRequiredDescriptionDefault
fileNo
pathYes
timeoutNo
max_mutantsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does well: it discloses that it operates on COPIES (non-destructive to the original), that each survivor indicates untested behavior, that some mutants are equivalent and require judgment, and that it is currently Python-only. It omits resource/timing expectations and test-framework prerequisites, but the core behavior is well conveyed.

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 key mechanism is front-loaded in the first sentence, and parameters are cleanly structured in an Args block. The survivor/equivalence note is useful but slightly expands the prose; nothing is egregiously wasteful.

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 complex, multi-step operation this covers the mechanism, all parameters, and the language limitation, and an output schema exists so return values need not be documented. Absent any annotations, it could say more about runtime expectations or required test tooling, but it is largely complete.

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 description coverage is 0%, so the description must compensate and it documents all four parameters. The path/file entries add real meaning (absolute project path vs. optional project-relative single file), while max_mutants and timeout are closer to restatements though timeout adds 'en total' (overall budget).

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 names a specific technique (mutation testing: injecting small bugs into COPIES of the code and checking whether tests catch them) with a concrete resource (the project/code under test). It is clearly distinguishable from siblings like 'test' (runs tests) or 'fix' (repairs code). An agent knows exactly what this does.

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 opening question '¿Los tests son buenos?' establishes the use case — assessing test quality — and 'Hoy solo para Python' is an explicit scope limitation. However, it never routes the agent among siblings (e.g., when to reach for mutate vs test) nor states when not to use it.

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

outlineB

Funciones y clases de un archivo, o de todos los de una carpeta, con su rango de líneas (p. ej. "L12-40 def calcular(x) -> int"). Lee después solo ese rango, no el archivo entero.

Args:
    path: ruta absoluta a un archivo o carpeta del proyecto.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 full burden. It makes the read-only nature reasonably clear by describing an outline listing and advising a subsequent range read, and it explains the folder-wide scope. It says nothing about limits or cost when pointing at a large directory, permissions, or failure modes on invalid paths.

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?

Very short and front-loaded: purpose first, then the range-read advice, then the argument note. The Args block is near-redundant with the schema and the sample output string adds a little noise, but the size is appropriate for a single-parameter tool.

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?

With an output schema present, the description needn't explain return structure, yet it still conveys the line-range format usefully. For a 1-parameter tool it is broadly complete, but the folder case (recursion depth, file-type filtering) and behavior on large trees are unaddressed, and the description is written in Spanish while the surrounding tool metadata is English.

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% — the schema only says a required string named 'path'. The description meaningfully adds that it must be an absolute path and may refer to either a file or a folder, which the schema does not convey. It leaves ambiguity around relative paths, symlinks, or glob patterns unresolved.

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 concrete output: the functions and classes of a file, or of every file in a folder, including their line ranges. That is a specific resource and scope rather than a restatement of the name. It does not, however, distinguish itself from the sibling 'overview', which an agent could easily confuse it with.

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?

It gives a follow-up workflow hint ('Lee después solo ese rango, no el archivo entero'), which implies the intended use — cheap navigation before a targeted read. It offers no explicit when-to-use versus 'overview', 'learn' or 'check', nor any exclusion criteria, so guidance remains implied rather than stated.

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

overviewA

Mapa del proyecto en una llamada: lenguajes, carpetas, cómo se comprueba, puntos de entrada, índice de la documentación (solo títulos con su línea) y estado de git. Úsalo al empezar en vez de leer README o listar carpetas.

Args:
    path: ruta absoluta al proyecto o a cualquier archivo dentro de él.
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

With no annotations, the description carries the full burden and does reasonably well: it discloses the exact data harvested (languages, folders, build/check commands, entry points, doc index, git status), notes the doc index is limited to titles with line numbers, and frames the value as one call instead of many. It never explicitly states the operation is read-only or harmless, which is the main missing behavioral fact for a zero-annotation tool.

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?

The schema is front-loaded in the first sentence, the usage rule comes second, and parameter notes last. Every clause enumerates a distinct piece of returned content, so nothing is filler despite the density.

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?

An output schema exists, so return-value documentation is not required, and the description nonetheless orients the agent on scope, usage and the single parameter. For a one-parameter read/aggregate tool this is close to complete; only the absence of any safety/permission statement and any sibling disambiguation keeps it from a 5.

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, and it does: 'ruta absoluta al proyecto o a cualquier archivo dentro de él' specifies that the path must be absolute and that any file inside the project resolves correctly, which is real semantic value the bare string schema does not convey. It stops short of giving path format examples or error behavior.

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 opens with a specific verb+resource ('Mapa del proyecto en una llamada') and then enumerates exactly what the map contains: lenguajes, carpetas, cómo se comprueba, puntos de entrada, índice de documentación y estado de git. An agent knows precisely what it gets back. It does not differentiate itself from siblings such as 'outline' or 'recall', which may overlap with the documentation-index portion, so it falls short of a 5.

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?

'Úsalo al empezar en vez de leer README o listar carpetas' gives an explicit trigger (at project start) and an explicit alternative it replaces (manual README reading / folder listing). That is concrete when-to-use guidance, though it names no sibling-tool alternative and gives no when-not-to-use condition.

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

recallA

Memoria del proyecto, ordenada por importancia: errores que se repiten, errores abiertos, patrones (el mismo tipo de error en varios sitios), lo resuelto hace poco y las lecciones guardadas. Se llena sola con cada check/test. Úsalo antes de cambiar código en un proyecto en el que ya trabajaste.

Args:
    path: ruta absoluta al proyecto.
    topic: opcional, filtra por archivo, código de error o texto (p. ej. "cli.py").
ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
topicNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.8/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 disclosure burden. It usefully reveals that the memory 'se llena sola con cada check/test' (auto-populated) and is ordered by importance, which is real behavioral context. It omits permission/scope behavior and whether results are exhaustive or truncated, though the output schema covers the return shape.

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?

Front-loaded summary of purpose followed by a use instruction and a clean Args block. The enumeration of memory categories is slightly long but each item disambiguates the return content, so it 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?

An output schema exists, so return values needn't be explained, and the description instead covers purpose, data sources, ordering logic, when to use, and both parameters. Given no annotations, it could say more about safety/read-only nature, but the essentials for correct invocation are present.

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 description coverage is 0%, so the description must compensate, and it does: 'path' is defined as an absolute project path, and 'topic' as an optional filter by file, error code, or free text, with a concrete example ('cli.py'). This adds meaning well beyond the bare schema titles, though it could mention path formats or filter precedence.

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 resource (project memory) and enumerates exactly what it returns, ordered by importance: recurring errors, open errors, patterns, recently resolved items, saved lessons. The verb is implicit in the name 'recall' but the content is concrete. It does not explicitly differentiate itself from sibling 'overview', which may overlap in reporting project state.

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?

'Úsalo antes de cambiar código en un proyecto en el que ya trabajaste' gives clear when-to-use context. However, it offers no exclusions and does not name an alternative sibling (e.g., overview or outline) for adjacent needs, so the routing guidance is clear but incomplete.

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

testB

Ejecuta los tests de todos los lenguajes del proyecto y localiza cada fallo.

Args:
    path: ruta absoluta al proyecto o a cualquier archivo dentro de él.
    selector: opcional, limita a un archivo o test concreto.
    coverage: true para ver qué líneas no ejecuta ningún test (Python).
    timeout: segundos máximos.
    full: true para recibir todos los campos, incluido el detalle de lo ya visto.
ParametersJSON Schema
NameRequiredDescriptionDefault
fullNo
pathYes
timeoutNo
coverageNo
selectorNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full behavioral burden and falls short: it never says whether running tests is read-only or can modify the workspace/environment, that execution may be long-running (implied only by the 300s default timeout), or what happens on timeout. It does disclose the cross-language scope and the Python-only nature of coverage, which is some added context.

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 purpose is front-loaded in one sentence, followed by a compact Args block with no filler. The parameter restatement mirrors the schema, but at 0% schema coverage that repetition is functional rather than wasteful.

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?

An output schema exists, so return values need not be explained, and all five parameters are documented. What is missing is the routing information an agent needs to pick this over siblings and any warning about execution side effects or duration, leaving the definition adequate but incomplete for an execution-style 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 description coverage is 0%, so the description must compensate, and it does: all five parameters are explained, including the important detail that 'path' accepts an absolute path to the project or any file inside it, that 'selector' narrows to one file/test, and that 'coverage' is Python-specific. 'full' is described somewhat cryptically ('el detalle de lo ya visto') but still adds meaning 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 opening sentence states a specific verb and resource ('Ejecuta los tests de todos los lenguajes del proyecto') plus the outcome ('localiza cada fallo'), which is far more informative than the bare name 'test'. It does not, however, distinguish itself from plausible siblings like 'check', 'gate', or 'fix'.

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 statement of when to use this tool versus the sibling tools (check, gate, fix), no prerequisites, and no exclusions. The only usage signal is implicit in the parameter docs (selector limits scope), which the agent must infer.

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. 9 tool updatesv0.1.0
    • First observedcheck
    • First observedfix
    • First observedgate
    • First observedlearn
    • First observedmutate
    • First observedoutline
    • First observedoverview
    • First observedrecall
    • First observedtest

TDQS

A3.6/5.0

Scored across 9 tools

Disambiguation4/5

Each tool has a fairly distinct role: learn/recall handle memory (write vs read), check/test/gate handle verification, and fix/mutate/overview/outline are clearly separate operations. The main risk is check vs gate (gate is explicitly 'check + test in one call') and overview vs outline, but the descriptions clarify the boundaries well.

Naming Consistency4/5

All nine tools use a single lowercase word with no style mixing, which is highly consistent. It is not a verb_noun pattern and mixes verbs (learn, fix, test, mutate, recall, check) with nouns (overview, outline, gate), but the stylistic convention is uniform and readable.

Tool Count5/5

Nine tools is well-scoped for a code QA/testing server, with each tool covering a distinct aspect (memory, static check, tests, combined gate, mutation testing, safe fixes, project mapping, file outline). No obvious redundancy or padding.

Completeness4/5

The surface covers a solid lifecycle: explore (overview/outline), verify (check/test/gate), improve (fix), assess test quality (mutate), and accumulate knowledge (learn/recall). Minor gaps exist, such as no way to remove/update a stored lesson, but core workflows are covered.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    F
    maintenance
    Self-improving, verifiable memory for AI coding agents. Learns how you work, stops repeating mistakes, models each project, recalls the right lesson at the right moment. Every memory is signed and tamper-evident. Local-first.
    8
    2
    Apache 2.0
  • A
    license
    Not graded
    quality
    C
    maintenance
    Persistent, compact project memory for AI coding agents, enabling them to read a small digest instead of re-scanning the codebase every session, saving tokens and costs.
    30 npm
    2
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides persistent cross-session AI memory, code graph analysis, and subagent context compression so coding agents can resume work instantly and avoid re-reading the codebase.
    Elastic 2.0