Skip to main content
Glama

gijon-avisos-mcp

Servidor MCP (y CLI de apoyo) para el sistema de avisos del Ayuntamiento de Gijón (CuidaGijón). Permite a un agente listar tipos de incidencia y crear avisos con inteligencia artificial — incluso desde una foto. Sin autenticación: el servicio municipal no pide credenciales.

La finalidad de este proyecto es hacer más fácil que los ciudadanos puedan reportar problemas al Ayuntamiento de Gijón. Saca una foto de la incidencia (una farola fundida, una baldosa rota, un semáforo apagado…), pásasela al agente pidiéndole que genere un aviso para que describa el problema, seleccione el tipo, añada la ubicación y lance el aviso al Ayuntamiento.

Inicio rápido

Gijón no usa credenciales: el SOAP municipal acepta llamadas directas y cada aviso lleva el email del comunicante.

  1. Añade el servidor a tu cliente MCP (ejemplos) o configúralo a mano:

{
  "mcpServers": {
    "gijon-avisos": {
      "command": "npx",
      "args": ["-y", "gijon-avisos-mcp"]
    }
  }
}
  1. Verifica: list_categories debe devolver los 5 tipos (ALU, VIA, SEM, SEN, VER).

  2. Pregunta al humano UNA vez su email y guárdalo con la tool set_identity. Se reutiliza en todos los avisos.

  3. Flujo del agente: create_aviso_from_photo (foto → tipo → preview) → enseña el preview al humano → confirm: true + human_confirmed: true + preview_token solo con su "sí".

Todo corre en tu máquina; los avisos se crean con el email guardado.

Related MCP server: klaxon

Fotos demasiado grandes para el modelo

Algunos modelos rechazan fotos muy grandes (image decode limit exceeded). El servidor reduce en TypeScript (sin dependencias) conservando el GPS, así que el modelo nunca necesita procesar la original:

  • Remoto (HTTP): sube la foto con curl y usa el file_id (los bytes no pasan por el modelo). Requiere el secreto del servidor:

    curl -X PUT --data-binary @foto.jpg \
      -H "Authorization: Bearer ***" \
      'http://127.0.0.1:3002/upload?filename=foto.jpg'
    # → {"file_id":"…","bytes":…}

    El preview devuelve preview_image_base64 (copia reducida) para visión y el envío usa siempre la original como data URL.

  • Local (stdio/CLI): pasa image_path; el servidor lee y reduce sin que el modelo abra el fichero. O reduce tú con node dist/cli.js prep-photo foto.jpg [foto-ligera.jpg].

¿Eres un agente IA? Lee esto primero

La skill (skill/SKILL.md) no se autoinstala: cópiala al directorio de tu cliente y abre sesión nueva.

cp -r skill ~/.hermes/skills/gijon-avisos        # Hermes
cp -r skill ~/.claude/skills/gijon-avisos        # Claude Code
# o descárgala: https://github.com/Naroh091/gijon-avisos-mcp/blob/main/skill/SKILL.md

Instálalo así (requiere Node 18+):

  1. Sin credenciales: este MCP no necesita tokens ni cuentas. Solo el email del humano (paso 3 del inicio rápido).

  2. Instalación según tu cliente (comandos exactos): Claude Code (claude mcp add … -- npx -y gijon-avisos-mcp), Hermes (hermes mcp add … --command npx … --args -y gijon-avisos-mcp) u OpenClaw (openclaw mcp add … --command npx --arg -y --arg gijon-avisos-mcp).

  3. Identidad: pregunta el email UNA vez y guárdalo con set_identity (verifica con get_identity).

  4. Verifica (mcp list / test / doctor --probe según cliente): debes ver 7 tools.

  5. Uso: hay skill completa en skill/SKILL.md. Lo esencial: solo incidencias genuinas; create_aviso_from_photo en fases (tipo → preview → envío solo con "sí" humano + confirm + human_confirmed + preview_token); foto por file_id; la dirección es texto libre y las coordenadas van en el aviso.

Añadir el MCP vía npx

Requiere Node 18+.

Claude Code

claude mcp add gijon-avisos -- npx -y gijon-avisos-mcp
claude mcp list   # verificar

Hermes

hermes mcp add gijon-avisos --command npx --args -y gijon-avisos-mcp
hermes mcp test gijon-avisos   # verificar (lista las 7 tools)

OpenClaw

openclaw mcp add gijon-avisos \
  --command npx \
  --arg -y \
  --arg gijon-avisos-mcp \
openclaw mcp doctor gijon-avisos --probe   # verificar

Desde código

npm install
npm run build
npx -y -p gijon-avisos-mcp gijon-avisos-mcp-http   # HTTP en 127.0.0.1:3002/mcp

Herramientas MCP

Tool

Qué hace

get_identity

Email guardado del comunicante (o null).

set_identity

Guarda el email (se pregunta una vez).

list_categories

Tipos de incidencia: ALU, VIA, SEM, SEN, VER.

get_category

Detalle de un tipo (código y nombre).

suggest_categories

Sugiere tipos por palabras.

create_aviso

Crea un aviso. Dry-run por defecto; confirm: true para enviar.

create_aviso_from_photo

Aviso desde foto en fases: tipo → preview (GPS EXIF) y envío solo con confirm: true + human_confirmed: true + preview_token. Acepta image_base64, image_path o file_id.

Seguridad de envío

create_aviso es dry-run por defecto: devuelve los campos sin crear nada. Solo con confirm: true hace el SOAP real — un aviso real que revisa personal municipal. Envía únicamente incidencias reales.

create_aviso_from_photo exige confirmación humana en fases:

  1. Tipo (sin tipo): sugiere y no envía nada.

  2. Preview (confirm ausente/false): GPS EXIF (o lat/lon manuales), dirección en texto libre, payload + preview_token. No envía nada.

  3. Envío: el agente muestra el preview al humano y espera su "sí"; solo entonces repite la llamada con los MISMOS campos + confirm: true + human_confirmed: true + preview_token. Si cambió cualquier campo, hay que repetir el preview.

Tipos de incidencia

  • ALU — Alumbrado (farolas fundidas o rotas).

  • VIA — Conservación viaria (baches, baldosas, bordillos).

  • SEM — Red Semafórica (semáforos apagados o averiados).

  • SEN — Señalización Viaria (señales caídas o que faltan).

  • VER — Zonas verdes (arbolado, jardines).

Uso como CLI

node dist/cli.js categories
node dist/cli.js identity-set nombre@example.com es
node dist/cli.js create VIA 43.5322 -5.6611 "Calle Corrida 1" -- "Baldosa rota"          # dry-run
node dist/cli.js create VIA 43.5322 -5.6611 "Calle Corrida 1" -- "Baldosa rota" --send   # ENVÍA de verdad
node dist/cli.js from-photo foto.jpg VIA "Baldosa rota"      # preview desde foto
node dist/cli.js prep-photo foto.jpg [foto-ligera.jpg]   # reduce para el modelo, conserva EXIF/GPS

Servidor HTTP (opcional)

Por stdio cada uno corre su copia. La entrada HTTP sirve para exponer el servidor que corre en TU máquina para que un agente en OTRA máquina lo use.

export GIJON_AVISOS_MCP_SECRET=<un-secreto-largo>            # exige x-mcp-secret o Bearer
export GIJON_AVISOS_ALLOWED_HOSTS=tu-host.tu-tailnet.ts.net  # anti DNS-rebinding
npm run start:http     # 127.0.0.1:3002/mcp

Variables: GIJON_AVISOS_HTTP_PORT (3002), GIJON_AVISOS_HTTP_HOST (127.0.0.1), GIJON_AVISOS_HTTP_PATH (/mcp). Expón solo en red privada (p.ej. tailscale serve, nunca funnel). Para persistencia, launchd/pm2/tmux o similar.

Arquitectura

  • src/client.ts — SOAP mínimo (GetTipos/InsertIncidenciaSmartphone), sin auth.

  • src/identity.ts — email en JSON local (0600).

  • src/avisos.ts — núcleo de negocio (reutilizado por MCP y CLI).

  • src/photo.ts — foto: EXIF/GPS, subida a tmp, token de preview.

  • src/types.ts — esquemas zod de entrada + campos de creación.

  • src/mcp.ts — buildServer(): registra las 7 tools (compartido por stdio y HTTP).

  • src/server.ts — entrada stdio · src/http.ts — entrada HTTP (/mcp + PUT /upload) · src/cli.ts — CLI.

Notas

  • Ingeniería inversa del APK "CuidaGijón" v2.5.1 + verificación en vivo de tipos y dry-runs (sin crear avisos reales).

Licencia

AGPLv3. Ver LICENSE.

Available Tools

7 tools
create_avisoA

Crea un aviso. IMPORTANTE: por defecto es DRY-RUN (confirm=false) y solo devuelve los campos que se enviarían, SIN crear nada. Para crear de verdad hay que pasar confirm=true. Usa el email guardado salvo 'identity'.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYeslatitud WGS84
lonYeslongitud WGS84
tipoYescódigo de list_categories (ALU, VIA, SEM, SEN, VER)
addressYesdirección en texto libre (calle y número)
confirmNoDEBE ser true para ENVIAR de verdad. Por defecto false = dry-run.
identityNoSobrescribe la identidad guardada solo para esta llamada
image_pathNoruta local a UNA foto (se manda como data URL)
descriptionYesdescripción del problema (texto que se publicará)

TDQS

A3.9/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 handles the most consequential fact: the default call creates NOTHING and only echoes the fields that would be sent, while confirm=true actually submits. It also discloses that the stored email is used unless 'identity' overrides it. It omits permissions/error behavior and whether the published aviso is publicly visible, keeping 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?

Front-loaded with the highest-risk fact (the dry-run default) before any other detail, and every sentence carries information. Slightly repetitive in restating confirm=false twice across the text, but no real waste.

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 an 8-parameter mutation tool with no annotations and no output schema, the description supplies the missing behavioral contract: what a default call returns and how to actually create. It does not touch image_path or the tipo code list, but those are covered by the schema.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3; the schema already documents confirm, identity, tipo, address, lat/lon, and image_path. The description reinforces the confirm and identity semantics but adds no syntax or format detail beyond what the schema states.

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?

Opens with a specific verb+resource ('Crea un aviso'), so the agent immediately knows this is the notice-creation tool. It does not explicitly differentiate itself from the sibling create_aviso_from_photo, so sibling disambiguation is left to inference.

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 explicit when/when-not guidance: default is dry-run (confirm=false) and real creation requires confirm=true. What it lacks is routing guidance versus the alternative sibling create_aviso_from_photo for photo-based notices.

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

create_aviso_from_photoA

Aviso desde una FOTO en fases. VÍA PREFERIDA: sube la foto con PUT /upload (curl) y pasa file_id; por stdio usa image_path local. Sin tipo → sugiere (need_category). Con todo → preview + preview_token SIN enviar. Envío: MISMOS campos + confirm:true + human_confirmed:true + preview_token (tras 'sí' humano). Sin las tres NO se envía. La foto viaja en el mismo envío (data URL).

ParametersJSON Schema
NameRequiredDescriptionDefault
latNosobrescribe el GPS EXIF de la foto
lonNosobrescribe el GPS EXIF de la foto
tipoNocódigo ALU/VIA/SEM/SEN/VER. Si falta, devuelve sugerencias y no crea nada
addressNo
confirmNotrue = ENVIAR de verdad (requiere preview_token + human_confirmed)
file_idNoVÍA PREFERIDA en remoto: id de PUT /upload
identityNoSobrescribe la identidad guardada solo para esta llamada
image_pathNoruta local. Solo stdio/CLI en la máquina del servidor
descriptionNosi falta, se pre-rellena y se marca para revisión
image_base64No
category_hintNo
preview_tokenNo
human_confirmedNoel humano vio el preview y dijo 'sí'

TDQS

A4.4/5.0
Behavior5/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 so well: it discloses that preview does not send, that sending requires confirm + human_confirmed + preview_token, that missing tipo creates nothing, and that the photo travels as a data URL. These are critical behavioral traits for a mutation tool that would otherwise be invisible.

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?

Dense and telegraphic but appropriately sized for a 13-parameter, multi-phase tool; the workflow phases and send gate are front-loaded. It is information-rich rather than padded, though the compressed phrasing costs some readability.

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

Completeness4/5

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

For a complex mutation tool with no annotations and no output schema, the description covers the phased workflow, the send gate, and the upload alternatives thoroughly. Minor gaps remain on some parameters and nothing is said about the preview response shape beyond preview_token.

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 69%, and the description adds genuine meaning beyond it: file_id as the preferred remote route, image_path restricted to stdio/CLI, confirm requiring the token pair, and the consequence of omitting tipo. A few params (lat/lon/address/identity) are only covered by the schema, keeping it from a 5.

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 ('Aviso desde una FOTO en fases') and immediately frames the two-phase workflow (preview vs send). It does not explicitly name the sibling create_aviso to differentiate the photo-based variant from it, so it falls just 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 Guidelines5/5

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

Explicitly names the preferred upload route (PUT /upload + file_id) versus the stdio-only alternative (image_path), and spells out the two phases: 'Sin tipo → sugiere', 'Con todo → preview + preview_token SIN enviar'. The send requirements are enumerated with the three mandatory fields. Nothing about when to use it versus alternatives is left to inference.

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

get_categoryC

Detalle de un tipo (código y nombre).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes
langNo

TDQS

C2.4/5.0
Behavior2/5

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

No annotations provided, so the description carries the full behavioral burden. It doesn't state whether the tool returns null/error for unknown codes, the shape of the response (name in which language?), or any side effects. For a lookup tool this leaves important behavioral 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?

Single short sentence, front-loaded. However, it is arguably too terse for a tool with two parameters and no schema descriptions, bordering on under-specification rather than pure conciseness.

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?

For a lookup tool with no annotations, no output schema, and 0% schema coverage, the description is incomplete. It omits input parameter meanings, language handling, and error behavior — all of which an agent needs to call it correctly.

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%, yet the description only mentions 'código y nombre' (code and name) as outputs, not inputs. It doesn't explain that 'code' is the required input, nor that 'lang' selects the language (constrained enum). With zero schema coverage, the description should compensate but doesn't.

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

Purpose3/5

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

States it returns details of a 'tipo' (type), which partially aligns with 'category' in the tool name but introduces a different term. Does not distinguish itself from sibling 'list_categories', leaving ambiguity about whether this is retrieval of a single category vs enumeration.

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?

No guidance on when to use this tool versus list_categories or suggest_categories. Condition for use (retrieving a single category by code) is only implied by the required parameter, not stated.

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

get_identityA

Devuelve la identidad guardada (email, idioma) o null si aún no se preguntó.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior4/5

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

With no annotations and no output schema, the description carries the full burden and does disclose the key behavioral fact: the return payload (email, language) and the null case when identity was never captured. It omits any note on persistence or whether the value is cached, but for a trivial parameterless read this is solid coverage.

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 short sentence, front-loaded with the action and resource, with the null case appended as a useful qualifier. No waste.

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 zero-parameter read with no output schema, the description supplies the one thing an agent cannot get from structured fields: what comes back and when it is null. Only a hint about how the identity should be used downstream is missing.

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?

Zero parameters, so the baseline of 4 applies. The description correctly implies no input is required.

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 and resource ('Devuelve la identidad guardada') and even enumerates the returned fields (email, idioma). It contrasts implicitly with the sibling set_identity via the get/set pairing, but never names the alternative explicitly.

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

Usage Guidelines3/5

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

The clause 'o null si aún no se preguntó' implies the usage flow (call set_identity when this returns null), but no explicit when-to-use or alternative routing is stated. Guidance is inferable rather than spelled out.

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

list_categoriesB

Tipos de incidencia (ALU, VIA, SEM, SEN, VER). Sin auth.

ParametersJSON Schema
NameRequiredDescriptionDefault
langNo

TDQS

B3/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 behavioral burden, and it does disclose one real trait: no authentication is required. However, it says nothing about read-only scope, response shape, or caching, so the disclosure is partial for a tool with zero annotation coverage.

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?

Two short fragments with the concrete category codes front-loaded and zero filler. It is efficient, though the telegraphic style borders on under-specification rather than deliberate brevity.

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 simple, no-required-parameter read tool with no output schema, the description is mostly sufficient by revealing the category code set, but the omission of the 'lang' parameter and any statement of what is actually returned leaves gaps. It is adequate rather than complete.

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% and the description never mentions the single 'lang' parameter or its enum values (es, ast), which controls the language of the returned labels. The description fails to compensate for the coverage gap, leaving the parameter's meaning to be inferred.

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 names the resource ('Tipos de incidencia') and lists the concrete category codes (ALU, VIA, SEM, SEN, VER), making the tool's output domain clear despite the terse phrasing. It does not differentiate itself from siblings like get_category or suggest_categories, which keeps it from 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 Guidelines2/5

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

'Sin auth' tells the agent no authentication is needed, which is a genuine precondition, but there is no guidance on when to call this versus get_category or suggest_categories. The agent must infer the distinction from names alone.

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

set_identityB

Guarda el email del comunicante (se pregunta UNA vez y se reutiliza; es la identidad del aviso).

ParametersJSON Schema
NameRequiredDescriptionDefault
langYesidioma
userEmailYesemail del comunicante

TDQS

B3.4/5.0
Behavior3/5

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

With no annotations the description carries the full burden. It discloses a meaningful behavioral trait — the email is stored once and reused, serving as the notice's identity — but says nothing about overwrite semantics if called again, side effects, or auth requirements for a mutation tool.

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

Conciseness4/5

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

A single front-loaded sentence with no waste; the verb and resource lead, and the parenthetical clarifies reuse semantics rather than padding. Slightly terse for the tool's complexity but structurally sound.

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 two-parameter setter with no output schema, the description covers purpose and reuse behavior, but omits the lang parameter's role and return/side-effect expectations. Adequate minimum viable coverage with clear gaps.

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

Parameters3/5

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

Schema description coverage is 100%, with both required parameters documented ("email del comunicante", lang enum), so the schema already does the heavy lifting. The description adds no format or constraint detail beyond what the schema provides; baseline 3 is appropriate.

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

Purpose4/5

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

States a specific verb ("Guarda") and resource ("el email del comunicante"), and adds that this email is the identity of the aviso, which sets it apart conceptually from get_identity. It does not explicitly name the sibling it complements, but the save-versus-get distinction is inferable from the verb.

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?

"se pregunta UNA vez y se reutiliza" implies a usage pattern — call it once and the value persists — which is useful context. However it never says when to call this versus get_identity, nor any preconditions or exclusions, leaving the routing to inference.

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

suggest_categoriesC

Sugiere tipos por palabras (p.ej. 'farola apagada').

ParametersJSON Schema
NameRequiredDescriptionDefault
hintNo

TDQS

C2.7/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 behavioral burden. It discloses only that categories are suggested; it says nothing about read-only safety, whether results are ranked, rate limits, or what the response contains.

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

Conciseness4/5

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

A single compact sentence with the core action front-loaded, followed immediately by a useful example. No padding or redundancy.

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

Completeness3/5

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

For a simple one-parameter suggestion tool with no output schema, the description is minimally adequate but incomplete: it omits what the returned suggestions look like, whether the hint is optional, and any usage context relative to the sibling category tools.

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?

The single optional "hint" parameter has 0% schema description coverage, so the description must carry the burden. It partially compensates by providing an example value ("farola apagada") that illustrates the expected free-text format, but gives no constraints on length, language, or whether the parameter is optional/required.

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

Purpose3/5

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

The description names a verb ("Sugiere") and a resource ("tipos") with a concrete example ("farola apagada"), so the general purpose is inferable. However, "tipos" is vague versus the sibling tools' "categories" terminology (list_categories, get_category), and the description never distinguishes this suggestion behavior from those lookup tools.

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 explicit when-to-use or when-not-to-use guidance. The example implies it is meant for free-text hints, but there is no statement about when an agent should call this instead of list_categories or get_category.

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. 7 tool updatesv0.1.1
    • First observedcreate_aviso
    • First observedcreate_aviso_from_photo
    • First observedget_category
    • First observedget_identity
    • First observedlist_categories
    • First observedset_identity
    • First observedsuggest_categories

TDQS

B3.4/5.0

Scored across 7 tools

Disambiguation4/5

Identity (get/set), category (list/get/suggest), and creation (aviso/photo) tools are largely distinct. Minor overlap exists between create_aviso and create_aviso_from_photo (both create reports, differentiated only by photo input) and between list_categories and suggest_categories (both surface types, one filtered).

Naming Consistency5/5

All seven tools follow a consistent snake_case verb_noun pattern (get_identity, set_identity, list_categories, get_category, suggest_categories, create_aviso, create_aviso_from_photo). No mixing of conventions or vague verbs.

Tool Count5/5

Seven tools is well-scoped for a municipal incident-reporting client, with each tool earning its place (identity, category lookup, and two creation paths). No redundancy or filler.

Completeness3/5

The surface covers identity, category discovery, and report creation (text and photo), but offers no way to list, get, or track previously submitted avisos, nor to update/withdraw them. This creates a dead end for verifying report status, a notable gap for a reporting domain.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    C
    maintenance
    Enables incident management through natural language, with tools for searching, retrieving, creating, updating, and commenting on issues, simulating upstream events, creating GitHub issues, and listing side effects.
    10
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to look up official cadastral parcels across 31 European country and region codes by reference, coordinates, or free-text Spanish address, returning location, area, land use, and outlines while also estimating solar and agricultural potential, market prices, and investment scores.
    9
    256 npm
    MIT