Skip to main content
Glama

ClassMarker MCP by usefulapi

Server Details

Read ClassMarker groups, links, exams and recent results; manage question bank and access codes.

Ownership verified

The last two health checks of this connector failed. If this server requires authentication, missing or expired test credentials may be the cause. A test profile lets Glama authenticate for health checks and discover tools; it is separate from your personal connections.

If you are the author, claim ownership, then add or update a test profile under Admin → Test Profile.

Status
Unhealthy
Uptime
98.4% over 21 days
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
m190/usefulapi-mcp
GitHub Stars
0

TDQS

A4.2/5.0

Scored across 15 tools

Disambiguation4/5

Most tools are clearly distinct by resource+action, but the four results tools (recent_group_results, recent_group_exam_results, recent_link_results, recent_link_exam_results) overlap heavily and differ only in scope (all vs one, group vs link), which an agent could easily mix up despite the descriptions clarifying it. The create/update pairs for category vs parent_category are also close but descriptions differentiate them adequately.

Naming Consistency5/5

Every tool follows a consistent classmarker_verb_noun pattern (create_question, list_categories, update_parent_category, add_access_codes, recent_group_results). The one compound outlier, list_groups_links_exams, still fits the convention and is readable.

Tool Count5/5

15 tools fall squarely in the well-scoped range, and each maps to a distinct ClassMarker API endpoint (questions, categories, access lists, results). The set isn't padded with redundant tools.

Completeness3/5

There are notable gaps: no delete operations for questions or categories, access codes can only be added never removed (explicitly stated), and no create/update for exams, links, or groups despite results and access-code tools depending on them. The question/category surface has create+get+update but is missing deletes, leaving dead ends an agent cannot fully resolve.

Available Tools

15 tools
classmarker_add_access_codesAdd access codes to a listAInspect

WRITE: add access codes (1-100 per call, up to 255 characters each; a list holds at most 20,000) to a link's access-code list, so those people can start the exam. The access_list_id comes from classmarker_list_groups_links_exams (links[].access_list_id). Only adds; removing codes is not offered. Does not count against the 30 requests per hour limit. API: POST /v1/accesslists/{access_list_id}.json.

NameRequiredDescriptionDefault
codesYes1-100 access codes to add.
access_list_idYesThe access list id (links[].access_list_id).

TDQS

A4.8/5.0
Behavior5/5

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

Annotations only give readOnly/idempotent/destructive hints; the description adds operational constraints the annotations cannot: 1-100 codes per call, 255-char limit, 20,000-code list cap, and the fact that it does not count against the 30 requests/hour limit. It also discloses the underlying endpoint.

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?

Front-loaded with the WRITE marker, then limits, then id provenance, then exclusions and rate-limit note. Dense but every clause carries actionable information; no filler.

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

Completeness4/5

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

With no output schema, the description does not say what the call returns (e.g., accepted vs. rejected codes), which is the one thing an agent might still want for a bulk write. Everything else — limits, provenance, exclusions, rate-limit exemption — is covered.

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?

Schema coverage is 100% and the schema already carries per-parameter descriptions, so baseline is 3. The description adds provenance for access_list_id and a list-level capacity constraint (20,000) that appears nowhere in the schema, which is genuine added 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?

States a specific verb and resource ('add access codes ... to a link's access-code list') plus the outcome ('so those people can start the exam'). No sibling tool touches access-code lists, and the description's scope (add-only) makes that distinction unambiguous.

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

Usage Guidelines5/5

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

Explicitly says when to use it (to let people start an exam), where the required id comes from ('classmarker_list_groups_links_exams (links[].access_list_id)'), and what it cannot do ('Only adds; removing codes is not offered'), which functions as the when-not clause.

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

classmarker_create_categoryCreate a categoryAInspect

WRITE: create a question category under a parent category. Returns its category_id. Counts as one of ClassMarker's 30 requests per hour per API key. API: POST /v1/categories/category.json.

NameRequiredDescriptionDefault
category_nameYesName of the new category.
parent_category_idYesThe parent category id (from classmarker_list_categories).

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=false, destructiveHint=false, so the description need not restate the safety profile. It does add genuinely new operational context: the 30-requests-per-hour per-API-key rate limit and the underlying endpoint POST /v1/categories/category.json. No contradiction with the annotations.

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?

Three short sentences, front-loaded with the 'WRITE:' marker, then the return value, then the operational limits. Every sentence carries distinct information with no padding.

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

Completeness4/5

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

For a two-parameter mutation with full schema coverage and annotations, the description fills the main gaps: it discloses the return value (category_id) in the absence of an output schema, plus rate limits. It stops short of describing failure modes, such as what happens if parent_category_id does not exist.

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 description coverage is 100% – both parameters carry their own descriptions, including the useful pointer that parent_category_id comes from classmarker_list_categories. The description adds no syntax, format, or validation detail beyond that, so the baseline 3 applies.

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?

States a specific verb and resource ('create a question category') and adds scope ('under a parent category'), which implicitly separates it from the sibling classmarker_create_parent_category. An agent can pick between the two category-creation tools without opening either schema.

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 'WRITE:' prefix signals this is a mutating operation, and 'under a parent category' implies a parent must already exist, but the description never states when to prefer this over classmarker_create_parent_category or classmarker_update_category, nor any preconditions. Usage is inferable rather than guided.

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

classmarker_create_parent_categoryCreate a parent categoryAInspect

WRITE: create a new top-level question category. Returns its parent_category_id. Counts as one of ClassMarker's 30 requests per hour per API key. API: POST /v1/categories/parent_category.json.

NameRequiredDescriptionDefault
parent_category_nameYesName of the new parent category.

TDQS

A3.9/5.0
Behavior4/5

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

Goes beyond the annotations (readOnly=false, idempotent=false, destructive=false) by disclosing a 30-requests-per-hour-per-API-key rate limit, the returned parent_category_id, and the underlying endpoint. It does not say what happens on a duplicate name or failed validation, which would round out the mutation profile.

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

Conciseness4/5

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

Four short, telegraphic sentences that are front-loaded with the WRITE marker and the core action. Every sentence carries a distinct fact (action, return value, quota, endpoint); only the endpoint restatement is marginal.

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

Completeness4/5

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

No output schema exists, so the description usefully supplies the return value and the rate limit an agent must plan around. Combined with annotations covering the write/non-idempotent nature, an agent has enough to call it correctly; error behavior is the only notable omission.

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?

Only one parameter, and schema description coverage is 100% with the minLength/maxLength constraints documented there. The description adds nothing about the name field beyond what the schema already states, so the baseline 3 applies.

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?

States a specific verb (create) and resource (parent category) plus the discriminating qualifier 'top-level', which separates it from the sibling classmarker_create_category and classmarker_update_parent_category. An agent can select it without opening the schema.

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

Usage Guidelines3/5

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

The 'WRITE:' prefix and 'top-level' framing imply when this tool applies versus nested-category operations, but no alternative is named and no prerequisite or when-not condition is given. Usage is inferable rather than stated.

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

classmarker_create_questionCreate a questionAInspect

WRITE: add a new question to the question bank. Only multiplechoice, multipleresponse, truefalse and essay can be created. Returns the new question_id. For truefalse, give only correct_options ["A"] (True) or ["B"] (False). Counts as one of ClassMarker's 30 requests per hour per API key. API: POST /v1/questions.json.

NameRequiredDescriptionDefault
pointsNoPoints for a correct answer (for an essay: the maximum score).
optionsNoAnswer options keyed by letter A-J (up to 10), e.g. {"A": "Apply oil", "B": "Soak in water"}. Needed for multiplechoice and multipleresponse; not allowed for truefalse and essay.
questionYesThe question text.
category_idNoCategory id (from classmarker_list_categories).
grade_styleNomultipleresponse only: partial credit with or without deduction, or off (all-or-nothing).
question_typeYesmultiplechoice (one correct option), multipleresponse (one or more), truefalse, or essay (graded by hand). Free text, grammar and matching cannot be written.
random_answersNoShuffle the order of the options for each test-taker (multiplechoice / multipleresponse).
correct_optionsNoLetters of the correct options, e.g. ["C"]. multiplechoice: exactly one; multipleresponse: one or more; truefalse: ["A"] (True) or ["B"] (False); not allowed for essay.
correct_feedbackNoFeedback shown for a correct answer.
incorrect_feedbackNoFeedback shown for an incorrect answer.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false and idempotentHint=false, but the description adds significant behavioral context beyond that: it labels the operation WRITE, states that it returns the new question_id, discloses the 30 requests per hour per API key rate limit, and gives the API endpoint. These are exactly the kind of operational traits an agent needs for a mutation tool.

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 dense and front-loaded: 'WRITE: add a new question...' immediately signals the operation. Every subsequent sentence adds a distinct fact: allowed types, return value, truefalse rule, rate limit, and endpoint. There is no wasted wording.

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?

For a 10-parameter creation tool with 100% schema coverage and no output schema, the description supplies the missing operational context: it reports the returned question_id, rate limit, mutation nature, and type restrictions. An agent has enough information to invoke it correctly without needing to inspect sibling tools.

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 description coverage is 100%, so the schema already documents all 10 parameters, including the truefalse correct_options format and the question_type enum. The description repeats the creatable types and the truefalse option rule but adds no new syntax, format, or default information beyond the schema. This meets the baseline 3 for high schema coverage.

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: 'add a new question to the question bank.' It also lists the four creatable question types and the return value. It does not explicitly name or distinguish itself from siblings like update_question or get_question, though the create verb makes the distinction obvious.

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 gives clear usage context by restricting creation to multiplechoice, multipleresponse, truefalse and essay. It also gives a special usage rule for truefalse correct_options. It does not point to alternatives such as update_question for modifying existing questions, so it falls short of explicit when/when-not/alternatives guidance.

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

classmarker_get_questionGet a questionA
Read-only
Inspect

Get one question-bank question by id (ids from classmarker_list_questions). Counts as one of ClassMarker's 30 requests per hour per API key. API: GET /v1/questions/{question_id}.json.

NameRequiredDescriptionDefault
question_idYesThe question id.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so safety is covered. The description adds genuinely useful operational context beyond the annotations: the 30-requests-per-hour-per-API-key budget and the underlying endpoint (GET /v1/questions/{question_id}.json).

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 dense sentence with the core action and id source front-loaded, followed by rate-limit and endpoint facts. No filler.

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

Completeness4/5

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

For a one-parameter read-only getter with no output schema, the description covers action, id provenance, cost, and endpoint. The only minor gap is that the shape of the returned question object is left entirely unstated.

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 coverage is 100% and the single parameter is fully documented in the schema, so baseline is 3. The description adds only the provenance of the id ('ids from classmarker_list_questions'), not format or constraint detail beyond the schema.

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?

States a specific verb and resource ('Get one question-bank question by id') and explicitly points to classmarker_list_questions as the source of ids, which cleanly separates it from the sibling list tool.

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?

Tells the agent when this tool is appropriate by identifying the precondition (you already have an id, obtained from classmarker_list_questions). It gives no explicit when-not guidance, but for a single-resource getter the usage context is unambiguous.

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

classmarker_list_categoriesList question categoriesA
Read-only
Inspect

List the question-bank categories with their parent categories and ids (needed for creating and updating questions). Counts as one of ClassMarker's 30 requests per hour per API key. API: GET /v1/categories.json.

NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, so the safety profile is covered. The description adds genuinely useful operational context beyond that: the 30-requests-per-hour-per-API-key quota and the concrete endpoint (GET /v1/categories.json). It does not discuss pagination or result ordering.

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?

Three short sentences, each load-bearing: what is returned, why it matters, and the cost/endpoint. The value proposition is front-loaded and there is no filler.

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 output schema, the description compensates by naming the returned fields (parent categories and ids). It pairs that with the rate-limit caveat and endpoint, so an agent has everything needed to call a zero-parameter read tool correctly.

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 takes zero parameters, which is the baseline-4 case; there is nothing for the description to disambiguate. It instead documents the return shape (categories with parents and ids), which is helpful, though not required at this dimension.

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?

States a specific verb ('List') and resource ('question-bank categories'), and enumerates what each entry contains (parent categories and ids). It also ties the resource to its downstream use (creating/updating questions), which separates it from the create_/update_ category siblings.

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 parenthetical '(needed for creating and updating questions)' tells the agent the context in which this list should be called, i.e. to resolve category ids before a write. It does not state any when-not conditions or name an alternative tool, so it stops short of a 5.

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

classmarker_list_questionsList question-bank questionsA
Read-only
Inspect

List the questions of the question bank, 200 per page (page 1, 2, ...): question text, type, category, points, options, correct options, status. A full page means more may follow, so ask for the next page. Counts as one of ClassMarker's 30 requests per hour per API key. API: GET /v1/questions.json?page=N.

NameRequiredDescriptionDefault
pageNoPage number, 1-based (default 1).

TDQS

A4/5.0
Behavior4/5

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

With readOnlyHint already declaring the safety profile, the description still adds real behavioral context: the 200-items-per-page pagination model, the continue-if-full rule, and a concrete quota cost (one of 30 requests per hour per API key). It also compensates for the missing output schema by listing returned fields. Only the raw endpoint line is redundant.

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?

Three compact sentences, front-loaded with purpose, then pagination, then quota and endpoint. Every clause carries operational value for the caller; nothing is padding.

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?

For a single-optional-parameter, read-only listing tool with no output schema, the description covers purpose, return fields, pagination semantics, and rate-limit cost. An agent has everything needed to call it and to loop correctly.

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?

Schema coverage is 100%, so the baseline is 3, but the description adds meaning the schema lacks: the page size of 200 and the fact that pages are 1-based and sequential, which is what an agent needs to decide how many page calls to make.

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?

States a specific verb and resource ('List the questions of the question bank') and even enumerates the returned fields, so the operation is unambiguous. It does not explicitly contrast itself with the singular classmarker_get_question sibling, so it falls short of full sibling 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?

Usage is implied by the resource name, and the description gives pagination guidance ('a full page means more may follow, so ask for the next page'). However, it never states when to prefer this over get_question or other listing siblings, nor does it name any exclusions.

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

classmarker_recent_group_exam_resultsRecent results for one group examA
Read-only
Inspect

Recent finished results for ONE exam in ONE group (ids from classmarker_list_groups_links_exams), oldest first, PAGED by finish time. Contains personal data: use small pages. Counts as one of ClassMarker's 30 requests per hour per API key. API: GET /v1/groups/{group_id}/tests/{test_id}/recent_results.json.

NameRequiredDescriptionDefault
limitNoResults per request, 1-200 (default 25; ClassMarker's own default is 200).
test_idYesThe exam (test) id.
group_idYesThe group id.
include_monitor_eventsNoInclude each result's detailed monitor_events.events list (default false: only the counts).
finished_after_timestampNoUNIX time in SECONDS: only results finished after this are returned (oldest first). Default: 14 days ago. Maximum look-back is 3 months. To page, pass next_finished_after_timestamp from the previous reply.

TDQS

A4.1/5.0
Behavior5/5

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

Goes well beyond the readOnlyHint annotation by disclosing ordering ('oldest first'), pagination mechanism ('PAGED by finish time'), a personal-data warning, and a concrete rate limit (30 requests/hour per API key). These are exactly the operational facts an agent needs and none are derivable from the annotations or schema.

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

Conciseness4/5

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

Front-loaded with purpose and scope, followed by constraints and the API path. It is dense but every clause (paging, personal-data caution, rate limit, id source) carries real information; only minor tightening is possible.

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

Completeness4/5

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

For a read-only, 5-parameter tool with no output schema, the description covers scope, ordering, paging, rate limit, and privacy. It omits any indication of the response shape, but with no output schema and readOnlyHint present, this is a minor gap rather than a blocking one.

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 description coverage is 100%, so all five parameters are already documented, including the finished_after_timestamp paging hint. The description reinforces 'oldest first' ordering and 'small pages' but adds no syntax or format detail beyond what the schema already provides, making the 3 baseline appropriate.

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?

States a specific verb and resource with precise scope: 'Recent finished results for ONE exam in ONE group,' which implicitly separates it from group-only and link-based siblings like classmarker_recent_group_results and classmarker_recent_link_exam_results. It stops short of naming a contrasting sibling explicitly, so the differentiation relies on the reader comparing scope statements.

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?

Tells the agent where the required ids come from (classmarker_list_groups_links_exams) and advises using small pages because output contains personal data. It does not state explicit when-not conditions or name competing result tools, but the practical usage context is clear.

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

classmarker_recent_group_resultsRecent results across all groupsA
Read-only
Inspect

Recent finished test results taken in the key's groups (all groups, all exams), oldest first, PAGED by finish time: test-taker name, email, score, percentage, pass/fail, timing, certificate. Contains personal data: use small pages. Max look-back 3 months. Counts as one of ClassMarker's 30 requests per hour per API key. API: GET /v1/groups/recent_results.json.

NameRequiredDescriptionDefault
limitNoResults per request, 1-200 (default 25; ClassMarker's own default is 200).
include_monitor_eventsNoInclude each result's detailed monitor_events.events list (default false: only the counts).
finished_after_timestampNoUNIX time in SECONDS: only results finished after this are returned (oldest first). Default: 14 days ago. Maximum look-back is 3 months. To page, pass next_finished_after_timestamp from the previous reply.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations only declare readOnlyHint, so the description carries most of the burden and adds real value: a PII warning ('contains personal data: use small pages'), the 30-requests-per-hour rate limit, the pagination mechanism, and the look-back ceiling. It does not describe error behavior or what fields the certificate/timing blocks contain, keeping it short of a 5.

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

Conciseness4/5

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

A single dense block that front-loads scope, then ordering, then the returned fields, then constraints. Every sentence earns its place, though the pacing is compressed and 'oldest first, PAGED by finish time' is slightly redundant.

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 output schema and no annotations beyond read-only, the description compensates well: it enumerates the returned fields, discloses PII and rate-limit constraints, and states the look-back and pagination rules. An agent has everything needed to call it correctly and safely.

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 description coverage is 100%, so limit, include_monitor_events, and finished_after_timestamp are already documented in detail. The description reinforces paging direction and 'small pages' but adds no syntax or format detail beyond the schema, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource (recent finished test results) with explicit scope '(all groups, all exams)', which distinguishes it from the more narrowly scoped siblings recent_group_exam_results and recent_link_results. It also names the backing endpoint GET /v1/groups/recent_results.json.

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?

Provides clear context: oldest-first ordering, paging by finish time, and a 3-month maximum look-back. It stops short of naming the sibling alternatives or stating when to prefer this all-groups scope over an exam- or link-scoped call, so the routing guidance is implied rather than explicit.

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

classmarker_update_categoryUpdate a categoryA
DestructiveIdempotent
Inspect

WRITE: rename a category and/or move it to another parent (overwrites both fields: send the name and parent_category_id you want it to have). Counts as one of ClassMarker's 30 requests per hour per API key. API: PUT /v1/categories/category/{category_id}.json.

NameRequiredDescriptionDefault
category_idYesThe category id (from classmarker_list_categories).
category_nameYesThe category's name (new or unchanged).
parent_category_idYesThe parent category id (new or unchanged).

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is covered. The description still adds non-derivable detail: that both fields are overwritten rather than patched, and the rate limit of 30 requests/hour/key, plus the underlying endpoint.

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 tightly packed sentence with the write classification and operation front-loaded, followed by overwrite semantics, rate limit, and endpoint. Every clause carries information; nothing is padding.

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

Completeness4/5

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

For a 3-parameter write tool with no output schema, the description covers intent, required-value semantics, rate limiting, and the API route. Only the absence of alternative-routing guidance keeps it from being fully complete.

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?

Schema coverage is 100%, so the baseline is 3. The description goes beyond it by clarifying that category_name and parent_category_id are full replacements, not optional deltas — resolving the main ambiguity of a PUT-style update.

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?

States a specific verb and resource ('rename a category and/or move it to another parent') and fixes the exact scope of the mutation. An agent can distinguish this from classmarker_create_category and classmarker_update_parent_category without opening a schema.

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 parenthetical 'send the name and parent_category_id you want it to have' tells the caller exactly what values to supply under overwrite semantics, which is real invocation guidance. It does not, however, name alternatives or state when not to use this tool (e.g., versus update_parent_category).

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

classmarker_update_parent_categoryRename a parent categoryA
DestructiveIdempotent
Inspect

WRITE: rename an existing parent category (overwrites its name). Counts as one of ClassMarker's 30 requests per hour per API key. API: PUT /v1/categories/parent_category/{parent_category_id}.json.

NameRequiredDescriptionDefault
parent_category_idYesThe parent category id (from classmarker_list_categories).
parent_category_nameYesThe new name.

TDQS

A3.8/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=true, so the safety profile is covered. The description still adds genuinely useful context beyond them: the overwrite semantics of the name, the concrete rate limit (30 requests/hour per API key), and the underlying endpoint.

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 dense sentence with zero waste, front-loaded with the operation class ('WRITE') followed by resource, mutation effect, rate limit and endpoint. Nothing is repeated or padding.

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

Completeness4/5

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

For a two-parameter write tool with full annotation coverage and no output schema, the description covers operation type, mutation effect, rate limit and endpoint. It could still say whether the id survives and that nothing else on the category changes, but overall it is close to sufficient.

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 coverage is 100% and the schema already documents both parameters, including where parent_category_id comes from (classmarker_list_categories). The description only implicitly reinforces parameter placement via the endpoint path, which is the baseline expectation when the schema does the heavy lifting.

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?

States a specific verb and resource: 'rename an existing parent category.' The 'parent' qualifier implicitly separates it from the sibling classmarker_update_category for regular categories, but no sibling is named explicitly, so the differentiation is left to inference rather than spelled out.

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 'WRITE:' prefix and 'rename an existing' wording imply this is a modification of something that already exists (versus classmarker_create_parent_category), but there is no explicit when-to-use/when-not guidance or named alternative for renaming a non-parent category.

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

classmarker_update_questionUpdate a questionA
DestructiveIdempotent
Inspect

WRITE (overwrites): replace an existing question-bank question. Send the COMPLETE question (type, text, options, correct options, points, feedback), not only the changed fields; read it first with classmarker_get_question. Only multiplechoice, multipleresponse, truefalse and essay questions can be updated. Counts as one of ClassMarker's 30 requests per hour per API key. API: PUT /v1/questions/{question_id}.json.

NameRequiredDescriptionDefault
pointsNoPoints for a correct answer (for an essay: the maximum score).
optionsNoAnswer options keyed by letter A-J (up to 10), e.g. {"A": "Apply oil", "B": "Soak in water"}. Needed for multiplechoice and multipleresponse; not allowed for truefalse and essay.
questionYesThe question text.
category_idNoCategory id (from classmarker_list_categories).
grade_styleNomultipleresponse only: partial credit with or without deduction, or off (all-or-nothing).
question_idYesThe question id (from classmarker_list_questions).
question_typeYesmultiplechoice (one correct option), multipleresponse (one or more), truefalse, or essay (graded by hand). Free text, grammar and matching cannot be written.
random_answersNoShuffle the order of the options for each test-taker (multiplechoice / multipleresponse).
correct_optionsNoLetters of the correct options, e.g. ["C"]. multiplechoice: exactly one; multipleresponse: one or more; truefalse: ["A"] (True) or ["B"] (False); not allowed for essay.
correct_feedbackNoFeedback shown for a correct answer.
incorrect_feedbackNoFeedback shown for an incorrect answer.

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=true, but the description goes further: it explains the full-replace overwrite semantics, the supported-type restriction, and a concrete rate limit (30 requests/hour per API key). That is meaningful behavioral context beyond the structured hints.

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?

Front-loads the operation type and mutate semantics in the first clause, then adds prerequisites, constraints and rate limits in a tight sequence. No sentence is filler; everything is actionable.

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?

For a destructive mutation tool with no output schema, the description covers overwrite behavior, the read-before-write prerequisite, allowed types and rate limits. There is no ambiguity an agent would need resolved before calling it.

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?

Schema coverage is 100%, so the baseline is 3. The description lifts it by enumerating the fields that make up the 'COMPLETE question' (type, text, options, correct options, points, feedback), reinforcing which parameters are semantically mandatory in a full-replace call rather than merely schema-optional.

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?

States a specific verb and resource ('replace an existing question-bank question') and immediately flags the operation as a WRITE that overwrites. This cleanly separates it from classmarker_create_question, classmarker_get_question and classmarker_list_questions without requiring the agent to open another schema.

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

Usage Guidelines5/5

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

Explicitly tells the agent to read the question first with classmarker_get_question, to send the COMPLETE question rather than a patch, and which question types are updatable. These are concrete when-to-use and prerequisite rules rather than inference.

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

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    C
    maintenance
    Enables read-only access to a Librus Portal account, letting users list linked Synergia accounts and retrieve grades, attendance, timetable, homework, notices, and school information.
    3
    -
  • A
    license
    A
    quality
    A
    maintenance
    Enables MCP clients to search and describe API routes, retrieve people, admissions, academics, and billing records, download exports, and optionally make changes against a school information system, read-only by default.
    6
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.