Skip to main content
Glama

Server Details

Build, publish and track embedded training courses in your product: courses, learners, SCORM.

Ownership verified
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL

TDQS

A3.7/5.0

Scored across 68 tools

Disambiguation4/5

Most tools map cleanly to a single resource+action, and descriptions actively disambiguate tricky pairs like list_certificates vs list_issued_certificates and update_screen vs update_course. However, with 68 tools there are still several close pairs (create_course/generate_course/import_scorm, upsert_identity/bulk_upsert_identities) that could cause misselection if descriptions aren't read carefully.

Naming Consistency4/5

The overwhelming majority of tools follow a clear verb_noun pattern: get_course, create_theme, delete_identity, list_webhooks, update_translation. The main inconsistency is add_block/add_screen vs create_course/create_theme, and mixed semantic verbs like duplicate_, move_, and reorder_, though these are still predictable.

Tool Count2/5

68 tools is far beyond the 25+ threshold and makes the surface very heavy for an agent to navigate, even though the LMS domain is broad. Each resource cluster is reasonably small, but as a single MCP server the overall tool count is bloated.

Completeness5/5

The toolset covers the full authoring lifecycle: courses, screens, blocks, collections, themes, translations, certificates, learners, completions, members, webhooks, API keys, usage, audit, SCORM import/export, and AI generation. Obvious gaps like identity updates are handled by upserts, and block editing is routed cleanly through update_screen.

Available Tools

68 tools
add_blockAdd a block to a screenAInspect

Appends one block at its defaults to a screen, with a fresh id — the quick path when you only want to add something rather than restate the whole screen. Fill it in afterwards with update_screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesThe block type to append, at its defaults. See list_block_types for what each type is.
courseIdYesId of the course that holds the screen.
screenIdYesId of the screen within that course, as found in the course's screens array.

Output Schema

ParametersJSON Schema
NameRequiredDescription
blockYesThe new block at its defaults. Its fields for each type are listed by list_block_types.
screenIdYesThe screen the block was appended to.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only indicate non-read-only and non-destructive. The description adds that the block is created at its defaults and gets a fresh id, plus a follow-up workflow (update_screen). This is valuable behavioral context beyond the minimal annotations, though it doesn't discuss side effects or permission requirements.

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, front-loaded with the core action and purpose, then the key contrast with update_screen. No wasted words; every clause earns its place.

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 simple 3-parameter tool with an output schema, the description fully covers the what, when, and how it fits into the workflow. An agent has enough to decide and call it correctly.

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%—each parameter already has a detailed description, including the type enum and mentions of 'at its defaults'. The description reinforces this but adds no new parameter-specific information. 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?

Clear statement of action ('Appends one block'), the resource (a screen), and a distinctive trait (with a fresh id). It contrasts with update_screen (restate whole screen) and implicitly distinguishes from add_screen, so an agent can tell them apart without opening schemas.

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 describes when to use this tool ('the quick path when you only want to add something') versus when not (rather than restate the whole screen), and names the alternative (update_screen). No ambiguity about the intended context.

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

add_course_to_collectionAdd course to collectionAInspect

Adds a course to the end of a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.
courseIdYesId of a course in this workspace to append to the end of the collection. A course can appear in a collection only once.

Output Schema

ParametersJSON Schema
NameRequiredDescription
courseIdYesThe course that was added or moved.
collectionIdYesThe collection the course is in.

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate readOnlyHint false and destructiveHint false, establishing this as a non-readonly, non-destructive write operation. The description adds meaningful behavioral context by specifying that the course is placed 'at the end' of the collection, which is not inherent in the annotations. It does not contradict the annotations and provides additional behavioral detail beyond 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/5

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

The description is a single, concise sentence that clearly communicates the action and its placement. Every word earns its place, with no redundancy or filler, making it optimally front-loaded and easy to parse.

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 simple two-parameter mutation tool with an output schema present, the description adequately covers the core action. It does not explain return values (unnecessary given the output schema), but it omits explicit mention of constraints like uniqueness (though that is in the schema). Overall, it is complete enough for an agent to take action, though adding a note about duplicate behavior would push it to a 5.

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?

The schema provides 100% description coverage for both parameters, with detailed notes on id (collection id from list_collections/create_collection) and courseId (course in workspace, appended at end, can appear only once). The description itself adds no further parameter meaning beyond what the schema already conveys, so it meets the baseline but does not exceed it.

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 'Adds a course to the end of a collection' clearly states a specific verb (adds), resource (course to collection), and the particular placement ('end'). It distinguishes from siblings like remove_course_from_collection and move_course_in_collection by indicating the action is addition at the end, not removal or reordering.

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 does not explicitly state when to use this tool versus alternatives such as move_course_in_collection or remove_course_from_collection. It relies on the tool name and schema hints (e.g., 'as returned by list_collections or create_collection') to convey context, but no direct usage guidance or exclusions are provided.

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

add_screenAdd a screenAInspect

Appends a screen to a course, optionally seeded from a template (see list_screen_templates). Returns the created screen, including the ids you'll need to fill its blocks in with update_screen.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoThe new screen's title. Defaults to "Untitled screen".
courseIdYesId of the course to append the screen to.
templateKeyNoKey of a screen template from list_screen_templates to seed the screen's blocks, which arrive empty with fresh ids. Omit for a blank screen.

Output Schema

ParametersJSON Schema
NameRequiredDescription
indexYesThe screen's zero-based position in the course.
screenYesA screen: { id, title, blocks: [...] }. Block shapes are listed by list_block_types.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already indicate this is a mutating, non-idempotent operation. The description adds useful behavioral detail: it returns the created screen, includes the ids needed for update_screen, and explains that template seeding produces blocks with fresh ids. 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.

Conciseness5/5

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

Two sentences with no filler. The action and resource are front-loaded, and the template and return-value context are packed efficiently into the second sentence.

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 a complete input schema and an output schema present, the description covers what remains essential: the operation's effect, the optional template path, and the next-step relationship to update_screen. Nothing critical is missing.

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%, and the schema already documents title defaults, courseId, and templateKey semantics. The description adds workflow context around template selection and return value, but it does not materially improve parameter-level understanding 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?

The description states a specific verb and resource: 'Appends a screen to a course.' It also distinguishes the tool from related siblings like add_block and update_screen by clarifying that it creates a screen and returns the ids needed for subsequent block filling.

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 workflow guidance by pointing to list_screen_templates for template keys and update_screen for filling blocks. It does not explicitly state when not to use alternatives such as duplicate_screen, 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.

bulk_delete_identitiesBulk delete identitiesA
DestructiveIdempotent
Inspect

Deletes up to 500 learners in one call, by our ids or by your own externalIds. Reports what was actually removed, which can be fewer than asked for if some were already gone.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNoUnderlayer identity ids to delete. Send this, externalIds, or both; at least one id overall.
externalIdsNoYour own learner ids to delete. Combined with ids, at most 500 per call.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYesHow many identities were actually removed.
requestedYesHow many ids and externalIds were sent.
identitiesYesThe identities removed. Ids that were already gone are not listed.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare destructiveHint and idempotentHint, and the description goes beyond them by explaining the partial-deletion behavior: it reports what was actually removed, which can be fewer than requested. This adds useful context about already-gone identities without contradicting 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?

Two sentences with no filler. The core action and capacity are front-loaded, and the important edge case about already-removed identities is stated efficiently.

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?

Given the output schema, full parameter schema coverage, and annotations covering destructive and idempotent behavior, the description provides the remaining key behavioral detail (reported actual removals). Nothing necessary for correct invocation is missing.

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 explains ids and externalIds. The description loosely restates 'by our ids or by your own externalIds' but does not add substantially new parameter-level meaning beyond what the schema provides.

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 states a specific action ('Deletes up to 500 learners in one call'), identifies the resource (learners/identities), and names both id modes ('our ids or your own externalIds'). This is clearly distinguishable from the singular delete_identity sibling and from bulk_upsert_identities.

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 frames the tool as a batch operation for deleting up to 500 identities at once, which conveys the primary use case. It does not explicitly name alternatives like delete_identity for single deletions, so it lacks explicit if-then routing, but the bulk context is clear.

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

bulk_upsert_identitiesBulk upsert identitiesA
DestructiveIdempotent
Inspect

Creates or updates up to 500 learners in one call. Upsert by externalId, so re-sending a list that is mostly already here adds only what is new. Returns how many were created versus updated.

ParametersJSON Schema
NameRequiredDescriptionDefault
identitiesYes1 to 500 learners, each { externalId, name?, email? }, with no externalId repeated. Unlike upsert_identity, name and email are written as sent, so leaving one out clears it.

Output Schema

ParametersJSON Schema
NameRequiredDescription
createdYesHow many identities were new.
updatedYesHow many identities already existed and were updated.
identitiesYesEvery identity written: the created ones first, then the updated.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already signal idempotent and destructive behavior, and the description adds concrete context: re-sending an existing list does not duplicate, results include created/updated counts, and null or omitted name/email values clear fields. The only blemish is an internal contradiction between 'Omit to keep the name already stored' and 'leaving one out clears it,' which slightly undermines transparency.

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 main description is three short, front-loaded sentences covering operation, batch size, idempotence, and return value. Every sentence earns its place; the schema descriptions handle the remaining detail.

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 destructive batch operation, the description covers the 500-item cap, externalId matching, created/updated counts, and differentiation from upsert_identity. With annotations and an output schema available, this is nearly complete; the omit/null contradiction is the main gap.

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 100%, so the baseline is 3, but the added array-level guidance directly contradicts the property-level descriptions: name/email say 'Omit to keep' while the identities description says 'leaving one out clears it.' This makes the actual parameter behavior ambiguous, so the description fails to add reliable meaning 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?

The description opens with a specific verb and resource: 'Creates or updates up to 500 learners in one call.' It also states the matching key (externalId), making the tool's bulk upsert behavior unambiguous and distinguishing it from single-item upsert_identity and bulk_delete_identities.

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 conveys when to use this tool (bulk operations up to 500 learners) and the schema description explicitly contrasts it with upsert_identity: 'Unlike upsert_identity, name and email are written as sent, so leaving one out clears it.' It does not state explicit exclusions or decision rules, but the context is sufficient for an agent to choose this over the sibling upsert tool.

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

cancel_inviteCancel an inviteA
DestructiveIdempotent
Inspect

Withdraws a pending invite so the link stops working.

ParametersJSON Schema
NameRequiredDescriptionDefault
inviteIdYesId of the pending invite, from list_members (pendingInvites) or invite_member.

Output Schema

ParametersJSON Schema
NameRequiredDescription
inviteIdYes
cancelledYes

TDQS

A4.1/5.0
Behavior3/5

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

The description aligns with the annotations (destructiveHint=true, readOnlyHint=false) and adds a useful consequence ('the link stops working'). With annotations already covering the write/destructive nature, the description contributes only a modest extra detail, not a deep behavioral profile.

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 conveys the action, object, and effect with no filler. Every word earns its place.

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-parameter, destructive tool with annotations and an output schema, the description covers the essential behavior. Any missing details (like return value) are handled by the output schema, and the intent is clear.

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?

The schema fully describes inviteId with its purpose and sources, so the description adds no new parameter meaning. Baseline 3 is appropriate given schema coverage is 100%.

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 states a clear verb ('Withdraws'), a specific resource ('a pending invite'), and the resulting effect ('the link stops working'). This distinguishes it from the related invite_member and remove_member tools without ambiguity.

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 targets 'pending invite' and explains the consequence, giving clear context for when to use it. However, it does not explicitly name alternatives like remove_member or state when not to use this tool, so it stops short of a full exclusion.

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

create_certificateCreate certificate templateAInspect

Creates a certificate template. Every tokens field is optional and falls back to the default design; an empty issuerName uses the workspace name. logoUrl must be a PNG or JPEG — a PDF cannot embed SVG or WebP. Composition: layout picks one of centred/left/minimal/sealed, order rearranges the centre stack, and freeform:true places every element from positions instead — fractions of the page inside its margin, x being the element's centre, y its top, w its width. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTemplate name, up to 80 characters.
tokensNoThe design: issuer, logo, wording, colours, border, orientation and layout. Every field is optional and falls back to the default design; omit tokens entirely for the default.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe certificate's design: layout, colours, fonts, text and signature settings.
createdAtYes
updatedAtYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations are minimal (readOnlyHint=false, destructiveHint=false, etc.), so the description carries the burden of behavior. It discloses key behaviors: tokens fall back to defaults, empty issuerName uses workspace name, logoUrl format restrictions, and detailed composition rules for layout/order/freeform. This goes beyond the schema and is highly informative. It does not mention the return format, but an output schema exists, so that gap is acceptable.

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

Conciseness4/5

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

The description is dense but well-structured: it opens with purpose, then explains optionality, logo constraints, composition details, and plan requirement. Each sentence adds necessary information without fluff. Slightly longer than ideal, but every part earns its place.

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?

Given the complexity of the tool (many nested tokens, positions, translations, etc.), the description covers the critical behaviors and constraints that are not obvious from the schema. It explains defaults, format limitations, and the freeform coordinate system. Combined with the schema's per-field descriptions, an agent has sufficient information to use the 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?

Schema coverage is 100% and the schema already provides descriptions for tokens. The description adds meaningful semantics beyond the schema: it explains the fallback behavior, the composition model (how layout/order/freeform interact), and logo format constraints. This is valuable context that helps an agent correctly construct the parameters.

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 clearly states 'Creates a certificate template' – a specific verb and resource that distinguishes it from siblings like update_certificate, get_certificate, and list_certificates. It also provides context about the tokens structure, making the scope unambiguous.

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 usage (it's a create operation) but does not explicitly contrast with alternatives such as 'use update_certificate to modify existing templates' or 'use get_certificate to retrieve one'. It does mention the plan requirement, which is a prerequisite, but not when to choose this over other tools.

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

create_collectionCreate collectionCInspect

Creates a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesCollection name.
descriptionNoOptional description of the collection. Omit or null for none.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
createdAtYes
descriptionYes
workspaceIdYes

TDQS

C2.9/5.0
Behavior2/5

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

Annotations already indicate readOnlyHint=false, idempotentHint=false, and destructiveHint=false. The description adds no behavioral context beyond restating 'creates'—it does not mention duplicate-name behavior, permissions, side effects, or whether creation can fail under particular conditions.

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?

The description is a single short sentence with no filler, making it very readable and front-loaded. However, it is essentially a rewording of the title, so it is concise but not meaningfully informative.

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?

Given the simple two-parameter schema, existing annotations, and the presence of an output schema, the description is minimally viable for invoking the tool. It still lacks guidance on uniqueness, naming expectations, or how this relates to sibling collection operations, so it is adequate but not complete.

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%, with both 'name' and 'description' already documented clearly in the input schema. The description adds no parameter-level meaning, but the schema carries the full burden, so the baseline score of 3 is 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?

The description states the exact operation ('Creates') and the target resource ('a collection'), making the purpose clear and unambiguous. It does not explicitly distinguish this from sibling creation tools like create_course or create_theme, but the resource itself is already named.

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

Usage Guidelines2/5

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

The description provides no guidance about when to use create_collection versus related alternatives such as add_course_to_collection or update_collection. There are no stated prerequisites, exclusions, or contextual hints about the intended workflow.

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

create_courseCreate courseAInspect

Creates a draft course. Screens follow the builder's shape — each has an id, title, and an array of blocks.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleYesCourse title, shown to learners.
screensNoThe course's screens in order, each with an id, a title and an array of blocks. Omit to start with no screens and add them later with add_screen.
themeIdNoId of a theme in this workspace for the course to inherit its look from. Omit or null for no theme.
navigationNo'default' lets the player draw its own Back/Continue row; 'hidden' removes it (and swipe) so button blocks move the learner on. Omit to use the workspace default.
passingScoreNoPercentage (0-100) of graded blocks a learner must answer correctly to pass and earn a certificate. Omit or null and any completion counts.
quizFeedbackNoWhen learners see whether an answer was right: 'deferred' (at the end, suits assessments) or 'immediate' (as they answer, suits practice). Omit to use the workspace default.
certificateIdNoId of a certificate template in this workspace, issued on passing. Omit or null to issue the built-in default design.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
statusYes
screensYes
themeIdYes
createdAtYes
directionYes
updatedAtYes
navigationYes
sourceKindYes
contentHashYes
customFontsYes
workspaceIdYes
passingScoreYes
quizFeedbackYes
certificateIdYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already establish the operation profile (readOnlyHint=false, destructiveHint=false), so the bar is lower. The description adds one meaningful behavioral trait: the course is created in draft state, not published. It also describes the screen structure. It does not discuss idempotency or post-create behavior, but this is adequate given the annotation coverage.

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 core action is front-loaded ('Creates a draft course'), and the screen-shape note is relevant context. Every sentence earns its place for a tool whose complexity is handled by the schema.

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 tool with a large, fully-documented schema and an output schema, the description doesn't need to explain return values. It covers the draft status and the expected screen structure, which is sufficient for correct invocation. It could optionally point to list_block_types or add_screen, but those are already referenced in the schema, so nothing critical is missing.

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 parameters are already fully documented in the schema. The description adds no parameter-level meaning 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/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: 'Creates a draft course.' The qualifier 'draft' clarifies the state of the created object and distinguishes it from update/delete/list operations. Mentioning the screen shape (id, title, blocks) also helps separate it from sibling tools like add_screen and add_block, which operate on existing courses.

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 verb and resource — an agent can infer this is the tool for creating a new course. However, the description gives no explicit when-to-use guidance, exclusions, or alternatives (e.g., generate_course for AI-generated courses, add_screen for adding screens later). The schema partially compensates, but the description itself is silent.

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

create_themeCreate themeAInspect

Creates a theme — the look every course assigned to it inherits, live. tokens.concept picks the design (stage, editorial, console, bright, calm, workbench, conversation), which carries the palette, the type pairing, the shapes and the chrome; every other token overrides part of it and anything omitted stays the concept's own. tokens.mode is light, dark or auto (follow the learner), with palette and darkPalette holding the overrides for each. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesTheme name.
tokensNoThe design. concept picks the base look, and every other token overrides part of it; anything omitted stays the concept's own. Omit tokens entirely for the default look.
customFontsNoSelf-hosted fonts the theme can reference by name: each is { name, url }, where url points at the font file. Only needed for fonts that aren't on Google Fonts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe theme's design tokens: concept, palette, colours, fonts, radii, spacing.
createdAtYes
updatedAtYes
customFontsYes
workspaceIdYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already indicate this is a write operation (readOnlyHint false), not idempotent, and not destructive. The description adds valuable behavioral context: themes apply 'live', the token override semantics (concept as base, others override), and the plan requirement. It does not contradict annotations. It doesn't describe failure modes or return value, but the output schema likely covers that.

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?

The description is three sentences, well-structured, and front-loaded with the core purpose. It packs a lot of information about the token system without being overly verbose. Each sentence earns its place, and the structure is logical: purpose, token model, requirement. Slight improvement could be made by trimming minor details, but overall it's concise.

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 complex tool with nested token objects and many options, the description provides a strong overview: it explains the concept system, mode handling, and plan requirement. It doesn't enumerate every token property, but those are in the schema. It mentions the live effect on courses. The output schema is present, so return values are covered. Missing a note on how to handle customFonts, but that's in the schema. Overall, it's sufficiently complete for an agent to invoke 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 description coverage is 100% at the top level, with descriptions for name, tokens, and customFonts. The tool description adds meaning by explaining tokens.concept (listing all seven options), tokens.mode (light, dark, auto), and how palette and darkPalette work as overrides. This goes beyond the schema's generic description and helps the agent understand the design model. It doesn't explain every token property, but the schema covers those.

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 states a clear verb and resource: 'Creates a theme'. It elaborates what a theme is ('the look every course assigned to it inherits, live'), making the tool's purpose unambiguous. It distinguishes from siblings implicitly by the verb 'creates', and no other sibling has a similar description.

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

Usage Guidelines2/5

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

The description does not explicitly mention when to use this tool versus update_theme, delete_theme, or other related tools. It does provide a prerequisite ('Requires the Scale plan or higher') and explains the token model, which gives context, but it lacks any guidance on when not to use it or which alternative to choose. No explicit comparison with siblings is provided.

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

create_translationCreate translationAInspect

Starts a new (initially empty) locale for a course. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeYesLocale code for the new translation, e.g. 'fr' or 'ar'. A course can have only one translation per locale.
courseIdYesId of the course the translation belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
localeYes
contentYesTranslated strings, keyed by the source field's path.
courseIdYes
createdAtYes
updatedAtYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already indicate this is a non-read-only mutation. The description adds valuable behavioral context: the new locale starts empty, and the operation requires the Scale plan or higher. It does not contradict annotations and provides useful entitlement and initialization behavior beyond the schema.

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 two short sentences, front-loads the core action, and contains no filler. Every word earns its place: it states what is created, how it starts, and what plan is required.

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 simple creation tool with complete schema descriptions, a plan requirement, and an output schema, the description covers the essential context. It does not explicitly mention what happens if a duplicate locale is created, but the schema already notes that a course can have only one translation per locale, so this is not a critical gap.

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%, with both courseId and locale already described clearly, including example values and the uniqueness constraint. The description does not add additional parameter-specific semantics, so the baseline score of 3 is appropriate.

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 ('Starts') and a clear resource ('a new (initially empty) locale for a course'), making the operation unmistakable. It distinguishes itself from sibling tools like update_translation, get_translation, and delete_translation by framing this as the creation of a new, empty locale.

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 it: when a new locale/translation should be created, as opposed to updating or deleting an existing one. However, it does not explicitly name alternatives or state conditions like 'use update_translation to modify an existing locale.' The Scale plan requirement is a useful prerequisite, not an explicit usage-vs-alternative guideline.

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

create_webhookCreate webhookAInspect

Registers a webhook endpoint. The response's signingSecret is shown once — store it immediately, it can't be retrieved again.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesThe https:// URL events are POSTed to. Local and internal addresses are rejected; plain http:// is accepted only for localhost.
nameNoOptional label for the endpoint, e.g. 'Prod'.
eventTypesYesThe events to deliver to this endpoint, at least one, e.g. ['course.completed'].

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
nameYes
isActiveYes
createdAtYes
eventTypesYes
workspaceIdYes
signingSecretYesSigns every delivery to this endpoint. Returned only here, once: store it now, it can't be retrieved again.

TDQS

A3.6/5.0
Behavior4/5

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

The description adds critical behavioral context beyond the annotations: the signingSecret is shown once and cannot be retrieved again, warning the agent to preserve it. Annotations already indicate this is a write operation (readOnlyHint=false), and the description complements rather than contradicts 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/5

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

Two short, purposeful sentences. The first states the core behavior and the second flags a non-obvious, operationally important detail. No filler or redundancy; the most critical operational warning is placed prominently.

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?

Given the output schema exists and the request schema is fully documented, the description covers the essential extra context an agent needs: registering a webhook and preserving the one-time signing secret. It is slightly sparse on why one would create a webhook, but the schema and annotation coverage fill the remaining gaps.

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?

The input schema has 100% coverage with descriptions for all three parameters, so the description does not need to explain them. It adds no parameter-level detail, matching the baseline expectation. The mention of signingSecret relates to the response, not the request schema.

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 clearly states the verb 'Registers' and the resource 'webhook endpoint,' making the tool's purpose unambiguous. It distinguishes itself from the many sibling webhook tools (delete_webhook, update_webhook, get_webhook) by indicating creation. It is slightly terse but sufficient.

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

Usage Guidelines2/5

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

The description says what the tool does but not when to use it versus alternatives. It does not mention that creating a webhook is for receiving event notifications, nor does it contrast with update_webhook or list_webhooks. Usage context must be inferred entirely from the verb and tool name.

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

delete_certificateDelete certificate templateA
DestructiveIdempotent
Inspect

Deletes a certificate template. Courses using it fall back to the built-in default design and keep issuing certificates. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe certificate template id, as returned by list_certificates or create_certificate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the annotations, the description adds valuable behavioral context: courses using the template fall back to the built-in default design and continue issuing certificates. It also discloses the Scale plan requirement, which is not present in the annotations. This meaningfully informs the agent of side effects and prerequisites.

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 two sentences with no filler. The core action is front-loaded, followed by the most important side effect and a requirement. Every sentence earns its place.

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 simple one-parameter destructive tool with annotations and an output schema, the description covers the essential behavioral context: what is deleted, what happens to dependent courses, and the plan requirement. Nothing critical is missing.

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%, and the single id parameter is already well documented in the schema. The description does not add additional parameter-level meaning, 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/5

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

The description uses a specific verb and resource: 'Deletes a certificate template.' It clearly distinguishes this from sibling certificate tools like create_certificate, update_certificate, get_certificate, and list_certificates by naming the delete action and the target resource.

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 a certificate template needs to be deleted. It does not explicitly mention alternatives such as update_certificate for modifying a template, nor does it state when not to use this tool. The plan requirement is helpful context but not a usage-vs-alternative guideline.

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

delete_collectionDelete collectionB
DestructiveIdempotent
Inspect

Deletes a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already signal destructiveHint=true and idempotentHint=true, but the description adds no behavioral context beyond the bare fact of deletion. It does not mention whether deletion is permanent, whether it cascades to contained courses, what authorization is needed, or how failures are handled.

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, direct sentence with no filler or redundant phrasing. It is front-loaded and appropriately sized for a one-parameter operation.

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 simple one-parameter delete with full schema coverage, annotations, and an output schema, the description is mostly adequate. However, it omits any detail about collateral effects, such as whether deleting a collection also deletes its contents or referenced courses, which is relevant for a destructive operation.

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?

The input schema fully documents the sole 'id' parameter, including its source via list_collections or create_collection, so schema coverage is 100%. The description offers no additional parameter meaning, but the baseline of 3 applies because the schema carries the semantic weight.

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 clear verb ('Deletes') and a specific resource ('a collection'), so an agent understands the operation. It does not explicitly distinguish itself from sibling tools like update_collection or remove_course_from_collection, but the delete action is unambiguous.

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

Usage Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives such as remove_course_from_collection or bulk_delete_identities. It also provides no preconditions, caveats, or context about when deletion is appropriate.

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

delete_courseDelete courseB
DestructiveIdempotent
Inspect

Deletes a course by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe course id, as returned by list_courses or create_course.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

B3.4/5.0
Behavior2/5

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

The description merely restates the destructive nature already declared by annotations (destructiveHint: true). It adds no new behavioral context such as permanence, cascading effects, or failure conditions. Since annotations cover the destructive hint, the description contributes minimal value.

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 concise sentence that is front-loaded with the action. No wasted words. It is appropriately sized for a simple tool.

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?

Given the simple nature (one parameter) and the presence of an output schema, the description is adequate. It covers the purpose and the parameter. It could mention side effects, but for a delete operation with destructiveHint, it's sufficient. Missing explicit 'permanent' but implied.

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?

The input schema already documents the 'id' parameter with a clear description. The description's 'by id' adds no additional semantic meaning beyond the schema. With 100% schema coverage, the baseline of 3 is appropriate.

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 the verb 'Deletes' and the resource 'course', distinguishing it from other delete_* tools by resource. The method 'by id' is clear. It is specific and unambiguous.

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

Usage Guidelines2/5

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

No guidance on when to use this tool versus alternatives. It doesn't mention any conditions, prerequisites, or exclusions. While the resource name distinguishes it, the description provides no usage context.

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

delete_identityDelete identityB
DestructiveIdempotent
Inspect

Deletes a learner identity.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnderlayer's id for the identity (not your externalId), as returned by list_identities or upsert_identity.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

B3.1/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, readOnlyHint=false, and idempotentHint=true, so the description's 'Deletes' adds no behavioral information beyond that. The description does not disclose potential side effects, permanence, cascading deletions, or permission requirements, all of which would be valuable for a destructive operation.

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?

The description is a single, front-loaded sentence with no filler or redundancy. It is concise enough to be immediately understood, though it is slightly under-specified for a destructive tool.

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?

The tool is simple with a single fully documented parameter, a full output schema, and annotations covering destructive/idempotent behavior. Together, these provide enough context for an agent to invoke the tool correctly. The main missing piece—usage guidance relative to bulk_delete_identities—is already penalized under usage guidelines.

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%, and the schema clearly explains that the id parameter is Underlayer's identity id rather than the externalId. The description itself adds no parameter-level meaning beyond the schema, so the baseline score of 3 is 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?

The description states a specific verb and resource: 'Deletes a learner identity.' This is clear and unambiguous about the core operation. However, it does not explicitly distinguish itself from sibling bulk_delete_identities, so it lacks explicit 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 Guidelines2/5

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

The description gives no guidance on when to use this tool versus alternatives like bulk_delete_identities or how to avoid misuse. It does not mention that the id must come from list_identities or upsert_identity; that information appears only in the schema, not in the usage guidance.

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

delete_screenDelete a screenA
DestructiveIdempotent
Inspect

Removes a screen from a course. The learner answers already recorded against it are not deleted.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course that holds the screen.
screenIdYesId of the screen within that course, as found in the course's screens array.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
screenIdYesThe id of the screen that was deleted.
remainingYesHow many screens the course has left.

TDQS

A3.8/5.0
Behavior4/5

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

While annotations already cover destructiveHint=true, idempotentHint=true, and readOnlyHint=false, the description adds the key nuance that learner answers are retained. This is valuable beyond the structured annotations. It could go further by mentioning reversibility or effects on course structure, but it discloses the most critical side effect.

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 zero filler: the first states the primary action, the second adds a crucial caveat. Fully front-loaded and every word earns its place.

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 simple destructive tool with full schema coverage, an output schema, and annotations covering idempotency and destructiveness, the description covers the main purpose and the most important side effect. Minor gaps like edge-case restrictions or impact on published content are not critical given the tool's simplicity.

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 both parameters have clear descriptions. The description does not enrich the meaning of the parameters beyond what the schema already provides, so 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?

The description states a specific verb ('removes') and resource ('a screen from a course'), clearly distinguishing it from siblings like add_screen, update_screen, duplicate_screen, and reorder_screens. The additional note about learner answers reinforces the scope.

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

Usage Guidelines2/5

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

No explicit guidance on when to use this tool vs alternatives (e.g., update_screen to edit, duplicate_screen to copy, or hiding a screen). The learner-answers note is a behavioral fact, not a selection cue. The agent must infer usage solely from the name and title.

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

delete_themeDelete themeA
DestructiveIdempotent
Inspect

Deletes a theme by id. Courses assigned to it fall back to no theme. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe theme id, as returned by list_themes or create_theme.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already indicate destructive and idempotent behavior, but the description adds valuable context beyond them: deleting a theme causes assigned courses to fall back to no theme, and the Scale plan requirement is disclosed. This gives the agent a clear picture of the operation's consequences without contradicting any annotation.

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 three short sentences with no filler. The core action comes first, followed by the important side effect and the plan requirement. Every sentence earns its place.

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 an output schema present, the description does not need to explain return values. The destructive side effect on courses and the plan prerequisite are both covered, and the annotations provide the safety and idempotency profile. This is complete enough for an agent to invoke the tool correctly.

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 'id' parameter is already well described as 'The theme id, as returned by list_themes or create_theme.' The description only says 'by id', adding no meaningful semantic value beyond the schema, so the baseline score of 3 is appropriate.

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 opens with a specific verb and resource: 'Deletes a theme by id.' This immediately distinguishes it from update_theme, create_theme, get_theme, and list_themes. The added side effect about courses falling back to no theme further clarifies the intended operation.

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 through 'Deletes a theme by id' and adds an explicit prerequisite: 'Requires the Scale plan or higher.' However, it does not explicitly name alternatives or state when not to use this tool, so usage guidance is adequate but not fully explicit.

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

delete_translationDelete translationA
DestructiveIdempotent
Inspect

Deletes a locale entirely. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course the translation belongs to.
translationIdYesThe translation's id (not its locale code), as returned by list_translations or create_translation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
deletedYes
translationIdYesThe id of the translation that was deleted.

TDQS

A4/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 description adds the plan requirement ('Requires the Scale plan or higher'), which is a behavioral constraint not covered by annotations. It also clarifies the scope of deletion ('entirely'), providing context beyond the schema. This adds meaningful value without contradicting 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?

The description is two short sentences with no redundant information. The action and key requirement are front-loaded, making it efficient and easy to scan. Every word contributes to clarity.

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 simple delete operation with an output schema present, the description covers the essential details: the action, the resource scope, and a plan prerequisite. The destructive and idempotent nature is already handled by annotations, so no additional behavioral disclosure is needed. It is 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.

Parameters3/5

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

Schema description coverage is 100%, with both courseId and translationId having descriptive text in the schema. The description adds no additional parameter-specific meaning, so the baseline of 3 applies as the schema fully documents the parameters.

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 states a specific verb ('Deletes') and a clear resource ('a locale entirely'), which directly identifies the tool's function. It distinguishes from sibling delete tools like delete_course by specifying 'locale' as the target, making it unambiguous for an agent to select the correct operation.

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 provides the context that this tool deletes a translation/locale and notes the Scale plan requirement, which indicates a prerequisite. However, it does not explicitly contrast with alternatives such as update_translation or list_translations, nor does it state when not to use it. The usage is implied rather than fully specified.

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

delete_webhookDelete webhookB
DestructiveIdempotent
Inspect

Deletes a webhook endpoint.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook endpoint id, as returned by list_webhooks or create_webhook.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe id of what was deleted.
deletedYes

TDQS

B3.2/5.0
Behavior2/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false, covering the safety profile. However, the description adds no additional behavioral context beyond the basic action—such as permanence of deletion, impact on associated resources, or irreversibility. With annotations doing the heavy lifting, the description contributes no extra transparency value.

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?

The description is a single concise sentence that accurately states the purpose without any fluff or redundancy. It earns its place by being the minimal necessary statement, though it could be slightly more informative without harming conciseness.

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?

Given the tool's simplicity—one required parameter, full schema coverage, annotations covering destructive and idempotent behavior, and an output schema present—the description is adequate. However, it misses an opportunity to mention common relevant context, such as that the deletion is permanent or that the webhook stops receiving events immediately. The structured fields carry most of the informational burden, so the thin description is acceptable but not complete.

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%: the 'id' parameter is described as 'The webhook endpoint id, as returned by list_webhooks or create_webhook.' The tool description itself adds no parameter-level meaning. Baseline of 3 is appropriate because the schema fully documents the parameter, and the description does not need to compensate.

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 'Deletes a webhook endpoint' clearly states the verb 'delete' and the resource 'webhook endpoint'. It unambiguously distinguishes itself from sibling tools like create_webhook, update_webhook, get_webhook, and list_webhooks. No ambiguity exists about what action this tool performs.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. While the name and description imply it is used when a webhook needs to be removed, the description itself offers no conditional context or routing to related tools. This is a minimal, single-purpose description without usage direction.

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

duplicate_screenDuplicate a screenAInspect

Copies a screen in directly after the original. Every block gets a new id, so the copy is independent of the original in the player.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course that holds the screen.
screenIdYesId of the screen within that course, as found in the course's screens array.

Output Schema

ParametersJSON Schema
NameRequiredDescription
indexYesThe screen's zero-based position in the course.
screenYesA screen: { id, title, blocks: [...] }. Block shapes are listed by list_block_types.

TDQS

A4/5.0
Behavior4/5

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

Beyond annotations (which only set readOnlyHint false, etc.), the description discloses two key behaviors: the copy is placed immediately after the original, and every block receives a new id, making the copy independent in the player. This adds meaningful context about side effects and independence. It does not mention permission requirements or potential impacts on referenced resources, but for a duplication tool the primary behavior is well covered.

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 two sentences with no filler. The core action (copy placement) is front-loaded, and the behavioral note about new ids is relevant and concise. Every word earns its place.

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?

The tool is simple with two required parameters and an output schema (not shown but present). The description covers what the tool does and a key behavioral outcome (independence). It does not mention prerequisites like course existence or validation, but those are implicit in the schema and typical for such operations. For a straightforward duplication tool, it is sufficiently complete.

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?

Both parameters (courseId and screenId) have descriptive schema entries with 100% coverage. The description adds no additional parameter-specific meaning beyond what the schema already provides, so the baseline of 3 applies. It correctly implies the scope (course context and screen within it) but does not elaborate on formats or constraints.

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 states a specific verb ('copies') and resource ('a screen'), and specifies placement ('directly after the original'). It also clarifies that the copy gets new block ids, distinguishing it from simply moving or referencing a screen. This clearly separates it from siblings like add_screen (creates from scratch) or update_screen (modifies existing).

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 it (when you need a duplicate of an existing screen), but it does not explicitly state alternatives or exclusions. There is no mention of 'use this instead of add_screen for copies' or any condition where this tool should not be used. The guidance is implied through the verb and placement but lacks explicit routing.

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

export_scormExport a SCORM packageA
Read-onlyIdempotent
Inspect

Builds a SCORM package for a course and returns the .zip base64-encoded. For bulk migration prefer GET /api/v1/courses/:id/scorm, which streams the zip instead. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
trackNoAlso report runs back to Underlayer analytics, keyed to the LMS's own learner id.
localeNoPackage a translated locale instead of the source language.
versionNoDefaults to scorm2004.
courseIdYesId of the course to package.

Output Schema

ParametersJSON Schema
NameRequiredDescription
bytesYesSize of the .zip in bytes.
versionYes
fileNameYesThe package's file name. The .zip itself arrives as an embedded resource.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnlyHint, idempotentHint, destructiveHint), so the bar is lower. The description adds valuable behavioral context: the Scale plan requirement and the fact that the zip is base64-encoded, plus the existence of a streaming alternative. This goes beyond annotations 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/5

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

Two sentences with no wasted words: the main behavior, output format, streaming alternative, and plan requirement are each addressed in a front-loaded, direct manner. The description earns its place without redundancy.

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?

Given the annotations, 100% schema coverage, and an output schema, the description covers all non-obvious facts an agent needs: the plan requirement, the bulk-migration recommendation, and the base64 zip format. Nothing essential is missing for correct 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?

All four parameters are fully documented in the schema (100% coverage), so the baseline of 3 applies. The description adds no parameter-level details beyond the schema, but none are needed since courseId, track, locale, and version already have clear descriptions.

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 the specific verb 'Builds' with the resource 'SCORM package for a course' and clearly states the output format (.zip base64-encoded). This differentiates it from siblings like import_scorm and gives an agent a precise understanding of what the tool does.

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?

The description explicitly provides a when-not condition: for bulk migration, prefer GET /api/v1/courses/:id/scorm, which streams the zip instead. It names the alternative and the reason to choose it, so an agent can correctly route between the two without further inference.

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

generate_courseGenerate a courseAInspect

Starts writing a draft course from a prompt, optionally grounded in a URL. Returns a job id immediately — writing takes tens of seconds — then poll get_generation until status is completed or failed. Requires the Build plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoBCP-47 code for the language to write the course in, e.g. 'en' or 'ar'. Reading direction follows from it. Omit to write in English.
promptYesWhat the course should teach, in plain language (up to 2000 characters).
audienceNoWho the course is for, e.g. 'support agents in their first month' (up to 200 characters).
sourceUrlNoA public web page to ground the course in; its text is read before writing. Omit to write from the prompt alone.
screensTargetNoRoughly how many screens to write, 1 to 20. Omit for about 8.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesThe generation job id. Pass it to get_generation.
statusYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, openWorldHint=true, and idempotentHint=false, covering basic write/network/non-idempotent behavior. The description adds value beyond annotations by disclosing the asynchronous nature ('returns a job id immediately, writing takes tens of seconds'), the plan requirement, and the optional grounding in a URL. These are meaningful behavioral traits that help the agent set expectations. 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.

Conciseness5/5

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

The description is two sentences with no redundancy. The first sentence states the core action and optional grounding; the second immediately covers the async behavior, the required polling step, and the plan prerequisite. It is front-loaded with the most critical information and every clause earns its place.

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?

Given the tool's complexity (async, 5 parameters, output schema present), the description covers the essential operational contract: what it does, that it returns a job id, how to track completion (poll get_generation), and the plan requirement. It does not mention the output schema or list all optional parameters, but those are provided in structured fields. The description is sufficient for an agent to invoke the tool correctly and follow up appropriately.

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%, meaning every parameter already has a thorough description in the input schema. The description adds no parameter-specific information beyond what the schema provides; it only mentions 'optionally grounded in a URL' (which mirrors sourceUrl) and the async behavior. Since the schema carries the parameter documentation burden, a baseline of 3 is 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?

The description clearly states the core action: 'Starts writing a draft course from a prompt, optionally grounded in a URL.' The verb 'starts writing' and the resource 'draft course' make the purpose explicit. While it doesn't explicitly differentiate from the sibling create_course, the asynchronous generation concept is distinct and inferable.

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 provides explicit usage guidance: 'Returns a job id immediately — writing takes tens of seconds — then poll get_generation until status is completed or failed.' This tells the agent exactly how to handle the async flow and names the polling tool. It also mentions the prerequisite 'Requires the Build plan or higher.' It does not explicitly state when to avoid using this tool, but the guidance is clear and actionable.

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

get_certificateGet certificate templateA
Read-onlyIdempotent
Inspect

Fetches one certificate template by id. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe certificate template id, as returned by list_certificates or create_certificate.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe certificate's design: layout, colours, fonts, text and signature settings.
createdAtYes
updatedAtYes
workspaceIdYes

TDQS

A3.8/5.0
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, so the safety profile is clear. The description adds the plan requirement, which is valuable beyond annotations. However, it doesn't describe the return format or error behavior, but with an output schema present, that is less critical. The description does not contradict annotations, and the plan requirement adds 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 a single sentence that states the action and a key prerequisite. Zero waste, and the core purpose is front-loaded. It could not be more concise while still including the plan requirement.

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?

Given that there is an output schema (though not shown in the input), the return value is already defined. The description covers the essential purpose and the one non-obvious requirement (plan level). It does not mention error cases or idempotency, but annotations cover idempotency. For a simple single-parameter tool, this is nearly complete.

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?

The schema covers 100% of the parameter (id) with a clear description: 'as returned by list_certificates or create_certificate'. The tool description does not add additional semantics beyond what the schema provides. Since schema coverage is high, baseline 3 is 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?

The description states a clear verb ('Fetches') and resource ('certificate template by id'), making the purpose obvious. It doesn't explicitly differentiate from sibling tools like get_issued_certificate or list_certificates, but the id-based fetch is distinct enough. A minor gap is not naming the sibling alternative, but the purpose is still clearly stated.

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 mentions the requirement 'Requires the Scale plan or higher', which is a clear usage constraint. It does not explicitly state when NOT to use it or name alternatives, but the id-based fetch implies it's for when you have a specific id, which is implicit. Could be improved by explicitly saying 'use list_certificates to find ids first', but the plan requirement is useful.

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

get_collectionGet collectionA
Read-onlyIdempotent
Inspect

Fetches one collection, including its courses in display order.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
coursesYesThe collection's courses in display order.
createdAtYes
descriptionYes
workspaceIdYes

TDQS

A4.1/5.0
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, so the safety profile is covered by structured data. The description adds that courses are returned in display order, which is a useful behavior beyond the annotations, but it does not disclose errors, absence behavior, or any other operational traits. With annotations carrying the safety burden, this is adequate but not rich.

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

Conciseness5/5

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

One short sentence is front-loaded with the core action ('Fetches one collection') and immediately adds the most decision-relevant detail ('including its courses in display order'). There is no filler, redundancy, or unnecessary context.

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 simple get-by-id tool with one required parameter, full schema coverage, a comprehensive annotation set, and an output schema, the description covers everything an agent needs to select and invoke it correctly. Return content is already captured by the output schema, so the description need not enumerate response fields.

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%, and the id parameter is already well documented as 'The collection id, as returned by list_collections or create_collection.' The description adds no parameter meaning beyond the schema, 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/5

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

Description states a specific verb ('Fetches') and resource ('one collection'), and adds the distinctive detail that courses are included 'in display order.' This clearly distinguishes get_collection from list_collections (all collections) and from create/update/delete mutations without needing to inspect schemas.

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 singular 'one collection' plus the id parameter makes the intended use clear: fetching a specific existing collection when its id is known. It does not explicitly say 'use list_collections to browse all collections,' but the contrast is strongly implied by the sibling names and the description's singular scope.

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

get_completionGet completionA
Read-onlyIdempotent
Inspect

Fetches one learner run by id, including the answers they gave, keyed by block id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe completion id, as returned by list_completions.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
scoreYes
localeYes
passedYes
sourceYes
statusYes
answersYes
attemptYes
courseIdYes
startedAtYes
identityIdYes
lastSeenAtYes
completedAtYes
contentHashYes
lastScreenIdYes
progressPercentYes
timeSpentSecondsYes
identityExternalIdYes
passedAtCompletionYes
passingScoreAtCompletionYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable context by specifying that the response includes the learner's answers keyed by block id, which is beyond what annotations provide. It does not contradict annotations and gives useful detail about the return content.

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, concise sentence that front-loads the action and resource. It contains no extraneous words and every phrase adds value, clearly stating what is fetched and what it includes.

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 simple get-by-id tool with an output schema, the description is complete. It tells the agent exactly what is returned (the learner run including answers keyed by block id) and the only required parameter is documented in the schema. There are no 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.

Parameters3/5

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

Schema description coverage is 100% because the sole parameter 'id' has a description already stating it is the completion id from list_completions. The tool description does not add any additional parameter semantics beyond that, 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/5

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

The description clearly states the tool fetches one learner run (completion) by id, and specifies that it includes the answers keyed by block id. This is a specific verb and resource, and it distinguishes from siblings like list_completions (which lists) and get_generation (which gets generation status). The purpose is unambiguous.

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 usage when you have a specific completion id, and the parameter description references list_completions as the source of ids, providing clear context. However, it does not explicitly state when to use this tool over alternatives or mention any exclusions, so 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.

get_courseGet courseA
Read-onlyIdempotent
Inspect

Fetches one course by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe course id, as returned by list_courses or create_course.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
statusYes
screensYes
themeIdYes
createdAtYes
directionYes
updatedAtYes
navigationYes
sourceKindYes
contentHashYes
customFontsYes
workspaceIdYes
passingScoreYes
quizFeedbackYes
certificateIdYes

TDQS

A3.6/5.0
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, so the safety profile is fully covered. The description adds no behavioral context beyond 'fetches one course by id' – it doesn't mention 404 behavior, whether the course includes nested content, or any rate limits. With annotations covering the key traits, 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/5

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

One short sentence, front-loaded with the verb and resource. Zero wasted words. The description is appropriately minimal for a simple getter.

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 simple single-resource getter with one fully-documented parameter, an output schema, and annotations covering safety/idempotency, the description is nearly complete. It could mention what happens when the id doesn't exist (404 vs empty), but that's a minor gap given the output schema exists.

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% – the id parameter is fully described in the schema ('The course id, as returned by list_courses or create_course'). The description adds no additional parameter meaning beyond what the schema provides. Baseline 3 is correct.

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 'Fetches one course by id' clearly states the verb (fetches), the resource (one course), and the identifier (id). It is distinct from list_courses (which fetches multiple) and update_course/delete_course (which mutate). However, it doesn't explicitly differentiate itself from other get_* siblings, though the resource name makes that obvious.

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 usage: call when you need a single course by id. It doesn't explicitly state when not to use it or mention alternatives like list_courses for multiple courses. The context is clear enough for a simple getter, but no explicit guidance is given.

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

get_generationGet generation jobA
Read-onlyIdempotent
Inspect

Fetches a generation job. Poll until status is completed (with a courseId) or failed (with an error). Requires the Build plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe generation job id returned by generate_course.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
errorYesWhy the job failed, once status is failed.
promptYes
statusYesqueued, processing, completed or failed.
audienceYes
courseIdYesThe draft course written, once status is completed.
createdAtYes
sourceUrlYes
completedAtYes
screensTargetYesHow many screens were asked for, if any.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly, idempotent, and non-destructive behavior, so the description only needs to add contextual behavior. It does: it reveals the polling contract and the terminal statuses (completed with courseId, failed with error), plus the plan requirement. This goes beyond what annotations provide, without contradiction.

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 terse sentences: the first states the core action, the second packs the polling behavior and a requirement. Every word earns its place, and the most critical information (what to poll for) is front-loaded. No redundancy or 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?

The tool is simple (one parameter) and has an output schema, so the description needn't detail return values. It covers the essential usage pattern and requirements. The only minor gap is that it doesn't mention timeout or retry behavior, but that's not typically required for such a poll-and-check tool; otherwise it is complete.

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?

There is only one parameter, 'id', and the schema already documents it as 'The generation job id returned by generate_course' at 100% coverage. The description does not add any additional meaning about the parameter itself, 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/5

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

The description states a specific verb ('Fetches') and resource ('generation job'), clearly distinguishing it from the many other get_* tools like get_course or get_theme. The polling semantics also make it unambiguous that this is the status-check tool for asynchronous generation.

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 explains the intended usage pattern: poll until 'completed' or 'failed', which implicitly tells when to call it (after generate_course) and how to interpret results. It also notes the plan requirement, a key prerequisite. However, it does not explicitly name an alternative or state when not to use it, so it misses the top tier.

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

get_identityGet identityA
Read-onlyIdempotent
Inspect

Fetches one identity by id.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesUnderlayer's id for the identity (not your externalId), as returned by list_identities or upsert_identity.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
emailYes
createdAtYes
externalIdYes
workspaceIdYes

TDQS

A3.6/5.0
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, fully covering the safety profile. The description adds no extra behavioral context (e.g., error behavior, return structure, or side effects) but is consistent with the annotations, so a 3 is appropriate given the lowered 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, direct sentence that front-loads the action and resource. It contains no filler or redundant detail, earning its place perfectly for a simple getter.

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 tool with output schema and safety annotations present, the description is complete enough. It could optionally mention the return type or require an existing id, but the output schema and schema description already cover those details, leaving only minor gaps.

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%, and the id parameter's description already explains that it is Underlayer's id, not externalId, and where to obtain it. The tool description merely restates that the tool fetches by id, adding no meaningful semantic value 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?

The description 'Fetches one identity by id' uses a specific verb and resource, clearly distinguishing this singular getter from siblings like list_identities (plural), upsert_identity, and delete_identity. The title 'Get identity' reinforces the purpose, leaving no ambiguity about what the tool does.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as list_identities or get_workspace_info. There are no stated selection criteria, exclusions, or prerequisites, leaving the agent to infer usage from the name and parameters alone.

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

get_issued_certificateGet issued certificateA
Read-onlyIdempotent
Inspect

Looks up one issued certificate by the serial printed on it. Case and dashes don't matter. Scoped to this workspace — it answers whether you issued this, not whether it is real in general.

ParametersJSON Schema
NameRequiredDescriptionDefault
serialYesThe serial printed on the certificate, e.g. UL-34YT-T22D-M7BQ. Case and dashes are ignored.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
scoreYes
localeYes
serialYes
courseIdYes
issuedAtYes
identityIdYes
identityExternalIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond those annotations: case and dashes are ignored, and the result is scoped to this workspace's issuance status. 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.

Conciseness5/5

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

Three short sentences, each carrying distinct value: what it does, input normalization, and scope/interpretation. No filler or redundancy.

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 simple single-parameter lookup tool with an output schema and strong annotations, the description covers the essential operational details: lookup key, input flexibility, and workspace scope. Nothing critical is missing for an agent to call it correctly.

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% and the only parameter is already well documented with an example and normalization rule. The description reinforces the same 'case and dashes ignored' detail but adds little beyond the schema, so the baseline 3 is appropriate.

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 ('looks up') and resource ('one issued certificate') with a clear lookup key (serial printed on it). It also distinguishes itself from general certificate lookups by emphasizing workspace scoping, so an agent can tell it apart from get_certificate and list_issued_certificates.

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 for when to use it: when you need one issued certificate by serial and want to know whether this workspace issued it. It explicitly sets an exclusion ('not whether it is real in general'), though it does not name sibling alternatives directly.

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

get_overviewGet workspace overviewA
Read-onlyIdempotent
Inspect

Counts across the workspace: courses by status, learners, runs in progress and completed, and certificates issued. The numbers behind the dashboard's overview page.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
coursesYes
identitiesYesLearners known to the workspace.
collectionsYes
completionsYes
certificatesIssuedYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already convey read-only, idempotent, non-destructive behavior, lowering the description's burden. The description adds useful context about what metrics are returned, but it does not disclose behavioral details such as aggregation timing, data freshness, or response shape. This is adequate but not rich.

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

Conciseness5/5

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

The description is two sentences with no filler. The first sentence compactly enumerates the counted categories, and the second adds valuable context about the dashboard provenance without redundant 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 zero-parameter, read-only metric tool with an output schema available, the description gives a complete mental model: what is counted, across what scope, and where the numbers come from. Nothing needed to invoke it 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 and the input schema fully covers that surface (100% coverage). With no parameters to explain, the description does not need to add parameter-level semantics; the baseline of 4 is 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?

The description opens with a specific verb ('Counts') and identifies the resource and metric categories: courses by status, learners, runs in progress/completed, and certificates issued. It clearly describes what the tool does, though it does not explicitly differentiate itself from similar siblings like get_usage or get_workspace_info.

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 phrase 'the numbers behind the dashboard's overview page' provides clear context for when this tool is relevant. It implies the tool is for overall workspace counts/statistics, but it does not mention when not to use it or name alternatives.

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

get_themeGet themeA
Read-onlyIdempotent
Inspect

Fetches one theme by id. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe theme id, as returned by list_themes or create_theme.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe theme's design tokens: concept, palette, colours, fonts, radii, spacing.
createdAtYes
updatedAtYes
customFontsYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already establish read-only, idempotent, non-destructive behavior; the description adds the meaningful access prerequisite ('Scale plan or higher') not present in annotations or schema. It does not describe error cases or return format, but output schema exists and safety profile is covered, so the added context is sufficient.

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 short sentences with no filler; the core behavior is front-loaded and the plan requirement is a distinct, necessary detail. Every clause earns its place.

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 one-parameter read-only getter, the combination of description, full schema, output schema, and annotations covers what an agent needs: what to pass, where the id comes from, the access requirement, and safety. No significant gap remains.

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?

The sole parameter id is fully documented in the schema (100% coverage), including where the value comes from (list_themes/create_theme). The description itself adds no parameter detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb ('Fetches'), resource ('theme'), and selection criterion ('by id'), which separates it from list_themes (all themes) and mutation tools like create_theme/update_theme. The title is generic, but the description disambiguates it.

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?

Gives a clear usage context: retrieve a single theme when an id is available, and only on Scale plan or higher. It does not explicitly name alternatives like list_themes or update_theme, but the singular 'by id' and plan constraint make selection straightforward.

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

get_translationGet translationA
Read-onlyIdempotent
Inspect

Fetches one locale's translated fields. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course the translation belongs to.
translationIdYesThe translation's id (not its locale code), as returned by list_translations or create_translation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
localeYes
contentYesTranslated strings, keyed by the source field's path.
courseIdYes
createdAtYes
updatedAtYes

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already cover the read-only, idempotent, non-destructive nature of the call, so the description does not need to restate those. It does add one useful behavioral detail beyond annotations: the Scale plan requirement. However, it does not disclose other behavioral traits such as error cases or response specifics, so it adds value but not rich 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 two short, front-loaded sentences. The core action comes first, and the plan requirement is a necessary gate. Every word earns its place; there is no redundant or vague phrasing.

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 two-parameter read operation with full schema documentation and a rich output schema, the description plus input schema gives an agent everything needed to invoke it correctly. The plan prerequisite is present, and the safety profile is already captured by annotations.

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 courseId and translationId are already documented in the input schema, including the useful note that translationId is not a locale code. The description contributes no additional parameter-level semantics, so the baseline of 3 is appropriate.

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 states a specific action verb ('Fetches'), a concrete resource ('one locale's translated fields'), and the singular scope. This clearly distinguishes it from sibling tools like list_translations, and it is not merely a restatement of the name.

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 this tool: to fetch a single locale's translated fields. It also adds a meaningful prerequisite ('Scale plan or higher'), but it does not explicitly name alternatives such as list_translations for fetching all locales, nor does it state when not to use this tool.

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

get_usageGet plan usageA
Read-onlyIdempotent
Inspect

This calendar month's course views against the plan's allowance, plus what any excess costs at the published rate. Null limit means the plan is uncapped.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
overYesViews beyond the allowance. Zero when inside it.
planYes
usedYesBillable course views so far this calendar month.
limitYesViews the plan includes each month. Null means the plan is uncapped.
periodEndYesEnd of this month's usage period (exclusive), ISO 8601 in UTC.
periodStartYesStart of this month's usage period, ISO 8601 in UTC.
overageCentsYesWhat the extra views cost at the published rate, in cents.
ratePer1kOverageYesPublished price in dollars per 1,000 extra views, or null where extra views are not sold.

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, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context beyond annotations: it specifies the time window ('this calendar month') and explains the null limit semantics ('Null limit means the plan is uncapped'). This helps the agent interpret the data correctly, though it doesn't describe response structure—but the output schema is empty, so no additional detail is expected.

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 redundancy. The main information (what it returns) is front-loaded, and the second sentence adds an important edge-case clarification. Every word earns its place—no fluff or repetition.

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 no-parameter, read-only tool with an empty output schema, the description is complete. It states the time period, the metric (course views), the comparison to allowance, and the excess cost rate. It also handles the null limit edge case. An agent knows exactly what to expect and how to interpret the result.

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 no parameters, so the description doesn't need to explain any. Per the baseline for zero parameters, a score of 4 is appropriate since the description provides relevant context (what data is returned) but doesn't need to add parameter-specific semantics. It correctly avoids inventing parameters.

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 clearly states what the tool does: returns the current calendar month's course views against the plan's allowance and any excess cost at the published rate. It distinguishes itself from other get_* tools by specifying the exact resource (plan usage) and the specific metrics (views, allowance, excess cost). The 'null limit' clarification adds precision.

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 implicitly indicates when to use it—whenever you need plan usage for the current month. It provides clear context (this calendar month, course views, excess cost) but does not explicitly mention alternatives or when not to use it. Since it's a get_* for usage, the purpose is obvious, but explicit exclusions would elevate it.

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

get_webhookGet webhookA
Read-onlyIdempotent
Inspect

Fetches one webhook endpoint by id (no secret included).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook endpoint id, as returned by list_webhooks or create_webhook.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
nameYes
isActiveYes
createdAtYes
eventTypesYes
workspaceIdYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare the operation read-only, idempotent, and non-destructive. The description adds value beyond those annotations by disclosing that the response excludes the webhook secret, which is a meaningful behavioral detail an agent should know before invoking the 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?

A single, front-loaded sentence conveys the purpose and a key limitation with no wasted words. Every element earns its place, and the structure is immediately scannable.

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 simple get-by-id tool with a full input schema, a complete output schema, and comprehensive read-only/idempotent annotations, the description covers the only additional caveat (no secret). Nothing an agent needs to correctly invoke the tool is missing.

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 'id' parameter is fully documented in the schema itself. The description's 'by id' adds no additional meaning beyond the schema, so the baseline score of 3 is appropriate.

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 clearly states a specific action ('Fetches one webhook endpoint by id') and resource, distinguishing it from list_webhooks (which lists many) and create/update/delete operations. The parenthetical 'no secret included' adds a useful, differentiating characteristic.

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 you need a single webhook endpoint identified by id. However, it does not explicitly contrast this with list_webhooks for retrieving all endpoints or mention alternative tools for related operations, so the guidance is only 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.

get_workspace_infoGet workspace infoA
Read-onlyIdempotent
Inspect

Confirms which workspace and plan this connection is scoped to.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
planYesThe workspace's plan: none, sandbox, build, scale or partner.
workspaceIdYes
workspaceNameYes

TDQS

A3.7/5.0
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, so the safety profile is fully covered. The description adds the behavioral context that it confirms scope, which is useful but not extensive. It doesn't describe return format or potential errors, but with annotations covering safety, 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/5

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

One sentence, zero waste, and the key information (confirms workspace and plan) 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.

Completeness4/5

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

For a zero-parameter read-only tool with an output schema and full annotation coverage, the description is nearly complete. It could mention what specific details are returned (e.g., workspace ID, plan name), but the output schema likely covers that. The description is sufficient for an agent to call it 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 has zero parameters, so the schema is trivially complete. The description adds meaning by explaining what the tool returns conceptually (workspace and plan scope), which is valuable since there are no parameters to document. Baseline 4 for zero params is 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?

The description clearly states the tool's function: confirming the workspace and plan scope of the connection. It uses a specific verb ('confirms') and resource ('workspace and plan'), which is clear. It doesn't explicitly differentiate from siblings, but the unique scope (workspace/plan info) makes it distinguishable from the listed get_* tools.

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 usage context: use when you need to know the workspace/plan scope. It doesn't explicitly state when not to use it or name alternatives, but given the tool's unique purpose and zero parameters, the implied usage is adequate. No explicit exclusions or alternatives are provided.

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

import_scormImport a SCORM packageAInspect

Creates a draft course from a base64-encoded SCORM .zip. A package Underlayer exported is restored exactly; one from another tool arrives salvaged — outline, readable text, and any quiz data that could be read — with warnings saying what didn't come across. For bulk migration prefer POST /api/v1/courses/import/scorm. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOverrides the title the package declares.
zipBase64YesThe .zip package, base64-encoded.

Output Schema

ParametersJSON Schema
NameRequiredDescription
kindYesroundtrip: an Underlayer package restored exactly. salvaged: another tool's package, partly recovered.
courseYes
warningsYesWhat didn't come across from the package. Empty for a roundtrip.

TDQS

A4.7/5.0
Behavior5/5

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

The annotations already flag this as a non-read, non-idempotent mutation, and the description adds meaningful behavioral context: it creates a draft, restores Underlayer exports exactly, salvages other packages with warnings about missing data. It also discloses the plan requirement. 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.

Conciseness5/5

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

Three sentences, all information-dense: main function, import-fidelity behavior, routing alternative, and plan requirement. No filler or repetition of the tool name.

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

Completeness5/5

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

For a two-parameter import tool with an output schema, the description covers behavior, warnings, prerequisite, and the alternative endpoint. The presence of an output schema means the response shape does not need to be restated, so nothing essential is missing.

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 both parameters (zipBase64 and title). The description reinforces that the zip is base64-encoded and that the result is a draft, but it does not add meaning 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?

The description opens with a specific verb and resource: 'Creates a draft course from a base64-encoded SCORM .zip.' It also distinguishes this tool from the bulk import endpoint and clarifies the provenance-dependent behavior (exact restore vs salvaged import), so an agent can tell exactly what this tool does.

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?

It gives an explicit routing rule: for bulk migration use POST /api/v1/courses/import/scorm, which implies this tool is for single imports. It also states a prerequisite ('Requires the Scale plan or higher'), making when and whether to call this tool clear.

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

invite_memberInvite a memberAInspect

Invites someone to the workspace by email. They receive an email and join by accepting it — this does not add them directly. Only admin and member can be granted; owner is set by provisioning alone.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesThe role they get on accepting: 'admin' or 'member'. Owner can't be granted by invite.
emailYesEmail address to send the invite to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
roleYes
emailYesThe address invited, trimmed and lower-cased.
statusYes
inviteIdYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, idempotentHint=false, and destructiveHint=false, so this is a write operation. The description adds valuable behavioral context beyond annotations: the invite is not a direct add (async acceptance), and role limitations are explicitly stated. It does not contradict the annotations and enriches the agent's understanding of the side effects and constraints.

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 zero waste. The main action is front-loaded, followed by the crucial behavioral caveat (acceptance required) and a role constraint. Every sentence earns its place with distinct, non-redundant information.

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 simple tool with two parameters and an output schema present, the description covers the essential aspects: the invitation process, the email acceptance flow, and role limitations. It doesn't mention response details or potential errors, but the presence of an output schema and the tool's low complexity make these omissions acceptable. The description is sufficiently complete for an agent to invoke correctly.

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 have descriptions. The role parameter's description already includes the constraint that owner can't be granted, which is also repeated in the tool description. The email description is standard. Since the schema fully documents parameters, the description adds no significant new semantic value, so a baseline score of 3 is appropriate.

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 opens with a specific verb+resource: 'Invites someone to the workspace by email.' It clearly distinguishes this from a direct add by stating 'this does not add them directly' and specifies the role limitation. This differentiates it from related membership tools like 'remove_member' and 'update_member_role' without ambiguity.

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 provides clear context on how the invite works (email, acceptance required) and the constraint that only admin/member roles can be granted, with owner excluded. However, it does not explicitly name alternative tools or state when not to use this tool versus others like 'update_member_role' or 'cancel_invite'. The context is clear but no explicit exclusions or alternatives are given.

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

list_api_keysList API keysA
Read-onlyIdempotent
Inspect

Every key ever issued for this workspace, with its prefix, last use and whether it is revoked. Raw keys are hashed at rest and are never returned here — not even the one you are connected with. Keys are created only from the dashboard's API Keys page; this connection can list and revoke them, not mint them.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, the description adds critical security behavior: raw keys are hashed at rest and never returned, not even the caller's own key. It also clarifies the administrative boundary that this connection can list and revoke but not create keys.

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 focused sentences, no fluff or repetition. The purpose is stated first, followed by the security disclosure and the creation-context constraint; every sentence contributes meaning.

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 no-input tool with an output schema and rich annotations, the description fully covers the essential semantics: scope, returned fields, security behavior, and creation limitations. No additional information is needed for an agent to call it 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, so the description has no parameter semantics to explain. Baseline for a zero-parameter tool is 4, and the description appropriately focuses on what the list returns rather than on any inputs.

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 states a specific verb and resource: list all API keys ever issued for the workspace, and names the returned fields (prefix, last use, revoked status). It also explicitly distinguishes itself from key minting, which is not possible through this 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?

The description makes clear this is the read-only listing operation and that key creation happens only on the dashboard, not here. It implies revocation is available through the same connection, though it does not explicitly name the revoke_api_key sibling as the alternative.

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

list_audit_eventsList audit eventsA
Read-onlyIdempotent
Inspect

The workspace's security and compliance trail, newest first — who did what and when. Deliberately narrow: routine reversible actions (editing block text, reordering a collection) aren't logged, so this stays a trail rather than an activity feed.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many events to return, newest first. Defaults to 50.
offsetNoHow many events to skip, for paging. Defaults to 0.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesHow many events the workspace has in all, across every page.
eventsYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds useful behavioral context beyond this: events are ordered newest first, and the trail is deliberately narrow by excluding routine reversible actions. This helps an agent reason about what results to expect.

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 compact and front-loaded: the primary purpose and ordering are stated first, and the deliberate scoping limitation follows in a second sentence. Every sentence earns its place without unnecessary detail.

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 simple read-only listing tool with two optional paging parameters, an output schema, and full schema coverage, the description is complete. It covers what the tool returns, ordering, and the important scoping limitation, so an agent has everything needed to select and invoke it correctly.

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%, with limit and offset fully described including defaults and ordering. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 is appropriate.

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 clearly states the tool lists the workspace's security and compliance trail, newest first, covering who did what and when. It also proactively distinguishes itself from an activity feed by noting which routine reversible actions are excluded, making it easy to tell this tool apart from other list_* 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 description gives clear usage context: this is the security/compliance trail, not a general activity feed. It explains that routine reversible actions aren't logged, which sets expectations for when audit events may be absent, though it doesn't name alternative tools or explicitly say 'use this when...'.

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

list_block_typesList block typesA
Read-onlyIdempotent
Inspect

Every block type a screen can contain, with the fields each one reads. Call this before writing screens rather than guessing field names — a block with the wrong keys saves cleanly and then renders empty.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
notesYes
blocksYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint false, so the safety profile is covered. The description adds valuable behavioral context by warning that a block with wrong keys 'saves cleanly and then renders empty,' which is not evident from annotations. This helps the agent understand the risk of guessing and reinforces the need to call this 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 two sentences, front-loaded with the core purpose and a clear directive. Every sentence earns its place: the first states the function, the second explains when to use it and why. There is no fluff or redundancy.

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 no-parameter, read-only listing tool with an output schema present, the description is complete. It tells the agent what to expect (block types and their fields), why to use it (avoid guessing), and the consequence of misuse. The presence of an output schema covers the return format details, so the description does not need to elaborate further.

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 the baseline is 4 as per the rubric. The description does not need to explain parameters since there are none. It does mention 'fields each one reads' which hints at output content, but that is not parameter-related. The schema coverage is 100% (trivially), so the description adds no parameter semantics but also doesn't need to.

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 states exactly what the tool does: returns every block type a screen can contain, with the fields each one reads. It is specific with a verb ('list') and resource ('block types'), and it distinguishes itself from sibling tools like list_screen_templates by focusing on block types and their fields. The phrase 'Call this before writing screens' clarifies its role in the workflow.

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 explicit guidance on when to use the tool: 'Call this before writing screens rather than guessing field names.' It provides a clear use case and even hints at the consequence of misuse (rendering empty). It does not explicitly name alternative tools or state when not to use it, but the context is strong enough for an agent to understand when to invoke it.

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

list_certificatesList certificate templatesA
Read-onlyIdempotent
Inspect

Lists certificate templates — the design of the PDF a learner gets on passing: issuer, logo, wording, colors, border and orientation. Not the certificates issued to learners; those are list_issued_certificates. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already declare the operation read-only and idempotent, and the description adds beyond that by disclosing an access requirement ('Requires the Scale plan or higher') and clarifying the scope of returned data. This satisfies the bar of adding behavioral/operational context beyond the structured 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 each earn their place: the first defines the resource, the second eliminates the most likely confusion with a sibling tool, and the third states a binding prerequisite. It is front-loaded and free of 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?

For a no-parameter, read-only, idempotent list tool with an output schema available, the description covers everything an agent needs: what is returned, how it differs from the closest sibling, and the required plan level. Nothing essential 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?

There are zero parameters, so the description has no parameter semantics to add. The schema coverage is 100% because the schema is empty, meaning there is nothing undocumented. The baseline of 4 for a zero-parameter tool applies; the description correctly focuses on the meaning of the returned resource 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 states a specific verb and resource: 'Lists certificate templates' and immediately clarifies what a certificate template is (the design of the PDF a learner gets on passing). It explicitly distinguishes this from issued certificates and names the sibling tool list_issued_certificates, so an agent can reliably select the correct tool.

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?

It gives explicit when-to-use guidance: use this tool to list templates, not learner-issued certificates, pointing directly to list_issued_certificates as the alternative. It also provides a prerequisite: 'Requires the Scale plan or higher,' which is necessary context for selecting or attempting the call.

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

list_collectionsList collectionsA
Read-onlyIdempotent
Inspect

Lists every collection in the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A4.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds the scope 'every collection', indicating no filtering, which is useful. It does not mention pagination or performance, but for a read-only list operation with annotations, this is adequate. It adds some context beyond annotations but is minimal.

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 redundancy. It states the core functionality immediately and front-loads the key information. No wasted words.

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?

The tool has no parameters and an output schema is provided. The description is sufficient for an agent to know that calling it returns all collections in the workspace. It doesn't specify pagination, but for a simple list operation with an output schema, this is 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?

There are zero parameters, so the schema is fully covered. The description adds no parameter information because none exist. Per rubric, 0 parameters earns a baseline of 4.

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 clearly states the function: listing every collection in the workspace. The verb 'lists' and resource 'collections' are specific, and the scope 'every' distinguishes it from get_collection (which retrieves a specific collection) and create_collection. It is unambiguous.

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 implies usage when the agent needs to see all collections. It does not explicitly mention alternatives or when not to use it (e.g., when a specific collection is needed), but the context of sibling tools makes the distinction clear. It lacks explicit exclusions but provides clear context.

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

list_completionsList completionsA
Read-onlyIdempotent
Inspect

Lists learner runs — one per learner per course, in progress or completed, with score, pass/fail and how far through they are. Filter by course, learner or status.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many runs to return, newest first. Defaults to 50.
offsetNoHow many runs to skip, for paging. Defaults to 0.
statusNoOnly runs in this state: 'in_progress' or 'completed'. Omit for both.
courseIdNoOnly runs of this course. Omit for every course.
identityIdNoOnly runs by this learner, by Underlayer identity id. Omit for every learner.
identityExternalIdNoThe customer's own id for the learner, if you don't have ours.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesHow many runs match the filters in all, across every page.
completionsYes

TDQS

A3.6/5.0
Behavior3/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds some useful behavioral context such as the one-run-per-learner-per-course constraint and the included result fields, but it does not go beyond that.

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 two tight sentences with the core behavior front-loaded and no filler. Every clause adds useful information about scope, output content, or filtering.

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?

Given the output schema, annotations, and fully documented parameters, the description is largely complete for invoking this read-only list tool. It could be more complete by pointing to get_completion as the singular alternative, but nothing essential to calling it is missing.

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 parameters are already well documented. The description only restates filtering by course, learner, or status without adding new parameter-level meaning, so the baseline of 3 is 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?

The description clearly states the verb and resource: it lists learner runs, and adds meaningful scope by saying 'one per learner per course' and which fields are included. It is clear enough to differentiate from get_completion, though it does not explicitly name any sibling tool.

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 it — when you want learner runs with score, pass/fail, and progress — and mentions filtering by course, learner, or status. However, it does not explicitly say when to prefer this over get_completion or when not to use it.

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

list_coursesList coursesA
Read-onlyIdempotent
Inspect

Lists every course in the workspace, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the operation read-only, idempotent, and non-destructive, so the safety profile is covered. The description adds the 'newest first' ordering, a useful behavioral detail, but does not mention pagination or whether archived/draft courses are included.

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 communicates the essential scope and ordering with no filler. Every word earns its place.

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 no-parameter, read-only listing operation with an output schema available, the description provides all invocation-relevant information: what is listed, the scope, and the ordering. Nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

There are no parameters, so the input schema already fully defines the call surface. No parameter documentation is needed, and the baseline of 4 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?

The description states a specific verb ('lists'), a clear resource ('every course in the workspace'), and an ordering ('newest first'). It is easy to distinguish from get_course, which fetches a single course, and from other list_* tools.

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 use when an agent needs the complete set of courses rather than a single course. It does not explicitly name alternatives or state when not to use this tool, so clear exclusions are missing.

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

list_identitiesList identitiesA
Read-onlyIdempotent
Inspect

Lists learners, newest first. Takes limit (default 50, no maximum), offset, and search — which matches name, email or external id.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many identities to return. Defaults to 50.
offsetNoHow many identities to skip, for paging. Defaults to 0.
searchNoCase-insensitive text matched against name, email or external id. Omit to list everyone.

Output Schema

ParametersJSON Schema
NameRequiredDescription
identitiesYes
paginationYesWhere this page sits: the limit and offset applied, the total and whether more follow.

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare this as read-only and idempotent. The description adds meaningful behavioral details beyond annotations: newest-first ordering, default limit of 50, no practical maximum, and case-insensitive search over name, email, or external id.

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 tight sentence front-loads the core behavior, then packs defaults, offset, and search behavior with zero filler. Every clause earns its place.

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 an output schema present and annotations covering safety, the description supplies the remaining needed context: ordering, pagination defaults, and search scope. 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.

Parameters3/5

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

Schema coverage is 100%, so the schema already documents all three parameters. The description mostly restates schema content, only adding 'no maximum' and the newest-first ordering. This is useful but doesn't substantially extend the parameter documentation.

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 states a specific verb ('Lists') and resource ('learners'), plus an ordering guarantee ('newest first'). This clearly distinguishes it from singular tools like get_identity and from related list tools like list_members, which target a different concept.

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 listing context with pagination and search semantics, so an agent knows this is the tool for pageable learner enumeration. It doesn't explicitly name alternatives like get_identity or list_members, but for a simple list tool the context is sufficient and no exclusion is needed.

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

list_issued_certificatesList issued certificatesA
Read-onlyIdempotent
Inspect

Lists certificates this workspace has actually issued, with the public serial printed on each one. Distinct from list_certificates, which lists certificate designs.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoHow many certificates to return, newest first. Defaults to 50.
offsetNoHow many certificates to skip, for paging. Defaults to 0.
courseIdNoOnly certificates issued for this course. Omit for every course.
identityIdNoOnly certificates issued to this learner, by Underlayer identity id. Omit for every learner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
totalYesHow many issued certificates match the filters in all, across every page.
certificatesYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds genuine behavioral detail beyond the annotations: results are limited to actually issued certificates and include the public serial. This enriches what the agent knows about the tool's behavior without contradicting 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?

Two sentences with no filler. The core purpose and the scope qualifier ('actually issued') come first, and the sibling distinction is packed into the second sentence. Every phrase earns its place.

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 read-only list tool with a full output schema and all parameters documented, this description is complete. The sibling distinction removes ambiguity, and there are no missing prerequisites or behavioral caveats an agent would need to call it correctly.

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% – every parameter has a meaningful description, so the structured data already explains limit, offset, courseId, and identityId. The description doesn't add parameter-specific detail, but it doesn't need to; baseline 3 is appropriate when the schema carries the burden.

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 states a specific verb ('Lists') and resource ('certificates this workspace has actually issued'), and adds a distinguishing detail ('with the public serial printed on each one'). It also explicitly contrasts with list_certificates, making it immediately clear what this tool does and does not do.

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?

The description explicitly names the closely related sibling (list_certificates) and explains the distinction: issued certificates vs certificate designs. This gives an agent clear routing guidance without needing to inspect either schema.

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

list_membersList workspace membersA
Read-onlyIdempotent
Inspect

Everyone in the workspace with their role, plus any invites still pending.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
membersYes
pendingInvitesYes

TDQS

A3.7/5.0
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, so the safety profile is fully covered. The description adds the behavioral detail that pending invites are included, which is useful context beyond the annotations. It doesn't mention pagination, ordering, or whether the response includes only active members vs all, but with annotations covering safety, 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/5

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

One sentence, 12 words, front-loaded with the resource ('Everyone in the workspace') and immediately adds the distinguishing detail ('plus any invites still pending'). Zero waste, every word earns its place.

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 zero-parameter read-only list tool with an output schema present, the description is nearly complete. It tells the agent what the list contains (members, roles, pending invites). The only minor gap is not mentioning whether the list is paginated or ordered, but the output schema likely covers return structure. Given the tool's simplicity, this is adequate.

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 the schema is trivially complete (100% coverage). The description adds meaning by specifying what the returned list contains (members with roles and pending invites), which is the only semantic content needed. Baseline 4 for zero-param tools is 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?

The description clearly states the tool lists workspace members with their roles and pending invites. It uses a specific verb ('list') and resource ('workspace members'), and the mention of pending invites distinguishes it from a plain member list. However, it doesn't explicitly differentiate from sibling tools like get_workspace_info or list_identities, though the resource is clear enough.

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 usage: call this when you need to see who is in the workspace and their roles, including pending invites. It doesn't explicitly state when not to use it or name alternatives like list_identities or get_workspace_info, but the context of 'workspace members' vs 'identities' provides some implicit guidance. No explicit exclusions or alternative routing.

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

list_screen_templatesList screen templatesA
Read-onlyIdempotent
Inspect

Ready-made screen layouts, by family: present, interact, assess. Pass a key to add_screen to start from one. Templates carry structure, not copy — every block arrives empty.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
blankYesThe key for a blank screen.
templatesYes

TDQS

A4.1/5.0
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, so the safety profile is covered. The description adds behavioral value by stating that templates are structure not copy and that every block arrives empty—an important expectation for the agent. It doesn't describe output formatting, but the output schema and annotations lower that burden.

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: core definition first, then usage pointer to add_screen, then the essential behavioral caveat about empty blocks. There is no filler, repetition, or irrelevant detail—each sentence earns its place.

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 zero-parameter list endpoint, the description covers what templates are, how they are grouped, how to use a returned key, and their empty-content trait. The output schema covers return structure. The only minor gap is that it doesn't explicitly say 'returns a list,' but the title and overall phrasing make that clear.

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 and schema coverage is 100%, so there is no parameter burden for the description to carry. The baseline for zero-parameter tools is 4, and the description adds no parameter-specific detail because none is needed.

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 identifies ready-made screen layouts organized by family (present, interact, assess), clearly naming the resource and its structure. It doesn't explicitly use a verb like 'lists' or 'returns,' but the title plus 'Ready-made screen layouts' makes the purpose evident. It also distinguishes from siblings like add_screen by noting the keys are meant for that 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?

It gives explicit downstream guidance: 'Pass a key to add_screen to start from one,' which tells the agent how to use the results. The family groupings also help the agent pick a template category. It doesn't name alternatives or exclusions, but for a simple list tool the 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.

list_themesList themesA
Read-onlyIdempotent
Inspect

Lists every theme in the workspace. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A3.7/5.0
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, signaling a safe read operation. The description adds the requirement of the Scale plan or higher, which is valuable behavioral context beyond annotations. No contradictions 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.

Conciseness5/5

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

The description is a single, succinct sentence that front-loads the core action ('Lists every theme in the workspace') and adds the critical requirement ('Requires the Scale plan or higher') immediately. No wasted words.

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?

Given the tool's simplicity (zero parameters, no nested objects, read-only annotations), the description is largely complete. However, it doesn't clarify whether the result is paginated or what fields each theme includes, but the output schema likely covers that. Overall, it's adequate.

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?

There are zero parameters, so the description has no need to explain parameters. The schema is empty, so the description's contribution is minimal; however, since there are no params, the description fully covers what's needed. Baseline for 0 params is 4.

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 clearly states 'lists every theme in the workspace,' with a specific verb and resource, and the scope is clear. It distinguishes from sibling 'get_theme' which retrieves a single theme, though it doesn't explicitly name that sibling.

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 doesn't explicitly state when to use this tool versus alternatives like 'get_theme.' However, the contrast is implied: 'list' for all themes, 'get' for a single one. Sibling names provide context, but no explicit when-not guidance is given.

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

list_translationsList translationsB
Read-onlyIdempotent
Inspect

Lists every locale translated for a course. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course the translation belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

B3.4/5.0
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, so the description correctly omits those. It adds the 'Requires the Scale plan or higher' requirement, which is useful context, but provides no other behavioral detail. 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.

Conciseness5/5

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

Two short sentences: the first states the action and scope, the second adds a prerequisite. No redundancy, information is front-loaded and easily parsed.

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 simple list tool with one well-described parameter and an output schema present, the description is sufficient. It omits return format details, but that is covered by the output schema. The plan requirement adds helpful context.

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?

The schema fully describes courseId with a clear description, and the tool description adds no parameter-specific details. Since schema description coverage is 100%, baseline 3 is 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?

The description states a specific verb ('Lists') and resource ('locales translated for a course'), clearly indicating a collection-returning operation. It distinguishes from singular operations like get_translation by its plural scope, though it doesn't explicitly name a sibling for contrast.

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

Usage Guidelines2/5

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

No guidance is provided on when to use this tool versus alternatives such as get_translation or other list tools. The only additional information is a pricing prerequisite ('Requires the Scale plan or higher'), which is not usage guidance.

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

list_webhooksList webhooksA
Read-onlyIdempotent
Inspect

Lists every webhook endpoint in the workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsYes

TDQS

A3.7/5.0
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, so the safety profile is covered. The description adds the workspace-wide scope, which is useful. It doesn't mention pagination, ordering, or whether inactive webhooks are included, but for a simple list operation with strong annotations, this is adequate.

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 short sentence that fully conveys the tool's purpose. No wasted words, and the key scope qualifier 'every' and 'in the workspace' are included.

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 zero-parameter, read-only list tool with an output schema present, the description is nearly complete. The only minor gap is not mentioning pagination or result limits, but the output schema likely covers the return shape, and the annotations cover safety.

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?

There are zero parameters, so the description doesn't need to explain any. The schema coverage is 100% (vacuously), and the description correctly implies no inputs are needed. This is a case where the baseline 4 for zero params applies.

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 'Lists every webhook endpoint in the workspace' clearly states the action (list) and resource (webhook endpoints), and the scope (workspace-wide). It distinguishes from get_webhook (single) and create/update/delete_webhook siblings, though it doesn't explicitly name 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 description implies this is the tool to use when you need all webhooks in the workspace, and the sibling list shows create/update/delete/get variants. However, it doesn't explicitly state when to prefer this over get_webhook or mention any pagination or filtering considerations.

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

move_course_in_collectionMove course in collectionB
DestructiveIdempotent
Inspect

Moves a course one position earlier (-1) or later (1) in a collection.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.
courseIdYesId of a course that is already in this collection.
directionYes-1 moves the course one position earlier in the collection; 1 moves it one position later.

Output Schema

ParametersJSON Schema
NameRequiredDescription
courseIdYesThe course that was added or moved.
collectionIdYesThe collection the course is in.

TDQS

B3.3/5.0
Behavior1/5

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

The annotations declare idempotentHint=true, but the described operation is non-idempotent: calling it again with the same direction should shift the course one more position each time. This contradicts the annotation. The readOnly and destructive hints are consistent, but the idempotency conflict is a serious behavioral inconsistency.

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 concise sentence that front-loads the action and includes the key -1/1 direction mapping. There is no filler or redundant detail.

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?

All three parameters are documented and an output schema exists, but the idempotency contradiction leaves repeated-call behavior ambiguous. Boundary behavior at the first or last collection position is also not addressed, which is relevant for a destructive reorder operation.

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 id, courseId, and direction are already fully documented in the schema. The description restates the direction semantics but adds no new parameter meaning beyond what the schema provides.

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 ('Moves'), a resource ('a course'), and the exact positional effect ('one position earlier (-1) or later (1) in a collection'). This is unambiguous and distinguishes it from add/remove collection tools.

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 use case is implied: when a course already in a collection needs to shift by exactly one position. However, it does not explicitly state when not to use it or point to alternatives such as add_course_to_collection or remove_course_from_collection.

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

remove_course_from_collectionRemove course from collectionC
DestructiveIdempotent
Inspect

Removes a course from a collection (the course itself isn't deleted).

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.
courseIdYesId of a course that is already in this collection.

Output Schema

ParametersJSON Schema
NameRequiredDescription
removedYes
courseIdYesThe course that was removed. The course itself still exists.
collectionIdYesThe collection the course was removed from.

TDQS

C2.9/5.0
Behavior2/5

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

Annotations indicate destructiveHint=true and idempotentHint=true, but the description only states that the course itself isn't deleted. It doesn't disclose that the operation is irreversible for the collection membership, nor does it mention any side effects (e.g., what happens to the collection if it becomes empty) or authorization requirements. With annotations present, the bar is lower, but the description adds little beyond what annotations imply.

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?

The description is a single, concise sentence that effectively front-loads the key insight that the course isn't deleted. It is appropriately brief for a simple operation, though it could have added a hint about usage conditions without losing conciseness.

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?

The tool is simple with only two parameters and an output schema, but the description could be more complete by stating that the operation is idempotent (annotations already cover that) and by providing guidance on error conditions (e.g., course not in collection). The presence of an output schema reduces the need to describe return values, but the description doesn't cover all behavioral aspects.

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 parameters are well-documented in the schema. The description doesn't add any extra semantics about the parameters (e.g., that 'id' must be a valid collection or that 'courseId' must be an existing course). Given the high schema coverage, baseline 3 is 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?

The description clearly states the action (removes a course from a collection) and differentiates it from deleting the course itself. It is specific about the resource and scope, though it doesn't explicitly distinguish from sibling tools like 'move_course_in_collection' or 'add_course_to_collection' beyond the obvious inverse relationship.

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

Usage Guidelines2/5

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

The description provides no explicit guidance on when to use this tool versus alternatives. While it is clear that it is the inverse of 'add_course_to_collection', it doesn't mention prerequisites (e.g., the course must already be in the collection) or when not to use it (e.g., if you want to delete the course itself).

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

remove_memberRemove a memberA
DestructiveIdempotent
Inspect

Removes someone from the workspace. Their access stops immediately; content they created stays. The owner can't be removed.

ParametersJSON Schema
NameRequiredDescriptionDefault
userIdYesThe member's userId, from list_members. Can't be the workspace owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
userIdYes
removedYes

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already mark the tool as destructive and idempotent. The description adds valuable beyond-annotation behavior: access stops immediately, content persists, and the owner is protected. This gives the agent meaningful expectations without contradicting 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 with no filler. The action is front-loaded, and the two most important behavioral caveats (immediate access loss and content retention) follow directly. The owner restriction is placed last as a necessary guardrail.

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-parameter destructive tool with an output schema and strong annotations, the description covers the essential operational facts an agent needs: what happens to access, what happens to content, and who cannot be targeted. Nothing critical is missing.

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% for the only parameter, userId, and the schema already explains provenance ('from list_members') and the owner constraint. The description adds no additional parameter-specific meaning, so baseline 3 applies.

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 gives a specific verb and resource ('Removes someone from the workspace') and clearly conveys the core action. It does not explicitly differentiate itself from close siblings like cancel_invite or update_member_role, though 'from the workspace' implies an existing member rather than a pending invite.

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 clearly implies usage (remove an existing member) and includes an important exclusion (owner can't be removed), but it offers no explicit guidance on when to prefer this tool over siblings like cancel_invite or update_member_role. This is adequate but leaves routing to inference.

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

reorder_screensReorder screensA
DestructiveIdempotent
Inspect

Sets the screen order for a course. Send every screen id exactly once — a partial list is rejected rather than applied, since silently dropping the screens you left out is the one outcome nobody wants.

ParametersJSON Schema
NameRequiredDescriptionDefault
courseIdYesId of the course whose screens to reorder.
orderedScreenIdsYesEvery screen id in the course, each exactly once, in the new order. A partial list is rejected.

Output Schema

ParametersJSON Schema
NameRequiredDescription
orderedScreenIdsYesEvery screen id in the course, in its new order.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already declare destructiveHint and idempotentHint, but the description adds a critical behavioral invariant: a partial list is rejected rather than applied, with a rationale. This goes beyond the structured annotations and prevents an agent from assuming a partial update would silently succeed. No contradiction.

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, front-loaded with the core purpose, then a single sentence explaining the crucial constraint. Every clause earns its place, no redundant 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?

Given the simple two-parameter API, full schema coverage, and existing annotations, the description covers the key behavioral caveat. The presence of an output schema means return-value details are not needed. An agent has all necessary information to invoke the tool correctly.

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% — both courseId and orderedScreenIds have descriptions. The description reiterates the 'exactly once' and 'partial list rejected' rules that are already in the array parameter's description, so it adds little beyond the schema. Baseline 3 is appropriate.

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

Purpose5/5

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

The description uses a specific verb 'Sets' and resource 'screen order for a course', clearly identifying the operation. Among sibling tools it is distinct from add_screen, delete_screen, update_screen, and move_course_in_collection, so an agent can distinguish it immediately.

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 guidance: send every screen id exactly once, and partial lists are rejected. It doesn't name a specific alternative tool, but no close sibling exists; the context of 'sets the screen order' is sufficient for when to use it. The constraint about full list is an important operational guideline.

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

revoke_api_keyRevoke an API keyA
DestructiveIdempotent
Inspect

Stops a key working immediately. Revoking the key this connection authenticated with is allowed and ends the connection — it is the right move if a key has leaked, so it isn't blocked, but it is not undoable. Issuing a replacement is a dashboard action.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesId of the API key to revoke, from list_api_keys (not the key itself or its prefix).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
revokedYes
wasCurrentKeyYesTrue if this was the key this connection used, which has now ended.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations already include destructiveHint=true and idempotentHint=true. The description adds critical behavioral context: 'ends the connection' (impact on current session) and 'it is not undoable' (irreversibility), which are not captured by annotations. This goes beyond just repeating the annotation flags. The only minor miss is not detailing what happens to the affected operations (e.g., immediate failure of previous calls), but the main safety and irreversibility aspects are well covered.

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 compact, three sentences, with the core action and immediate impact front-loaded. Every sentence adds value: the first gives the action and immediacy, the second explains the self-key scenario and when it's appropriate, and the third points to the alternative for replacement. No fluff.

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?

Given the tool's simplicity (one parameter, output schema present), the description covers the essential behavioral aspects: mutation, irreversibility, connection impact, and usage context. The output schema likely describes the response (maybe success status), so return values are covered. The only minor gap is not mentioning any side effects like invalidating cached credentials, but for typical API key revocation, this is adequate. It's complete enough for an agent to call correctly.

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?

The schema description coverage is 100%, so the schema already documents the 'id' parameter with a note to use the id from list_api_keys. The description does not add much beyond that—it mentions the key's id but the schema already says 'not the key itself or its prefix.' The description reinforces the context (that the id is the internal id), but it's largely redundant. Baseline 3 is appropriate given full schema coverage.

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 clearly states the action: 'Stops a key working immediately,' which is a specific verb with the resource (API key). It also distinguishes itself from related operations like list_api_keys (by clarifying the id is from list_api_keys, not the key itself) and mentions issuing a replacement is a dashboard action, differentiating from any potential sibling like 'create_api_key'.

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?

The description provides explicit guidance on when to use this tool: 'it is the right move if a key has leaked, so it isn't blocked.' It also implies when not to use it (if you need a replacement, that's a dashboard action), and mentions that revoking the currently authenticated key is allowed, which is a specific use-case clarification.

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

search_contentSearch course contentA
Read-onlyIdempotent
Inspect

Full-text search across course titles and the text inside their screens — the way to find which course says something when you don't know which one it is.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of courses to return, up to 20. Defaults to 20.
queryYesWords to search for in course titles and screen text.

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultsYesMatching courses, best match first.

TDQS

A4.1/5.0
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, so the safety profile is covered. The description adds the search scope (course titles and screen text) but does not disclose return format, pagination, or ordering behavior. Given the annotation coverage, this is adequate but not exceptional.

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, compact sentence that front-loads the core purpose (full-text search) and then explains the use case. No redundant words or fluff; every part earns its place.

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?

Given that an output schema exists (provided elsewhere), the schema covers both parameters, and annotations cover safety, the description sufficiently explains what the tool does, when to use it, and what it searches. Nothing critical is missing for an agent to invoke it correctly.

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% for both parameters, with clear descriptions for query (words to search) and limit (max courses, default). The tool description adds no extra parameter semantics beyond what the schema already 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/5

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

The description clearly states a specific verb (search) and resource (course content), and specifies the scope (course titles and screen text). It also frames the use case: finding which course contains a phrase when the course is unknown, which distinguishes it from list_courses (all courses) and get_course (a specific course).

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 an explicit scenario: 'when you don't know which one it is.' This implies when to use it (unknown course) and implicitly contrasts with fetching a known course. However, it does not name specific alternative tools or state explicit when-not-to-use conditions, so it falls short of the highest tier.

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

update_certificateUpdate certificate templateA
DestructiveIdempotent
Inspect

Updates a certificate template. Sending tokens replaces the design wholesale — send the full object, not just changed keys. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe certificate template id, as returned by list_certificates or create_certificate.
nameNoNew template name, up to 80 characters. Omit to leave it unchanged.
tokensNoReplaces the design wholesale, so send the full tokens object rather than only the changed keys. Omit to leave the design unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe certificate's design: layout, colours, fonts, text and signature settings.
createdAtYes
updatedAtYes
workspaceIdYes

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate a destructive write operation, but the description adds crucial behavioral detail beyond that: sending tokens replaces the design wholesale rather than merging changes. It also discloses the plan requirement. This gives the agent a strong understanding of the operation's side effects without contradicting 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?

The description is two tight sentences. The primary purpose is front-loaded, followed by the most critical behavioral warning and the requirement. Every sentence earns its place with zero 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?

Given the complex nested schema and existing output schema, the description covers the key non-obvious points: full-object replacement semantics and plan requirement. The schema documents the parameters, and the annotations cover the safety profile, so nothing necessary for correct invocation is missing.

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 baseline is 3. The description's 'send the full object' warning essentially repeats what the tokens property description already says, adding no new parameter-specific meaning. It neither hurts nor significantly helps 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?

The description opens with a precise verb-resource pair: 'Updates a certificate template.' It clearly differentiates from siblings like create_certificate, delete_certificate, get_certificate, and list_certificates by stating exactly which operation it performs and on what resource.

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 establishes clear context: this is for modifying an existing certificate template, and it warns that tokens must be sent as a full object. It mentions the Scale plan requirement, adding usage constraints. However, it does not explicitly name alternatives or state when not to use it, so it falls just short of full exclusion guidance.

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

update_collectionUpdate collectionB
DestructiveIdempotent
Inspect

Renames or updates a collection's description.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe collection id, as returned by list_collections or create_collection.
nameNoNew collection name. Omit to leave it unchanged.
descriptionNoNew description; null clears it. Omit to leave it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
createdAtYes
descriptionYes
workspaceIdYes

TDQS

B3.4/5.0
Behavior2/5

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

Annotations already mark destructiveHint=true and idempotentHint=true, but the description adds no context about what destructive behavior occurs, whether prior values are overwritten, or any side effects. It does not contradict the annotations but also does not go beyond 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/5

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

The description is a single, efficient sentence with no filler or repetition. It clearly conveys both the rename and description-update capabilities without wasting words.

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 simple update tool with full schema coverage, an output schema, and rich annotations, the description is mostly sufficient. The main gap is the lack of explicit usage guidance, but the concise purpose statement combined with the schema provides enough context for an agent to invoke it correctly.

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%, with each parameter already documented (e.g., 'Omit to leave it unchanged', 'null clears it'). The description adds no semantic detail beyond what the schema provides, so the baseline of 3 is appropriate.

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 clearly states the action ('Renames or updates') and the resource ('a collection's description'). It identifies the two mutable fields, name and description, making the tool's purpose unambiguous and distinct from sibling create/delete/get collection tools.

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

Usage Guidelines2/5

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

No explicit guidance is given about when to use this tool versus create_collection, delete_collection, or other update tools. The intended usage is only implied by the verb 'updates' and the presence of optional fields in the schema; no alternatives or exclusions are stated.

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

update_courseUpdate courseA
DestructiveIdempotent
Inspect

Partially updates a course by id. Every field besides id is optional — send only what changes.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe course id, as returned by list_courses or create_course.
titleNoNew course title. Omit to leave it unchanged.
statusNo'published' makes the course live to learners; 'draft' takes it out of circulation. Omit to leave it unchanged.
screensNoReplaces the whole screens array; it is not merged screen by screen. To change one screen, prefer update_screen. Omit to leave screens unchanged.
themeIdNoId of a theme in this workspace to assign; null removes the theme. Omit to leave it unchanged.
directionNoReading direction of the course: 'ltr' or 'rtl'. Omit to leave it unchanged.
navigationNo'default' shows the player's Back/Continue row; 'hidden' removes it (and swipe) so button blocks move the learner on. Omit to leave it unchanged.
passingScoreNoPercentage (0-100) of graded blocks a learner must answer correctly to pass; null means any completion counts. Omit to leave it unchanged.
quizFeedbackNoWhen learners see whether an answer was right: 'deferred' (at the end) or 'immediate' (as they answer). Omit to leave it unchanged.
certificateIdNoId of a certificate template in this workspace; null goes back to the built-in default design. Omit to leave it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
titleYes
statusYes
screensYes
themeIdYes
createdAtYes
directionYes
updatedAtYes
navigationYes
sourceKindYes
contentHashYes
customFontsYes
workspaceIdYes
passingScoreYes
quizFeedbackYes
certificateIdYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true, so the write/destructive nature is covered. The description adds partial-update semantics but does not disclose behavioral details such as screens being replaced wholesale rather than merged; that detail lives in the schema, not the description.

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 short sentences with no filler; the core partial-update rule is front-loaded and the optionality guidance is immediately actionable.

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 complex tool with a very detailed schema and an output schema, the description covers the essential update semantics and id requirement. It does not need to repeat schema details, though a brief pointer to update_screen for single-screen changes would make it slightly more complete.

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 each parameter's omit-to-leave-unchanged behavior. The description's 'send only what changes' is a useful summary but adds no per-parameter meaning 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?

The description states a specific verb ('partially updates'), resource ('a course'), and identifier ('by id'), and clarifies the partial-update contract. This distinguishes it from create_course, delete_course, and update_screen without needing to open 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 Guidelines4/5

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

It gives clear usage context: every field except id is optional and callers should send only what changes. It does not explicitly name alternatives or exclusions in the description, though the screens parameter schema points to update_screen for single-screen edits.

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

update_member_roleChange a member's roleA
DestructiveIdempotent
Inspect

Sets a member's role to admin or member. The owner's role can't be changed here — ownership transfer is a dashboard action on purpose, since it is the one change that can lock the owner out.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleYesThe new role: 'admin' or 'member'.
userIdYesThe member's userId, from list_members. Can't be the workspace owner.

Output Schema

ParametersJSON Schema
NameRequiredDescription
roleYes
userIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already convey write and destructive behavior (readOnlyHint=false, destructiveHint=true) and idempotence. The description adds context beyond annotations by explaining why the owner's role can't be changed—'ownership transfer is a dashboard action on purpose, since it is the one change that can lock the owner out.' This rationale helps the agent reason about safety without contradicting 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?

The description is only two sentences, with the primary action stated first and the restrictive caveat immediately after. Every sentence earns its place: the first defines the action, the second clarifies a critical limitation and its rationale. No redundancy or 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?

For a simple mutation tool with only two fully documented parameters and an output schema (not shown), the description covers all essential context: what the tool does, the allowed values, the owner restriction, and the reasoning behind it. An agent has enough information to invoke it correctly without further clarification.

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 both userId and role are fully documented in the schema, including the enum values and the owner restriction. The description restates the role values ('admin or member') but adds no new parameter-level information. Since the schema already carries the semantic weight, the description provides no additive value, warranting the baseline score of 3.

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 states exactly what the tool does with a specific verb and resource: 'Sets a member's role to admin or member.' It also distinguishes from siblings like remove_member and invite_member by focusing solely on role changes. The additional caveat about the owner's role clarifies a boundary, making it unmistakable what this tool is for and what it cannot do.

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 implicitly tells the agent when to use this tool (to change an admin/member role) and explicitly excludes ownership transfer, stating it is a dashboard action. It doesn't name alternative tools, but the exclusion is clear and specific enough to prevent misuse. A minor gap is not mentioning other exceptions, but the owner restriction is the critical edge case.

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

update_screenUpdate a screenA
DestructiveIdempotent
Inspect

Replaces one screen's title and/or blocks, leaving every other screen untouched. Prefer this over update_course for editing content — it reads and writes a single screen rather than the whole array, so a concurrent edit elsewhere in the course isn't overwritten.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoNew screen title. Omit to leave it unchanged.
blocksNoReplaces the screen's whole blocks array, in order. Each block needs a unique id and a type, plus the fields list_block_types gives for that type; keep existing ids for blocks you are editing. Omit to leave the blocks unchanged.
courseIdYesId of the course that holds the screen.
screenIdYesId of the screen within that course, as found in the course's screens array.

Output Schema

ParametersJSON Schema
NameRequiredDescription
screenYesA screen: { id, title, blocks: [...] }. Block shapes are listed by list_block_types.

TDQS

A4.5/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 description doesn't need to repeat those. It adds the key behavioral trait that other screens remain untouched and explains the concurrency safety advantage. It does not contradict annotations and provides useful context beyond 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/5

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

The description is two sentences, front-loaded with the primary action and scope, then a targeted comparison to the alternative. Every sentence earns its place with no fluff.

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?

The description covers what the tool does, when to use it, and a key concurrency benefit. The output schema handles return details, and the input schema thoroughly documents block types and fields. No essential information is missing for correct 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 description coverage is 100%, with each parameter (courseId, screenId, title, blocks) already documented in the input schema. The description does not add new parameter-level meaning beyond the schema, so it meets the baseline for covered schemas without adding extra value.

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 clearly states the action: 'Replaces one screen's title and/or blocks, leaving every other screen untouched.' This is a specific verb (replaces) and resource (screen) with an explicit scope (single screen). It also differentiates from the sibling update_course by noting it's for editing content and reads/writes a single screen.

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?

The description explicitly directs when to use this tool: 'Prefer this over update_course for editing content' and explains the reason (avoids overwriting concurrent edits elsewhere in the course). This is a clear when-to-use with an alternative named and rationale given.

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

update_themeUpdate themeA
DestructiveIdempotent
Inspect

Partially updates a theme by id. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe theme id, as returned by list_themes or create_theme.
nameNoNew theme name. Omit to leave it unchanged.
tokensNoReplaces the theme's whole tokens object, so send every token you want to keep. Omit to leave the design unchanged.
customFontsNoReplaces the theme's list of self-hosted fonts ({ name, url } each). Omit to leave it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
tokensYesThe theme's design tokens: concept, palette, colours, fonts, radii, spacing.
createdAtYes
updatedAtYes
customFontsYes
workspaceIdYes

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already provide destructiveHint=true and idempotentHint=true, so the description does not need to restate those. It adds the Scale plan requirement and clarifies that this is a partial update, which is useful behavioral context 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/5

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

The description is a single sentence that front-loads the action and scope, then adds the plan requirement. There is no filler or redundant repetition of schema information.

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?

Given the rich schema, output schema, and annotations, the description is complete enough for an agent to invoke the tool correctly. It includes the plan requirement, and the schema covers parameter semantics and replacement behavior. The only missing element, explicit alternatives, is already evident from sibling tool names.

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%, and the schema thoroughly documents id, tokens replacement semantics, and customFonts replacement. The description adds no parameter-level detail beyond 'by id', 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/5

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

The description states a specific verb ('updates'), a resource ('theme'), and a scope ('by id', 'partially'), which clearly distinguishes it from create_theme, delete_theme, get_theme, and list_themes. The plan requirement adds useful context without obscuring the core purpose.

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 phrase 'partially updates a theme by id' makes clear this is for modifying an existing theme, not creating, deleting, or reading one. It does not explicitly name alternatives or exclusions, but the context is strong enough for an agent to select it appropriately.

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

update_translationUpdate translationA
DestructiveIdempotent
Inspect

Merges the given path/value pairs into a locale's content — an empty string value clears that path back to the source-language fallback. Requires the Scale plan or higher.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYesTranslated text keyed by field path, e.g. { "title": "...", "s:<screenId>.title": "...", "s:<screenId>.b:<blockId>.text": "..." }. Merged into the existing content; an empty string clears that path back to the source language.
courseIdYesId of the course the translation belongs to.
translationIdYesThe translation's id (not its locale code), as returned by list_translations or create_translation.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
localeYes
contentYesTranslated strings, keyed by the source field's path.
courseIdYes
createdAtYes
updatedAtYes

TDQS

A4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds context about merge semantics and the clearing behavior for empty strings, which goes beyond the annotations. It does not contradict 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?

Two sentences, front-loaded with the core action ('Merges the given path/value pairs into a locale's content'), followed by a critical behavior and a requirement. No filler or repetition.

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?

The description, combined with the detailed schema and annotations, covers the essential behavior for calling the tool. It mentions the plan requirement and merge/clearing semantics. The output schema exists, so return values are covered. Minor gap: it doesn't explicitly state that the translation must already exist or what happens on failure, but these are not critical for 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?

The schema provides 100% coverage, with each parameter described. The description's mention of empty string clearing is redundant with the content parameter's schema description. The description adds no new parameter-level meaning beyond what the schema already provides.

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 clearly states the verb 'Merges' and the resource 'into a locale's content', which distinguishes it from create_translation, delete_translation, get_translation, and list_translations. It also adds a specific behavioral nuance (empty string clears to source fallback), making the purpose unmistakable.

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 usage (update an existing translation's content) but does not explicitly state when to use it versus alternatives like create_translation or delete_translation. The plan requirement is mentioned but is a prerequisite, not usage guidance. No exclusions or alternative conditions are given.

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

update_webhookUpdate webhookA
DestructiveIdempotent
Inspect

Updates a webhook's URL, subscribed events, or active state. Every field besides id is optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe webhook endpoint id, as returned by list_webhooks or create_webhook.
urlNoNew https:// delivery URL (plain http:// only for localhost; internal addresses are rejected). Omit to leave it unchanged.
nameNoNew label; null clears it. Omit to leave it unchanged.
isActiveNofalse pauses deliveries to this endpoint without deleting it; true resumes them. Omit to leave it unchanged.
eventTypesNoReplaces the subscribed events; at least one. Omit to leave them unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
urlYes
nameYes
isActiveYes
createdAtYes
eventTypesYes
workspaceIdYes

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true. The description adds the useful detail that fields are optional and thus the update is partial, which is not in the annotations. It does not disclose that eventTypes are replaced (though the schema covers that) or explain what destructiveHint implies (e.g., pausing deliveries). Overall, it adds some context but relies on schema and annotations for the rest.

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, front-loaded with the verb and resource, and the optionality note is the only extra detail. Zero wasted words; every element earns its place.

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 an output schema present and full parameter coverage in the schema, the description adequately covers the tool's purpose and partial-update semantics. It does not mention error cases or prerequisites like 'id must reference an existing webhook', but the schema's required field and the id description ('as returned by list_webhooks') cover that. For a typical update operation, this is complete enough.

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 every parameter already has a thorough description in the schema. The description mentions 'URL, subscribed events, or active state' but adds no syntax, format, or constraint details beyond what the schema provides. This meets the baseline for high schema coverage.

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 clear verb-resource pair ('Updates a webhook') and specifies the exact fields modified (URL, subscribed events, active state). This distinguishes it from siblings like create_webhook, delete_webhook, get_webhook, and list_webhooks without needing to inspect schemas.

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 when to use this tool (for modifying an existing webhook) and signals the partial-update pattern ('Every field besides id is optional'), which guides usage. However, it does not explicitly name alternatives like create_webhook or state when not to use it, so it stops short of full explicit routing.

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

update_workspace_settingsUpdate workspace settingsA
DestructiveIdempotent
Inspect

Renames the workspace, or sets the from-name and reply-to used on the emails Underlayer sends learners. The workspace name is also the fallback issuer printed on certificates.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew workspace name, up to 80 characters. Omit to leave it unchanged.
notificationReplyToNoReply-to address on emails sent to learners; null removes it. Omit to leave it unchanged.
notificationFromNameNoSender name on emails Underlayer sends learners, up to 80 characters; null goes back to the default sender name. Omit to leave it unchanged.

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameYes
notificationReplyToYesReply-to address on learner emails. Null means none.
notificationFromNameYesSender name on learner emails. Null means the default.

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already establish that this is a write (readOnlyHint=false) and idempotent operation. The description then adds genuinely useful behavioral context beyond those annotations: setting the workspace name affects the fallback issuer shown on certificates)Skip that this is not just a cosmetic rename. It does not contradict 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?

Two sentences with no filler. The core update action is front-loaded, and the certificate fallback sentence adds important contextual value rather than repeating the title or schema.

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?

Given the small optional parameter set, a complete schema with per-parameter descriptions, an output schema, and annotations covering read-only/destructive/idempotent behavior, the description has no major gaps. It explains the core effecthe certificate side-effect, which is enough for an agent to invoke the 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?

With 100% schema coverage, the parameter baseline is 3. The description adds one meaningful piece of extra semantics beyond the schema: the workspace name also serves as the fallback issuer on certificates, which explains a downstream consequence of changing the `name` parameter. The rest of the description largely paraphrases the schema's parameter descriptions, but the certificate link justifies a 4.

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 ('renames', 'sets') applied to a specific resource ('the workspace', 'emails Underlayer sends learners'), and it immediately differentiates this from other update_* siblings by focusing on workspace-level fields. The additional note about certificates is a useful clarifying detail, not a vague restatement.

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

Usage Guidelines2/5

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

The description says what the tool does but never says when to use it versus alternatives, nor what conditions would make a different tool more appropriate. There is no 'when not to use' guidance and no mention of prerequisites such as membership or permission requirements, so the agent must infer usage entirely from the task/resource.

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

upsert_identityUpsert identityA
DestructiveIdempotent
Inspect

Upserts a learner by externalId — call this every time you know who the learner is, as often as you like.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoThe learner's display name; null clears it. Omit to keep the name already stored.
emailNoThe learner's email address; null clears it. Omit to keep the stored one. When set, they are emailed the first time they complete a course.
externalIdYesYour own id for the learner, e.g. your user id. The learner is matched on this, so the same value always updates the same identity.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYes
nameYes
emailYes
isNewYestrue if this call created the identity, false if it updated one already stored.
createdAtYes
externalIdYes
workspaceIdYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already include idempotentHint=true, destructiveHint=true, and readOnlyHint=false, so the safety profile is established. The description adds useful context by emphasizing that repeated calls are acceptable, but it does not disclose side effects like clearing fields via null or the destructive overwrite nature beyond what the schema and annotations already imply.

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, compact sentence that front-loads the core action and includes actionable usage guidance. Every clause earns its place, and there is no redundant 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 simple three-parameter tool with a complete schema, rich annotations, and an output schema, the description is nearly sufficient. It clearly communicates the identity-matching behavior and idempotency; the only gap is not explicitly routing multi-record scenarios to the bulk sibling.

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 every parameter is already documented in the input schema. The description does not need to restate parameter details; it adds only the 'by externalId' matching hint, which is also present in the schema's externalId description. This is the baseline where the schema carries the weight.

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 clearly states the action ('Upserts a learner by externalId') and the resource, so an agent knows exactly what the tool does. It does not explicitly name or contrast with sibling tools like bulk_upsert_identities, but the singular 'a learner' and 'by externalId' communicate the core scope.

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 concrete guidance on when to use the tool: 'call this every time you know who the learner is, as often as you like.' It conveys idempotency and frequent safe usage, though it does not explicitly state when not to use it or point to alternatives such as bulk_upsert_identities.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 68 tool updates
    • First observedadd_block
    • First observedadd_course_to_collection
    • First observedadd_screen
    • First observedbulk_delete_identities
    • First observedbulk_upsert_identities
    • First observedcancel_invite
    • First observedcreate_certificate
    • First observedcreate_collection
    • First observedcreate_course
    • First observedcreate_theme
    • First observedcreate_translation
    • First observedcreate_webhook
    • First observeddelete_certificate
    • First observeddelete_collection
    • First observeddelete_course
    • First observeddelete_identity
    • First observeddelete_screen
    • First observeddelete_theme
    • First observeddelete_translation
    • First observeddelete_webhook
    • First observedduplicate_screen
    • First observedexport_scorm
    • First observedgenerate_course
    • First observedget_certificate
    • First observedget_collection
    • First observedget_completion
    • First observedget_course
    • First observedget_generation
    • First observedget_identity
    • First observedget_issued_certificate
    • First observedget_overview
    • First observedget_theme
    • First observedget_translation
    • First observedget_usage
    • First observedget_webhook
    • First observedget_workspace_info
    • First observedimport_scorm
    • First observedinvite_member
    • First observedlist_api_keys
    • First observedlist_audit_events
    • First observedlist_block_types
    • First observedlist_certificates
    • First observedlist_collections
    • First observedlist_completions
    • First observedlist_courses
    • First observedlist_identities
    • First observedlist_issued_certificates
    • First observedlist_members
    • First observedlist_screen_templates
    • First observedlist_themes
    • First observedlist_translations
    • First observedlist_webhooks
    • First observedmove_course_in_collection
    • First observedremove_course_from_collection
    • First observedremove_member
    • First observedreorder_screens
    • First observedrevoke_api_key
    • First observedsearch_content
    • First observedupdate_certificate
    • First observedupdate_collection
    • First observedupdate_course
    • First observedupdate_member_role
    • First observedupdate_screen
    • First observedupdate_theme
    • First observedupdate_translation
    • First observedupdate_webhook
    • First observedupdate_workspace_settings
    • First observedupsert_identity

Publisher details

Operator
Outworx for Web-Design, trading as Underlayer · Publisher source
Vendor relationship
First-party
Restrictions
The free sandbox is on request (a person approves each one); paid plans are self-serve from $149/month. Themes, translations and SCORM tools need the Scale plan; webhooks need Build or higher.

Related MCP Connectors

Related MCP Servers

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources