gijon-avisos-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gijon-avisos-mcpTengo una foto de una farola fundida, crea el aviso por mí"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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.
Añade el servidor a tu cliente MCP (ejemplos) o configúralo a mano:
{
"mcpServers": {
"gijon-avisos": {
"command": "npx",
"args": ["-y", "gijon-avisos-mcp"]
}
}
}Verifica:
list_categoriesdebe devolver los 5 tipos (ALU, VIA, SEM, SEN, VER).Pregunta al humano UNA vez su email y guárdalo con la tool
set_identity. Se reutiliza en todos los avisos.Flujo del agente:
create_aviso_from_photo(foto → tipo → preview) → enseña el preview al humano →confirm: true+human_confirmed: true+preview_tokensolo 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ú connode 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.mdInstálalo así (requiere Node 18+):
Sin credenciales: este MCP no necesita tokens ni cuentas. Solo el email del humano (paso 3 del inicio rápido).
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).Identidad: pregunta el email UNA vez y guárdalo con
set_identity(verifica conget_identity).Verifica (
mcp list/test/doctor --probesegún cliente): debes ver 7 tools.Uso: hay skill completa en
skill/SKILL.md. Lo esencial: solo incidencias genuinas;create_aviso_from_photoen fases (tipo → preview → envío solo con "sí" humano +confirm+human_confirmed+preview_token); foto porfile_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 # verificarHermes
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 # verificarDesde código
npm install
npm run build
npx -y -p gijon-avisos-mcp gijon-avisos-mcp-http # HTTP en 127.0.0.1:3002/mcpHerramientas MCP
Tool | Qué hace |
| Email guardado del comunicante (o null). |
| Guarda el email (se pregunta una vez). |
| Tipos de incidencia: ALU, VIA, SEM, SEN, VER. |
| Detalle de un tipo (código y nombre). |
| Sugiere tipos por palabras. |
| Crea un aviso. Dry-run por defecto; |
| Aviso desde foto en fases: tipo → preview (GPS EXIF) y envío solo con |
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:
Tipo (sin
tipo): sugiere y no envía nada.Preview (
confirmausente/false): GPS EXIF (olat/lonmanuales), dirección en texto libre, payload +preview_token. No envía nada.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/GPSServidor 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/mcpVariables: 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 toolscreate_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'.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | Yes | latitud WGS84 | |
| lon | Yes | longitud WGS84 | |
| tipo | Yes | código de list_categories (ALU, VIA, SEM, SEN, VER) | |
| address | Yes | dirección en texto libre (calle y número) | |
| confirm | No | DEBE ser true para ENVIAR de verdad. Por defecto false = dry-run. | |
| identity | No | Sobrescribe la identidad guardada solo para esta llamada | |
| image_path | No | ruta local a UNA foto (se manda como data URL) | |
| description | Yes | descripción del problema (texto que se publicará) |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | sobrescribe el GPS EXIF de la foto | |
| lon | No | sobrescribe el GPS EXIF de la foto | |
| tipo | No | código ALU/VIA/SEM/SEN/VER. Si falta, devuelve sugerencias y no crea nada | |
| address | No | ||
| confirm | No | true = ENVIAR de verdad (requiere preview_token + human_confirmed) | |
| file_id | No | VÍA PREFERIDA en remoto: id de PUT /upload | |
| identity | No | Sobrescribe la identidad guardada solo para esta llamada | |
| image_path | No | ruta local. Solo stdio/CLI en la máquina del servidor | |
| description | No | si falta, se pre-rellena y se marca para revisión | |
| image_base64 | No | ||
| category_hint | No | ||
| preview_token | No | ||
| human_confirmed | No | el humano vio el preview y dijo 'sí' |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | ||
| lang | No |
TDQS
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.
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.
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.
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.
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.
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ó.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| lang | No |
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| lang | Yes | idioma | |
| userEmail | Yes | email del comunicante |
TDQS
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.
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.
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.
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.
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.
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').
| Name | Required | Description | Default |
|---|---|---|---|
| hint | No |
TDQS
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.
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.
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.
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.
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.
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.
7 tool updates
v0.1.1- First observed
create_aviso - First observed
create_aviso_from_photo - First observed
get_category - First observed
get_identity - First observed
list_categories - First observed
set_identity - First observed
suggest_categories
TDQS
Scored across 7 tools
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).
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.
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.
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
Related MCP Connectors
Resolve any government entity worldwide and submit service requests. Open civic data for AI agents.
Provides access to Civic Plus - See Click Fix, allowing you to interact with your data via an LLM.…
- geoOAuthco.thinair
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to interact with IoT device data from a smart city, including public lighting, water, and gas meters. Supports querying and management via the Model Context Protocol.1MIT
- AlicenseBqualityCmaintenanceEnables 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.10MIT
- AlicenseAqualityBmaintenanceEnables 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.9256 npmMIT
- AlicenseBqualityCmaintenanceEnables an AI agent to list municipal services and categories, query existing reports, and create new reports to the Las Palmas de Gran Canaria city council—including from a photo—with human confirmation before submission.8AGPL 3.0