Skip to main content
Glama

usp-mcp

MCP (Model Context Protocol) server para os sistemas estudantis da Universidade de São Paulo — Moodle (e-Disciplinas), JupiterWeb, notas, faltas, grade horária e tarefas — usando o Heidy backend como camada de acesso segura.

Com ele, um assistente (Claude Desktop, Claude Code, ou qualquer cliente MCP) consegue responder coisas como "quais atividades tenho no Moodle essa semana?", "como está minha média em ACH2034?" ou "monta minha grade de horários".

Como funciona

cliente MCP  ──stdio/HTTP──▶  usp-mcp (Python/FastAPI)  ──HTTPS──▶  Heidy backend  ──▶  Moodle / JupiterWeb
  • A senha nunca viaja em texto claro. No login, o servidor busca a chave pública atual do backend (GET /auth/login-key) e sela a Senha Única num envelope HPKE-Base(X25519, HKDF-SHA256, AES-256-GCM). Só o backend consegue abri-lo, e a senha não é retida em lugar nenhum deste processo depois do login.

  • A sessão vive só em memória. O login devolve um bearer token e um credential blob (ciphertext opaco que só o backend abre); ambos ficam apenas na memória do processo e são descartados no logout.

Related MCP server: Horizon

Instalação

pip install .          # ou: pip install -e .[dev] para desenvolver

Uso

stdio (Claude Desktop / Claude Code)

usp-mcp

Configuração para Claude Desktop/Code (mcpServers):

{
  "mcpServers": {
    "usp": {
      "command": "usp-mcp"
    }
  }
}

HTTP (FastAPI + Streamable HTTP)

usp-mcp --http --port 8000
# ou diretamente:
uvicorn usp_mcp.app:app --host 0.0.0.0 --port 8000
  • Endpoint MCP: http://localhost:8000/mcp

  • Health check (deste serviço e do backend): http://localhost:8000/health

Variáveis de ambiente

Variável

Efeito

HEIDY_BASE_URL

Backend alternativo (padrão: https://heidy-backend.fly.dev)

HEIDY_USERNAME

Número USP para login automático na primeira ferramenta

HEIDY_PASSWORD

Senha Única para login automático

HEIDY_DOWNLOAD_DIR

Pasta padrão para moodle_download_file (padrão: ./downloads)

Sem HEIDY_USERNAME/HEIDY_PASSWORD, chame a ferramenta usp_login primeiro.

Ferramentas

Ferramenta

O que faz

usp_login / usp_logout

Abre/encerra a sessão com número USP + Senha Única

get_profile

Perfil do estudante

moodle_courses

Disciplinas no e-Disciplinas

moodle_course

Conteúdo de uma disciplina (atividades, materiais)

moodle_activity

Abre uma atividade pelo URL (conteúdo, links, metadados de arquivo)

moodle_download_file

Baixa um arquivo do Moodle (PDF, slides, ...) para o disco (até 10 MB)

usp_sync / usp_sync_status / usp_sync_history

Sincroniza grade, notas, faltas e Moodle do JupiterWeb

list_semesters

Semestres do estudante

get_schedule

Grade horária semanal de um semestre

list_enrollments

Matrículas (turmas), com horários e professor

list_grades / grade_summary

Notas e média ponderada/status de aprovação por turma

list_absences / absence_summary

Faltas e situação frente ao limite

list_tasks / create_task / update_task_status

Tarefas do planner (provas, entregas, leituras)

Desenvolvimento

pip install -e .[dev]
pytest

Os testes cobrem o esquema de criptografia do envelope (compatível com o vault do backend), o cliente HTTP (com backend simulado) e a superfície de ferramentas MCP.

Available Tools

20 tools
absence_summaryC

Absences used vs. the enrollment's limit, with a risk status.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrollment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 bears the full burden. It does not disclose side effects, authentication needs, or behavioral traits like whether it is read-only. The phrase 'with a risk status' hints at computed data but is not explained.

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

Conciseness3/5

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

The description is a single short sentence, which is front-loaded and to the point. However, it could be slightly expanded with key details without losing conciseness. It is adequate but minimal.

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?

Given the tool has one parameter and an output schema (not shown), the description is borderline adequate. It covers the core purpose but omits details about the 'risk status' and any constraints. For a simple tool, it meets a minimum viable standard.

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 has 0% description coverage, and the description does not explain the single parameter 'enrollment_id' beyond its existence. No details on format, validation, or typical usage are given, leaving the agent to guess its meaning.

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 states the tool shows absences used versus the enrollment limit with a risk status. It implicitly distinguishes from 'list_absences' which lists individual absences, and 'grade_summary' which deals with grades. However, a more explicit verb like 'Returns' or 'Computes' would improve clarity.

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 provided on when to use this tool versus siblings such as 'list_absences' or 'grade_summary'. The description does not mention prerequisites, limitations, or alternatives, leaving the agent without context for appropriate invocation.

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

create_taskC

Create a task in the student's planner. due_at is an ISO 8601 datetime.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
notesNo
titleYes
due_atNo
statusNo
priorityNo
enrollment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description carries the full burden. It only notes the ISO 8601 format for 'due_at' but fails to disclose permissions, side effects, error conditions, 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, concise sentence that front-loads the purpose and adds a vital detail about 'due_at.' No wasted words.

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?

Despite having an output schema, the description does not mention return values. For a creation tool with 7 parameters and no annotations, the description lacks completeness regarding behavior, parameter details, and expected output.

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?

With 0% schema description coverage, the description must compensate for 7 parameters. It only explains 'due_at' format, leaving title, kind, notes, status, priority, and enrollment_id unexplained. Marginal value over raw schema.

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 'Create a task in the student's planner,' specifying the verb, resource, and context. It distinguishes from siblings like 'update_task_status' and 'list_tasks' by indicating a creation operation.

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 provided on when to use this tool versus alternatives, such as when to create vs. update or list. No prerequisites or exclusions are mentioned.

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

get_profileA

The logged-in student's profile (name, USP number, email, course).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It clearly indicates this is a read operation returning profile data, implying no side effects. Could mention authentication requirement but still clear.

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?

A single succinct sentence that front-loads the output fields. No wasted words.

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

Completeness5/5

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

With no parameters and an output schema, the description fully explains what the tool does. It is complete for a simple profile retrieval tool.

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?

There are zero parameters, and schema coverage is 100% (none). The description adds meaning by listing the output fields (name, USP number, email, course), which helps the agent understand what it will receive.

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 returns the logged-in student's profile with specific fields (name, USP number, email, course). This distinguishes it from siblings like get_schedule or grade_summary.

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 use when you need the current user's profile, but does not explicitly state when to use versus alternatives or provide exclusions. Usage is straightforward but lacks explicit guidance.

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

get_scheduleC

The weekly class schedule for a semester: day -> time slots with locations.

ParametersJSON Schema
NameRequiredDescriptionDefault
semester_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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

With no annotations provided, the description bears full responsibility for behavioral disclosure. It only states the output structure but does not indicate side effects, permissions, or whether the tool is read-only.

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, concise sentence that communicates the tool's purpose without extraneous information. However, it could include the action verb (e.g., 'get') for improved structure.

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?

Given the tool has an output schema, the description does not need to detail return values. However, it lacks usage context, such as whether the schedule is for the current user or requires specific roles.

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 description mentions 'for a semester' but does not explain the 'semester_id' parameter beyond its name in the schema. Since schema description coverage is 0%, the description should clarify how to obtain or format the semester_id.

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 states that the tool returns the weekly class schedule for a semester, mapping days to time slots and locations. It distinguishes itself from sibling tools like 'absence_summary' or 'list_grades' by focusing specifically on schedule retrieval.

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 provided on when to use this tool versus alternatives or any exclusions. There is no mention of prerequisites or context, leaving the agent to infer usage on its own.

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

grade_summaryC

Weighted average, graded/remaining weight and passing status for an enrollment.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrollment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

Description does not disclose any behavioral traits beyond what is obvious (e.g., read-only nature, authentication needs, or cost). No annotations are provided, so the description carries full burden but fails to add value.

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, succinct sentence with no extraneous text. It is front-loaded and efficient, but could be slightly expanded for clarity without becoming verbose.

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 description provides a basic overview but lacks detail on parameter semantics and usage context. The presence of an output schema partially compensates, but overall completeness is minimal for a tool of this complexity.

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

Parameters1/5

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

The sole parameter 'enrollment_id' has no description in the schema (0% coverage) and the tool description does not explain its meaning, source, or how to obtain valid values. This significantly hinders correct invocation.

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 states what the tool returns: weighted average, graded/remaining weight, and passing status for an enrollment. It distinguishes from siblings like list_grades by focusing on summary metrics. However, it lacks an explicit verb (e.g., 'retrieves') and could be more active.

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 alternatives like list_grades or absence_summary. Does not specify prerequisites or context, leaving the agent to infer usage.

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

list_absencesC

Absences recorded for one enrollment.

ParametersJSON Schema
NameRequiredDescriptionDefault
enrollment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/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 only states that absences are recorded, but does not mention whether the operation is read-only, requires specific permissions, or what the output format is (though an output schema exists). The lack of behavioral context is a significant gap.

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

Conciseness2/5

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

The description is extremely concise at nine words, but this brevity sacrifices necessary detail. It could be slightly longer to include a verb and scope without becoming verbose, so it is under-specified rather than efficiently concise.

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?

Given the tool has an output schema, the description is not required to detail return values. However, it lacks context about the nature of absences (e.g., dates, types) and any potential filtering. It is minimally complete for a simple list endpoint but leaves room for improvement.

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% description coverage, so the description must compensate. The only parameter 'enrollment_id' is self-explanatory from its name, but the description does not clarify its format, source, or usage. Adding no value beyond the schema earns a low score.

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 'Absences recorded for one enrollment' clearly indicates that the tool returns absence records for a specific enrollment. It effectively communicates the resource (absences) and scope (one enrollment). It distinguishes from the sibling 'absence_summary' which likely provides aggregated data.

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 offers no guidance on when to use this tool versus alternatives like 'absence_summary' or other sibling tools. It does not specify scenarios, prerequisites, or exclusions, leaving the agent to infer usage context.

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

list_enrollmentsC

The student's enrollments (classes), with meetings, professor and credits.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo
semester_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.1/5.0
Behavior2/5

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

No annotations provided, so the description carries full responsibility. It does not disclose behavioral traits such as authentication requirements, scope (current user only?), or default behavior when parameters are omitted. Only implicitly indicates it returns a list with specific fields.

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

Conciseness2/5

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

The description is very short (one sentence) but under-specified. It front-loads the resource name but omits critical action and usage details. Conciseness is not beneficial when key information is missing.

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?

With two optional parameters and an output schema, the description should clarify scope (which student? default semester?). It does not address how parameters affect results or what to expect when they are absent. Incomplete for a tool with multiple list siblings.

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

Parameters1/5

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

Schema description coverage is 0% (no descriptions for parameters). The description adds no meaning beyond the schema for 'source' or 'semester_id'. It fails to explain what these parameters control, e.g., manual vs USP source, or how semester_id filters results.

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 identifies the resource (enrollments) and mentions included details (meetings, professor, credits), but lacks a verb and is phrased as a noun phrase. It does not explicitly state 'list' or 'retrieve', though the tool name clarifies. Sibling tools like list_absences and list_grades imply similar patterns, but the description does not differentiate this from get_schedule or other listing 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?

No guidance on when to use this tool versus alternatives. Does not specify whether it returns data for the current student or requires authentication. No exclusions or context for parameter use (e.g., semester_id vs current).

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

list_gradesC

Grades recorded for one enrollment (label, score, max score, weight).

ParametersJSON Schema
NameRequiredDescriptionDefault
enrollment_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

C2.6/5.0
Behavior2/5

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

The description does not disclose any behavioral traits beyond the basic operation. With no annotations provided, it fails to mention read-only nature, rate limits, or 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.

Conciseness3/5

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

The description is a single concise sentence, but it is too minimal, providing only the bare essentials.

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?

Given the output schema exists, the description adequately summarizes the return fields. However, it lacks context on ordering, filtering, or any additional behavior.

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

Parameters1/5

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

Schema description coverage is 0%, and the description adds no detail about the required enrollment_id parameter (e.g., format, examples, how to obtain it).

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 specifies that the tool returns grades for one enrollment, listing specific fields (label, score, max score, weight). It distinguishes from siblings like grade_summary or absence_summary.

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 alternatives (e.g., grade_summary, list_absences). No prerequisites or contextual cues about when it's appropriate.

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

list_semestersA

The student's semesters (label, start/end dates, which one is active).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

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

The description specifies what data is returned (semesters with label, start/end dates, active flag). Although no annotations are provided, the tool name and description strongly indicate a read-only operation with no 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, front-loaded sentence that conveys all necessary information without unnecessary words. It is minimal yet complete.

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

Completeness5/5

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

Given the tool has no parameters and an output schema (not shown but indicated), the description sufficiently covers the tool's behavior. It is complete for a simple list operation.

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?

There are no parameters, so the input schema provides no meaning. The description adds value by explaining the output fields, which helps the agent understand what the tool returns.

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 lists semesters with label, dates, and active status. It distinguishes from sibling tools like list_enrollments or list_grades by focusing on semester metadata.

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?

No explicit when-to-use or when-not-to-use guidance is provided. However, the simplicity of a parameterless list tool makes usage straightforward, and the context implies it is for retrieving semester information.

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

list_tasksB

The student's tasks (assignments, exams, ...), filterable and sortable.

due_before/due_after are ISO 8601 datetimes.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
sortNo
statusNo
due_afterNo
due_beforeNo
semester_idNo
enrollment_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavioral traits. It mentions filtering and sorting but fails to specify default sort order, pagination, or that it is a read-only operation, leaving significant gaps.

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 extremely concise with two sentences, front-loading the core purpose and critical date format information without unnecessary detail.

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 7 parameters and an output schema, the description only covers two parameters, omitting semantics for kind, sort, status, semester_id, and enrollment_id; it lacks completeness for a filterable/sortable list tool.

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?

With 0% schema description coverage, the description only adds meaning for due_before/due_after (ISO 8601) but does not explain kind, sort, status, semester_id, or enrollment_id beyond their names, insufficiently compensating for missing schema descriptions.

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 lists student tasks (assignments, exams, etc.) and indicates it is filterable and sortable, distinguishing it from sibling tools like create_task or update_task_status.

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 provides the ISO 8601 format for due_before/due_after, aiding correct usage, but does not explicitly state when to use this tool versus alternatives or when not to use it.

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

moodle_activityA

Open a Moodle activity by URL: page content, links and attached file, if any.

For file activities (PDFs, slides, ...) this returns the file's name, type and size — use moodle_download_file to save the bytes to disk.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior4/5

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

No annotations provided, so the description must disclose behavioral traits. It does so by specifying that the tool returns page content, links, and attached file info, and for file activities it returns file name, type, and size. It does not cover error states or authorization, but for a straightforward retrieval tool, the key behaviors are covered.

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 two sentences, front-loaded with the core action and resource. Every sentence adds value, with no wasted words. The second sentence naturally clarifies a common edge case and references the sibling tool.

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 the tool's simplicity (one parameter, no nested objects) and the existence of an output schema, the description covers the essential functionality and distinguishes from related tools. It could mention error handling or authentication needs, but for a basic retrieval tool, it is sufficiently 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?

With only one parameter 'url' and 0% schema description coverage, the description adds minimal semantic value beyond the parameter name. It mentions 'by URL' but does not specify format, expected prefixes, or examples, leaving the agent to infer the full meaning from the name alone.

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 opens a Moodle activity by URL and returns page content, links, and attached file info. It distinguishes itself from the sibling moodle_download_file by specifying that for file activities it only returns metadata, not the actual file bytes.

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 explicitly tells when to use this tool (to view activity content) and when not (to download file bytes, directing to moodle_download_file). It lacks mentions of prerequisites or error scenarios, but the guidance is clear and actionable.

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

moodle_courseB

A Moodle course's contents: its sections and activities (id, title, kind, url).

ParametersJSON Schema
NameRequiredDescriptionDefault
course_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description must fully disclose behavior. It only states what data is returned, without mentioning that it is a read-only operation, any required permissions, side effects, or rate limits. The agent cannot infer safety or mutability from this description alone.

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 sentence that immediately states the tool's output. It is appropriately concise and front-loaded, with no wasted words. Could be slightly more structured but is effective.

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 has a single required parameter and an output schema (not shown), so complexity is low. The description covers the core output (sections and activities) but misses context like authentication requirements, data source freshness, or error conditions (e.g., invalid course_id). Adequate but not thorough.

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% (no parameter descriptions in schema). The description does not explain the course_id parameter at all; it only implies it via the tool name and description. While the parameter type is obvious, the description adds no value beyond the schema's type definition, failing to compensate for the lack of schema documentation.

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 it retrieves a Moodle course's contents (sections and activities) with specific attributes (id, title, kind, url). This verb ('get') is implied, and the resource is distinct from sibling tools like moodle_courses (list all courses) and moodle_activity (single activity).

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?

No explicit guidance on when to use this tool vs alternatives. The description implies use when needing course contents, but does not mention prerequisites (e.g., valid course_id) or when it might be inappropriate. Sibling tool names provide some implicit context but the description itself lacks direct usage advice.

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

moodle_coursesB

List the student's current Moodle (e-Disciplinas) courses.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

With no annotations, the description carries full burden. It only says 'list', implying a read operation, but does not disclose authentication, rate limits, or what happens if the student has no courses. Minimal behavioral detail.

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?

Single sentence, no wasted words. Perfectly concise and front-loaded.

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 simple parameterless tool, the description covers the main action. With an output schema available, the lack of return value details is acceptable. Slightly incomplete due to missing preconditions or error handling.

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?

No parameters exist (schema coverage 100%). The description does not need to add meaning beyond the schema, which is already complete.

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 states it lists the student's current Moodle courses, using a specific verb and resource. However, it does not distinguish from sibling tools like 'list_enrollments' or 'moodle_course', which may overlap.

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 alternatives. It does not mention prerequisites, exclusions, or context-specific usage.

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

moodle_download_fileA

Download a Moodle file activity (PDF, slides, ...) to local disk.

url is the activity URL from moodle_course (kind "Arquivo"/"Resource"). Saves into directory (default: $HEIDY_DOWNLOAD_DIR or ./downloads) and returns the saved path, name, MIME type and size. Files up to 10 MB.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
directoryNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. Discloses saving to local disk, default directory, return fields, and size limit, but lacks details on permissions, error handling, or overwrite 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?

Three concise sentences that front-load the action, then explain parameters and constraints with no unnecessary words.

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?

Covers input parameters and behavior well, output schema handles return values. However, missing error scenarios, prerequisites like login, and file accessibility considerations. Mostly complete given complexity.

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 has 0% description coverage, but the description adds meaningful context: explains url is from moodle_course with specific kind, and directory has a default fallback, significantly enhancing clarity.

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?

Clearly states the tool downloads a Moodle file activity, specifies file types (PDF, slides), and mentions the URL source from moodle_course, distinguishing it from sibling tools like moodle_activity and moodle_course.

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?

Provides clear context on when to use (url from moodle_course with kind 'Arquivo'/'Resource') and a file size limit, but does not explicitly state when not to use or mention alternatives.

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

update_task_statusB

Move a task between todo, doing and done.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYes
task_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

No annotations provided, so the description must disclose behavioral traits. It states the action ('move') but omits side effects (e.g., whether transition validation exists), authorization needs, or what happens if an invalid transition is attempted.

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?

Extremely concise: a single 6-word sentence that directly states the purpose. No wasted words, front-loaded with key information.

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?

Despite having an output schema (reducing return value explanation burden), the description lacks details on prerequisites, validation rules, or constraints. For a simple mutation tool with no annotations, more context is needed to ensure correct usage.

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 coverage is 0%. The description only partially explains the status parameter ('between todo, doing and done') but does not mention task_id. Given low coverage, the description should compensate by explaining both parameters.

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 a specific verb 'Move' and resource 'task', and explicitly lists the three allowed statuses. This clearly distinguishes the tool from siblings like list_tasks or create_task.

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 alternatives (e.g., create_task for new tasks, list_tasks for viewing). No prerequisites, exclusions, or context for transitioning between statuses.

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

usp_loginA

Log in to USP with the USP number and Senha Única.

The password is encrypted to the backend's login key before leaving this process and is never stored. Returns the student's profile.

ParametersJSON Schema
NameRequiredDescriptionDefault
passwordYes
usp_usernameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/5.0
Behavior3/5

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

The description discloses that the password is encrypted before transmission and never stored, which is helpful. However, it does not mention session management, authentication state, or side effects like cookie creation. With no annotations, the burden is higher, but some transparency is provided.

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?

Three sentences that are front-loaded with the action, followed by a security note and return value. No fluff, every sentence adds value.

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?

Given the presence of an output schema, the description's mention of returning a profile is sufficient but lacks details on error handling, session tokens, or the broader authentication flow. It is adequate but not comprehensive.

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 coverage is 0%, so the description must compensate. It mentions 'USP number and Senha Única' but does not explicitly map to parameter names (usp_username, password) or provide format constraints. Minimal additional meaning beyond the schema.

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 action: logging in to USP using a USP number and password (Senha Única). It distinguishes from sibling tools like usp_logout and others focused on schedules, grades, etc.

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?

Usage is implied as a prerequisite for other tools requiring authentication, but there is no explicit guidance on when to use it versus alternatives, or any mention of prerequisites.

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

usp_logoutA

Log out, revoking the current session token.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses the key behavioral trait of revoking the session token. With no annotations, it carries full burden; it covers the main effect but could mention potential side effects like requiring re-login.

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 concise sentence that conveys the entire purpose and behavior without wasted words.

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

Completeness5/5

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

Given the tool has zero parameters and a simple action, the description fully covers what it does. The presence of an output schema means return value explanation is unnecessary.

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?

No parameters exist, and schema coverage is 100%. The description adds no parameter info because none are needed. Baseline of 4 is appropriate.

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 action 'Log out' and the mechanism 'revoking the current session token'. It is specific and distinguishes from related tools like usp_login.

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 implies when to use (to end a session) but does not explicitly state when not to use or provide alternatives. The sibling tools include usp_login, which is the inverse, but no explicit guidance is given.

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

usp_syncA

Start a background sync pulling data from USP systems into the planner.

Sources default to all of schedule, grades, absences and moodle. Returns the sync run; poll usp_sync_status with its id until it succeeds or fails.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourcesNo
semester_idNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

No annotations provided, so description carries full burden. It discloses that it is a background sync and that polling is needed. However, it does not detail side effects, overwrite behavior, partial failure handling, or authorization requirements, leaving some uncertainty.

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?

Two concise sentences: first states action, second gives defaults and follow-up. Front-loaded with critical information, no unnecessary words.

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 an output schema exists (context says true), return values are covered. The description adequately covers the async nature and polling requirement. Missing explanation of semester_id parameter, but overall sufficient for a background sync tool.

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 0%, so description must compensate. It explains the sources parameter with its default and enum values but does not mention semester_id at all. Partial compensation.

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 verb 'start' and the resource 'background sync pulling data from USP systems into the planner'. It distinguishes from siblings like usp_sync_status (for polling) and usp_sync_history (for history).

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?

Provides clear guidance: defaults to all sources, returns a sync run that requires polling usp_sync_status. Does not explicitly state when not to use or alternatives, but the polling instruction is helpful and implicit differentiation from siblings.

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

usp_sync_historyC

Past sync runs, optionally filtered by status.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but only discloses optional filtering by status. It does not state that the operation is read-only, mention any potential side effects, or describe paging, ordering, or limits. This is insufficient for a retrieval 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?

The description is extremely concise (one short phrase), front-loading the purpose. However, it may be too brief given the lack of other documentation. For a simple tool, it earns a 4.

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?

Despite having an output schema (assumed), the description omits key behavioral details like ordering (chronological?), maximum results, and whether empty status returns all runs. Without annotations, the agent needs more context to use the tool 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?

The schema has 0% description coverage, so the description must compensate. It notes that status is a filter, but does not explain the meaning of each enum value (pending, running, succeeded, failed) or how filtering behaves (e.g., exact match, inclusive). The parameter's default of null is not clarified.

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 states the tool retrieves past sync runs with optional status filtering, which is a specific verb+resource. However, it uses a noun phrase ('Past sync runs') rather than an action verb like 'List' or 'Retrieve', slightly reducing clarity. It distinguishes from siblings like usp_sync (trigger sync) and usp_sync_status (current status) implicitly.

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 explicit guidance on when to use this tool versus alternatives, such as usp_sync_status for current sync state or usp_sync to start a new sync. The description does not mention prerequisites or when not to use it.

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

usp_sync_statusC

A sync run's status, per-source counts and error, if any.

ParametersJSON Schema
NameRequiredDescriptionDefault
run_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2/5.0
Behavior2/5

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

With no annotations, the description should disclose behavioral traits (e.g., read-only, auth needs), but only says what it returns; no mention of safety or 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.

Conciseness3/5

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

The description is concise (one sentence) but lacks structure; it covers the minimal purpose but omits important details.

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 output schema exists, the description should provide enough context for the tool's purpose, but it is too vague about the returned data and possible error states.

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

Parameters1/5

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

The single parameter run_id has no description in schema or description; no explanation of what it represents or how to obtain it.

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 states it returns sync run status, counts, and error, but uses no strong verb like 'Get' or 'Retrieve', and does not differentiate from siblings like usp_sync_history.

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

Usage Guidelines1/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 alternatives; no context on prerequisites or use cases.

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. Dates show when Glama detected each change.

  1. 20 tool updatesv0.1.0
    • First observedabsence_summary
    • First observedcreate_task
    • First observedget_profile
    • First observedget_schedule
    • First observedgrade_summary
    • First observedlist_absences
    • First observedlist_enrollments
    • First observedlist_grades
    • First observedlist_semesters
    • First observedlist_tasks
    • First observedmoodle_activity
    • First observedmoodle_course
    • First observedmoodle_courses
    • First observedmoodle_download_file
    • First observedupdate_task_status
    • First observedusp_login
    • First observedusp_logout
    • First observedusp_sync
    • First observedusp_sync_history
    • First observedusp_sync_status

TDQS

B3.3/5.0
Disambiguation5/5

Each tool has a distinctly clear purpose. For example, absence_summary provides a risk overview while list_absences returns individual records; moodle_activity, moodle_course, and moodle_download_file each cover different aspects of Moodle interaction. No overlapping functionality that would confuse an agent.

Naming Consistency5/5

All tool names use a consistent lowercase_with_underscores pattern, predominantly verb_noun (list_*, create_*, get_*, update_*, moodle_*, usp_*). Even summary tools like absence_summary and grade_summary follow a predictable noun_noun pattern without deviating from the overall style.

Tool Count4/5

With 20 tools covering student profile, enrollments, grades, absences, schedule, tasks, Moodle, and sync/login/logout, the count is slightly high but justifiable given the breadth of integrated USP systems. It remains manageable and each tool is focused.

Completeness4/5

The tool surface is largely complete for the domain: CRUD for tasks (create, list, status update, but missing delete and full update), read-only access to grades/absences/schedule, comprehensive Moodle interaction, and sync management. Minor gaps exist (e.g., no task deletion, no per-semester enrollment filtering), but agents can work around them.

Maintenance

ActivitySlowing
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/iDavi/usp-mcp'

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