ilias-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| ILIAS_LANG | No | Language setting. The session UI language follows your ILIAS profile. | en |
| ILIAS_USER | Yes | Your ILIAS username, for example firstname.lastname. This is required. | |
| ILIAS_TIMEOUT | No | Request timeout in seconds. | 30.0 |
| ILIAS_BASE_URL | No | Base URL of the ILIAS instance. | https://ilias.uni-konstanz.de |
| ILIAS_CACHE_DIR | No | Cache directory for saved state and extracted file text. Default is ~/Library/Caches/ilias-mcp on macOS. | ~/Library/Caches/ilias-mcp |
| ILIAS_CLIENT_ID | No | ILIAS client ID. | ILIASKONSTANZ |
| ILIAS_MIN_REQUESTS | No | Minimum interval in seconds between requests. Minimum allowed value is 0.5. | 1.0 |
| ILIAS_DOWNLOAD_ROOT | No | Download folder used by ilias_download_file. | ~/Documents/ILIAS |
| ILIAS_KEYCHAIN_SERVICE | No | macOS Keychain service name used to store credentials. | ilias-mcp |
| ILIAS_MAX_REQUESTS_PER_CALL | No | Maximum number of requests per tool call; ilias_scan uses 120. | 60 |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
Read-only access to the user's own ILIAS courses (University of Konstanz). Nothing here can submit, post, join, leave, delete or mark anything as read: the client only sends GET requests and refuses state-changing links.
Typical flow: ilias_check_all (every course of the current semester in one call; returns only what changed since the last committed check) -> ilias_read_file for new PDFs -> ilias_commit_scan(check_id) once the findings are recorded. ilias_scan does the same for a single course. ilias_read_file remembers which pages of which file version were read and returns 'already_read' for unchanged files unless pages are asked for. Targets accept a URL, 'crs/123' style references or a bare ref_id. Requests are rate-limited (one per second), so a full check takes about a minute; ilias_check_all keeps working in the background and is simply called again until it returns its result.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| ilias_statusB | Configuration, login state, request counter and the read-only policy. No network. |
| ilias_list_coursesB | The user's courses and groups from the ILIAS dashboard, with ref_ids and semester sections. |
| ilias_list_itemsB | Objects in a course/folder/group/session: type, title, ref_id, file version/date/size. depth > 0 also lists sub-folders, groups and sessions (max 3). Files carry 'already_read' when this version was read before. |
| ilias_page_textB | Readable text of any ILIAS page (course page notes, info screens, a news item). Use when a structured tool misses something. Paginate with offset/next_offset. |
| ilias_list_assignmentsB | Assignments of an exercise object ('Show all' view): deadlines, start, submission status, files. |
| ilias_read_fileA | Text of a course file (PDF, PPTX, DOCX, text, ZIP) by ref_id or download URL. Without |
| ilias_list_forum_topicsB | Thread list of a forum (titles, authors, counts, last activity). Threads are never opened. |
| ilias_list_newsB | News items from the dashboard news page, or from a given course page. |
| ilias_scanA | Crawl one course and report new / changed / removed items, assignments and forum threads compared with the last committed scan. Returns a scan_id; call ilias_commit_scan after the findings have been recorded so the next scan compares against this one. |
| ilias_check_allA | Check every course of the current semester in one go and return only what changed since the last committed check: new/changed/removed files, assignments, forum threads and course-page text, plus deadlines in the next 14 days and new dashboard news. The semester is the newest dashboard section unless |
| ilias_commit_scanA | Make a scan, or a whole ilias_check_all check (pass its check_id), the new baseline. Local bookkeeping only; nothing is sent to ILIAS. |
| ilias_download_fileB | Save a course file to a folder inside the configured download root (ILIAS_DOWNLOAD_ROOT, default ~/Documents/ILIAS). Never overwrites a different file. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 12 tools
Most tools target clearly distinct resources: courses, items, assignments, files, forum threads, news, downloads. Two pairs need careful reading: ilias_scan (one course) vs ilias_check_all (all courses), and ilias_read_file (file content) vs ilias_page_text (fallback for arbitrary pages); the descriptions do clarify both, but an agent must read them to choose correctly. ilias_list_items vs ilias_list_assignments also slightly overlap since assignments are objects inside a course.
Strong, predictable ilias_ prefix plus snake_case verb_noun pattern (list_courses, list_items, read_file, commit_scan, download_file). Two deviations break the pattern: ilias_status and ilias_page_text are noun-only with no verb, while ilias_scan/ilias_check_all drop the list/read verb family. Still highly readable overall.
12 tools is well within the ideal 3-15 range and each earns its place: discovery (courses, items, news, assignments, forum topics), content access (read_file, page_text, download_file), and change tracking (scan, check_all, commit_scan). No obvious filler tools.
Coverage is broad for a read-only ILIAS client: navigation, content extraction, diffing, and download with a coherent scan->commit baseline lifecycle. Minor gaps remain—no grade/result listing beyond submission status, no cross-course search, and forum threads are deliberately listed but never opened, which could be a dead end when a thread's content is needed.