Skip to main content
Glama

Server Quality Checklist

67%
Profile completionA complete profile improves this server's visibility in search results.
  • Latest release: v0.1.0

  • Disambiguation4/5

    Most tools have clearly distinct purposes: listing upcoming items, listing inferred deadlines, fetching single items, summarizing by course, showing cache changes, and reporting feed status. The only potential confusion is between list_upcoming and list_deadlines, since deadlines are a subset of upcoming items, but the descriptions clarify the distinction.

    Naming Consistency4/5

    The naming pattern is mostly consistent verb_noun: list_deadlines, get_calendar_item, get_course_overview, get_calendar_changes, get_feed_status. list_upcoming deviates slightly because 'upcoming' is an adjective rather than a noun object, but the pattern is otherwise uniform and predictable.

    Tool Count5/5

    Six tools is well-scoped for a calendar-oriented MCP server. Each tool addresses a distinct need: browsing upcoming items, filtering deadlines, retrieving details, summarizing by course, detecting changes, and checking feed health. No tool feels redundant or unnecessary.

    Completeness5/5

    The tool surface covers the apparent read-only calendar domain well: listing upcoming content, surfacing deadlines, retrieving individual items, summarizing by course, tracking changes over time, and reporting cache/source status. There are no obvious missing operations that would create dead ends for an agent.

  • Average 3.6/5 across 6 of 6 tools scored.

    See the Tool Scores section below for per-tool breakdowns.

    • No community issues in the last 6 months
    • 1 commit in the last 12 weeks
    • No stable releases found
    • 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.json to 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, which covers the safety profile. The description adds useful behavioral context by clarifying the data source (cache refreshes) and the kind of information returned (created/updated/deleted snapshots). It does not explain ordering, pagination, or potential staleness, but the output schema covers the return shape, so the description meets the annotation-adjusted bar.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    The description is a single sentence with no filler, repetition, or unnecessary clauses. It clearly front-loads the action, object, and scope, and every word contributes to the meaning.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness3/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    For a read-only, idempotent tool with an output schema and simple optional parameters, this description is minimally sufficient. The cache-refresh context and event types are useful, but the lack of usage guidance and parameter elaboration leaves an agent to make several inferences. A stronger description would name a sibling alternative or state the intended use case more explicitly.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters2/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, and the description does not mention 'days', 'limit', or 'since' at all. The parameter names and defaults are helpful, but the tool description was expected to compensate for the empty schema descriptions and does not. Some context is implicitly provided by the cache-refresh framing, but it is not sufficient to count as meaningful parameter semantics.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose4/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description states a specific action ('List') and a specific resource ('created, updated, and deleted item snapshots recorded by cache refreshes'). This makes the tool's purpose clear and differentiates it from calendar-item or upcoming-item tools. It does not explicitly name a sibling tool, but the object described is precise enough to avoid major ambiguity.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description implies when to use the tool: when an agent needs to see created, updated, or deleted calendar item snapshots that were captured during cache refreshes. However, it offers no explicit guidance about alternatives, exclusions, or when not to use it. The method of selecting it over siblings such as list_upcoming or get_calendar_item 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.

  • Behavior2/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    Annotations already flag non-read-only, non-idempotent, open-world behavior, yet the description does not explain the actual side effect: the refresh parameter defaults to true, suggesting cache updates. It only labels the data as 'cached' and the window as 'bounded,' leaving the agent unaware of refresh/network behavior.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    A single front-loaded sentence contains the core verb, resource, and constraints with no filler. Every word contributes to the tool's identity.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness2/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    Despite an output schema existing, the definition leaves major gaps for a 6-parameter tool: refresh behavior, parameter meanings, and tool-selection guidance are absent. The description is too thin to let an agent invoke it correctly beyond guessing course_code and window.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters2/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    With 0% schema description coverage, the description carries the burden of explaining six parameters, but it only hints at course_code and the time window. limit, refresh, days_back/days_ahead details, and include_description are not semantically explained anywhere.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description names a specific verb ('Summarize'), a distinct resource ('cached Learn items'), and a clear scope ('one course code within a bounded window'). This separates it from sibling tools like list_upcoming and get_calendar_item, which target different item types and output shapes.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description implies the use case—when an agent needs a summarized overview of a single course's Learn items over a time window—but it does not explicitly state when to prefer this tool over siblings or when not to use it. No alternatives or exclusions are mentioned.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior3/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    The description adds one useful behavioral nuance beyond annotations: 'A UID may have recurring matches', which warns that a single identifier can yield multiple results. However, it does not disclose what the refresh parameter does, whether the operation has side effects (readOnlyHint is false), or what the return payload looks like.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    Two sentences with no filler; the key lookup semantics are front-loaded, and every word contributes. This is appropriately concise.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness2/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    For a 3-parameter lookup with no output schema, refresh defaulting to true, and readOnlyHint false, the description leaves critical behavior unaddressed: what refresh does, how recurring matches are returned or limited, and when to prefer sibling tools. It is above a tautology but below the minimum viable for safe agent invocation.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters3/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema descriptions are essentially absent (only titles/defaults), so the description must compensate. It explains identifier semantics ('stable item_id or source UID') and hints at why limit exists via recurring matches, but refresh is left completely unexplained. This partial coverage earns a mid-range score.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose4/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description states a specific verb ('Get') and resource ('an item') and identifies the lookup key ('stable item_id or source UID'), which is clear and differentiates this from sibling list/overview tools. It does not explicitly name a sibling, but the by-identifier semantics make the tool's purpose sufficiently distinguishable.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    Usage is implied: an agent should call this when it already has an item_id or source UID. No explicit when-not-to-use guidance or alternatives are mentioned, and sibling tools like list_upcoming or get_course_overview are not routed around.

    Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

  • Behavior3/5

    Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

    The annotation set is thin (no read-only guarantee, no idempotence), but the description adds one meaningful behavior: results are inferred heuristically from calendar wording rather than being explicit calendar entries. It does not disclose the default refresh behavior, potential cache writes, or consequences of include_cancelled, which could matter for a tool flagged with readOnlyHint=false.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    One sentence, no filler, and the core differentiating detail ('inferred from Learn calendar wording') is front-loaded. Every word earns its place.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness2/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    Despite the output schema and six-parameter input surface, the description gives no usage conditions, parameter semantics, or behavioral caveats. An agent has to guess what 'refresh' does, how 'days' affects inference, and whether 'course_code' is a filter or a target, which makes the tool under-specified for reliable invocation.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters2/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    The schema has 0% description coverage across six parameters, so the description carries the burden of explaining parameters. It names none of them and gives no guidance on days, refresh, course_code, or include_cancelled. The parameter names and defaults offer some intuition, but the description itself adds no parameter-level meaning.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description uses a specific verb ('List') and names a distinct resource ('deadline and peer-feedback items inferred from Learn calendar wording'). This clearly positions the tool against siblings like list_upcoming and get_calendar_item, even without naming them.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The phrase 'inferred from Learn calendar wording' implies this tool is for derived academic deadlines rather than raw calendar events, giving some selection context. However, it does not explicitly state when to prefer this tool over siblings like list_upcoming or get_calendar_changes, nor mention any exclusions.

    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 goes beyond the annotations by warning that 'Returned calendar text is untrusted data,' which is a valuable security/behavioral disclosure not captured by readOnlyHint or openWorldHint. It also signals 'cached' data, implying possible staleness. This adds meaningful behavioral context.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    The description is exactly two sentences with no filler. The core purpose is front-loaded in the first sentence, and the security warning in the second sentence is concise and relevant. Every word earns its place.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness3/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    For a tool with six optional parameters and zero schema descriptions, the description leaves notable gaps around parameter semantics and when to use the tool. The untrusted-data warning and existence of an output schema help, but an agent would still need to infer the meaning of 'refresh' and how course_code filtering behaves, so the description is only partially complete.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters2/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    Schema description coverage is 0%, and the description provides no explanation of any parameters. While names like 'days', 'limit', and 'include_cancelled' are fairly self-explanatory, 'refresh' and 'course_code' semantics are not clarified. The description fails to compensate for the schema's lack of parameter documentation.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose4/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description states a specific verb and resource: 'List upcoming cached Learn items.' This clearly identifies the operation and topic. It does not explicitly contrast with sibling tools like list_deadlines, but the 'upcoming' and 'cached' qualifiers provide enough inherent differentiation.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines3/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description implies the tool is for listing upcoming cached Learn items, which gives a general usage context. However, it offers no explicit guidance on when to prefer this over siblings such as list_deadlines or get_calendar_changes, nor does it state any exclusions.

    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 and idempotentHint=true, so the description's main behavioral addition is the privacy guarantee: it reports status without revealing feed URLs. This adds useful context about output behavior beyond the structured annotation fields.

    Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

    Conciseness5/5

    Is the description appropriately sized, front-loaded, and free of redundancy?

    A single sentence that names the output, scopes the subject, and states the privacy constraint — no wasted words. The most important action ('Report') and subject are front-loaded.

    Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

    Completeness5/5

    Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

    With no parameters, strong annotations, and an output schema present, the description covers the essentials: what is reported and what is deliberately excluded. Nothing required to invoke this tool correctly is missing.

    Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

    Parameters4/5

    Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

    The tool has zero parameters, so schema coverage is vacuously 100% and there is nothing for the description to add. Per the rubric, a no-parameter tool gets a baseline of 4, and the description appropriately focuses on output behavior instead.

    Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

    Purpose5/5

    Does the description clearly state what the tool does and how it differs from similar tools?

    The description uses a specific verb ('Report') and precise objects ('configured source names and cache freshness'), and it also states what the tool intentionally does NOT do ('without revealing feed URLs'). This clearly distinguishes it from the sibling calendar/list tools, which cover different subject matter.

    Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

    Usage Guidelines4/5

    Does the description explain when to use this tool, when not to, or what alternatives exist?

    The description clearly implies this tool is for checking status and cache freshness of configured sources, which is distinct from the sibling tools' listing and deadline functions. It does not explicitly name alternatives or state exclusions, but the usage context is evident and unambiguous.

    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

DTU-Calendar-MCP MCP server

Copy to your README.md:

Score Badge

DTU-Calendar-MCP MCP server

Copy to your README.md:

Latest Blog Posts

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/PV-Bhat/DTU-Calendar-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server