LearnUs local MCP server
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., "@LearnUs local MCP server이번 주 LearnUs 과제와 마감 일정 알려줘"
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.
LearnUs local MCP server
Yonsei LearnUs의 강의, 과제, 일정, 공지, 알림, 영상 학습 상태와 강의자료를 읽는 TypeScript local stdio MCP 서버입니다. Node.js 22.19 이상과 Playwright Chromium이 필요합니다. 현재 버전은 0.1.0입니다.
설치 및 실행
npm ci
npx playwright install chromium
npm run build
npm run lint
npm test
npm startLinux CI에서는 npx playwright install --with-deps chromium으로 OS 의존성도 설치합니다. 전역 TypeScript/Playwright 설치는 필요하지 않습니다. production process 테스트를 위해 build를 먼저 실행하세요.
MCP Host에 command node, args ["<path-to-repo>/dist/index.js"]를 설정합니다. Host 프로세스에 LEARNUS_ID, LEARNUS_PASSWORD 환경변수를 안전하게 전달하세요. 실제 값을 Tool 인자, 채팅, 명령줄 또는 커밋되는 설정에 넣지 마세요. 서버는 .env를 자동 로드하지 않습니다. Host 설정을 참고하세요.
조회 Tool은 자동 인증합니다. auth_status는 세션 진단용이며 조회 전 필수 단계가 아닙니다.
Related MCP server: CAU e-class MCP
16개 public Tools
courseId/moduleId/articleId/videoId는 응답에서 얻은 양의 정수 문자열입니다. 과제 상세 cmid는 양의 정수 숫자, fileId는 등록된 UUID입니다.
Tool | 필수 입력 | 선택 입력 | 결과 |
learnus_auth_status | 없음 | 없음 | authenticated |
learnus_list_courses | 없음 | 없음 | courses, warnings |
learnus_get_course | courseId | 없음 | name?, activities |
learnus_list_activities | courseId | 없음 | activities |
learnus_get_assignment | cmid | 없음 | 과제 상세, extraFields, warnings |
learnus_upcoming | from, to | courseId, limit | events, truncated, warnings |
learnus_list_announcements | 없음 | courseId, limit | items, warnings |
learnus_get_announcement | moduleId, articleId | 없음 | item?, warnings |
learnus_list_notifications | 없음 | limit | items, warnings |
learnus_list_videos | courseId | refresh | items, currentWeek?, warnings |
learnus_get_video_attendance | courseId | videoId, refresh | mode, items, currentWeek?, warnings |
learnus_get_learning_overview | 없음 | courseId, week, status, refresh | courses 및 상태별 목록, warnings |
learnus_list_files | courseId | scope, refresh | items, warnings |
learnus_download_file | fileId | 없음 | 로컬 path, sizeBytes, mimeType |
learnus_get_overview | 없음 | courseId, from, to, include 옵션, maxItemsPerSection | range 및 선택된 summary sections, warnings |
learnus_get_weekly_tasks | 없음 | courseId, from, to | 학습을 포함한 주간 coursework summary |
주간 과제·출석·학습 질문은 weekly_tasks, 여러 범주의 조정 가능한 요약은 overview, 특정 항목은 개별 Tool을 사용합니다. 학업 맥락이 없는 일반 개인 할 일 질문에 LearnUs를 자동 우선하지 않습니다.
주간 기본 범위는 Asia/Seoul 월요일~일요일입니다. overview는 기본 upcoming/과제/공지를 각각 최대 10개 조합합니다. includeCourses/includeNotifications/includeLearning은 기본 false이며 weekly_tasks는 learning도 포함합니다. includeUpcoming/includeAssignments/includeAnnouncements로 기본 sections도 제외할 수 있습니다. 부분 실패는 *_UNAVAILABLE warning으로 남깁니다.
공지·알림·새 파일은 기본 informational입니다. 완료된 자료를 확인 의무로 해석하지 않으며 Moodle completion은 다운로드나 실제 독서의 증명이 아닙니다. 영상 completion/progress/attendance target/status를 분리합니다. 대상·마감 근거가 부족하면 unknown을 유지합니다. 상세 정책: 학습 의미, 주간 조회.
환경변수
변수 | 기본값/용도 |
LEARNUS_ID / LEARNUS_PASSWORD | 로컬 프로세스 인증정보 |
LEARNUS_MAX_CONCURRENT_REQUESTS | 4; 1~32 |
LEARNUS_CACHE_ENABLED | 1; 0은 일반 TTL cache 비활성화, 기능별 cache 유지 |
LEARNUS_DOWNLOAD_ROOT | 미설정 시 ~/Documents/LearnUS |
LEARNUS_MAX_DOWNLOAD_BYTES | 52428800 |
LEARNUS_COURSE_CONTEXT_OVERRIDES | 선택적 course ID별 audienceTags JSON |
LEARNUS_INTEGRATION | 0; 실계정 read-only 검증 opt-in |
LEARNUS_DOWNLOAD_INTEGRATION | 0; 별도 다운로드 integration opt-in |
세션은 메모리에 보관합니다. Cache/coalescing 정책. 시간표 cache는 정규화 데이터를 학기별로 저장하지만 실제 endpoint adapter는 연결되지 않았습니다.
파일은 등록된 fileId만 다운로드하며 root 하위에서 기존 파일을 덮어쓰지 않습니다. ubfile/과제 introattachment를 지원하며 증거가 부족한 resource/folder는 FILE_SOURCE_RESEARCH_REQUIRED를 반환할 수 있습니다.
검증
npm run test:browser
npm run test:inspector
npm run evaluate:tokensInspector UI는 npm run inspector로 엽니다. smoke는 credential을 제거한 production stdio 프로세스에서 등록/진단/안전한 오류 응답을 검사합니다. benchmark는 synthetic HTTP와 production Tool handlers를 조합하며 정확한 LLM token 수나 Host routing을 검증하지 않습니다.
실계정은 credential과 LEARNUS_INTEGRATION=1을 안전하게 공급한 프로세스에서 npm run test:integration:release로 opt-in 합니다. 한 세션에서 조회하며 과제/공지/영상이 없는 정상 계정도 허용합니다. 다운로드는 test:integration:learning에서 추가 flag가 있을 때만 임시 디렉터리에서 수행하고 정리합니다. 일부 과거 milestone 테스트는 과제/영상 존재를 요구하므로 empty 계정에서는 상세 검증이 불가능할 수 있습니다. 일반 CI에는 실계정 credential을 설정하지 않습니다.
라이선스: MIT.
Available Tools
16 toolslearnus_auth_statusARead-onlyIdempotent
Reports whether the current MCP process has an authenticated LearnUs session. Use only when the user explicitly asks whether LearnUs is logged in or whether the session is alive. Do not use it as a prerequisite for a data request; data Tools authenticate automatically and a false status does not imply manual browser login is needed.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, idempotent and non-destructive, so safety is covered. The description adds genuinely non-obvious behavioral context beyond them: data tools authenticate automatically, and a false status does not imply that manual login is needed. That is exactly the kind of semantic guidance structured fields cannot carry.
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?
Three sentences, front-loaded with the purpose and then the usage constraints. Every sentence earns its place, and the counter-intuitive warning is placed last but clearly scoped.
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-parameter status probe with no output schema, the description covers what the tool does, when to invoke it, when not to, and how to interpret a negative result. No important invocation context 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?
The tool takes zero parameters, so there is nothing to document and the baseline is a 4. The description correctly avoids inventing parameter behavior, though it also does not describe what the returned status values look like.
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 precise verb and resource: reports whether the current MCP process has an authenticated LearnUs session. It also distinguishes itself from the sibling data tools by clarifying that it is a status check, not a data accessor.
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?
Explicitly scopes usage to the case where the user directly asks about login/session state, and explicitly forbids using it as a prerequisite for data calls. It also preempts a likely misinterpretation (that a false status requires manual browser login).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_download_fileA
Downloads one previously discovered LearnUs fileId into the configured local LearnUS directory. Use only when the user explicitly asks to download that file. Prefer this Tool over browser download for supported fileIds. It reads remote LearnUs data but creates a local file without overwriting; it does not modify LearnUs. Do not pass URLs or guessed IDs. Browser fallback is allowed only when MCP reports the file/capability unsupported or explicit visual interaction is required.
| Name | Required | Description | Default |
|---|---|---|---|
| fileId | Yes | Opaque file ID returned by learnus_list_files, learnus_get_assignment or learnus_get_announcement. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds real context beyond annotations: it explains why readOnlyHint=false (it creates a local file) while clarifying that remote LearnUs data is not modified, and it discloses no-overwrite semantics, which a caller cannot infer from the schema. It stops short of covering auth prerequisites and rate/error behavior, so it is strong but not exhaustive.
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?
Front-loaded with the action and scope, then layered guidance (preference, side effects, input constraint, fallback) in discrete sentences. Slightly long at six sentences, but each one carries a distinct rule rather than restating structured fields.
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 single-parameter tool with no output schema, the description covers purpose, preconditions, side effects, input constraints and fallback routing. Everything an agent needs to invoke it correctly and to know its limits is present.
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 already 100% and the fileId description names the producing tools, so the baseline is 3. The description goes further by constraining acceptable input ('Do not pass URLs or guessed IDs'), which prevents a common misuse the schema alone does not forbid.
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 (downloads) and resource (a previously discovered LearnUs fileId into the configured local directory), which cleanly distinguishes it from retrieval siblings like learnus_list_files. An agent can tell immediately that this is the local-materialization tool rather than a metadata reader.
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?
Explicit when-to-use ('Use only when the user explicitly asks to download that file'), an explicit alternative ('Prefer this Tool over browser download'), and an explicit condition for the fallback ('only when MCP reports the file/capability unsupported or explicit visual interaction is required'). Both the preferred tool and the excluded path are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_announcementARead-onlyIdempotent
Gets one normalized LearnUs announcement body and registers its attachments as fileIds. Use when the user asks to read a specific announcement already identified by moduleId and articleId. Do not use it to list or search announcements, or to mark a notice read.
| Name | Required | Description | Default |
|---|---|---|---|
| moduleId | Yes | Exact ubboard Moodle module ID returned by learnus_list_announcements. | |
| articleId | Yes | Exact ubboard article ID returned by learnus_list_announcements. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the bar is lower, and the description still adds value: it discloses that attachments get registered as fileIds, a side effect not captured by any annotation. It doesn't describe error behavior or what 'normalized' entails, keeping it short 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?
Three compact sentences, front-loaded with the operation and its side effect, then usage scope, then exclusions. No filler and every clause carries routing information.
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 read tool this is complete: purpose, identification source, side effect, and negative scope are all stated. No output schema exists, but the description already indicates what is returned ('normalized announcement body') and the attachment registration.
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 both required params are documented there, including that the IDs come from learnus_list_announcements. The description only restates that the announcement is identified by moduleId and articleId, adding no syntax or format detail beyond the schema, so the 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?
States a specific verb ('Gets'), resource ('one normalized LearnUs announcement body'), and an additional effect ('registers its attachments as fileIds'). It explicitly distinguishes itself from list/search siblings and from mark-read behavior, so an agent can route to it without opening the schema.
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 an explicit positive condition ('when the user asks to read a specific announcement already identified by moduleId and articleId') and explicit exclusions ('Do not use it to list or search announcements, or to mark a notice read'). Alternatives are named by function, leaving nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_assignmentARead-onlyIdempotent
Gets one assignment’s instructions, due date, attachments and submission/grading status by canonical activity cmid. Use when the user asks for details or status of a specific known assignment. Do not use it to search for assignments across courses or to submit/edit an assignment.
| Name | Required | Description | Default |
|---|---|---|---|
| cmid | Yes | Exact Moodle assignment activity ID (cmid) returned by learnus_list_activities, learnus_get_course or an overview Tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds useful context by enumerating the returned content (instructions, due date, attachments, submission/grading status), which is meaningful given there is no output schema; it stops short of noting auth or pagination behavior.
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?
Three compact sentences, front-loaded with what the tool returns before the usage and anti-usage clauses. Every sentence carries a distinct instruction with no repetition.
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?
Single required parameter, full schema coverage, rich annotations, and the description compensates for the absent output schema by naming what is returned. Nothing needed to call it correctly 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 coverage is 100% and the cmid parameter is fully documented in the schema, including where it comes from. The description only echoes 'canonical activity cmid', adding no syntax or format detail beyond the structured field, 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?
States a specific verb (gets one assignment) plus the scope of returned data (instructions, due date, attachments, submission/grading status) and the lookup key (canonical activity cmid). An agent can distinguish it from list/search siblings without opening the schema.
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 an explicit trigger (user asks for details or status of a specific known assignment) and explicit exclusions (not for searching across courses, not for submitting/editing). This leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_courseARead-onlyIdempotent
Gets one known LearnUs course with its normalized structure and activities. Use when an exact course is known and the user asks for that course’s contents or structure. Do not use it to discover all enrolled courses or to fetch full assignment/announcement details.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | Exact Moodle course ID returned by a LearnUs course tool. |
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 fully covered. The description adds only that the output is a 'normalized structure and activities', which hints at the response shape but does not cover pagination, result size, or what 'normalized' means. With annotations carrying the burden, 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose first, then positive usage trigger, then negative exclusions. Every sentence earns its place with no 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?
Single required parameter, no nested objects, no output schema, and the description signals the return contents ('normalized structure and activities'). Nothing essential is missing for correct invocation, though the absence of an output schema leaves the exact return shape underspecified.
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's own description explains courseId must be an exact Moodle course ID from a LearnUs course tool. The description's phrase 'one known LearnUs course' reinforces this but adds no syntax or format detail beyond the schema. 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?
States a specific verb (Gets) and resource (one known LearnUs course) plus the returned scope (normalized structure and activities). It is immediately distinguishable from learnus_list_courses, which is the sibling covering discovery of many courses.
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 an explicit trigger condition ('when an exact course is known and the user asks for that course's contents or structure') and explicit exclusions ('Do not use it to discover all enrolled courses or to fetch full assignment/announcement details'), routing the agent to learnus_list_courses, learnus_get_assignment, and learnus_get_announcement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_learning_overviewARead-onlyIdempotent
Summarizes required incomplete, completed, optional/excluded and unknown VOD learning states. Use when the user asks about course video learning, completion or attendance across a course or week. Do not use it for broad non-video coursework or to treat an unknown target/deadline as a confirmed obligation.
| Name | Required | Description | Default |
|---|---|---|---|
| week | No | Course week number, current week, or all weeks. | |
| status | No | Optional normalized learning-state filter. | |
| refresh | No | When true, bypass feature caches and read fresh LearnUs data. | |
| courseId | No | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this read-only, idempotent, non-destructive and open-world, so the safety profile is covered. The description adds real value beyond them by disclosing the epistemic distinction between confirmed required/optional items and 'unknown' states, warning the agent not to overstate certainty. It does not mention caching behavior (left to the refresh param).
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, both earning their place: the first front-loads what is summarized, the second front-loads the trigger and the exclusions. No filler or repetition of the tool name.
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 no output schema, the description usefully enumerates the reported categories (required incomplete, completed, optional/excluded, unknown), which is what an agent needs to interpret results. It stops short of describing aggregation level (per week vs per course) or return shape, a minor gap for a summary 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% (week, status enum, refresh, courseId all documented in-schema), so the baseline is 3. The description adds no parameter-level detail such as the week/courseId relationship or when to set refresh, so it does not exceed 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?
States a specific verb (summarizes) and resource (VOD learning states across a course/week), and enumerates the state categories it reports. However, it never distinguishes itself from the very close sibling learnus_get_video_attendance, which the 'attendance' phrasing overlaps with, so an agent must infer the boundary from the schema.
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 an explicit when-to-use trigger ('user asks about course video learning, completion or attendance across a course or week') and two when-not conditions (non-video coursework; treating unknown targets/deadlines as confirmed obligations). The alternative tool is not named, and the second exclusion is phrased cryptically, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_overviewARead-onlyIdempotent
Gets a configurable broad LearnUs coursework summary covering assignments, calendar deadlines, announcements, notifications and optional learning/attendance. Use as the default broad LearnUs retrieval Tool when a request spans multiple categories or the exact underlying resource is not yet known, such as what is new, what matters or what is happening across classes. Do not use it solely for generic personal to-do/calendar questions or for a focused request that maps cleanly to a narrower Tool. For weekly actionable coursework specifically, prefer learnus_get_weekly_tasks. Informational, completed and unknown items remain distinct.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive range end as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| from | No | Inclusive range start as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| courseId | No | Exact Moodle course ID returned by a LearnUs course tool. | |
| includeCourses | No | Include current course summaries. | |
| includeLearning | No | Include course video learning, completion and attendance classification. | |
| includeUpcoming | No | Include LearnUs calendar events in the requested range. | |
| includeAssignments | No | Include normalized assignment summaries and submission states. | |
| maxItemsPerSection | No | Maximum number of items returned in each included overview section. | |
| includeAnnouncements | No | Include recent announcement summaries without full article bodies. | |
| includeNotifications | No | Include recent account notifications without marking them read. |
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 non-obvious semantics: it is configurable/broad by default, and that 'informational, completed and unknown items remain distinct' — a result-shaping trait not implied by annotations or schema. It stops short of describing pagination or section defaults.
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?
Three tightly packed sentences, front-loaded with the core purpose before routing advice. Every sentence carries routing or behavioral information; the closing sentence on item-state distinction is terse but purposeful. Slightly dense but no waste.
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 10-parameter, zero-required aggregator with no output schema and full annotation coverage, the description supplies the missing decision layer — when to pick it over siblings and what conceptual sections exist. Range defaults and section limits are left to the schema, which is reasonable.
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 10 parameters including the date formats, courseId provenance and include* defaults. The description only implicitly maps its category list to the include flags, adding little 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Gets a configurable broad LearnUs coursework summary' with an explicit enumeration of what it spans (assignments, calendar deadlines, announcements, notifications, optional learning/attendance). An agent can tell this apart from narrower siblings like learnus_upcoming or learnus_get_weekly_tasks without opening the schema.
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 explicit when-to-use ('default broad LearnUs retrieval Tool when a request spans multiple categories or the exact underlying resource is not yet known'), explicit when-not-to-use ('generic personal to-do/calendar questions', 'focused request that maps cleanly to a narrower Tool'), and names the concrete alternative for weekly tasks (learnus_get_weekly_tasks). Full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_video_attendanceARead-onlyIdempotent
Gets canonical completion, viewing progress, attendance target and attendance status for a course or one known video. Use when the user asks whether a specific course video was watched, completed or counted for attendance. Do not use it to play a video or infer attendance from its title.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | When true, bypass the feature cache and read fresh LearnUs data. | |
| videoId | No | Optional exact VOD activity ID (cmid). Omit to return the course report. | |
| courseId | Yes | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered. The description adds the useful nuance that returned attendance is 'canonical' rather than inferred from titles, but says nothing about freshness/caching behavior (despite the refresh param) or failure modes for unknown IDs.
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?
Three tight sentences, front-loaded with what is returned, then when to use it, then what it is not for. No filler or 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?
Without an output schema, the description usefully enumerates the returned concepts (completion, viewing progress, attendance target, attendance status) and covers all three parameters indirectly. It could say a bit more about error behavior for an unknown videoId, but it is adequate for calling the tool 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 courseId, videoId and refresh are already fully documented in the schema, including the 'omit to return the course report' behavior. The description's phrase 'for a course or one known video' merely restates what the schema already conveys, 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?
States a specific verb+resource ('Gets canonical completion, viewing progress, attendance target and attendance status') with a precise scope ('for a course or one known video'). It is easily distinguishable from siblings like learnus_list_videos, which enumerates videos rather than reporting attendance for one.
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 a clear triggering condition ('Use when the user asks whether a specific course video was watched, completed or counted for attendance') plus two explicit exclusions (not for playing a video, not for inferring attendance from a title). It stops short of naming an alternative sibling tool to route to, so it falls just under the top band.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_get_weekly_tasksARead-onlyIdempotent
Gets actionable Yonsei LearnUs coursework for the current or requested week: assignments, deadlines, required incomplete learning and attendance items. Use as the default LearnUs Tool when a request clearly concerns Yonsei coursework, classes, assignments, academic deadlines, required lecture videos, incomplete learning or attendance obligations, even without the words LearnUs/런어스. Do not use it for unrelated personal to-do/calendar questions or to treat informational/completed/optional/unknown items as required tasks. Typical requests ask what coursework remains this week, which assignments are due, or whether required videos are incomplete. Calendar entries alone do not prove an unfinished task.
| Name | Required | Description | Default |
|---|---|---|---|
| to | No | Inclusive range end as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| from | No | Inclusive range start as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| courseId | No | Exact Moodle course ID returned by a LearnUs course tool. |
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 genuine behavioral context beyond that: it filters out informational/completed/optional/unknown items and warns that calendar entries alone do not prove an unfinished task, which shapes how results should be interpreted.
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?
Front-loads the core purpose before the guidance, and each sentence carries usable information. It runs long (five sentences) with some repetition across the trigger/exclusion clauses, but no sentence is pure filler.
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 read-only, idempotent query tool with 100% schema coverage, no output schema, and no required parameters, the description covers purpose, invocation triggers, exclusions, and result-interpretation caveats. Nothing an agent needs to select or call it correctly 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%, with 'from', 'to', and 'courseId' fully documented including Asia/Seoul date semantics and Moodle course ID lookup. The description adds nothing about parameter syntax or defaults, so the 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?
States a specific verb and resource ('gets actionable Yonsei LearnUs coursework') with clear scope (current or requested week) and enumerates the item types returned (assignments, deadlines, incomplete learning, attendance). No sibling is named explicitly, so differentiation from overlapping tools like learnus_upcoming or learnus_get_learning_overview is inferred 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly designates itself as the default LearnUs tool, gives a positive trigger condition (coursework/classes/assignments/deadlines even without the keyword LearnUs), and states a negative exclusion (unrelated personal to-do/calendar questions, or treating informational/completed/optional/unknown items as required). This is near-ideal when-to-use/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_activitiesARead-onlyIdempotent
Lists assignments, VODs, resources, folders, boards and unknown activity types in one course. Use when the user asks what activities or learning materials exist in a known course, or when a cmid must be discovered. Do not use it for full activity details or cross-course coursework summaries.
| Name | Required | Description | Default |
|---|---|---|---|
| courseId | Yes | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive/openWorld, so the safety bar is low. The description still adds two behavioral traits beyond them: the listing surfaces 'unknown activity types' (so results may include unclassified entries) and it can reveal cmids, which explains why it is a lookup entry point. It omits pagination or result-size behavior, so it is not perfect.
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?
Three sentences, front-loaded with the capability, followed by use conditions and exclusions. Every sentence carries distinct information with no filler.
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 read-only single-parameter listing tool with no output schema, the description covers what is returned (the activity type set), when to call it, and what it is not for; annotations cover the safety profile. An agent has everything needed to invoke 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?
Schema coverage is 100% for the single courseId parameter, whose description already specifies it is an exact Moodle course ID from a LearnUs course tool. The description only implies scoping to 'one course' and adds no syntax or format detail beyond the schema, 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?
The description names a specific verb (Lists) and enumerates the exact resource set (assignments, VODs, resources, folders, boards, unknown activity types) scoped to one course. It is clearly distinguishable from siblings like learnus_get_assignment (details) and learnus_get_learning_overview (cross-course summaries).
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 gives explicit triggering conditions (user asks what activities/materials exist in a known course; a cmid must be discovered) and explicit exclusions (full activity details, cross-course summaries), naming the class of alternatives to prefer instead. Nothing is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_announcementsARead-onlyIdempotent
Lists normalized LearnUs ubboard announcement summaries, newest dated items first. Use when the user asks for recent course notices or announcements, optionally in one known course. Do not use it for a full announcement body; use learnus_get_announcement with known module/article IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of newest announcement summaries to return. | |
| courseId | No | Exact Moodle course ID returned by a LearnUs course tool. |
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 behavioral value beyond the annotations: results are normalized summaries, returned newest-first, and are intentionally not full bodies. It stops short of any pagination or rate-limit detail, so not 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?
Three sentences, no filler, and the ordering/scope constraint is front-loaded before the usage and exclusion guidance. Every sentence carries information the agent needs.
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 read-only list tool with no output schema, the description covers scope, ordering, return granularity (summaries, not bodies) and the routing alternative. It could say slightly more about what fields a summary contains, but nothing needed for correct invocation 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 coverage is 100%, so both parameters (limit default 10/max 50, courseId pattern) are already documented. The description only restates the optional single-course filter ('optionally in one known course') and implies newest-first ordering from limit, adding little 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.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (Lists), resource (normalized LearnUs ubboard announcement summaries), and scope/ordering (newest dated items first). The sibling it must not be confused with, learnus_get_announcement, is named 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?
Gives a positive trigger ('recent course notices or announcements, optionally in one known course') and an explicit exclusion ('Do not use it for a full announcement body') with the correct alternative tool and the condition (known module/article IDs) that selects it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_coursesARead-onlyIdempotent
Lists the user’s current LearnUs courses and canonical Moodle course IDs. Use when the user asks which courses/classes they are taking or when another LearnUs Tool needs an exact course ID. Do not use it for activity, assignment or file details inside a known course.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safe read-only, idempotent, non-destructive profile, so the bar is lower. The description still adds behavioral value by disclosing what the call yields (current courses plus canonical Moodle IDs that other tools consume), though it omits pagination, auth, and result ordering details.
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?
Three short sentences with the capability front-loaded, followed by usage and exclusion; every clause carries information and nothing is repeated from annotations or 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-parameter list tool with no output schema, the description covers what is returned (courses and canonical IDs), when to call it, and when not to, which is everything an agent needs to invoke 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 takes zero parameters, so the baseline of 4 applies; the description correctly implies the call is unfiltered and scoped to 'the user's current' courses, so no parameter gaps exist.
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+resource ('Lists the user's current LearnUs courses') and adds a distinguishing scope detail ('canonical Moodle course IDs') that separates it from the several other list_* siblings. An agent can identify what this returns without opening any schema.
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 explicit when-to-use conditions (user asks which courses they take, or another LearnUs tool needs an exact course ID) and an explicit when-not ('Do not use it for activity, assignment or file details inside a known course'), effectively routing to list_activities, get_assignment and list_files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_filesARead-onlyIdempotent
Discovers safe downloadable course materials, PDFs and attachments and returns opaque fileIds plus Moodle completion state. Use when the user explicitly asks for course files, lecture materials, PDFs, attachments or downloads. Do not use it to download arbitrary URLs or to assume an existing/new file still needs review.
| Name | Required | Description | Default |
|---|---|---|---|
| scope | No | Where to discover files: course activities, assignment pages, announcement pages, or all supported sources. | |
| refresh | No | When true, bypass the feature cache and read fresh LearnUs data. | |
| courseId | Yes | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and openWorld behavior. The description adds useful context beyond them: results are pre-filtered to 'safe downloadable' items, and the identifiers returned are opaque fileIds suitable for a later download call. It does not describe cache scope or any cap on results, keeping it short 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?
Front-loaded with the core purpose, then usage triggers, then exclusions. No filler sentences, though the second sentence packs three triggers and two prohibitions densely.
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 no output schema, the description correctly volunteers what comes back (fileIds plus completion state). Combined with full schema coverage and rich annotations, an agent has enough to call it correctly; only result limits and the exact definition of 'safe' remain unspecified.
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% (scope, refresh, courseId are all documented, including the enum meaning), so the schema carries parameter meaning. The description adds no syntax or format detail beyond it; per the baseline rule, 3 is appropriate.
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 (Discovers) and resource (course materials, PDFs, attachments) and clarifies the return shape (opaque fileIds plus Moodle completion state). This cleanly separates it from learnus_download_file, which retrieves content rather than enumerating it.
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?
Explicitly names the trigger (user asks for course files, lecture materials, PDFs, attachments, downloads) and two exclusions (downloading arbitrary URLs; assuming a file still needs review). Both when-to-use and when-not-to-use are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_notificationsARead-onlyIdempotent
Lists normalized LearnUs account notifications without marking them read. Use when the user asks about recent LearnUs alerts or notifications. Do not use it to infer a required task merely from a new-file notice; notifications are informational without explicit action evidence.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of newest LearnUs notifications to return. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, non-destructive and openWorld, so the safety profile is covered. The description still adds real value beyond them: it guarantees the read does not mark notifications as read (a side-effect that readOnlyHint alone would not clarify) and warns that notifications are informational, not implicit task assignments.
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 tight sentences with zero filler; the core action and its side-effect guarantee are front-loaded before the usage and exclusion clauses. Every clause carries distinct information.
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, no-output-schema list tool with full annotation coverage, the description covers purpose, trigger, exclusion and side effects adequately. The only gap is that 'normalized' notifications are not characterized (what fields come back), which matters slightly given there is no 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 description coverage is 100%, and the single 'limit' parameter already documents its meaning, default and bounds. The description adds no additional semantics about ordering or the meaning of the limit, 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?
States a specific verb and resource ('Lists normalized LearnUs account notifications') plus a key side-effect constraint ('without marking them read'). The resource is distinct from the sibling announcement tools, though the description never explicitly contrasts itself with learnus_list_announcements, so the sibling differentiation is implicit 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives an explicit trigger ('Use when the user asks about recent LearnUs alerts or notifications') and an explicit exclusion ('Do not use it to infer a required task merely from a new-file notice'). No alternative sibling tool is named for the excluded case, so it stops short of full when/when-not/alternative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_list_videosARead-onlyIdempotent
Lists VOD activities in one course with canonical IDs, audience applicability and separate availability/instructional deadlines. Use when the user asks what course videos exist or for video metadata in a known course. Do not use it to determine actual attendance/progress status; use learnus_get_video_attendance or learnus_get_learning_overview.
| Name | Required | Description | Default |
|---|---|---|---|
| refresh | No | When true, bypass the feature cache and read fresh LearnUs data. | |
| courseId | Yes | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered. The description adds real behavioral value beyond them: it names the returned fields (canonical IDs, audience applicability, dual deadlines) and explicitly disclaims attendance/progress semantics, though it says nothing about the refresh cache behavior or rate limits.
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?
Three short sentences, zero filler, with the core purpose front-loaded and the exclusion last. Every clause carries either scope, trigger, or routing information.
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 no output schema, the description compensates by naming the returned content, and it covers trigger, scope, and the nearest confusable sibling. Nothing material for correct invocation 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 parameters (courseId, refresh) are already documented in the schema. The description's 'in one course' reinforces courseId scoping but adds no format, ID-source, or refresh guidance beyond what the schema provides, so the 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?
States a specific verb (Lists) and resource (VOD activities in one course) and enumerates the distinguishing payload (canonical IDs, audience applicability, separate availability/instructional deadlines). An agent can separate it from learnus_list_activities and learnus_list_files without opening any schema.
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 an explicit trigger ('user asks what course videos exist or for video metadata in a known course') plus a when-not with two named alternatives (learnus_get_video_attendance, learnus_get_learning_overview). Nothing about tool selection is left to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
learnus_upcomingARead-onlyIdempotent
Lists canonical LearnUs calendar events and deadlines in a date range, optionally for one course. Use when the user asks for calendar events, schedules or deadlines between specific dates. Do not use it to infer task completion or required attendance; use learnus_get_weekly_tasks for actionable weekly coursework. Date-only values use Asia/Seoul; timestamps require a timezone.
| Name | Required | Description | Default |
|---|---|---|---|
| to | Yes | Inclusive range end as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| from | Yes | Inclusive range start as YYYY-MM-DD in Asia/Seoul or an ISO 8601 timestamp with timezone. | |
| limit | No | Maximum number of calendar events to return after date and course filtering. | |
| courseId | No | Exact Moodle course ID returned by a LearnUs course tool. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, open-world, non-destructive, so the safety profile is covered. The description adds genuinely useful behavior beyond that: 'canonical' events (implying deduplicated/authoritative source), the date-only Asia/Seoul default, and that timestamps require a timezone. It doesn't disclose return shape or the limit/pagination behavior, keeping it short 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?
Four short sentences, front-loaded with purpose then trigger then exclusion then timezone caveat. Slightly redundant since the timezone rule is also encoded in the schema, but every sentence is otherwise doing work.
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 4 fully documented params, no nested objects and no output schema, the description covers what an agent needs to select and call the tool: scope, filtering by course, timezone handling, and the sibling to prefer for tasks. Return format is not specified, but with no output schema that is a minor gap.
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 of the four params is documented in-schema, so the baseline is 3. The description's timezone sentence largely restates what the from/to schema descriptions already say, adding little parameter-level meaning of its own.
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 (Lists), resource (canonical LearnUs calendar events and deadlines), scope (date range, optionally one course). It names the sibling it is not (learnus_get_weekly_tasks), so an agent can distinguish it without opening any schema.
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 an explicit trigger ('user asks for calendar events, schedules or deadlines between specific dates'), an explicit exclusion ('do not use it to infer task completion or required attendance'), and names the correct alternative for that case. Nothing is left to inference.
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.
16 tool updates
v0.1.0- First observed
learnus_auth_status - First observed
learnus_download_file - First observed
learnus_get_announcement - First observed
learnus_get_assignment - First observed
learnus_get_course - First observed
learnus_get_learning_overview - First observed
learnus_get_overview - First observed
learnus_get_video_attendance - First observed
learnus_get_weekly_tasks - First observed
learnus_list_activities - First observed
learnus_list_announcements - First observed
learnus_list_courses - First observed
learnus_list_files - First observed
learnus_list_notifications - First observed
learnus_list_videos - First observed
learnus_upcoming
TDQS
Scored across 16 tools
Tools mostly target distinct resource+action pairs (list courses, get assignment, list videos), and descriptions explicitly state when not to use them. However, several summary tools (learnus_get_overview, learnus_get_weekly_tasks, learnus_upcoming) and announcement/notification tools overlap in purpose, requiring careful reading to avoid misselection.
All tools use the learnus_ prefix and snake_case, with most following a verb_noun pattern (list_, get_, download_). Exceptions like learnus_upcoming and learnus_auth_status are minor deviations from the verb_noun convention. Consistent enough for predictability.
16 tools is slightly above the typical 3–15 range but justified by the breadth of LMS resources (courses, activities, assignments, videos, files, notifications, summaries). Each tool appears to serve a specific retrieval granularity, though the set is on the heavy side.
The surface covers course discovery, activity/assignment details, calendar, announcements, notifications, videos, files with download, and aggregated overviews. Missing grade retrieval or assignment submission, but those may be outside the stated retrieval scope; minor gaps only.
Maintenance
Related MCP Connectors
Read and manage courses, members, orders, events, posts, and settings for Loopwise-powered sites.
Unofficial NTNU course data: search, timetables, grades, course info, and exam logistics.
Read and author HiveLearn courses, events, quizzes, certificates, resources, leaderboards, tracks.
- uNotesOAuthnet.unotes
Search university course materials, your flashcards, quizzes, streak and quota. All tools read-only.
Related MCP Servers
- AlicenseAqualityAmaintenanceEnables Korea University students to query their KUPID portal and Canvas LMS using natural language for notices, library seats, timetable, grades, courses, and assignments.3112MIT
- AlicenseNot gradedqualityDmaintenanceEnables Claude to access Chung-Ang University's e-class platform, including dashboard, daily briefing, course details, VOD links, and smart file download.1MIT
- AlicenseNot gradedqualityBmaintenanceMCP server that provides tools to interact with SNU eTL (Canvas LMS), including viewing courses, assignments, announcements, grades, downloading and organizing course files, with persistent local storage and automatic sync.MIT
- FlicenseAqualityCmaintenanceEnables local, read-only access to SMU's D2L Brightspace eLearn, allowing users to list courses, browse weekly modules and documents, search content, retrieve metadata, and download files after authenticating through Chrome.11-