Skip to main content
Glama

eva-mcp

Servidor MCP y CLI para el EVA FING (Moodle de la Facultad de Ingeniería, UdelaR), con acceso headless: autentica contra el SSO de UdelaR (Shibboleth) sin navegador y deja que agentes de IA (Claude Desktop, Cursor, Hermes, etc.) y humanos consulten cursos, avisos, actividades, calendario y material de estudio.

Hecho por y para estudiantes de la FING. Sin API de Moodle (está cerrada para estudiantes): todo funciona vía sesión autenticada por Shibboleth.


Casos de uso

"¿Hay algún aviso nuevo en Métodos Numéricos?"

Le preguntás a tu agente y te responde con los últimos avisos (título, autor, fecha):

Vos: ¿Cuáles son los últimos avisos de MetNum?
Agente: llama eva_avisos("MetNum-2S") → te lista los avisos del foro.

Sin agente, desde la terminal: eva avisos metnum.

"Bajame el material de una materia"

Enunciados de prácticos, notas de teórico, exámenes viejos — todo en una carpeta:

Vos: Bajame todo el material de BD NoSQL a ~/Documents/BDNR
Agente: llama eva_descargar_material("BDNR", destino) → descarga los PDFs.

Sin agente: eva material bdnr -d ~/Documents/BDNR.

"¿Cuándo es el parcial / qué entregas tengo?"

El calendario del EVA tiene los vencimientos de entregas y cuestionarios:

Vos: ¿Qué tengo en el calendario del EVA este mes?
Agente: llama eva_calendario() → te lista los eventos con fecha.

Sin agente: eva cal.

"¿Qué actividades tiene tal curso?"

Cuestionarios, foros, tareas y recursos por sección:

Vos: ¿Qué actividades tiene Sistemas Operativos en la sección de prácticos?
Agente: llama eva_actividades("Sistemas Operativos", seccion="prácticos").

Sin agente: eva actividades so --seccion "Práctico".

Automatizar / cron

Como es headless, podés correrlo desde un cron para recibir alertas sin abrir el EVA:

# avisar si hay un aviso nuevo en MetNum (ej. vía un script que te notifique)
eva avisos metnum -n 3

Armar notas / vault

Bajás todo el material de una materia y lo organizás en tu vault de notas (Obsidian, etc.) con un solo comando — ideal para arrancar el semestre.


Related MCP server: Campus

Requisitos

  • Python 3.11+

  • uv (o pipx) — para instalar desde GitHub.


Instalación (desde GitHub)

El proyecto no está en PyPI; se instala directo desde el repo.

Para usarlo con un agente (MCP)

Claude Desktopclaude_desktop_config.json:

{
  "mcpServers": {
    "eva": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/FranciszekaMateu/eva-mcp", "eva-mcp"]
    }
  }
}

Cursor.cursor/mcp.json:

{
  "mcpServers": {
    "eva": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/FranciszekaMateu/eva-mcp", "eva-mcp"]
    }
  }
}

Hermes:

hermes mcp add eva --command uvx --args --from git+https://github.com/FranciszekaMateu/eva-mcp eva-mcp

Para usarlo desde la terminal (CLI)

Instalá los dos comandos (eva y eva-mcp) de una:

uv tool install "git+https://github.com/FranciszekaMateu/eva-mcp"

O correr sin instalar (one-shot):

uvx --from "git+https://github.com/FranciszekaMateu/eva-mcp" eva cursos

Para desarrollo / contribuir

git clone https://github.com/FranciszekaMateu/eva-mcp
cd eva-mcp
uv venv .venv
uv pip install --python .venv/Scripts/python -e ".[dev]"

⚠️ El venv se crea con uv (sin pip propio). Instalá con uv pip install --python .venv/Scripts/python, no con .venv/Scripts/python -m pip.


Configuración (credenciales)

La forma recomendada es usar el llavero del sistema (Windows Credential Manager, macOS Keychain, Linux Secret Service). La contraseña queda cifrada por el sistema operativo, nunca en texto plano:

eva login

Te pide el CI y la contraseña una sola vez (sin mostrarla) y las guarda cifradas. La sesión también se cachea cifrada en ~/.eva-cli/cookies.enc y se renueva sola al expirar. Para borrar todo: eva logout.

Alternativa (fallback, texto plano): variables de entorno EVA_USER/EVA_PASS o un archivo .env. El orden de resolución es: entorno → llavero → .env.


Tools MCP

Tool

Qué hace

eva_cursos

Lista los cursos matriculados (id, nombre)

eva_avisos

Últimos avisos del foro de un curso

eva_aviso

Texto completo de un aviso

eva_actividades

Actividades de un curso (filtrable por sección)

eva_calendario

Eventos del calendario (mes actual por defecto)

eva_material

Lista los archivos/páginas de un curso

eva_descargar_material

Descarga el material a una carpeta

eva_login

Fuerza un login fresco

En Hermes las tools aparecen como mcp__eva__* recién en una sesión nueva (no hay hot-reload de MCP).


Comandos CLI

eva login            # guarda credenciales en el llavero del sistema (seguro)
eva logout           # borra credenciales y sesión
eva cursos           # lista tus cursos (id, nombre)
eva avisos metnum    # últimos avisos de un curso (nombre o id)
eva aviso 11740      # texto completo de un aviso
eva actividades metnum --seccion "Material teórico"
eva cal              # eventos del calendario
eva material metnum -d ./material   # descarga el material a una carpeta

-d acepta rutas Windows nativas, ~/... y rutas MSYS (/c/Users/..., /tmp/...).


Arquitectura

src/eva_cli/
├── auth.py       # login SAML Shibboleth (3 pasos, sin navegador)
├── client.py     # scraping: cursos, avisos, actividades, calendario, material
├── session.py    # credenciales (.env) + cache de sesión (compartido CLI/MCP)
├── paths.py      # normalización de rutas MSYS → Windows
├── cli.py        # comandos typer (eva)
└── mcp_server.py # servidor fastmcp (eva-mcp) → tools mcp__eva__*

Núcleo (EvaClient) + dos fachadas: eva (CLI) y eva-mcp (MCP).


Desarrollo

uv run --python .venv/Scripts/python pytest   # 20 tests con httpx.MockTransport
uv run --python .venv/Scripts/python ruff check src tests scripts

Nota para el desarrollo en Windows: el PYTHONPATH del entorno de Hermes puede contaminar el venv (apunta al site-packages del agente). Correr con PYTHONPATH= limpio, y el server MCP ya se blinda solo (sys.path limpio antes de importar fastmcp).


Licencia

MIT © 2026 Francisco Escobar

Available Tools

8 tools
eva_actividadesEva ActividadesC

Actividades de un curso, opcionalmente filtradas por sección.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursoYes
seccionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.9/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 burden, but it only states the resource and the optional filter. It does not disclose whether login is required, how many activities are returned, ordering, or any side effects, though it is likely a read operation.

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?

One short sentence that is easy to parse and front-loads both the resource and the key filter. It is concise to a fault, sacrificing useful detail, but as a single-purpose line it is efficient.

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?

Given the absence of annotations and the presence of several sibling tools, the description does not supply enough context for reliable selection and invocation. It lacks usage guidance, any mention of prerequisites like login, and behavioral detail that the output schema would not cover.

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?

The schema provides no descriptions (0% coverage), and the description only names 'curso' and 'seccion' in natural language. It confirms seccion is optional but does not explain expected formats, identifiers, or how the filter behaves.

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 identifies the resource ('activities of a course') and the optional section filter, which is enough to distinguish it from sibling tools like eva_material or eva_calendario. It lacks an explicit verb such as 'list' or 'get', so the action is implied rather than stated.

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 description implies the tool is for retrieving activities tied to a course and optionally a section, but it gives no explicit when-to-use guidance, prerequisites, or alternatives. There is no mention of when to prefer eva_avisos or eva_material.

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

eva_avisoEva AvisoB

Texto completo de un aviso (id de la discusión).

ParametersJSON Schema
NameRequiredDescriptionDefault
discusion_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It says the result is the full text of a notice, but does not mention read-only behavior, authentication requirements, possible errors, or any side effects.

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 description is a single, compact phrase with no redundant wording. It front-loads the core purpose and keeps the parameter clarification parenthetical, which is appropriately sized for a simple 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?

The tool is simple with one required parameter and an output schema, so the description does not need to explain return shape. However, it lacks usage guidance and any behavioral context such as authentication or read-only status, leaving some gaps for an agent deciding to invoke it.

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%, so the description must compensate. The phrase 'id de la discusión' adds meaning by clarifying that discusion_id identifies the notice/discussion to fetch, which is helpful, but it does not explain the id's format or provenance.

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 the tool provides the full text of a notice via its discussion id, which clearly identifies the resource and action. It distinguishes from the sibling eva_avisos by emphasizing 'full text' of a single notice, though it does not explicitly name the alternative.

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 guidance on when to use this tool versus alternatives such as eva_avisos. The intended use is only implied by the description and the parameter name, leaving the agent to infer the selection logic.

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

eva_avisosEva AvisosB

Últimos avisos del foro de un curso (nombre, código o id).

ParametersJSON Schema
NameRequiredDescriptionDefault
cursoYes
limiteNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden and does disclose the source ('foro') and that only the latest notices are returned. It does not mention authentication, ordering, or side effects, but for a simple read/list operation with an output schema present, this is adequate though not rich.

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 description is a single short sentence with no filler. The most important scoping information is front-loaded, making it easy to parse quickly.

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?

Given the sibling list and absence of annotations, the description does not clarify how eva_avisos differs from eva_aviso, offers no usage guidance, and leaves 'limite' undefined. The output schema covers return shape, but the missing contextual and parameter information makes the definition incomplete.

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 parenthetical 'nombre, código o id' adds useful meaning to the 'curso' parameter beyond the bare string schema. However, 'limite' is not described at all, so with 0% schema description coverage the description only partially compensates for the missing parameter documentation.

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 identifies the resource ('avisos del foro') and the scope ('un curso'), and clarifies that the course can be specified by name, code, or id. It lacks an explicit verb like 'obtiene' or 'lista', but the plural 'avisos' makes the retrieval intent clear and distinguishes it at least implicitly from the singular sibling eva_aviso.

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 is given about when to use this tool instead of eva_aviso or the other course-related tools. There are no conditions, exclusions, or alternatives mentioned.

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

eva_calendarioEva CalendarioC

Eventos del calendario (por defecto el mes actual).

ParametersJSON Schema
NameRequiredDescriptionDefault
mesNo
anioNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations, the description must carry the full burden of behavioral disclosure, but it only states the default month. It does not clarify whether the operation is read-only, how events are returned, whether there are pagination or date-range limits, or any other behavioral traits.

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 description is a single short, front-loaded sentence with no wasted words. It identifies the resource and the key default behavior efficiently, though it sacrifices helpful detail for 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?

The tool is simple with two optional parameters and has an output schema, so the description does not need to explain return values. However, it still omits usage routing and behavioral context, making it minimally viable 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?

The input schema has 0% property description coverage, so the text must explain the parameters, but it only mentions the default current month. It does not clarify how mes and anio combine or what valid integer ranges are expected, leaving the agent to infer parameter meaning from the names alone.

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 clearly identifies the resource as calendar events and includes the default time scope, so an agent can tell this tool is for calendar data rather than announcements or activities. It lacks an explicit verb and does not explicitly distinguish itself from siblings, but the meaning is unambiguous.

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 description gives no guidance about when to choose this tool over siblings such as eva_actividades or eva_avisos. The only usage hint is the default current month, but there is no explanation of when to call this tool or what alternative fits different needs.

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

eva_cursosEva CursosA

Lista los cursos matriculados en el EVA (id, nombre, código).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

The verb 'Lista' implies a non-mutating read operation, but no annotations are provided and the description does not mention prerequisites such as EVA login, pagination, or error behavior. This is adequate for a simple list tool but does not fully carry the behavioral burden.

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 description is a single, front-loaded sentence with no filler. It states the action, the resource, and the expected fields in a compact and readable way.

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?

Given that the tool takes no inputs and an output schema exists, the description is nearly complete for invoking it correctly. The only minor gaps are lack of explicit authentication context and no guidance about when a sibling tool would be preferred, but neither prevents correct use.

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?

The tool has zero parameters, so the schema conveys all parameter information; the baseline is 4. The description adds value by revealing the output fields (id, nombre, código), which sets expectations for the returned data.

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 uses the specific verb 'Lista' and names the exact resource, 'los cursos matriculados en el EVA', followed by the returned fields (id, nombre, código). This clearly distinguishes it from sibling tools such as eva_material or eva_calendario, which target different resources.

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 description makes the context clear: use this tool to list the courses the user is enrolled in. It does not explicitly name alternatives or exclusion criteria across the siblings, but for a zero-parameter list tool the intended use is readily inferable and unambiguous.

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

eva_descargar_materialEva Descargar MaterialB

Descarga los materiales de un curso a destino y devuelve las rutas.

destino acepta rutas Windows nativas, ~/... y rutas MSYS (/tmp/..., /c/Users/...); se normalizan automáticamente.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursoYes
destinoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.2/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 disclosure burden. It does disclose path normalization behavior, which is useful, but it omits filesystem side effects such as directory creation or overwrite behavior, authentication requirements, and failure behavior.

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 description is compact and well-structured: the action and return behavior are front-loaded, followed by the path-format caveat. Every sentence carries necessary information without redundancy.

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?

The output schema likely covers return structure, but a required parameter (`curso`) remains undefined in both schema and description. The description also does not mention authentication or prerequisites, despite the existence of an eva_login sibling, so an agent cannot reliably know how to construct a valid call.

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 description adds meaningful semantic value for `destino` by specifying accepted path formats and automatic normalization, which the schema lacks entirely. However, `curso` is left completely undocumented, and with 0% schema description coverage, the description only partially compensates for the overall gap.

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 states a specific action ('Descarga los materiales de un curso'), the target resource, the destination, and the return value ('devuelve las rutas'). This clearly distinguishes it from sibling tools like eva_material, which likely deals with material metadata rather than downloading.

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 guidance on when to use this tool versus alternatives like eva_material or eva_login. The intended use case is only implicitly inferable from the verb 'Descarga', and no prerequisites, exclusions, or alternative tool pointers are provided.

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

eva_loginEva LoginA

Fuerza un login fresco, descartando la sesión cacheada.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/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 behavioral disclosure burden. It explicitly discloses the main side effect—discarding the cached session—and that the login is forced. However, it does not mention whether credentials are required, whether this invalidates other active state, or what failure or error behavior might look like.

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 description is a single, efficient sentence with no filler. The core action and side effect are front-loaded, and every word adds value.

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 tool with an output schema and no nested inputs, the description is largely complete: it identifies the action and primary side effect. It could add context about when to choose this tool, such as stale session detection, but nothing essential for invoking it correctly 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?

The tool has zero parameters, so there is no parameter meaning for the description to add. With schema coverage at 100% and an empty schema, the baseline of 4 for parameterless tools is appropriate, and the description correctly adds no parameter-specific detail.

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 clearly states the tool's action: force a fresh login and discard the cached session. It is specific about the resource ('login') and the behavior, distinguishing it from the sibling data-retrieval tools rather than merely repeating the title.

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 description implies this should be used when a fresh login or session reset is needed, but it does not explicitly state when to use it versus alternatives or whether it should precede other eva_* calls. There is no exclusion or alternative routing, only an implied usage context.

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

eva_materialEva MaterialA

Materiales (archivos y páginas) de un curso, sin descargar.

ParametersJSON Schema
NameRequiredDescriptionDefault
cursoYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior3/5

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

Sin anotaciones, la descripción aporta un rasgo conductual: no descarga el material. Sin embargo, no informa si requiere autenticación previa, qué devuelve exactamente ni si la operación es de solo lectura, por lo que la carga informativa queda cubierta solo parcialmente.

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?

La descripción es una frase breve y sin redundancias, con la distinción clave ('sin descargar') claramente integrada. No hay palabras de relleno y la información esencial está presente.

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?

Es una herramienta simple con un solo parámetro y esquema de salida disponible, por lo que la descripción es suficiente para una invocación básica. Faltan detalles sobre el formato esperado del parámetro y los prerrequisitos de autenticación, lo que impide una completitud total.

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?

El esquema define un único parámetro 'curso' con 0% de cobertura en la descripción. El texto asocia ese parámetro al curso cuyos materiales se obtienen, lo cual añade algo de significado, pero no especifica si se trata de un ID, nombre o slug.

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?

La descripción identifica claramente el recurso: materiales de un curso, compuestos por archivos y páginas. El matiz 'sin descargar' lo distingue de la herramienta hermana eva_descargar_material, aunque carece de un verbo explícito como 'listar' u 'obtener'.

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?

El texto deja implícito que esta herramienta se usa para consultar materiales sin descargarlos, diferenciándose del flujo de descarga. No menciona explícitamente a eva_descargar_material ni define cuándo no usarla, pero el contexto es suficientemente claro.

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

TDQS

B3.4/5.0
Disambiguation4/5

Most tools target distinct resources or actions, such as listing courses, listing activities, and showing calendar events. The main minor ambiguity is between eva_avisos and eva_aviso, though the descriptions make one a list and the other a detail view.

Naming Consistency3/5

All tools share the eva_ prefix and snake_case format, which is helpful. However, the convention mixes noun-only names like eva_cursos and eva_material with verb-based names like eva_descargar_material and eva_login, plus the avisos/aviso singular-plural pair is slightly inconsistent.

Tool Count5/5

Eight tools is a reasonable, focused scope for an EVA/LMS integration. Each tool covers a meaningful capability without redundant or excessive additions.

Completeness4/5

The toolkit covers the core read-only workflows: authentication, course listing, announcements, activities, calendar, materials, and downloading. Minor gaps exist such as lacking activity detail views or richer course information, but the main intended workflows are well supported.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/FranciszekaMateu/eva-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server