convocatorias-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| CONVOCATORIAS_AUTO_INGEST_DIAS | No | Número máximo de días de atraso del índice que se ingieren automáticamente antes de responder a una consulta. Con hasta 7 días de atraso (valor por defecto) el servidor ingiere los días que falten; con más de 7 días no bloquea la consulta y avisa de que hay que ejecutar 'convocatorias-mcp ingest'. | 7 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| search_convocatoriasA | Busca convocatorias en el índice local de boletines oficiales. Devuelve metadatos y enlaces, no el texto completo: para leer los requisitos de una convocatoria concreta, llama después a get_convocatoria. IMPORTANTE: los títulos del BOE están escritos en lenguaje administrativo, no coloquial. Una oposición nunca se titula "oposiciones": se titula "Resolución de 8 de octubre de 2026, de la Subsecretaría, por la que se convoca proceso selectivo para ingreso en el Cuerpo...". Traducir la intención del usuario a ese vocabulario es tu trabajo, y el filtro más potente casi siempre es la sección, no las palabras. Qué contiene cada sección:
Cómo construir una buena consulta:
Hay una tabla pequeña de sinónimos que traduce algunos términos coloquiales ("oposiciones" -> "proceso selectivo"), pero es una red de seguridad y no cubre el idioma entero: no te apoyes en ella. Args: keywords: Palabras que deben aparecer TODAS en el título, sin distinguir mayúsculas ni acentos. Usa el vocabulario del boletín, no el del usuario. seccion: Sección del boletín, como "II.B" o "III". Es el filtro más útil; úsalo siempre que la intención del usuario esté clara. desde: Fecha de publicación mínima, en formato AAAA-MM-DD. hasta: Fecha de publicación máxima, en formato AAAA-MM-DD. watchlist: Nombre de una watchlist del usuario para quedarte solo con lo que ella hace coincidir. Si el usuario dice "lo de siempre" o "mis becas", mira primero qué watchlists tiene en la respuesta de source_health. include_vistas: Por defecto se omiten las ya enviadas en un digest. Ponlo a true si el usuario quiere revisar también esas. limite: Máximo de resultados, entre 1 y 200. |
| get_convocatoriaA | Devuelve una convocatoria con su TEXTO OFICIAL COMPLETO. Llámalo cuando una convocatoria de search_convocatorias parezca encajar y haga falta leer sus requisitos: plazos, titulación, renta, méritos, baremos. Esos requisitos vienen en prosa jurídica y hay que leerlos; no se deducen del título. La primera vez descarga el texto del boletín y lo guarda, así que la siguiente llamada es instantánea. Pídelo solo de las convocatorias que de verdad interesen: son 15.000 en el índice y descargarlas todas sería abusar de una fuente pública. Al resumir: di qué pide la convocatoria, señala qué coincide y qué no con lo que sepas del perfil del usuario, y enlaza siempre al texto oficial. No afirmes que cumple o no cumple los requisitos: esa conclusión no es tuya, y equivocarse tiene consecuencias reales. Args: id: El campo "id" de un resultado de search_convocatorias, con el formato "boe:BOE-A-2026-21635". |
| source_healthA | Informa de hasta dónde llega el índice local y si hay huecos. Úsalo cuando una búsqueda no devuelva nada y haya que distinguir "no hay convocatorias que encajen" de "el índice no tiene esas fechas", o cuando el usuario pregunte si los datos están al día. |
| explain_matchA | Explica por qué una convocatoria encaja (o no) con las watchlists. Úsalo cuando el usuario pregunte "¿por qué me sale esto?" o "¿por qué no me sale lo que busco?". Devuelve el desglose del score por dimensiones: palabras clave en el título, sección, departamento y ámbito. Ojo con lo que significa: el score mide afinidad temática, no elegibilidad. Que puntúe alto no dice nada sobre si el usuario cumple los requisitos; eso está en el texto y se lee con get_convocatoria. Args: id: El campo "id" de un resultado de search_convocatorias. watchlist: Para explicar solo una. Sin esto se explican todas. |
| deadlines_soonA | Convocatorias con el plazo abierto que cierran dentro de N días. Úsalo para "¿qué se me acaba pronto?" o para un repaso semanal. IMPORTANTE: solo aparecen las convocatorias cuyo plazo se ha podido determinar leyendo su texto. Muchas lo expresan como "veinte días hábiles desde la publicación", que no se puede calcular sin el calendario de festivos, y esas no salen aquí. Esta lista no es exhaustiva: no le digas al usuario que no le vence nada más. Args: dias: Ventana en días naturales desde hoy. Por defecto 7. limite: Máximo de resultados. |
| mark_solicitadaA | Anota que el usuario ha solicitado una convocatoria. Sirve de registro de solicitudes, que después se consulta con list_solicitudes. Llámalo cuando el usuario diga que la ha pedido, que la ha presentado o que ya la ha entregado. Args: id: El campo "id" de un resultado de search_convocatorias. notas: Lo que el usuario quiera recordar: por dónde la presentó, qué documentación envió, un número de registro. fecha: Fecha de la solicitud en formato AAAA-MM-DD. Por defecto hoy. |
| discardA | Descarta una convocatoria para que no vuelva a aparecer. Llámalo cuando el usuario diga que algo no le interesa o no le aplica. Las descartadas se omiten de las búsquedas y de los avisos de plazo. Guarda el motivo si el usuario lo da: sirve para entender después por qué se descartó, y para afinar sus watchlists. Args: id: El campo "id" de un resultado de search_convocatorias. motivo: Por qué no le interesa, con las palabras del usuario. |
| list_solicitudesA | Lista las convocatorias que el usuario ha marcado como solicitadas. Úsalo para "¿a qué me he apuntado?" o para repasar lo presentado. Devuelve también las notas que se guardaron con cada una. Args: incluir_descartadas: Añade además las descartadas, con su motivo. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 8 tools
Each tool has a distinct role: search returns metadata, get_convocatoria fetches full text, discard/mark_solicitada track negative/positive interest, and explain_match/source_health explain results. Minor overlap exists between list_solicitudes (with incluir_descartadas) and the discard domain, and between search_convocatorias with a watchlist filter and the watchlist-oriented tools, but descriptions resolve these well.
The pattern is mixed: most tools are English verb + Spanish noun (search_convocatorias, get_convocatoria, mark_solicitada, list_solicitudes, explain_match), but source_health and deadlines_soon are bare noun phrases with no verb, and discard is a bare verb. It remains readable and predictable in spirit, but the convention is not uniform.
Eight tools is well-scoped for a bulletin-search server, covering retrieval, detail, tracking, and diagnostics without filler. Each tool clearly earns its place in the workflow.
Core lifecycle (search → read → track/discard) is covered, but there is no undo for discard or mark_solicitada, no standalone list of discarded items (only via a flag), and watchlists are heavily referenced in search/explain_match args yet no tool creates or lists them — the description defers to source_health output. These gaps will force agents into dead ends for common follow-up requests.