152 reglas con postura: enforce bloquea el PR, prefer se justifica. Clean Code, SOLID y agentes.
Maintain this server? Claim it
Call this server's tools from your browser. Nothing to install.
Requests go through mcptry because browsers can't call most MCP servers directly. Header values are sent to the server for that request only and are never stored or logged.
Tool list from our last check. Connect live to refresh it.
Devuelve una regla, smell o meta-heurística completa por su rule_id. Ejemplos de rule_id: CC-FN-01, SOLID-DIP-01, SMELL-14, WATR-MH-02.
This tool isn't marked read-only, so it may change something on the server or in an account you connected.
Pick your client. Values in capitals, like YOUR_TOKEN, are yours to fill in.
claude mcp add --transport http watr-software-oracle https://watr-software-oracle.onrender.com/mcp
Devuelve una regla, smell o meta-heurística completa por su rule_id. Ejemplos de rule_id: CC-FN-01, SOLID-DIP-01, SMELL-14, WATR-MH-02.
| Argument | Type | Description |
|---|---|---|
| rule_id* | string |
{
"type": "object",
"title": "get_ruleArguments",
"required": [
"rule_id"
],
"properties": {
"rule_id": {
"type": "string",
"title": "Rule Id"
}
}
}Opinión del corpus sobre un fragmento, con una probabilidad por regla. Diferencia con `review_code`: ahí recibes las reglas y juzgas tú, así que dos clientes sobre el mismo diff pueden discrepar. Aquí el corpus se moja: una pregunta por regla en alcance, y el stance decide qué umbral aplica. ⚠️ NO es una compuerta, y no lo cuelgues de un CI. Medido sobre 13 pares reales (26 mediciones, 6 autores, 2018–2026): deja pasar el 38% de las violaciones, y el barrido completo de umbrales no encuentra nada mejor porque el límite es la resolución del instrumento, no dónde se corta. Para lo que sí sirve: ordenar qué mirar primero y decirte con qué regla, que son 11 aciertos de 13 al comparar un antes contra un después. ⚠️ Manda el fragmento a api.typesafe.ai, un tercero. `review_code` no sale de esta máquina: si el código no puede salir, usa ése.
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| language | string |
{
"type": "object",
"title": "judge_codeArguments",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"language": {
"type": "string",
"title": "Language",
"default": ""
}
}
}Mapa del corpus: dominios, temas y los rule_id de cada uno, con su stance.
No arguments.
{
"type": "object",
"title": "list_domainsArguments",
"properties": {}
}Devuelve el estándar WATR que aplica a un fragmento, para que TÚ emitas el veredicto. Este servidor no juzga el código: entrega las señales estructurales que observa, las reglas aplicables con su stance, las meta-heurísticas que gobiernan el juicio, y el formato de salida obligatorio. El razonamiento y el veredicto son tuyos — la consistencia la pone el corpus.
| Argument | Type | Description |
|---|---|---|
| code* | string | |
| language | string |
{
"type": "object",
"title": "review_codeArguments",
"required": [
"code"
],
"properties": {
"code": {
"type": "string",
"title": "Code"
},
"language": {
"type": "string",
"title": "Language",
"default": ""
}
}
}Busca las reglas del estándar WATR que aplican a una consulta o a un fragmento. La consulta debe ir **en inglés**: el corpus está en inglés y la búsqueda es léxica, así que una consulta en español devuelve poco o nada. Traduce la intención antes de llamar ("catch vacío" -> "empty catch swallowing error"). Devuelve top-k con rule_id y stance; usa get_rule para el texto completo.
| Argument | Type | Description |
|---|---|---|
| k | integer | |
| query* | string |
{
"type": "object",
"title": "search_practicesArguments",
"required": [
"query"
],
"properties": {
"k": {
"type": "integer",
"title": "K",
"default": 5
},
"query": {
"type": "string",
"title": "Query"
}
}
}We read every tool's name, description and inputs the way the model will, looking for instructions hidden from you. A clean result means no warning signs, not a guarantee. Scanned Nov 3, 2026.
No readOnlyHint / destructiveHint annotations, so clients can't tell a read from a write without asking.
Fix: Add annotations to each tool, e.g. { readOnlyHint: true } for tools that only read.