Skip to main content
Glama
maximilianspitzer

fuxam-student-mcp

Fuxam Student MCP

Use Codex, Claude, and other local MCP clients to explore your Fuxam modules, learning units, progress, schedule, and semester options.

The server runs on your computer and talks directly to Fuxam. It gives the agent useful source facts and composable tools instead of trying to choose a semester for you.

Let your agent set it up

Copy this prompt into a new chat with Codex or Claude:

Set up Fuxam Student MCP for me using this documentation:
https://codecampus.tools/docs/fuxam-student-mcp

Detect which supported MCP client I am using and follow only its current instructions. Install the latest public release locally and configure it as a stdio MCP server. Complete every step you can directly, and pause only for a client UI or secret-entry action I must perform.

Never ask me to paste my Fuxam `__client` cookie into this chat, and never print or log it. When the credential is required, tell me exactly how to enter it directly into the client's local MCP configuration or secure installer prompt.

After configuration:
1. Verify the MCP entry exists without displaying the credential.
2. Start the server and confirm its tools are available.
3. Tell me if I need to restart the client or open a new chat.
4. Run one read-only check: show the module categories and learning units I can currently choose from.

Do not book or unbook courses, or join or leave waitlists, during setup.

Prefer to install it yourself? Follow the manual steps below.

Related MCP server: MCP UJI Academic Server

Requirements

  • A CODE University Fuxam account

  • Node.js 26 or newer for command-line installation

  • Codex, Claude Code, or Claude Desktop

Fuxam's short-lived session tokens are renewed from its Clerk __client cookie.

  1. Sign in at fuxam.app in your browser.

  2. Open the browser developer tools.

  3. In the application/storage cookie view, select https://clerk.fuxam.app.

  4. Copy the value of the __client cookie.

Treat this value like a password. Do not paste it into chat, commit it, or include it in screenshots.

Install

ChatGPT/Codex app and Codex CLI

The installed ChatGPT/Codex app and Codex CLI share the local Codex MCP configuration:

codex mcp add fuxam \
  --env FUXAM_CLERK_CLIENT='<your __client cookie>' \
  -- npx -y fuxam-student-mcp

Open a new Codex task after adding the server.

Claude Code

claude mcp add --scope user \
  -e FUXAM_CLERK_CLIENT='<your __client cookie>' \
  fuxam -- npx -y fuxam-student-mcp

Claude Desktop

Download the .mcpb file from the matching GitHub Release, open it with Claude Desktop, and paste the Clerk cookie when prompted. The bundle runs the same MCP locally and marks the cookie as sensitive configuration.

Other local MCP clients

Configure a stdio server with this executable and environment variable:

{
  "command": "npx",
  "args": ["-y", "fuxam-student-mcp"],
  "env": {
    "FUXAM_CLERK_CLIENT": "<your __client cookie>"
  }
}

The outer configuration key differs between clients. Use the client's normal local stdio MCP settings.

Try it

Good first prompts include:

  • “Show me the module categories and learning units I can currently choose from.”

  • “Help me compare these three modules, including requirements, progress, instructors, dates, and workload.”

  • “Look at my study plan and current progress, then help me assemble a realistic semester.”

  • “Check whether this proposed set of learning units has scheduling conflicts.”

  • “What deadlines and appointments do I have over the next month?”

The agent can browse by category/tag or text, batch-inspect modules and learning units, compare the result with your progress, and check a proposed course set for conflicts.

Capabilities

Planning and discovery:

  • explore_learning_options

  • search_fuxam

  • get_study_plan

  • list_enrolled_courses

  • list_bookable_courses

  • get_learning_unit_details

  • get_module_details

  • get_module_attempts

  • get_exam_details

Schedule and workload:

  • list_student_appointments

  • list_course_appointments

  • list_course_deadlines

  • list_applicable_excluded_dates

  • list_todos

  • list_pinned_courses

  • get_layer_path

  • check_course_conflicts

Account changes:

  • book_course

  • unbook_course

  • join_waitlist

  • leave_waitlist

The four account-change tools affect your real Fuxam account. They are marked as write operations for MCP clients, and each mutation verifies the resulting Fuxam state. Booking does not silently run a conflict check first.

How agents should use it

For open-ended planning, start with explore_learning_options and list_enrolled_courses. Narrow by category or search query, then batch the shortlist through get_module_details, get_learning_unit_details, and get_module_attempts. Check the complete proposed set with check_course_conflicts before presenting the tradeoffs.

Identifier names matter:

  • course id is used for booking, waitlists, and conflict checks;

  • layerId or layer_id is used for appointments and deadlines;

  • courseModuleId is the stable module ID;

  • moduleVersionId identifies one curriculum version;

  • organizationTermId identifies an academic term.

Fuxam import-derived completion totals can occasionally lag behind concrete attempt or gradedAt records. Agents should prefer the concrete records when they disagree.

Troubleshooting

FUXAM_AUTH_REQUIRED

: Sign in to Fuxam again, copy the current Clerk __client cookie, remove the old MCP entry, and add it again with the new value.

codex mcp remove fuxam
claude mcp remove --scope user fuxam

FUXAM_UNSUPPORTED_INSTITUTION

: This release supports the CODE University Fuxam environment.

FUXAM_CONTEXT_REQUIRED

: The server could not identify one active cohort and study-program context. Include the full error when opening an issue, but never include your cookie, headers, or raw Fuxam response data.

Partial results

: Some curated reads combine several Fuxam sections. If an optional upstream section is temporarily unavailable, the MCP returns the sections it could retrieve with partial: true and identifies what can be retried.

Privacy

Version 0.1 collects no telemetry. Your Fuxam credential and student data remain on your computer except for direct requests from the local MCP to Fuxam and Clerk. Tool results are sent to the MCP client you chose, subject to that client's own data controls.

License

Noncommercial use is licensed under the PolyForm Noncommercial License 1.0.0. Commercial use requires a separate written license from Maximilian Spitzer; contact the author through GitHub.

Development

npm ci
npm run check
npm run test:package
npm run package:mcpb

The package smoke test installs the generated npm tarball in a clean temporary directory, negotiates MCP over stdio, lists its tools, and verifies the credential-free startup behavior. Tests never use a live student credential or perform a Fuxam mutation.

Project status

This is an unofficial student-built client, published with permission from CODE University and Fuxam. Fuxam remains the source of truth for academic records, requirements, availability, and account state.

Available Tools

21 tools
book_courseBook CourseA

Book one learning-unit course ID on the real student account and verify it with a fresh enrolled-course read. This does not implicitly check conflicts; call check_course_conflicts first when schedule compatibility matters.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes

TDQS

A4.4/5.0
Behavior4/5

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

With annotations already indicating a non-read-only, non-idempotent operation, the description adds real-world side-effect context ('real student account') and discloses the postcondition ('verify it with a fresh enrolled-course read'). It also surfaces the important non-behavior that conflict checks are not implicit. More depth about failure states or permission requirements would improve it, but this is still strong.

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 short, information-dense sentences. The first states the action and verification, and the second adds the conflict-check caveat. No filler or repetition of schema details.

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 single-parameter booking tool, the description covers the core operation, the verification step, and the conflict-checking caveat. It does not explain the return shape or error conditions, but there is no output schema to mirror, and the overall complexity is low.

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 schema gives only courseId with minLength; the description adds that it is a 'learning-unit course ID', which is helpful, but it does not specify where the ID comes from or that it should be a bookable course. With 0% schema description coverage, more explicit parametric guidance would be beneficial, yet the single param's role is largely inferable from the tool name and description.

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 verb-resource pair: book a learning-unit course on the real student account. It also names the follow-up verification action and implicitly separates this tool from siblings like unbook_course, check_course_conflicts, and join_waitlist.

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

Usage Guidelines5/5

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

The description explicitly warns that it does not check conflicts and directly instructs the agent to call check_course_conflicts first when schedule compatibility matters. This provides clear when-to-use versus when-to-defer-to-another-tool guidance.

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

check_course_conflictsCheck Course ConflictsA
Read-onlyIdempotent

Ask Fuxam to evaluate a proposed set of learning-unit course IDs against one another and known appointments. An empty upstream array means Fuxam reported no conflict. This tool does not book or modify anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdsYes
includeAppointmentsForCourseIdsNoDefaults to courseIds; narrow it only when intentionally comparing a subset of appointments.

TDQS

A4.2/5.0
Behavior4/5

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

The annotations already communicate read-only, open-world, idempotent, and non-destructive behavior. The description adds useful interpretation of an empty upstream array as meaning "no conflict" and removes ambiguity by explicitly stating the tool does not book or modify anything. It does not contradict the annotations.

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 short sentences with no filler. The core purpose and scope are first, followed by a useful return-value interpretation, then a caution against an assuming a side effect. Every sentence earns its place.

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 has only two parameters, strong annotations, and no output schema, the description is nearly complete: it covers the action, the input intent, the no-conflict return meaning, and the non-modifying guarantee. It stops short of describing the structure or detail of a non-empty conflict report, but the empty-array result is still covered and the tool is fully append-callable.

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 gives context for courseIds: they are a proposed set of learning-unit course IDs checked against each other and known appointments. It does not add much beyond that, and it leaves includeAppointmentsForCourseIds entirely to the schema. With only about 50% schema description coverage, the description only partially compensates.

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 exactly what the tool does: evaluate learning-unit course IDs against one another and known appointments. The verb is specific, and the line 'does not book or modify anything' separates it from the booking-related sibling tools. It is clearly not a tautology.

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 gives clear context for when to use the tool: when a proposed course selection needs to be checked for conflicts or uncovered that are non-mutating. It does not explicitly name an alternative or say when-not-to use this tool, but its behavioral distinction from booking/modifying tools is clear enough that an agent can choose it appropriately.

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

explore_learning_optionsExplore Learning OptionsA
Read-onlyIdempotent

Explore the catalog when the student does not yet know module or LU names. With no filters, returns the complete raw study plan, elective-group facets with module/current-LU counts, and concise summaries of all current bookable LUs. It tolerates an unavailable study-plan or catalog section and reports partial results in warnings. Call it again with electiveGroupIds to browse those categories or with query for thematic text search. Then use get_module_details and get_learning_unit_details for the shortlist.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNo
electiveGroupIdsNoExact elective-group ids returned by a previous unfiltered call.

TDQS

A4/5.0
Behavior4/5

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

Annotations already establish a read-only, non-destructive, idempotent profile, so the description's job is to add behavior beyond that. It does: the 'tolerates an unavailable study-plan or catalog section and reports partial results in warnings' disclosure is genuinely valuable, since an agent would otherwise misinterpret missing data as a failure. It stops short of describing the warnings format or empty-result behavior.

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?

Five dense sentences, front-loaded with the trigger condition and then progressing logically through return payload, failure behavior, parametrization, and follow-up workflow. Every sentence earns its place and there's no filler; it's simply a lot of orchestration context for what is fundamentally a two-optional-param 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?

For a zero-required-param tool with no output schema and no enums, the description covers every key decision point: when to call, what you get, how it degrades, how to parameterize, and what comes next. The only gap is the unspoken boundary with the semantically overlapping siblings, which would complete the orchestration story.

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

Parameters4/5

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

Schema coverage is exactly 50% — only electiveGroupIds gets a description, and query has just a default. The description compensates by assigning functional meaning to both: 'browse those categories' for electiveGroupIds and 'thematic text search' for query. Both params are optional strings, so the semantic burden is light, but the description still adds real meaning beyond the schema.

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

Purpose4/5

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

States a specific verb and resource ('Explore the catalog') with a clear entry condition ('when the student does not yet know module or LU names') and details the unfiltered return payload (raw study plan, elective-group facets, bookable LU summaries). It stops short of explicitly naming its nearest siblings (search_fuxam, get_study_plan) to draw a boundary, so the differentiation 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 Guidelines4/5

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

Opens with the selection condition (student doesn't know names) and closes with a follow-up workflow ('use get_module_details and get_learning_unit_details for the shortlist'), which routes the agent to the right next tool. However, it never explicitly contrasts against search_fuxam or get_study_plan, so the 'when not to use it / use X instead' guidance is absent.

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

get_exam_detailsGet Exam DetailsB
Read-onlyIdempotent

Drill into one assessment attempt. Returns dates, scheduling, submission eligibility, published outcome, request history, alternative-assessment state, and academic gates unchanged. Omit cohortId to use the configured student's cohort.

ParametersJSON Schema
NameRequiredDescriptionDefault
examIdYes
cohortIdNo
attemptNumberNo
moduleVersionIdYes
organizationTermIdYes

TDQS

B3/5.0
Behavior3/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, and the description aligns with these rather than contradicting them. The description adds useful context by listing the returned data and noting that academic gates are unchanged, but it does not explain errors, authorization, or what 'alternative-assessment state' means.

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 front-loaded with purpose and the full list of return categories, followed by one targeted parameter note. Every sentence contributes meaning, though the return-category list is dense.

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 covers the main return surface of the tool and calls out an important cohortId fallback, which is valuable given there is no output schema. However, it leaves the required IDs' roles and the overall response shape to be inferred from the schema property names and tool title.

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%, so the description bears the burden of explaining parameters, but it only addresses cohortId explicitly. examId, moduleVersionId, organizationTermId, and attemptNumber receive no explanatory value beyond their property names and schema constraints.

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 uses a specific verb and resource ('Drill into one assessment attempt') and enumerates the detailed fields returned, which makes the tool's purpose clear even without opening the schema. It does not explicitly differentiate itself from sibling tools such as get_module_attempts or search_fuxam, so some differentiation is left to inference.

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

Usage Guidelines2/5

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

No when-to-use guidance is provided; the description never states when this tool should be chosen over sibling tools or what conditions make it the appropriate choice. The only usage note ('Omit cohortId...') concerns parameter behavior, not tool selection.

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

get_layer_pathGet Layer PathA
Read-onlyIdempotent

Resolve a Fuxam layer ID to its structural hierarchy. This is useful for understanding where a course, module, or content layer sits in the curriculum or organization tree.

ParametersJSON Schema
NameRequiredDescriptionDefault
layerIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, fully covering the safety profile. The description adds meaning by explaining the result is a 'structural hierarchy' or 'path', giving insight into the return shape. No contradictions exist, and the description enriches the behavioral understanding beyond the structured fields.

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 with zero redundancy. The primary action and object are front-loaded, and every phrase is informative. It follows the 'less is more' principle perfectly.

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 read-only resolver with one parameter and no output schema, the description provides enough context for an agent to invoke it correctly. It explains the purpose, expected input type, and the nature of the output. Minor missing details like common use cases or response format examples are not critical given the tool's simplicity and the rich annotations.

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 the description must compensate for the undocumented lone parameter. It does add domain context by calling it a 'Fuxam layer ID', which explains what kind of ID is expected, but it doesn't elaborate on format, source, or examples. This is minimal but helpful, placing it above a tautology yet below thorough clarification.

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 'Resolve' and clearly defines the resource: a Fuxam layer ID to its structural hierarchy. It further differentiates itself from siblings by specifying the use case: understanding where a course, module, or content layer sits in the curriculum or organization tree. This clearly sets it apart from the many list/get tools among its siblings.

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 provides clear context on when to use this tool: 'This is useful for understanding where a course, module, or content layer sits in the curriculum or organization tree.' It does not explicitly name alternatives or state when not to use it, but the intent is clear and unambiguous. This meets the 'clear context, no exclusions' level.

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

get_learning_unit_detailsGet Learning Unit DetailsA
Read-onlyIdempotent

Batch-inspect several learning-unit course IDs. Returns each complete current course record plus a large page of its appointments and deadlines, preserving upstream fields. Missing IDs are reported separately; schedule or deadline sections report unavailable when Fuxam exposes the catalog LU but withholds that course endpoint. Use this after narrowing a semester shortlist; it does not rank, check conflicts, or mutate anything.

ParametersJSON Schema
NameRequiredDescriptionDefault
languageNoen
courseIdsYesLearning-unit ids from enrolled or bookable course results.
includeDeadlinesNo
includeAppointmentsNo

TDQS

A4.1/5.0
Behavior5/5

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

Beyond the annotations (readOnly, idempotent, non-destructive), the description adds valuable behavioral details: missing IDs are reported separately, and schedule/deadline sections may be unavailable for certain courses. This extra transparency about edge cases exceeds what annotations alone provide.

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 relatively concise and well-structured: it opens with the core purpose, then details the return content, then provides usage context and exclusions. It avoids redundancy, though it could be slightly more streamlined.

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?

With no output schema, the description adequately explains what is returned (complete course record plus appointments/deadlines) and covers important nuances (missing IDs, unavailable sections). It also provides usage guidance. It lacks some detail but is sufficiently complete for an agent to use effectively.

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 only 25% (only courseIds has a description). The tool description does not elaborate on the parameters' meanings or the effects of includeDeadlines/includeAppointments or the language enum. The description fails to compensate for the low schema coverage, leaving users to infer parameter semantics from names 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's purpose: batch-inspecting learning-unit course IDs and returning their records, appointments, and deadlines. It distinguishes itself from sibling tools by focusing on detailed retrieval for specific course IDs and explicitly notes it does not rank or check conflicts, making its role unambiguous.

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 gives a clear usage condition ('Use this after narrowing a semester shortlist') and states what it does not do (rank, check conflicts, mutate). While it does not explicitly contrast with each sibling tool, the context is sufficient to guide when to use this tool over others.

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

get_module_attemptsGet Module AttemptsA
Read-onlyIdempotent

Batch attempt history, assessment requirements, attendance fulfillment, grades, and academic rules for several module versions. Each module is returned independently so one unavailable record does not discard the others. Use moduleVersionIds from the study plan or courses' connectedModule records.

ParametersJSON Schema
NameRequiredDescriptionDefault
moduleVersionIdsYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering safety. The description adds the independence behavior: each module is returned independently so one unavailable record does not discard the others. This is useful beyond annotations, but no further behavior (e.g., errors, pagination) is disclosed, so the description complements but does not greatly expand on annotation.

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 with no filler. The first sentence enumerates the exact data returned; the second clarifies independence and provides the ID source. Information is front-loaded and each word 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?

For a single-parameter batch retrieval tool with no output schema, the description lists the data categories and warns against partial failure. However, it does not specify the response structure (e.g., array of objects keyed by moduleVersionId) or any edge cases, which could be important given the independence claim. The lack of an output schema increases the description's burden, and it only partially satisfies 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?

The schema provides only type and constraints for moduleVersionIds (array of strings, 1-20 items), with zero description coverage. The description compensates by stating these IDs come from study plans or connectedModule records, giving semantic context. It does not detail the format of each string or the relationship between IDs and the batch response, but the source hint is a meaningful addition 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 states a clear verb and resource: it retrieves a batch of attempt history, assessment requirements, attendance fulfillment, grades, and academic rules for several module versions. This distinguishes it from sibling tools like get_module_details or get_exam_details, which focus on other specific aspects. The tool's scope 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 Guidelines4/5

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

It provides explicit guidance on where to obtain the required IDs (from study plans or connectedModule records), which helps an agent know when this tool is appropriate. It does not explicitly name alternatives, but the detailed content makes it clear this is for batch academic data rather than individual lookup, so the usage context is reasonably clear.

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

get_module_detailsGet Module DetailsA
Read-onlyIdempotent

Batch-inspect several module versions. For each module, returns Fuxam's catalog settings and requirements, module information, associated learning units for the optional academic term, and the student's attempt and academic-rule state. In a learning-unit connectedModule record, pass moduleId as courseModuleId and pass moduleVersionId unchanged.

ParametersJSON Schema
NameRequiredDescriptionDefault
modulesYes

TDQS

A3.8/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is already clear. The description adds value by specifying the batch capability (max 20 items, though that's also in schema) and the nuanced parameter mapping (moduleId as courseModuleId). It also discloses that it returns attempt and academic-rule state, which is richer behavioral context. No contradiction with annotations.

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 two sentences, dense but not bloated. The core purpose is front-loaded in the first sentence, and the special-case parameter guidance is in the second. It earns its length by covering return contents and a critical nuance, though it could tighten wording.

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 moderate complexity (batch operation with three fields per item, no output schema), the description covers the purpose, return contents, and a key parameter nuance. It doesn't specify the output shape (no output schema exists), but for a read-only batch inspector with annotations covering safety, this is adequate. Slight gap: it doesn't clarify what 'academic-rule state' means or how term affects results, but overall complete enough.

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 description coverage is 0%, so the description must compensate. It does not explicitly explain what courseModuleId or moduleVersionId are beyond what the schema property descriptions say (only courseModuleId has a schema description; moduleVersionId and organizationTermId have none). However, the description clarifies the critical relationship between moduleId and courseModuleId in a connectedModule record, which is semantic value beyond the schema. organizationTermId's purpose (optional term for learning units) is implied but not fully explained.

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 a clear verb ('Batch-inspect') and resource ('module versions'), and enumerates the returned data (catalog settings, requirements, module info, associated learning units, attempt and academic-rule state). It distinguishes itself from sibling get_module_attempts by covering more than just attempts, though it doesn't name a specific sibling. The 'Batch' qualifier signals it handles multiple modules at once, which differentiates it from single-module alternatives.

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 usage context (inspecting several module versions, optionally including a term) but does not explicitly state when to prefer this over siblings like get_module_attempts or get_learning_unit_details. It gives a concrete structural note about passing moduleId as courseModuleId in a connectedModule record, which helps in that particular case, but there is no general 'when to use' vs alternatives guidance.

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

get_study_planGet Study PlanA
Read-onlyIdempotent

Return the student's module elections, elective pools, available terms, attempt summaries, and study-plan state unchanged. Use returned organizationTermId and moduleVersion.id values with the drill-down tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
focusIdNo
organizationTermIdNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is fully covered. The description adds 'unchanged' and enumerates the returned data, but offers no further behavioral details such as pagination, auth requirements, or rate limits. This is adequate but 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?

Two sentences with no filler. The core return statement is front-loaded, and the follow-up instruction about using returned IDs earns its place by giving actionable guidance. Nothing is redundant or excessively 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?

With no output schema, the description partially compensates by listing return contents and providing a forward pointer to drill-down tools. However, focusId is entirely unexplained, and with a broad set of sibling retrieval tools, the description does not fully delineate when this comprehensive snapshot is needed versus when to use a more specific 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?

Schema description coverage is 0%, so the description must compensate for the parameters. It references organizationTermId and how to reuse it, but provides no explanation of focusId, no indication that both parameters are optional, and no semantics about how the parameters affect the returned study plan.

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 verb ('Return') with a detailed resource list: module elections, elective pools, available terms, attempt summaries, and study-plan state. It also distinguishes this tool from 'drill-down tools' by positioning it as the top-level entry point, so an agent can clearly understand what this tool provides.

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?

Explicitly instructs the agent to use the returned organizationTermId and moduleVersion.id values with the drill-down tools, establishing when this tool should be used—as a prerequisite for deeper lookups. It doesn't name specific sibling tools or provide negative conditions, but the entry-point role is clear.

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

join_waitlistJoin WaitlistB

Join a course waitlist on the real student account and re-read the booking catalog to report the resulting position.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes

TDQS

B3.4/5.0
Behavior3/5

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

Annotations already indicate a mutation (readOnlyHint=false). The description adds useful behavioral context by specifying it operates on the 'real student account' and that it will re-read the catalog to report the resulting position. No contradictions with annotations, but it does not disclose edge cases like duplicate join attempts or failure handling.

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 concise sentence that leads with the primary action and includes the follow-up read. No wasted words or redundant information.

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 touches on the main action and the reporting step, but with no output schema it should specify the return format or result structure. It also omits common edge cases (e.g., already on waitlist, course not available). For a simple mutation tool, this is 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?

With 0% schema description coverage, the description must explain the parameter. It only implies courseId is the course to join via the phrase 'Join a course waitlist' but never explicitly maps it or describes how to obtain the ID. This leaves the parameter under-explained for a tool with a single required param.

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 a specific verb (Join) and resource (course waitlist) and adds a secondary action (re-read booking catalog) that differentiates it from siblings like book_course and leave_waitlist. It is unambiguous what the tool does.

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 provides no explicit guidance on when to use this tool versus alternatives such as book_course or leave_waitlist. It does not state conditions like 'use when a course is full' or 'when not already enrolled,' leaving usage context to inference.

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

leave_waitlistLeave WaitlistA
Destructive

Leave a course waitlist on the real student account and re-read the booking catalog to verify the resulting state.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes

TDQS

A4.4/5.0
Behavior5/5

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

The description explicitly mentions leaving a waitlist on the real student account, indicating a real side effect, and advises verifying the resulting state. The destructiveHint annotation is true, and the description aligns, with no contradiction. It clearly conveys that this action modifies live data and is destructive in nature.

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?

Description is a single concise sentence that clearly states the action and the verification step, without 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?

The description gives enough context about the entity ('course') and the follow-up action ('re-read the booking catalog'), making it self-contained for most use cases, though it could mention prerequisites like being on a waitlist.

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?

Only one parameter, courseId, is presentaren't described; description says 'Leave a course waitlist' which implies courseId is the identifier, but doesn't provide details on allowed formats, how to obtain it, or whether it's the course or waitlist ID. Schema description coverage is 0%, so the tool's own description doesn't explain the parameter.

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 function: leaving a course waitlist, and includes the verification step of re-reading the catalog, making the purpose unambiguous.

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?

It explains the primary action and the verification step, but doesn't explicitly state prerequisites like how to obtain the courseId or conditions such as being on the waitlist. However, with sibling tools listing waitlists, it's inferable.

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

list_applicable_excluded_datesList Applicable Excluded DatesA
Read-onlyIdempotent

Return institution-wide excluded dates applicable to the student in an ISO-8601 date or datetime interval, such as holidays or closure periods that affect scheduling.

ParametersJSON Schema
NameRequiredDescriptionDefault
toYes
fromYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint false, covering the safety profile. The description adds context about the filtering scope ('applicable to the student') and the meaning of excluded dates, which goes beyond the raw annotations. No contradictions found.

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, well-structured sentence. The primary action and resource are front-loaded, and the constraints (ISO-8601, student-specific) follow naturally. There is no fluff or redundant content, making it highly efficient for an agent to parse.

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 no output schema and strong annotations covering safety, the description provides sufficient context for an agent to call the tool correctly. It states the resource, the interval format, and the intended application. It does not describe the return structure or sorting, but for a read-only list operation this is minor. An agent can confidently invoke it with the given parameters.

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 the description must compensate. It mentions 'ISO-8601 date or datetime interval', which hints that both 'from' and 'to' are ISO-8601 strings and bound the interval, but it does not explicitly explain which parameter is the start/end or whether they are inclusive. This is a partial compensation, leaving room for interpretation.

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 'Return' and the specific resource: 'institution-wide excluded dates applicable to the student'. It also specifies the interval format (ISO-8601 date or datetime) and gives examples ('holidays or closure periods'). This distinguishes it from sibling tools like list_course_deadlines or list_student_appointments, which target different data types.

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 frames the use case: retrieving unavailable scheduling dates. It implies when to use this tool (e.g., checking holidays affecting the student's schedule) but does not name alternatives or exclusion conditions. While not exhaustive, the context is clear enough for an agent to select it over siblings without further guidance.

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

list_bookable_coursesList Bookable CoursesA
Read-onlyIdempotent

Return one upstream page of bookable learning units unchanged, including capacity, enrollment, waitlist state, descriptions, and connected modules. Use id for booking/waitlists, layerId for course schedules, and connectedModule.moduleVersionId for curriculum tools. Follow pageCount to inspect further pages.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
searchNoEmpty browses all offerings.
perPageNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already carry readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the description need not repeat safety. It adds pagination behavior ('one upstream page' and 'Follow pageCount') and lists the specific data returned. This is meaningful context beyond the annotations, though it doesn't address auth or rate limits, which are minor given the safety hints.

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 with zero waste. The main purpose is front-loaded, followed by actionable usage guidance and a pagination hint. Every sentence contributes value, and the structure is easily scannable.

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 read-only listing tool with no output schema and optional parameters, the description covers the main return fields and gives usage hints. However, it omits explanations for `page` and `perPage` and does not explicitly state when to choose this over sibling tools. Given the annotations cover safety, this is acceptable but not fully complete.

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

Parameters2/5

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

Schema description coverage is only 33% (only `search` has a description). The description does not explain `page` or `perPage` semantics, nor does it mention them at all. It references `pageCount` but that is an output field, not a parameter. With low schema coverage, the description should compensate, but it fails to clarify pagination controls, leaving the agent to infer their meaning from defaults and types only.

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 'one upstream page of bookable learning units unchanged' with specific included fields (capacity, enrollment, waitlist state, descriptions, connected modules). It distinguishes itself from siblings by indicating which identifiers to use for booking, schedules, and curriculum tools, making its purpose unambiguous.

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 guidance on how to use the returned data: 'Use id for booking/waitlists, layerId for course schedules, and connectedModule.moduleVersionId for curriculum tools.' Also advises to 'Follow pageCount to inspect further pages.' It does not explicitly mention when to use this tool over alternatives like list_enrolled_courses or get_learning_unit_details, but the field usage guidance partially covers context.

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

list_course_appointmentsList Course AppointmentsA
Read-onlyIdempotent

Return one course's appointment page unchanged. Supply layerId from enrolled or bookable course data, not the learning-unit course id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
layerIdYes
directionNoinitial

TDQS

A3.5/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and non-destructive behavior, so the description only needs to add context. It adds the pass-through behavior ('unchanged') and the layerId provenance caveat, but does not disclose pagination shape or how direction affects results.

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 sentences with no filler; the core operation is stated first and the critical parameter caveat is second. Every sentence earns its place.

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 is adequate for the required parameter but not fully complete: no output schema exists, and pagination behavior plus direction semantics are not explained. The layerId warning is valuable, yet an agent still lacks guidance on how limit, cursor, and direction should be used.

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?

With 0% schema description coverage, the description must carry parameter meaning. It does clarify layerId's required source, but limit, cursor, and direction are left entirely to their schema names/defaults, which is only partial compensation.

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

Purpose4/5

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

The description names a specific action and resource: 'Return one course's appointment page unchanged.' It scopes to a single course and warns about layerId provenance, which helps distinguish it from learning-unit tools, though it does not explicitly contrast it with list_student_appointments.

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?

It gives a clear precondition: supply layerId from enrolled or bookable course data, not the learning-unit course id. However, it does not state when to choose this tool over list_student_appointments or list_bookable_courses, leaving the selection inference to the agent.

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

list_course_deadlinesList Course DeadlinesB
Read-onlyIdempotent

Return one course's deadline items and pagination metadata unchanged. Supply layerId from enrolled or bookable course data.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
layerIdYes
languageNoen

TDQS

B3.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, covering the safety profile. The description adds that the tool returns items and pagination metadata 'unchanged' and operates on 'one course', which is useful context about the return behavior and scope. This is a modest addition beyond annotations but not contradictory.

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 sentence that is concise and front-loads the core purpose before giving the parameter hint. There is no fluff or redundancy, and it is appropriately sized for a straightforward list operation. It could be slightly more structured, but the brevity is effective.

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 no output schema, the description bears the burden of explaining what the tool returns; it only offers a high-level 'deadline items and pagination metadata unchanged', without detailing the structure of items or pagination metadata. It also lacks explanations for limit, cursor, and language, and provides no info on when to use it relative to siblings. The description is too thin for a tool with this parameter count and pagination complexity.

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%, so the description must compensate for all parameters. It only mentions layerId (with a source hint) but completely ignores limit, cursor, and language. For a tool with four parameters, especially pagination-related ones, this is a significant gap that leaves the agent guessing about the remaining parameters' purposes and formats.

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 a specific verb ('Return') and a clear resource ('one course's deadline items'), and further clarifies that it returns pagination metadata unchanged. It distinguishes the tool's single-course scope, though it does not explicitly name sibling alternatives to differentiate from. The purpose is clear and not a mere tautology.

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 a usage hint by instructing to 'Supply layerId from enrolled or bookable course data', which tells the agent where to source the required parameter. However, it does not state when to use this tool versus alternatives, nor does it give any exclusion criteria. The guidance is partial but not misleading.

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

list_enrolled_coursesList Enrolled CoursesA
Read-onlyIdempotent

Return the student's enrolled course records unchanged, including descriptions, educators, tags, content blocks, status, and identifiers. A course id and layer_id are different identifiers.

ParametersJSON Schema
NameRequiredDescriptionDefault
searchNoOptional course search text.

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint: false, so the description carries a lighter burden. The phrase 'unchanged' reinforces the read-only nature, and the clarification that course id and layer_id are different identifiers adds some context, but it does not disclose substantial new behavior beyond the annotations.

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 states the core action and scope, followed by a brief clarification about identifiers. Every clause adds information, and there is no redundancy or filler.

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 simple tool shape—one optional parameter and no output schema—the description lists the return contents and clarifies identifier semantics, which covers most of what an agent needs. It omits minor details like search filtering behavior and pagination, but these are not essential for correct invocation.

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 input schema fully describes the only parameter, 'search', as 'Optional course search text' with 100% coverage. The description does not add any further meaning or usage details for this parameter, so it provides no value beyond the schema. Baseline 3 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 uses a specific verb ('Return') and names the exact resource ('the student's enrolled course records'). It further distinguishes itself from siblings like list_bookable_courses by emphasizing 'enrolled' and specifying the included fields, making the tool's purpose immediately clear.

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 clearly establishes the context: this returns enrolled course records, and the optional search parameter is documented. However, it does not explicitly state when not to use this tool or name alternatives such as list_bookable_courses, so it provides strong context but no explicit exclusionary guidance.

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

list_pinned_coursesList Pinned CoursesA
Read-onlyIdempotent

Return the student's pinned-course records unchanged. Pinned courses can indicate the student's current working set but are not a recommendation signal.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds value by stating the records are returned 'unchanged' and clarifying that they are not a recommendation signal, which is useful behavioral context beyond the annotations.

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 sentences with no wasted words. The core action is front-loaded, and the clarifying caveat about recommendation signals is placed second, keeping the structure efficient and readable.

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?

For a zero-parameter, read-only tool with strong annotations, the description is complete. It explains what is returned, that the data is unchanged, and how the data should be interpreted, which is sufficient for an agent to invoke it correctly.

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 baseline is 4. The description does not need to explain parameters, and the empty input schema is fully consistent with the described behavior.

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 verb ('Return') and resource ('student's pinned-course records unchanged'), clearly identifying what the tool does. It also distinguishes the tool's meaning from recommendation signals, which helps separate it from sibling tools like list_enrolled_courses.

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 gives clear context for when to use the tool: pinned courses indicate the student's current working set. It also implicitly warns against using it as a recommendation signal, though it does not explicitly name alternative tools or state when-not-to-use conditions.

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

list_student_appointmentsList Student AppointmentsC
Read-onlyIdempotent

Return one page of the student's agenda unchanged, including appointment times, locations, organizers, attendance settings, and pagination state. Use the returned cursor for another page.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
cursorNo
directionNoinitial
showPastAppointmentsNo

TDQS

C2.9/5.0
Behavior3/5

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

Annotations already declare the operation as read-only, open-world, and idempotent. The description adds value by explaining the pagination contract ('Use the returned cursor for another page') and listing returned fields. However, it does not elaborate on what 'attendance settings' means or what 'unchanged' implies behaviorally, so the added context is moderate.

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 concise—two sentences that front-load the primary action and include a helpful pagination hint. It wastes no words and is easy to parse.

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 tool has moderate complexity with four parameters, yet the description does not cover the semantics of direction (past/future) or showPastAppointments. An agent cannot fully determine how to retrieve past vs. future appointments, which is likely a common use case for this tool. The lack of an output schema makes this omission more critical.

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 carries the full burden of explaining parameters. It only hints at 'cursor' usage and provides no information about 'limit', 'direction', or 'showPastAppointments'. The absence of any explanation for the direction parameter (initial/past/future) is a major gap that the description fails to fill.

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 main action: returning one page of the student's agenda, and lists the fields included (times, locations, organizers, etc.). It is somewhat specific, but it does not explicitly differentiate from the sibling tool list_course_appointments, which could be confused for a similar listing 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?

The description provides no explicit guidance on when to use this tool versus alternatives. It neither mentions prerequisites nor suggests calling this tool for student-specific appointments versus course appointments. The only usage hint is implicit from the tool name, which is not enough for an agent to decide between similar tools.

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

list_todosList To-DosA
Read-onlyIdempotent

Return the student's Fuxam content-block workload and current statuses unchanged. This exposes concrete outstanding, in-progress, completed, reviewed, and locked work for planning workload.

ParametersJSON Schema
NameRequiredDescriptionDefault
showLockedNo
timePeriodNomonth
showReviewedNo
showCompletedNo
showInProgressNo
showNotStartedNo

TDQS

A3.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns the workload 'unchanged' and explicitly lists the status categories, which gives useful behavioral context about the output scope without contradicting annotations.

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 sentences, no filler. The first sentence states the primary action and the second adds the planning context. It is efficiently front-loaded and every word contributes value.

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 six parameters, no output schema, and 0% schema description coverage, the description is far too thin. It omits any explanation of the timePeriod default or the effect of the boolean toggles, and provides no details on the return structure or possible pagination. An agent cannot fully infer correct usage from this definition alone.

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%, so the description must carry parameter meaning. However, it does not explain what timePeriod means or how the boolean flags (showLocked, showCompleted, etc.) control the output. The status categories are mentioned, but there's no mapping to the parameters, leaving agents to guess parameter semantics.

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 verb ('Return') and a clear resource ('the student's Fuxam content-block workload and current statuses'), and names the concrete status categories (outstanding, in-progress, completed, reviewed, locked). This is unambiguous and distinct from siblings like list_courses or get_study_plan.

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?

It implies the tool is for planning workload, but does not explicitly state when to use it over alternatives (e.g., get_study_plan or list_course_deadlines) or when not to use it. There is no mention of exclusions or preferred scenarios.

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

search_fuxamSearch FuxamA
Read-onlyIdempotent

Search Fuxam entities and return the upstream result unchanged. Use this to discover course, module, term, appointment, and exam IDs before calling specialized tools.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYesSearch text.
typesNoEntity types to search.
offsetNo

TDQS

A4/5.0
Behavior3/5

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

The description adds the behavioral detail that the upstream result is returned unchanged, which is useful. With readOnlyHint, idempotentHint, and destructiveHint already true, the safety profile is covered, but the description does not elaborate on pagination, rate limits, or error behavior, so a score of 3 is appropriate.

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 sentences with no fluff. The first sentence states the core action and behavior, and the second gives concrete usage context. Efficient and well-structured.

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?

The tool is simple with 4 parameters and no output schema. The description covers purpose, usage timing, and the key behavior of returning the upstream result unchanged. It is sufficiently complete for an agent to know when to call it and what to expect, though it does not specify pagination details available in the schema.

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

Parameters3/5

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

Schema description coverage is 50%; only query and types have descriptions. The description mentions entity types but does not clarify limit or offset semantics. Since coverage is not low and defaults are provided, the description adds minimal value beyond the schema, so a baseline 3 is warranted.

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 what the tool does: 'Search Fuxam entities and return the upstream result unchanged.' It lists the entity types it covers and explicitly frames it as a discovery tool before specialized tools, which differentiates it from the sibling list functions.

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?

It provides explicit guidance on when to use the tool: 'Use this to discover course, module, term, appointment, and exam IDs before calling specialized tools.' This clarifies its role relative to the specialized siblings, though it does not name specific alternatives or give exclusion conditions.

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

unbook_courseUnbook CourseA
Destructive

Unbook one learning-unit course ID from the real student account and verify its absence with a fresh enrolled-course read.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYes

TDQS

A4/5.0
Behavior4/5

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

While annotations already indicate destructiveness, the description adds value by disclosing that the tool verifies the outcome with a fresh read, which implies an internal read-after-write behavior. It also specifies the target as 'real student account,' hinting at environment‑sensitive behavior. This goes beyond the annotation flags, though it could be more explicit about side effects or error handling.

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, tightly worded sentence that packs all essential information without fluff. It front-loads the action and includes a meaningful detail (verification) without drifting into unnecessary explanation. Every word earns its place.

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 destructive action with one parameter, the description provides enough context to understand its purpose and a key behavioral nuance (verification). It could mention idempotency (since the idempotentHint is false) or clarify what 'real student account' means, but these are minor gaps given the simplicity of the 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?

The input schema provides only the parameter name and type, with no description, so the description must compensate. It clarifies that the parameter is a 'learning-unit course ID,' which narrows its meaning, but does not specify format, source, or acceptable values. This is partial compensation for the 0% schema coverage, warranting a mid‑range score.

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 'unbook' with a clear resource ('learning-unit course ID from the real student account') and includes a distinct verification step ('verify its absence with a fresh enrolled-course read'). It clearly differentiates from siblings like 'book_course' and 'leave_waitlist' by naming the exact action and object. No ambiguity remains about what the tool does.

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 verb 'unbook' implies its use case, and the 'real student account' hints at a production context, but there is no explicit guidance on when to prefer this over alternatives (e.g., 'leave_waitlist') or conditions like 'do not use if already unbooked'. The usage context is largely implied by the name rather than spelled out.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 21 tool updatesv0.1.2
    • First observedbook_course
    • First observedcheck_course_conflicts
    • First observedexplore_learning_options
    • First observedget_exam_details
    • First observedget_layer_path
    • First observedget_learning_unit_details
    • First observedget_module_attempts
    • First observedget_module_details
    • First observedget_study_plan
    • First observedjoin_waitlist
    • First observedleave_waitlist
    • First observedlist_applicable_excluded_dates
    • First observedlist_bookable_courses
    • First observedlist_course_appointments
    • First observedlist_course_deadlines
    • First observedlist_enrolled_courses
    • First observedlist_pinned_courses
    • First observedlist_student_appointments
    • First observedlist_todos
    • First observedsearch_fuxam
    • First observedunbook_course

TDQS

A3.7/5.0

Scored across 21 tools

Disambiguation5/5

Each tool has a clearly distinct purpose, ranging from search and listing to booking and waitlist management. Overlaps like list_enrolled_courses vs list_bookable_courses are differentiated by their scope (enrolled vs bookable), and get_learning_unit_details vs get_module_details target different entities.

Naming Consistency4/5

Most tools follow a verb_noun pattern (list_*, get_*, book_*, unbook_*, join_*, leave_*). Minor inconsistencies exist, such as 'search_fuxam' and 'explore_learning_options' not using the same prefix structure, but the overall naming is coherent and readable.

Tool Count4/5

With 21 tools, the set is fairly large but justified by the breadth of student operations: reading data, booking, waitlists, conflict checking, and scheduling. The count is on the higher end but still within a reasonable range for a comprehensive student management server.

Completeness4/5

The tool surface covers core student actions: search, list, view details, book/unbook, join/leave waitlists, check conflicts, and access appointments, deadlines, exams, todos, and pinned courses. Minor gaps like a dedicated 'get_student_info' or update operation exist, but the core domain is well represented.

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