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-mcpsearch for computer science courses and show the details"
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
MCP-Server für HISinOne-Campusportale: öffentlich Veranstaltungen suchen und Details lesen, nach dem Login den persönlichen Stundenplan und die Leistungsübersicht abrufen. Ausschließlich lesend.
Der Server ist eine dünne Hülle um den Kern der
hisinone-cli: Er importiert
hisinone.client, hisinone.config und hisinone.parse und ruft dieselben
Funktionen wie hisinone suche, hisinone veranstaltung,
hisinone stundenplan und hisinone noten auf.
Schnellstart
uvx hisinone-mcpFür Stundenplan und Noten vorher einmal im Terminal anmelden; die Sitzung liegt
unter ~/.config/hisinone-cli/ (0600):
uvx --from hisinone-cli hisinone loginDanach startet der MCP-Client den Server selbst. Suche und Veranstaltungsdetails funktionieren ohne Login.
Related MCP server: librus-mcp
In Claude Desktop / Cursor nutzen
{"mcpServers":{"hisinone":{"command":"uvx","args":["hisinone-mcp"],"env":{"HISINONE_BASE_URL":"https://campus.uni-freiburg.de/qisserver/pages/cs/sys/portal/hisinoneStartPage.faces"}}}}HISINONE_BASE_URL ist optional und überschreibt das Standardportal. Für eine
andere Hochschule die Basis-URL der dortigen HISinOne-Instanz eintragen.
Claude Code
claude mcp add hisinone -e HISINONE_BASE_URL=https://campus.uni-freiburg.de/qisserver/pages/cs/sys/portal/hisinoneStartPage.faces -- uvx hisinone-mcpTools
Tool | Beschreibung | Login |
| Veranstaltungen nach Titel, Nummer oder Lehrperson suchen | nein |
| Veranstaltung per Titel oder numerischer Unit-ID anzeigen | nein |
| Persönlichen Stundenplan für heute oder die Woche lesen | ja |
| Persönliche Leistungsübersicht lesen | ja |
Alle Tools sind lesend (readOnlyHint) und liefern strukturierte Daten plus
lesbaren Text. Es gibt keine schreibenden Aktionen wie Belegung oder
Prüfungsanmeldung. Fehler kommen als lesbare Meldung mit nächstem Schritt
zurück, nie als Traceback und nie mit Noten oder Personendaten im Log.
Anmeldung und Konfiguration
Der MCP-Server fragt nie nach Passwörtern und nimmt keine Zugangsdaten als
Tool-Argument an. Er nutzt die Sitzung, die hisinone login anlegt. Alternativ
können HISINONE_USER und HISINONE_PASSWORD wie bei der CLI in der Umgebung
stehen; ohne Sitzung und ohne diese Variablen nennen get_timetable und
get_grades den nächsten Schritt hisinone login.
Variable | Default | Bedeutung |
| Universität Freiburg | Portal-Basis-URL (andere Hochschule, Fake-Server) |
| – | Benutzername für die Anmeldung ohne gespeicherte Sitzung |
| – | Passwort nur für Agenten/Tests, wird nie gespeichert oder geloggt |
Datenquelle
Die Daten stammen aus dem jeweiligen HISinOne-Campusportal über dessen Weboberfläche. Das Projekt ist inoffiziell, nicht mit den Hochschulen verbunden und greift ausschließlich lesend zu. Portaländerungen können die Auswertung brechen.
Lizenz
MIT, Copyright 2026 smlfg. Siehe LICENSE.
Available Tools
4 toolsget_courseARead-onlyIdempotent
Zeigt eine HISinOne-Veranstaltung per vollständigem Namen, eindeutigem Suchbegriff oder numerischer Veranstaltungs-ID mit Art, Semester, Lehrperson, Terminen und Räumen. Show a HISinOne course; no login required, read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| name_or_id | Yes | Vollständiger Veranstaltungstitel, eindeutiger Suchname oder numerische Unit-ID, z. B. 'Beispielseminar zur Datenverarbeitung' oder 7586. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds context beyond that: 'no login required' tells the agent no authentication step is needed, and the enumerated result fields compensate for the absent output schema.
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, front-loaded with the lookup modes and followed by the returned fields; nothing extraneous. The German and English halves duplicate the same content, which is a small redundancy but plausibly intentional for a bilingual audience.
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 one-parameter read tool with no output schema, the description covers identifier forms, returned fields, and the auth/read-only posture. Nothing an agent needs in order to call it correctly appears to be missing.
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 the single parameter already documents the accepted title/search-name/unit-ID forms with an example. The description restates the same three identifier modes without adding format rules or ambiguity handling, so the schema is doing the heavy lifting.
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?
States a specific verb and resource: 'Zeigt eine HISinOne-Veranstaltung' / 'Show a HISinOne course', and enumerates the accepted identifier forms (full name, unique search term, numeric ID). It also lists what is returned (type, semester, lecturer, dates, rooms), which separates it in spirit from search_courses, though it never names that sibling explicitly.
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 phrase 'eindeutigem Suchbegriff' / 'unique search term' implies this is the lookup path when an identifier is unambiguous, but there is no explicit statement of when to prefer search_courses or of what to do when the name is ambiguous. Usage is implied rather than prescribed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_gradesARead-onlyIdempotent
Liest die persönliche HISinOne-Leistungsübersicht mit Modul, Prüfung, Note und Status. Benötigt die Sitzung aus hisinone login oder HISINONE_USER/HISINONE_PASSWORD aus der Umgebung; read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description adds genuinely new context the annotations cannot express: the tool requires an authenticated HISinOne session via login or environment credentials, and it confirms 'read-only', which is consistent with the hints.
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 compact sentences: the first front-loads what is read and what comes back, the second covers the auth prerequisite and read-only nature. Nothing is redundant or padded.
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, no-output-schema tool the description is close to complete: it names the data returned (module, exam, grade, status) and the authentication requirement. Only failure behaviour (e.g. what happens without a valid session) is left unstated, a minor gap given the low complexity.
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 takes zero parameters, so the baseline is 4 under the scoring rules. The description adds no parameter information, but none is needed here.
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 gives a specific verb plus resource ('Liest die persönliche HISinOne-Leistungsübersicht') and enumerates the fields it surfaces (Modul, Prüfung, Note, Status). The purpose is unmistakable and naturally distinct from the sibling tools (search_courses, get_course, get_timetable), though it never explicitly contrasts itself with them.
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?
Usage is implied by the resource name — call this to read your own grades — and the prerequisites (a session from `hisinone login` or HISINONE_USER/HISINONE_PASSWORD env vars) are stated. However, there is no explicit when-to-use/when-not-to-use guidance or routing to alternatives such as get_course.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_timetableARead-onlyIdempotent
Liest den persönlichen HISinOne-Stundenplan für heute oder die ganze Kalenderwoche. Benötigt die Sitzung aus hisinone login oder HISINONE_USER/HISINONE_PASSWORD aus der Umgebung; read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | True zeigt die ganze Kalenderwoche; False nur den heutigen Tag. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly/idempotent/openWorld, so the description earns credit for adding the authentication prerequisite, which is operational context an agent cannot get from annotations or schema. The 'read-only' restatement is redundant but harmless, and no return shape or empty-result behavior is described.
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, front-loaded with the action and scope, then the prerequisite. No filler and no repetition beyond the minor 'read-only' echo of the 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?
For a one-parameter read tool with full schema coverage and rich annotations, the description supplies what is missing: auth requirement and scope. It stops short of describing what a timetable entry contains, which would help an agent interpret the result without an output schema.
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 single `week` parameter already documents 'True zeigt die ganze Kalenderwoche; False nur den heutigen Tag.' The description's 'heute oder die ganze Kalenderwoche' only restates that semantics, so 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?
Uses a specific verb+resource combination ('Liest den persönlichen HISinOne-Stundenplan') with an explicit scope ('für heute oder die ganze Kalenderwoche'). The resource is clearly distinct from siblings like get_grades or search_courses, though the description never names them to reinforce the distinction.
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?
Gives clear context for invocation: it requires an authenticated session from `hisinone login` or HISINONE_USER/HISINONE_PASSWORD in the environment, and states the two usage modes (today vs. full week). It offers no explicit alternatives or when-not-to-use guidance, which is the only shortfall.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_coursesARead-onlyIdempotent
Sucht öffentlich im HISinOne-Vorlesungsverzeichnis nach Titel, Veranstaltungsnummer oder Lehrperson und liefert die nummerierten Treffer. Search HISinOne courses; no login required, read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximale Anzahl zurückgegebener Treffer (1 bis 100). | |
| query | Yes | Suchbegriff für Titel, Veranstaltungsnummer oder Lehrperson, z. B. 'Beispielseminar'. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint and destructiveHint=false, so the safety profile is covered. The description still adds real context beyond them: the catalog is public and needs no authentication, and hits are returned numbered, which matters for chaining into a detail lookup. Return format and paging behavior are not described, keeping it shy of a 5.
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 sentences, front-loaded with the action and scope, with no filler. The German and English halves partially duplicate each other, which is a small redundancy but serves bilingual readers.
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 two-parameter search with rich annotations and no output schema, the description covers purpose, scope, prerequisites and the shape of the result (numbered hits). It does not explain result fields or that the default limit is 10, but the schema covers the latter, so nothing essential is missing.
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 both query and limit are fully documented in the schema (including the 1-100 range). The description adds little beyond that, merely echoing the searchable fields that the query schema also lists. That is the baseline-3 case where the schema does the heavy lifting.
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?
States a specific verb (search) plus the resource and its container (HISinOne-Vorlesungsverzeichnis), and names the searchable fields: title, course number, lecturer. It also says results come back numbered. It does not explicitly contrast with get_course, which fetches a single course, so sibling differentiation is left implicit.
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 phrase 'no login required, read-only' plus 'öffentlich' establishes useful preconditions, and searching is the obvious entry point of the workflow. However, there is no explicit routing advice such as 'use get_course to fetch details for a hit' or a note about when not to use it, so usage is only implied.
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.
4 tool updates
v0.1.0- First observed
get_course - First observed
get_grades - First observed
get_timetable - First observed
search_courses
TDQS
Scored across 4 tools
Each tool targets a distinct task: course discovery (search_courses), course detail (get_course), personal timetable (get_timetable), and personal grades (get_grades). The split between search and detail is natural rather than ambiguous, and the personal/read-only tools are clearly separated from the public catalog tools.
All four tools follow a consistent snake_case verb_noun pattern: search_courses, get_course, get_timetable, get_grades. The only variation is plural vs singular object naming, which matches the semantics and does not impair predictability.
Four tools is well-scoped for a focused read-only HISinOne client covering course search, course detail, timetable, and grades. Each tool has a clear reason to exist, and there is no redundant or filler surface.
The surface covers the core read-only student workflows implied by the descriptions: discovering courses, inspecting details, checking the timetable, and reading grades. Minor gaps might include explicit semester or exam-date queries, but the main lifecycle is well covered and login is handled outside the MCP tool set.
Maintenance
Related MCP Connectors
Search university course materials, your flashcards, quizzes, streak and quota. All tools read-only.
Read-only Frosh MCP: search and read public frosh.org docs, blog and overview.
Read pretix events, tickets and orders; check attendees in or out with your own account.
Read-only search and page retrieval from the public Atisbo documentation corpus. No authentication.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables 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.5MIT
- 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-
- AlicenseBqualityAmaintenanceEnables AI clients to read a student's own UGent Ufora (D2L Brightspace) data, including courses, announcements, deadlines, grades, course materials, and PDF text, over stdio or local Streamable HTTP. All operations are read-only and run locally against the student's authenticated session.192MIT
- AlicenseAqualityCmaintenanceEnables reading study data and downloading documents from HISinOne campus portals using the signed-in account.91MIT