hisinone-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@hisinone-mcpdownload my transcript of records"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
hisinone-mcp
An MCP server that reads study data from a HISinOne campus portal and downloads the documents of the signed-in account.
The server targets the portal of Reutlingen University, but the base URL is a setting. Other HISinOne installations use the same page structure.
What the server can do
HISinOne has no public API for study data. The server signs in with the ordinary web form and reads the rendered pages. It exposes nine tools.
Tool | Purpose |
| Name, subjects and contact values of the account |
| Full grade tree with credit points and status |
| The terms that the portal offers, with their keys |
| Course and exam registrations of one term |
| Personal appointments with room and repeat rule |
| Certificates and reports that the portal can produce |
| Produce one document and store it on disk |
| Store one portal file by its address |
| Search the course catalogue |
hisinone_list_documents gives the key that hisinone_download_document needs.
A portal usually offers the enrolment certificate, the fee certificate, the
transcript of records and the study history.
Related MCP server: moodle-utn-mcp
Setup
Copy
.env.exampleto.env.Put your portal account and password into
.env.Start the development shell with
nix develop.
The shell installs Python 3.14, uv, ruff and basedpyright. It also creates
a virtual environment in .venv, which Zed and its language servers find.
Without Nix, run uv sync --all-groups instead.
Settings
Each setting is an environment variable. The server also reads a .env file in
the working directory.
Variable | Default | Purpose |
| — | Portal account name |
| — | Portal account password |
|
| Portal root |
|
| Directory for downloaded files |
|
| HTTP timeout in seconds |
Run the server
uv run hisinone-mcpThe server speaks the MCP stdio transport. To add it to Claude Code:
claude mcp add hisinone -- uv run --directory /path/to/hisinone-mcp hisinone-mcpLayout
src/hisinone_mcp/
config/ Settings
errors/ One error class per file
parsing/ Document, JsfForm and CalendarFeed
session/ The signed-in HTTP client
model/ Result models, one domain per directory
service/ One reader per portal area
server.py The MCP tool definitionsEach file holds exactly one class.
How the portal reading works
The portal runs on JavaServer Faces. A page keeps its state in hidden fields. A
button press is a form POST that repeats every field and adds the name of the
button. JsfForm does this work.
Three details decide whether a reader works:
The grade page shows its tree collapsed. The reader presses the expand control before it parses the table.
A certificate is a server job. The reader presses the document button, waits for the job and follows the download link that carries a document id.
The timetable page needs JavaScript, but it also publishes an iCalendar feed. The reader takes the feed address from the page and parses the feed.
A portal update can change a page. A tool then reports that the page layout changed, and the parser needs an update.
Checks
ruff check .
ruff format --check .
basedpyrightLimits
The server acts as one account. It holds no multi-user session.
It reads data and downloads files. It does not register for exams or courses.
Reutlingen University does not use the course registration module. The registration tool therefore reports an empty term for that portal.
License
MIT
Available Tools
9 toolshisinone_download_documentDownload a certificate or a reportA
Let the portal produce one document and store it on disk. Call hisinone_list_documents first to get a key. The tool waits for the portal job and returns the path of the stored file.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Document key from hisinone_list_documents. | |
| target_dir | No | Directory for the file. The configured download directory applies if this is absent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Absolute path of the stored file |
| filename | Yes | File name |
| media_type | Yes | Media type that the portal reported |
| size_bytes | Yes | Size of the stored file |
| source_url | Yes | Portal address that delivered the file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark this as non-read-only and non-idempotent, and the description adds meaningful behavioral detail: the tool waits for the portal job, stores the file on disk, and returns the stored file path. No contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: purpose, prerequisite, behavior, and return value are all covered in two sentences with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and annotations present, the description covers the key prerequisite, waiting behavior, side effect of storing to disk, and return value. It does not discuss error cases or contrast with download_url, but nothing critical is missing for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so key and target_dir are already documented in the schema. The description reinforces that key comes from hisinone_list_documents but adds little semantic value beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('produce and store on disk') and identifies a single portal document as the resource. It distinguishes itself from hisinone_list_documents by telling the caller to call that tool first, but it does not explicitly differentiate itself from sibling hisinone_download_url.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit precondition: call hisinone_list_documents first to get a key. This is clear usage guidance, though it lacks explicit exclusions or a direct comparison with alternatives like download_url.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_download_urlDownload a portal file by addressB
Store one file that a portal page links to, for example a document link that carries a docId. The address must point at the portal.
| Name | Required | Description | Default |
|---|---|---|---|
| url | Yes | Absolute portal address, or a path that starts at the portal root, such as /qisserver/rds?state=docdownload&docId=... | |
| filename | No | File name that replaces the name from the portal. | |
| target_dir | No | Directory for the file. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Absolute path of the stored file |
| filename | Yes | File name |
| media_type | Yes | Media type that the portal reported |
| size_bytes | Yes | Size of the stored file |
| source_url | Yes | Portal address that delivered the file |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal readOnlyHint=false and idempotentHint=false, so the description is not the sole source of behavioral context. It adds that the operation stores a file locally and requires the URL to be portal-scoped, which is useful. However, it does not describe overwrite behavior, naming conventions, or side effects beyond 'store one file'; still, the annotation bar lowers the burden and no contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler, and the example is front-loaded into the first sentence. The only minor issue is that 'Store' is slightly inconsistent with the title's 'Download', but overall the description is compact and efficiently structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema, full parameter descriptions, and annotations, most invocation details are already covered. The description is mostly sufficient for a simple three-parameter tool. The main completeness gap is the missing differentiation from the closely related sibling hisinone_download_document, which an agent would need to route correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all three parameters and the baseline is 3. The description adds a meaningful semantic constraint ('The address must point at the portal') and a concrete example URL shape, but it does not add detail about filename or target_dir beyond what the schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete action ('Store one file that a portal page links to') and identifies the resource as an address-based portal file, with a concrete docId-in-URL example. It is clear on verb and resource, but it does not explicitly differentiate this from the sibling hisinone_download_document; the distinction is only implied by 'by address'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a hard precondition ('The address must point at the portal') but provides no guidance on when to choose this tool over hisinone_download_document or any other sibling. There is no explicit when-to-use, when-not-to-use, or alternative-selection logic, so the agent must infer the intended use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_get_achievementsGet grades and credit pointsARead-onlyIdempotent
Read the full achievement tree of the account, which the portal calls Leistungen. The result holds every degree program, module, exam and attempt with its grade, status and credit points.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| rows | Yes | Every row of the expanded tree |
| columns | Yes | Column names that the portal uses |
| heading | Yes | Page heading that the portal shows |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context by specifying that the operation reads the entire achievement tree, including all degree programs, modules, exams, and attempts with their grades, statuses, and credit points, which goes 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. The primary action and resource are front-loaded, and the second sentence efficiently adds scope, result contents, and domain terminology without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-argument, read-only tool with annotations and an output schema, this description is complete. It defines what the tool returns and enough context about the domain, leaving no gaps an agent would need to resolve before invoking it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parametersفق, and the schema coverage is 100% by default due to the empty properties object. The description reasonably provides no parameter details because there are no parameters needing explanation, so the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and a specific resource ('full achievement tree'), and clarifies the portal's alternate name ('Leistungen'). It further defines the scope by enumerating degree programs, modules, exams, and attempts, which clearly distinguishes it from sibling tools like get_profile or list_semesters.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates when the tool is appropriate: whenever an agent needs grades, status, or credit points across the account's academic record. It does not explicitly name alternatives or exclusions, but no sibling tool overlaps with this specific acquisition of full achievement data.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_get_enrollmentsGet the registrations of a termARead-onlyIdempotent
Read the course and exam registrations of one term. Call hisinone_list_semesters first to get a term key.
| Name | Required | Description | Default |
|---|---|---|---|
| semester_key | No | Term key such as 2026.2.2, from hisinone_list_semesters. The portal default applies if this is absent. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notice | No | Message of the portal, for example that the term holds no registration |
| entries | Yes | Registrations of the term |
| semester | Yes | The term that the rows belong to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint: true, idempotentHint: true, and destructiveHint: false, covering safety. The description adds the prerequisite and scope ('one term') but doesn't go beyond that; the schema already explains the default behavior for an absent semester_key. With strong annotation coverage, this level of added context is adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, each earning its place: the first states the purpose, the second provides essential usage guidance. The most critical information is front-loaded, and there is no redundancy with the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given that an output schema exists, return values need not be described. The description covers the tool's purpose and the one prerequisite. It does not explicitly mention that semester_key is optional, but the schema covers that. Minor gap: the description says 'of one term' without noting the portal default, but this is handled in the schema. Overall, sufficient for a simple read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with the parameter fully documented: 'Term key such as 2026.2.2, from hisinone_list_semesters. The portal default applies if this is absent.' The description does not add new meaning about the parameter beyond reinforcing the prerequisite, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Read') and resource ('course and exam registrations of one term'), making the purpose unambiguous. It clearly distinguishes from siblings like hisinone_list_documents or hisinone_get_timetable, and the reference to hisinone_list_semesters further clarifies its role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs the agent to call hisinone_list_semesters first to obtain the term key, which is a clear prerequisite. While it doesn't compare with alternatives, the guidance is sufficient given the tool's narrow scope and only one parameter. It doesn't mention when not to use it, but the precondition makes that implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_get_profileGet the account profileARead-onlyIdempotent
Read the name, the subjects and the contact values of the signed-in account.
| Name | Required | Description | Default |
|---|---|---|---|
| include_contact | No | Also read the contact page. False saves one request. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | Yes | Name that the portal shows |
| contact | No | Contact values by context and kind, as the contact page shows them |
| programs | Yes | Subjects of the account |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that reading the contact page is an additional request and that setting include_contact to false saves a request, which is behavioral context beyond the readOnlyHint and idempotentHint annotations. It does not contradict any annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that conveys the core purpose and includes the only relevant behavioral note about the optional parameter. There is no wasted text.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one optional parameter) and the presence of an output schema, the description is fully sufficient for an agent to call it correctly. It specifies what is read, mentions the optional contact page, and relies on the schema for parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema already provides full coverage (100%) with a clear description for include_contact. The tool description does not add additional parameter meaning beyond what the schema states, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Read') and a specific resource ('the name, the subjects and the contact values of the signed-in account'). This unambiguously differentiates the tool from siblings like hisinone_list_documents or hisinone_get_achievements, which operate on different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clarifies it targets the signed-in account, giving clear context for when to use it. While it does not explicitly say 'use this for profile, not for other resources', the sibling names make the alternative uses obvious, so context is clear without explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_get_timetableGet the personal timetableARead-onlyIdempotent
Read the appointments of the personal timetable. Each appointment holds the course, the room, the time and the repeat rule.
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | Keep only appointments that start on this date or earlier, in ISO form. | |
| start | No | Keep only appointments that start on this date or later, in ISO form such as 2026-10-01. |
Output Schema
| Name | Required | Description |
|---|---|---|
| events | Yes | Appointments in start order |
| heading | Yes | Page heading that the portal shows |
| calendar_url | Yes | Private iCalendar address of this timetable |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, open-world, and non-destructive behavior. The description adds useful context beyond annotations by disclosing that each appointment includes course, room, time, and repeat rule, which clarifies what the response contains. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, information-dense sentences with no filler. The main action and resource are front-loaded, and the follow-up sentence adds useful return-shape context without repeating the schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with complete annotations and an output schema, this is sufficiently complete. The description covers the essential return semantics, while the schema and annotations handle parameters, safety, and output structure.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema descriptions for start and end are already clear, including ISO format and inclusive date filtering. The description adds no parameter-specific detail, but the baseline 3 is appropriate because the schema carries the semantic burden.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description uses the specific verb 'Read' and names the exact resource: 'appointments of the personal timetable.' It also enumerates what each appointment contains, so the tool is clearly distinguishable from the document, profile, achievement, and enrollment siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context: this is for reading a personal timetable. No sibling tool appears to offer timetable data, so explicit alternative/exclusion language is not strictly necessary. Still, it does not state an explicit 'when not to use' condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_list_documentsList the documents that the portal offersARead-onlyIdempotent
List the certificates and reports that the portal can produce, such as the enrolment certificate or the transcript of records. Each entry holds the key that hisinone_download_document needs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
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, covering safety and non-exhaustiveness. The description adds value by explaining the output contains keys for download, which is a behavioral trait 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the purpose, and contains no wasted words. It efficiently conveys the resource, examples, and the key relationship.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (no parameters) and an output schema exists, so the description need not explain return values. It covers the purpose and the link to the download tool, making it complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With zero parameters, the baseline is 4. The description does not need to explain parameters; it focuses on the output and purpose. No parameter semantics are required, so the score matches the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists certificates and reports, with specific examples (enrolment certificate, transcript of records). It uses a specific verb and resource, and distinguishes itself from hisinone_download_document by mentioning the key needed for downloading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: it tells the agent that the list contains keys needed for hisinone_download_document, which strongly suggests using this tool before downloading. It does not explicitly state 'when not to use' or name alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_list_semestersList the selectable termsARead-onlyIdempotent
List the terms that the portal offers, with the key of each term.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=true, so the description does not need to repeat these. It adds the output detail 'with the key of each term', which is useful but not a behavioral trait beyond what annotations already convey. There is no contradiction, and the description does not introduce any extra behavioral expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that front-loads the action and object, with no redundant phrasing. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a no-parameter list tool, the description adequately states what it returns (the keys of terms). An output schema is present, which presumably defines the structure. The description is sufficient for an agent to understand the tool's purpose and expected result, though it could mention sorting or ordering, but that is minor given the simplicity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the description has no parameter semantics to explain. With schema coverage at 100% (though empty), the baseline of 4 applies because there is nothing to add.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'List' and a clear resource 'terms', and adds 'the portal offers' to clarify scope. It is easily distinguished from sibling tools like hisinone_list_documents or hisinone_get_profile, which target entirely different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives. The description simply states what it does without mentioning any use cases, prerequisites, or exclusions. An agent must infer from the name that this is for listing available terms, but no explicit direction is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hisinone_search_coursesSearch the course catalogueARead-onlyIdempotent
Search the course catalogue by text. The result holds the course number, the title, the teachers and the portal page of each course.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Largest number of rows to return. | |
| query | Yes | Search text, for example a course title or a number. | |
| semester_key | No | Term key to search in, from hisinone_list_semesters. |
Output Schema
| Name | Required | Description |
|---|---|---|
| hits | Yes | The rows |
| query | Yes | Search text that produced the results |
| total | Yes | Number of rows that this result holds |
| truncated | No | True if the server cut the list at the requested limit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false, so the safety and side-effect profile is fully covered. The description adds only the return-field list, which is redundant with the output schema, and provides no extra behavioral context such as pagination or semester scoping. With annotations carrying the burden, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences with no filler. The action and resource are front-loaded, and the second sentence gives useful result expectations. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full output schema, comprehensive annotations, and 100% parameter documentation, the description is complete enough for selection and invocation. The only minor gap is that it does not mention the optional semester filter or how the open-world hint affects results, but the schema parameter entry for semester_key covers the filter, so the description needs only minimal additional context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter already has a meaningful description in the schema (query examples, limit range, semester_key source). The tool description itself adds no parameter-level detail beyond the phrase 'by text,' so it neither compensates for gaps nor goes beyond the structured documentation. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Search the course catalogue by text.' It then lists exactly what the result holds (course number, title, teachers, portal page), making the tool's role completely unambiguous. It also stands apart from the sibling tools, none of which is a course-catalogue search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear usage context: use this tool whenever you need to find courses by free text. It does not explicitly name alternatives or exclusions, but no sibling tool offers course-catalogue search, so an agent can infer when to choose it without confusion.
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.
9 tool updates
v0.1.0- First observed
hisinone_download_document - First observed
hisinone_download_url - First observed
hisinone_get_achievements - First observed
hisinone_get_enrollments - First observed
hisinone_get_profile - First observed
hisinone_get_timetable - First observed
hisinone_list_documents - First observed
hisinone_list_semesters - First observed
hisinone_search_courses
TDQS
Scored across 9 tools
Each tool targets a distinct resource and action: profile, achievements, semesters, enrollments, timetable, courses, and documents. Even the two download tools are clearly separated by description (portal-generated documents vs arbitrary portal file links).
All tools follow the same hisinone_ prefix with a consistent verb_noun pattern (list_, get_, download_, search_). This makes the tool surface predictable and easy to navigate.
Nine tools is well-scoped for a university portal domain. Each tool covers a meaningful capability without redundancy or bloat.
The surface covers the main read-oriented workflows: profile, academic achievements, enrollments, timetable, course search, and document retrieval. It lacks write operations, but for a self-service portal read access is the primary expected scope.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Permissioned access to Outlook, OneDrive and Teams via the user's own Microsoft account
Permissioned access to Gmail, Drive and Calendar via the user's own Google account
Unofficial NTNU course data: search, timetables, grades, course info, and exam logistics.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables accessing IServ school platform features such as timetable, exercises, messenger, and more via natural language, without exposing credentials to agents.1MIT
- FlicenseNot gradedqualityBmaintenanceEnables browser-based login to approved UTN Moodle sites and read-only access to the user's profile, course list, and course activities via local Chromium automation.2-
- FlicenseAqualityBmaintenanceEnables searching and browsing TU Berlin degree programs and modules from Moses' public Modulverzeichnis, including module details, exam types, and cross-program usage, without requiring login.5-
- FlicenseAqualityCmaintenanceEnables read-only access to a Librus Portal account, letting users list linked Synergia accounts and retrieve grades, attendance, timetable, homework, notices, and school information.3-