zh-education-mcp
Server Quality Checklist
Latest release: v0.2.7
- Disambiguation5/5
Each tool targets a unique aspect of Zurich education data: listing districts, trends per district, canton-wide overview, Sek1 profiles, nationalities, maturity rates, residence trends, and secondary school statistics. The two trend tools are clearly differentiated by school location vs. residence.
Naming Consistency5/5All tools consistently use the zh_edu_ prefix and snake_case, with descriptive names that reflect their purpose (e.g., list_schulgemeinden, maturitaetsquote). The mix of German and English terms is predictable and does not hinder usability.
Tool Count5/5Eight tools is well within the ideal range for an education statistics server. Each tool covers a distinct facet without redundancy, making the set feel appropriately scoped.
Completeness4/5The set covers listing, trends, profiles, demographics, and specific school types comprehensively. Minor gaps exist, such as a lack of tools for raw data export or per-school detailed statistics, but the core analytics needs are well met.
Average 4.2/5 across 8 of 8 tools scored.
See the Tool Scores section below for per-tool breakdowns.
- 1 of 1 community issues answered or closed in the last 6 months
- 64 commits in the last 12 weeks
- Last stable release on
- No critical vulnerability alerts
- No high-severity vulnerability alerts
- No code scanning findings
- CI is passing
This repository is licensed under MIT License.
This repository includes a README.md file.
No tool usage detected in the last 30 days. Usage tracking helps demonstrate server value.
Tip: use the "Try in Browser" feature on the server page to seed initial usage.
Add a glama.json file to provide metadata about your server.
If you are the author, simply .
If the server belongs to an organization, first add
glama.jsonto the root of your repository:{ "$schema": "https://glama.ai/mcp/schemas/server.json", "maintainers": [ "your-github-username" ] }Then . Browse examples.
Add related servers to improve discoverability.
How to sync the server with GitHub?
Servers are automatically synced at least once per day, but you can also sync manually at any time to instantly update the server profile.
To manually sync the server, click the "Sync Server" button in the MCP server admin interface.
How is the quality score calculated?
The overall quality score combines two components: Tool Definition Quality (70%) and Server Coherence (30%).
Tool Definition Quality measures how well each tool describes itself to AI agents. Every tool is scored 1–5 across six dimensions: Purpose Clarity (25%), Usage Guidelines (20%), Behavioral Transparency (20%), Parameter Semantics (15%), Conciseness & Structure (10%), and Contextual Completeness (10%). The server-level definition quality score is calculated as 60% mean TDQS + 40% minimum TDQS, so a single poorly described tool pulls the score down.
Server Coherence evaluates how well the tools work together as a set, scoring four dimensions equally: Disambiguation (can agents tell tools apart?), Naming Consistency, Tool Count Appropriateness, and Completeness (are there gaps in the tool surface?).
Tiers are derived from the overall score: A (≥3.5), B (≥3.0), C (≥2.0), D (≥1.0), F (<1.0). B and above is considered passing.
Tool Scores
- Behavior3/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds that it returns a ranking string with ISO2 codes and proportions and notes the default top_n of 10 and null jahr meaning 'latest'. This is useful but does not disclose edge cases such as invalid schulgemeinde names or empty results. Given the annotations, a 3 is appropriate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a single lead sentence stating the tool's purpose, followed by compact Args and Returns sections. Every sentence is informative, with no redundant or filler text. The formatting makes it easy to scan quickly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the rich annotations (read-only, idempotent) and the presence of an output schema, the description provides adequate coverage of behavior and parameters. It does not mention how to obtain valid schulgemeinde names or handle potential errors, but for a read-only lookup tool, this is a minor gap. Overall, it is sufficiently complete for an agent to correctly invoke the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters5/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description explicitly lists and explains all four parameters (schulgemeinde, top_n, jahr, response_format) in an Args section, including defaults and examples. Since the top-level schema only exposes an unannotated 'params' object (coverage 0%), the description fully compensates by detailing every nested parameter, making the semantics crystal clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description uses the specific verb 'Zeigt' (shows) and clearly identifies the resource: 'Staatsangehörigkeitsstruktur der Lernenden einer Schulgemeinde'. It further specifies that it delivers the most frequent nationalities with ISO2 code and share, distinguishing it from sibling trend-focused tools like zh_edu_schulkreis_trend. This makes the purpose unmistakable and unique.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines2/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not provide any guidance on when to use this tool over alternatives, nor does it mention exclusions or prerequisites. It does not reference sibling tools such as zh_edu_list_schulgemeinden for valid community names or zh_edu_schulkreis_trend for trends, leaving the agent to infer the appropriate context solely from the basic function.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful context beyond the annotations by explaining the calculation formula (Anteil der gymnasialen Abschlüsse an der 19-jährigen Wohnbevölkerung) and the return format. Annotations already declare readOnlyHint=true and idempotentHint=true, so the description doesn't need to restate those. The additional methodology details are valuable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured: a clear opening statement, a brief formula explanation, and a compact Args/Returns section. Every sentence adds value and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the core functionality, metric definition, parameters, and return type. An output schema handles the detailed response structure, and annotations cover the safety profile. It is complete for a read-only tool, though it could mention the canton scope (ZH) explicitly or behavior for empty results, but these are minor gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description's Args section restates the parameters (gemeinde, bezirk, response_format) in a way that closely mirrors the input schema, which already includes descriptions and examples. No new semantic information is added beyond what the schema provides, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Zeigt die gymnasiale Maturitätsquote nach Gemeinde, Bezirk und Kanton.' The verb 'Zeigt' is specific and the resource (Maturitätsquote) is distinct from sibling tools which focus on other education metrics like school communities, trends, or profiles.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied by the description's focus on Maturitätsquote and the filtering parameters, but there is no explicit guidance on when to use this tool versus alternatives, nor any exclusions or mention of sibling tools. It provides clear context but no alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive hints. The description adds useful behavioral details: default jahr is the current year if empty, response_format can be markdown or json, and the output includes specific breakdowns. This goes beyond the annotation minimum without contradicting it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: a concise summary of purpose and data scope, followed by a structured Args list and a Returns note. Every sentence adds value, and it is front-loaded with the most important information. No redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's purpose, parameters, output type, and included data dimensions. This is sufficient for an agent to select and invoke the tool correctly. Minor omission is the lack of explicit mention of return format structure, but the presence of output schema and clear Returns description mitigates this.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The Args section restates the parameter descriptions already present in the schema (mittelschultyp, jahr, response_format) but adds no new meaning. The schema provides clear descriptions, so the baseline of 3 applies; the description does not compensate beyond this.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: showing statistics for Mittelschulen (Gymnasium, FMS, HMS) in Kanton Zürich. It specifies the exact data dimensions (Lernendenzahlen nach Mittelschultyp, Bildungsart, Geschlecht, Staatsangehörigkeit), which distinguishes it from sibling tools covering other school types or metrics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use for Mittelschul statistics with clear scope (Kanton Zürich) but does not explicitly mention when to use this tool over alternatives or provide exclusion criteria. Sibling tool names give context, but the description itself lacks explicit guidance on selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, and idempotent hints, covering the safety profile. The description adds useful context: the output can be markdown or json, the year filter defaults to the latest available year, and the data comes from BISTA. No contradictions detected; it provides enough additional behavioral detail for a simple overview tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with clear sections for purpose, data source, args, and returns. It is front-loaded with the core action and remains concise. Slight redundancy exists (e.g., 'Übersicht' repeated), but every sentence adds useful information and the overall length is appropriate.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only overview tool with nested parameters and an output schema, the description covers all essential aspects: purpose, data source, scope, parameters, and return format. It does not discuss error handling or edge cases, but given the tool's simplicity and the presence of annotations, this is adequate. The description is complete enough for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description lists all three parameters with types and explanations in the Args section, which is helpful. However, this largely mirrors the schema's own descriptions (e.g., 'jahr' meaning specific year or latest, 'stufe' as a filter). The context signal indicates 0% schema description coverage, but the schema already provides detailed descriptions, so the description adds limited new meaning beyond what an agent would find in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool provides a canton-wide overview of all learners by level, type, and gender ('Gibt eine kantonsweite Übersicht aller Lernenden nach Stufe, Typ und Geschlecht'). It also specifies the data source and covered levels, distinguishing it from sibling tools that focus on specific aspects like school communities or trends.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context for when to use the tool: when a broad, canton-wide overview is needed. It does not explicitly name alternatives or state exclusions, but the scope is well-defined through the data source and levels. The sibling tool names suggest distinct purposes, but no direct comparison is made.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavioral detail beyond these, such as the scope (Sek I), breakdown by Anforderungstyp, and the return format (trend overview with year comparison and overall development). No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness4/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured: a clear opening sentence, a detailed explanation, and a straightforward Args/Returns section. It is slightly longer than necessary due to duplicating schema information, but every sentence earns its place and the formatting is clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only trend tool with one parameter object and a string return, the description is sufficiently complete. It covers the time range, the breakdown, and the response format. It does not address error cases or data availability, but given the annotations and simplicity, this is acceptable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters3/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema fully documents all three properties (schulgemeinde, letzte_n_jahre, response_format) with descriptions, constraints, and defaults. The description's Args section mirrors the schema without adding new meaning. Since schema coverage is high, a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool shows learner trends for a school district/municipality, with specific detail on Sek I and breakdown by requirement type (Sek A, B, C). This differentiates it from sibling tools like residential trends or matriculation rates, satisfying the verb+resource+scope criterion.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates the usage context: trend over the last N years for a specific school district. It does not explicitly name alternative tools or exclusions, but the context is strong enough for an agent to infer when to use it. Lacks explicit when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnlyHint, idempotentHint, and destructiveHint=false, so the description adds value by describing the output as 'Profil mit Anzahl und Anteil pro Anforderungstyp' and stating the default year behavior ('leer = aktuellstes'). It also clarifies the response_format options, exceeding the annotation baseline.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is tightly structured with a one-sentence purpose, a category list, Args, and Returns sections. There is no filler or redundant explanation; every line contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness4/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only profile tool with one nested input object, the description covers purpose, categories, parameters, default behavior, response_format, and return value. It does not discuss edge cases like unknown Schulgemeinden, but the annotated read-only nature and simple output make this sufficient.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The Args section restates and clarifies all parameters, adding concrete examples ('Zürich-Letzi') and the default-year semantics ('leer = aktuellstes') beyond what the schema's property names alone provide. Given the low schema coverage signal, the description compensates effectively for each parameter including response_format.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Zeigt das Sek-I-Profil einer Schulgemeinde (Anforderungstypen A/B/C)', giving a specific verb, resource, and scope. It also enumerates the exact breakdown categories, clearly distinguishing this read-only profile tool from trend, overview, and Maturitätsquote siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines3/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies use when you need a Sek-I profile broken down by Anforderungstyp for a Schulgemeinde, but it never explicitly states when not to use it or mentions alternatives among the sibling tools. The purpose is clear, yet selection guidance is only implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive behavior. The description adds useful context about the data source and alphabetical ordering of results, which goes beyond the annotations. No contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose and uses a compact Args/Returns structure. Every sentence provides value without unnecessary fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only list tool, the description fully covers the operation, parameters, output format, and use case. The annotations and parameter details are sufficient; no additional behavioral notes are required.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema has descriptions, the tool description explicitly lists both parameters (suchbegriff and response_format) with examples, ensuring clarity. Since the computed schema coverage is 0%, the description fully compensates for the lack of top-level parameter explanation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool lists all Schulgemeinden and Schulkreise in the Canton of Zurich, using a specific verb and resource. It also mentions the data source (Sekundarstufe-I data), which distinguishes it from sibling tools like trend or overview.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes the tool is useful as an entry point to find valid names for other tools, providing clear usage context. However, it does not mention when to avoid this tool or name alternatives, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
- Behavior4/5
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context by clarifying the data source (Wohnort, not Schulort) and the output type (Trend-Tabelle), which goes beyond the annotation fields without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Conciseness5/5Is the description appropriately sized, front-loaded, and free of redundancy?
The description is appropriately sized: a one-sentence summary, a short clarifying statement, a structured Args block, and a Returns line. Every element earns its place, and the most important information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Completeness5/5Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only trend tool with robust annotations and an output schema, the description covers the input parameters, the filtering dimensions, the data basis, and the return format. There are no significant missing details that would prevent correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Parameters4/5Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the context signal reports 0% schema description coverage, the description's Args section enumerates all parameters with clear meanings, defaults, and response_format options. This compensates for the perceived coverage gap, even though the underlying JSON schema itself also contains detailed parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Purpose5/5Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Zeigt die Entwicklung der Lernendenzahlen nach Wohnort' (shows the development of learner numbers by place of residence). It also explicitly distinguishes the tool from school-location-based alternatives by stating 'Basiert auf dem Wohnort der Lernenden, nicht dem Schulort', which differentiates it from sibling tools like zh_edu_schulkreis_trend.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Usage Guidelines4/5Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly conveys when this tool is applicable: it reports trends by learner residence rather than school location, and it supports filtering by area type and school level. It does not explicitly name alternative tools or say 'use this instead of X', but the Wohnort vs. Schulort clarification provides strong contextual guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
GitHub Badge
Glama performs regular codebase and documentation scans to:
- Confirm that the MCP server is working as expected.
- Confirm that there are no obvious security issues.
- Evaluate tool definition quality.
Our badge communicates server capabilities, safety, and installation instructions.
Card Badge
Copy to your README.md:
Score Badge
Copy to your README.md:
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/malkreide/zh-education-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server