Smartschool MCP Server
Click on "Install 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., "@Smartschool MCP Servershow my grades for this term"
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.
Smartschool MCP Server
Connect Claude (and other MCP clients) to your Smartschool account — ask about grades, assignments, messages, and your schedule in plain language.
Tools
Tool | What it does |
| List enrolled courses with teacher info |
| Grades with optional filtering, pagination, and statistics |
| Upcoming assignments organised by date |
| Inbox/sent/trash with search, sender filter, and body retrieval |
| Day schedule by offset (0 = today, 1 = tomorrow, …) |
| Academic terms for the current school year |
| Available report cards |
| Planner items for the next N days |
| School support resources and links |
| List attachments for a specific message |
| Download a specific attachment by message and file ID |
Related MCP server: unofficial-magister-mcp
Quick start — Claude Desktop
uvx mcp install smartschool-mcp \
-e SMARTSCHOOL_USERNAME="you" \
-e SMARTSCHOOL_PASSWORD="secret" \
-e SMARTSCHOOL_MAIN_URL="school.smartschool.be" \
-e SMARTSCHOOL_MFA="YYYY-MM-DD"Or add it manually to claude_desktop_config.json:
{
"mcpServers": {
"smartschool": {
"command": "uvx",
"args": ["smartschool-mcp"],
"env": {
"SMARTSCHOOL_USERNAME": "you",
"SMARTSCHOOL_PASSWORD": "secret",
"SMARTSCHOOL_MAIN_URL": "school.smartschool.be",
"SMARTSCHOOL_MFA": "YYYY-MM-DD"
}
}
}
}Config file locations: %APPDATA%\Claude\claude_desktop_config.json (Windows) · ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) · ~/.config/Claude/claude_desktop_config.json (Linux)
Remote / claude.ai
The server supports Streamable HTTP transport for use as a remote integration on claude.ai.
Single-user mode
One server instance, your credentials in environment variables:
export SMARTSCHOOL_USERNAME="..."
export SMARTSCHOOL_PASSWORD="..."
export SMARTSCHOOL_MAIN_URL="school.smartschool.be"
export SMARTSCHOOL_MFA="YYYY-MM-DD"
export MCP_API_KEY="a-long-random-secret" # optional but recommended
smartschool-mcp --transport streamable-http --host 0.0.0.0 --port 8000Add to claude.ai → Settings → Integrations:
URL:
https://your-domain.example.com/mcpAuthorization header:
Bearer <your MCP_API_KEY>(if set)
Universal mode
One hosted server instance serves any Smartschool user — no per-user deployment needed.
smartschool-mcp --transport streamable-http --universal --host 0.0.0.0 --port 8000Credentials are passed on every request:
What | Where | Example |
School URL | URL query param |
|
Date of birth (MFA) | URL query param |
|
Username | OAuth Client ID | your Smartschool username |
Password | OAuth Client Secret | your Smartschool password |
In claude.ai → Settings → Integrations → Add custom connector:
URL:
https://your-domain.example.com/mcp?school=myschool.smartschool.be&mfa=YYYY-MM-DDOAuth Client ID: your Smartschool username
OAuth Client Secret: your Smartschool password
MFA is your date of birth in
YYYY-MM-DDformat. Omit themfaparam if your account does not require it.
Making the server publicly accessible
Claude.ai requires HTTPS. Some options:
Option | Command |
Cloudflare Tunnel |
|
ngrok |
|
VPS | nginx / Caddy with a Let's Encrypt cert |
Environment variables
Variable | CLI flag | Default | Description |
|
|
|
|
|
|
| Bind address (HTTP only) |
|
|
| Port (HTTP only) |
| — | — | Static Bearer token (single-user mode) |
|
| off | Enable universal mode (set to |
| — |
| How long to cache sessions (universal mode) |
| — | — | Your Smartschool username |
| — | — | Your Smartschool password |
| — | — | School hostname, e.g. |
| — | — | Date of birth |
Contributing
PRs are welcome. Run uv sync --extra dev to install dev dependencies, then uv run pytest / uv run ruff check . / uv run mypy smartschool_mcp/ before submitting.
Disclaimer
Unofficial tool, not affiliated with Smartschool. Use in accordance with your school's terms of service.
Available Tools
11 toolsdownload_attachmentA
Download a specific attachment from a message.
Files are saved to save_path when provided, otherwise to
~/Downloads/smartschool/. The directory is created automatically.
Existing files are never overwritten — a counter suffix is appended
instead (e.g. report (1).pdf).
Args: message_id: The ID of the message containing the attachment. file_id: The file ID of the attachment to download (from get_attachments). save_path: Optional directory to save the file into.
Returns: Dictionary with the saved file path, filename, mime type, and bytes written.
Examples: - download_attachment(249184, 12345) -> Download to ~/Downloads/smartschool/ - download_attachment(249184, 12345, "/tmp") -> Download to /tmp/
| Name | Required | Description | Default |
|---|---|---|---|
| file_id | Yes | ||
| save_path | No | ||
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Details save behavior: default path, directory creation, no overwrite (counter suffix). Also describes return dictionary. Fully transparent without annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Well-structured with sections, bullet points, and examples. No redundant sentences.
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?
Comprehensive for a download tool: explains return values, parameters, and edge cases (no overwrite). No output schema, but description covers it.
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?
Each parameter explained with context (e.g., file_id from get_attachments, save_path optional). Adds value beyond schema which has no descriptions.
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?
Clearly states 'Download a specific attachment from a message.' Distinguishes from sibling tools like get_attachments (which lists) and get_messages.
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?
Implies usage by stating file_id comes from get_attachments, but no explicit when-to-use or when-not-to-use. Examples help.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_attachmentsA
List all attachments for a specific message.
Args: message_id: The ID of the message to get attachments for (from get_messages results).
Returns: Dictionary with attachment list including file names, sizes, and IDs for downloading.
Examples: - get_attachments(249184) -> List attachments for message 249184
| Name | Required | Description | Default |
|---|---|---|---|
| message_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full burden. It states the return value (dictionary with attachment list) but does not disclose any potential side effects, access requirements, or limitations. For a read-only list operation this is adequate but could be richer.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: a one-line purpose, followed by clearly separated Args, Returns, and Example sections. No wasted words, every sentence adds value.
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 simple tool with one parameter and no output schema, the description fully covers the operation: what it does, what parameter to use, where to get the parameter value, and what the return looks like. It is complete for the tool's 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?
With zero schema description coverage, the description adds meaning by specifying that message_id is 'The ID of the message to get attachments for (from get_messages results)'. This goes beyond the schema's simple integer type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'List all attachments for a specific message', which is a specific verb+resource combination. It distinguishes itself from sibling tool 'download_attachment' by focusing on listing rather than downloading.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description instructs that the message_id comes from get_messages results, providing clear context for when to use this tool. However, it lacks explicit when-not-to-use guidance or mention of alternatives like download_attachment.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_coursesA
Retrieve all available courses with their teachers.
Returns: List of courses with name and teacher information.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behaviors. It states return format but omits side effects, authentication requirements, or whether it's read-only. For a parameterless read operation, basic safety implications are not explicitly conveyed.
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 with no wasted words. Front-loaded with key action and resource. Every sentence adds necessary context.
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 parameters and no output schema, the description is sufficient for a simple list retrieval. It covers what is returned (courses with name and teacher). Could mention 'all' explicitly to avoid ambiguity, but overall complete for the tool's 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?
No parameters exist, so schema coverage is 100%. Description adds value by specifying that results include teacher information, which is beyond the empty schema. Baseline 4 for zero-parameter tools 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?
Description clearly states the action 'Retrieve' and the resource 'all available courses', adding 'with their teachers' for specificity. Distinguished from siblings by its unique purpose of listing courses with teacher info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool instead of siblings like 'get_schedule' or 'get_results'. Implied usage is for listing courses, but no exclusions or alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_future_tasksB
Retrieve upcoming assignments and tasks.
Returns: Dictionary with future tasks organized by date and course.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It only states the return type (dictionary) without disclosing whether it is read-only, any side effects, authentication needs, or pagination behavior. This is insufficient for a retrieval tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, front-loaded with the action and resource. No redundant information is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters and no output schema, the description could elaborate on the dictionary structure, possible date ranges, or count limits. The minimal info may lead to incomplete understanding for an AI agent.
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?
There are no parameters, so the baseline is 4. The description adds value by stating the return organization by date and course, which compensates for the lack of parameter guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves upcoming assignments and tasks, distinguishing it from sibling tools like get_schedule or get_results. The verb 'Retrieve' and resource 'upcoming assignments and tasks' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_planned_elements or get_schedule. There is no mention of prerequisites or context-specific use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_messagesA
Retrieve messages from the specified mailbox with filtering options.
Args: limit: Maximum number of messages to return (default: 15) offset: Number of messages to skip from the beginning (default: 0) box_type: Type of mailbox - "INBOX", "SENT", "DRAFT", "SCHEDULED", "TRASH" (default: "INBOX") search_query: Search in subject and body content (case-insensitive) sender_filter: Filter messages by sender name (partial match, case-insensitive) include_body: Whether to include full message body (default: False for performance)
Returns: Dictionary with messages list and pagination info.
Examples: - get_messages() -> First 15 inbox messages (headers only) - get_messages(search_query="homework") -> Messages containing "homework" - get_messages(sender_filter="teacher") -> Messages from senders containing "teacher" - get_messages(include_body=True) -> Full messages with body content
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| box_type | No | INBOX | |
| include_body | No | ||
| search_query | No | ||
| sender_filter | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It details default values, case-insensitive search, partial match for sender, a performance note about include_body defaulting to false, and return format (list with pagination). This is comprehensive, though auth requirements or side effects are omitted (acceptable for a read operation).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args, Returns, and Examples sections. It is detailed but every sentence adds value, no fluff. The purpose is stated first, making it easy for an agent to quickly understand.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and no annotations, the description provides all necessary context: purpose, all parameters with behavior, return type, and multiple examples. An agent can correctly invoke the tool with this information alone.
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 0%, so the description must and does add meaning for all 6 parameters. It explains limit, offset, box_type with enumerated values, search_query (case-insensitive), sender_filter (partial match, case-insensitive), and include_body with a performance note. Examples further clarify usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves messages from a specified mailbox with filtering options. It lists specific parameters and provides multiple examples, making the purpose unambiguous. Sibling tools are distinctly different (attachments, courses, etc.), so no confusion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implicitly indicates usage for retrieving messages but does not explicitly state when to use this tool versus alternatives. No exclusion criteria or comparisons with siblings are provided, which could be helpful for an AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_periodsA
Retrieve academic periods/terms for the current school year.
Returns: List of academic periods with name, dates, and active status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It indicates a retrieval operation and describes the return format. However, it does not disclose potential limitations, rate limits, or any side effects. It 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?
The description is concise, consisting of two sentences with no redundant information. It is front-loaded with the essential purpose and then lists return values.
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 tool with no parameters and no output schema, the description covers the purpose and return content adequately. It does not mention any prerequisites or data availability, but given low complexity, it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema is empty (0 parameters), so the description does not need to add parameter meaning. Baseline for zero parameters is 4.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve', the resource 'academic periods/terms', and the scope 'for the current school year'. It also specifies the return fields (name, dates, active status). This distinguishes it from sibling tools like get_courses or get_schedule.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for the current school year but does not provide explicit guidance on when not to use this tool or mention alternative tools. No comparisons with siblings are made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_planned_elementsB
Retrieve planned assignments and to-dos from the Smartschool planner.
Args: days_ahead: Number of days ahead to fetch (default: 34)
Returns: Dictionary with planned elements including dates, courses, and assignment types.
| Name | Required | Description | Default |
|---|---|---|---|
| days_ahead | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits such as read-only nature, scope (e.g., current user), and potential side effects. It only mentions the return structure, leaving important context unstated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise with clear Args and Returns sections, no redundant information, and each sentence adds value.
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 simple tool with one optional parameter and no output schema, the description provides adequate context about what it returns (dates, courses, types). Missing details like error handling or pagination are minor.
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?
Despite 0% schema description coverage, the description adds meaning by documenting the 'days_ahead' parameter and its default value in the Args section, going beyond the schema's property definition.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states it retrieves 'planned assignments and to-dos' from the Smartschool planner, specifying the resource and source. However, it does not explicitly differentiate from sibling tool 'get_future_tasks', which may have overlapping functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'get_future_tasks'. There is no mention of prerequisites, context, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_reportsA
Retrieve available academic report cards.
Returns: List of report cards with name, date, class, and school year label.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It does not mention whether the operation is read-only, any authentication requirements, or limitations (e.g., scope of 'available' report cards).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise with two sentences, no wasted words, and the verb is front-loaded. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema and zero parameters, the description adequately explains the return format. However, it could be more complete by explicitly stating that no input is required and clarifying if the results are for the current user or all users.
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?
There are zero parameters, and schema coverage is trivially 100%. The description adds value by specifying the return fields (name, date, class, school year label), which compensates for the lack of output schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Retrieve' and the resource 'academic report cards', making the tool's purpose specific and easily distinguishable from sibling tools like get_courses, get_results, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives (e.g., get_results) or any prerequisites. The description only states what it returns without contextual recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resultsA
Retrieve student results/grades with detailed information.
Args: limit: Maximum number of results to return (default: 15) offset: Number of results to skip from the beginning (default: 0) course_filter: Filter results by course name (partial match, case-insensitive) include_details: Whether to fetch detailed info (teacher, average, median) - saves API calls if False
Returns: Dictionary with results list and pagination info.
Examples: - get_results() -> First 15 results with details - get_results(course_filter="Math") -> Results from courses containing "Math" - get_results(include_details=False) -> Basic info only, faster response
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| course_filter | No | ||
| include_details | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It explains parameter behavior (e.g., partial match, case-insensitive for course_filter), hints at performance implications for include_details, and describes the return format. Missing details on error handling or authentication, but overall adequate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized with a summary line, structured Args section, Returns note, and examples. It is front-loaded with the purpose and each sentence adds value. The examples are slightly repetitive but overall concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (4 parameters, no output schema), the description covers parameters, return type, and includes examples. It lacks details on error states or authentication, but for a read-only retrieval tool, it is reasonably complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description compensates fully by explaining each parameter: limit (max results, default 15), offset (skip, default 0), course_filter (partial match, case-insensitive), and include_details (saves API calls if False). This adds significant meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve student results/grades' and specifies the return type as a dictionary with results and pagination info. However, it does not explicitly distinguish this tool from siblings like get_reports, which may partially overlap in functionality.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides examples and notes that include_details=False saves API calls, giving some usage context. However, it lacks explicit guidance on when to use this tool versus alternatives, and does not state any prerequisites or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_scheduleA
Retrieve the lesson schedule for a given day.
Args: date_offset: Days from today (0=today, 1=tomorrow, -1=yesterday, default: 0)
Returns: Dictionary with the lessons scheduled for the given date.
| Name | Required | Description | Default |
|---|---|---|---|
| date_offset | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries the full burden. It discloses the input parameter and return type but does not mention any behavioral traits like idempotency or side effects.
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?
Very concise: one sentence plus a short Args section. Front-loaded with purpose. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one optional parameter and no output schema, the description is complete. It specifies input and return type. Siblings could be similar but the description covers the tool's function adequately.
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 0% (no description for date_offset in schema). The description's Args section explains the parameter meaning and default, adding significant value beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Retrieve the lesson schedule for a given day' with a specific verb and resource. It distinguishes from siblings like get_courses and get_periods, but does not explicitly differentiate.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like get_periods or get_future_tasks. Missing when-not or alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_student_support_linksA
Retrieve student support links and resources.
Returns: List of visible support links with name, description, and URL.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description explains what the tool returns (list of links with fields). It is a read operation with no destructive effects, but no annotations are present. The description does not mention any side effects or constraints, but for a simple retrieval, this is acceptable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise: two sentences that directly state the purpose and return format. Every word earns its place, no fluff.
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 tool with no parameters and no output schema, the description fully conveys what the tool does and what it returns. Sufficient for an agent to decide to invoke it.
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?
No parameters exist, so schema coverage is 100%. The description does not need to add parameter details. Baseline score of 4 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?
The description clearly states the action ('Retrieve student support links and resources') and specifies the output format (list with name, description, URL). It is specific and distinguishes itself from siblings as no other sibling deals with support links.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use or when not to use this tool. However, the context of support links is distinct from siblings, so usage is implied. Lacks explicit alternatives or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Most tools target distinct resources (messages, courses, grades, schedule, reports, etc.), but 'get_future_tasks' and 'get_planned_elements' both deal with assignments/to-dos and could cause mild confusion despite different descriptions.
All tool names follow a consistent verb_noun pattern in snake_case (e.g., 'get_messages', 'download_attachment'), with 'download' being the only non-'get' verb but still following the pattern.
With 11 tools, the server covers a broad range of school-related functionality (messages, courses, grades, schedule, etc.) without being overwhelming or too sparse.
The server provides comprehensive read access to Smartschool data, but notably lacks any write operations (create, update, delete) such as sending messages or submitting assignments, which limits its utility for full interaction.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Connect Claude AI to UluP Spaces via MCP — create projects, nodes, and tasks with OAuth 2.0.
Connect Claude to your Platform7n workspaces — chat, links, and tasks. One-click OAuth.
Connect any mailbox to Claude, ChatGPT & AI: read, send, reply, schedule & search emails.
Talk to your public-facing AI from any MCP client — Claude, ChatGPT, Cursor, Cline, Windsurf.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables natural language queries about grades, GPA, attendance, and schedules by connecting Claude to StudentVue school dashboards. Includes analytical tools for grade simulation, what-if scenarios, and academic performance tracking based on live school data.19
- AlicenseAqualityDmaintenanceAn MCP server for accessing Dutch school schedules from Magister. Enables Claude and other MCP-compatible AI assistants to query school schedules, drop-off times, and pick-up times.4153MIT
- AlicenseNot gradedqualityDmaintenanceA local MCP server that enables LLMs like Claude to access Schulmanager Online data including schedules, homework, exams, grades, and parental letters.1The Unlicense
- AlicenseNot gradedqualityCmaintenanceMCP server that gives Claude Desktop access to school data from Studie+ (Danish school platform), enabling queries about schedules, homework, assignments, and files directly in chat.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/MauroDruwel/Smartschool-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server