Skip to main content
Glama
rooquiz

RooQuiz

RooQuiz MCP Server

M8ven Verified Install in VS Code Install in Cursor

Remote MCP server for RooQuiz — a lightweight assessment platform for lead capture and viral sharing. Build quizzes with AI-assisted authoring, capture leads from results pages, and analyze funnel conversion — straight from Claude, ChatGPT, Cursor, or any MCP client.

  • Endpoint: https://payload.rooquiz.com/api/mcp (Streamable HTTP)

  • Auth: OAuth 2.1 — authorization code + PKCE with dynamic client registration. Sign in with your RooQuiz account when your client prompts you; no API key needed.

  • Registry name: com.rooquiz/rooquiz-mcp

Connect

One-click: VS Code · VS Code Insiders · Cursor

Claude Code

claude mcp add --transport http rooquiz https://payload.rooquiz.com/api/mcp

claude.ai / ChatGPT — add a custom connector and paste the endpoint URL.

Cursor (.cursor/mcp.json)

{
  "mcpServers": {
    "rooquiz": {
      "url": "https://payload.rooquiz.com/api/mcp"
    }
  }
}

VS Code / GitHub Copilot (.vscode/mcp.json)

{
  "servers": {
    "rooquiz": {
      "type": "http",
      "url": "https://payload.rooquiz.com/api/mcp"
    }
  }
}

Related MCP server: Quiz Generator AI MCP

Example prompts

Once connected, talk to it in plain language. Each of these exercises a different part of the server:

Build from a template

Show me the coaching templates, create a scored quiz from the readiness one, then add two questions about budget.

Exercises list_templatescreate_form_from_templateadd_question.

Work the leads

List the leads my Wheel of Life quiz captured this week, tag everyone who scored under 40 as follow-up, and assign them to me.

Exercises list_leadsset_lead_tagsassign_leads.

Diagnose the funnel

Which of my quizzes has the worst completion rate, and where exactly do people drop off?

Exercises list_formsget_form_statsget_form_funnel.

Go multilingual

Translate my promotion-readiness quiz into Spanish and German, keeping the question codes.

Exercises list_form_translationscreate_form_translation.

Respondent names, email addresses and phone numbers come back masked (j***g@example.com), so address a respondent by id rather than pasting a masked value back in.

What you can do

  • Quizzes — create knowledge quizzes, scored quizzes, and "which X are you" outcome quizzes; edit questions, scoring formulas, and dimension analysis; start from templates

  • Translations — one source form, mirrored translations in any language

  • Leads — list, tag, assign, and comment on leads captured from quiz results pages

  • Respondents & records — look up respondents, submissions, stats, and funnel analytics

  • Bookings — review and reschedule bookings made through quiz results pages

  • Team — switch active team, invite members, manage question banks and categories

All tools act within the team your session is bound to.

stdio bridge

Hosts without native HTTP transport (Claude Desktop, older MCP clients) and registry crawlers that build a container can go through the bridge in bin/rooquiz-mcp.mjs — dependency-free, Node 18+. Everything above is a better path if your client speaks HTTP.

node bin/rooquiz-mcp.mjs           # or: docker build -t rooquiz-mcp . && docker run -i --rm rooquiz-mcp

Env

Default

Purpose

ROOQUIZ_TOKEN

(unset)

Bearer token — required for every hosted tool

Every method needs a token, initialize included: without one the server answers 401 with a WWW-Authenticate header pointing at the resource metadata. Clients with native HTTP transport get this for free through OAuth; the bridge has nowhere to run a browser flow, so give it a personal access token.

With no usable token the bridge still completes a handshake and answers tools/list, reading both from bin/introspection.json — a snapshot of what the hosted server returns. That is there for registry crawlers, which build this container with no credentials and judge the server by whether it introspects. Calling a hosted tool still goes upstream and still 401s. Once a working token is set nothing is served locally: every message is forwarded, so a stale file can never shadow live data. Refresh it after changing tools:

ROOQUIZ_TOKEN=rqp_live_xxx node scripts/snapshot-tools.mjs

Preview mode — no token, no account

A bridge with no usable token is not useless. It also serves four tools that need no credentials at all, because they target RooQuiz's public preview endpoint:

Tool

What it builds

preview_quiz

Right/wrong quiz — correct answers earn points and the taker gets a graded score

preview_scorecard

Scored questionnaire — every option adds points toward a total that buckets into a level

preview_outcome

Personality / type test — options vote for result types and the most-voted type wins

preview_guide

The full authoring guide for one of the three: field schema, scoring rules, themes, examples

Ask in plain language — "make me a 5-question personality quiz about coffee and give me a link" — and you get back something like https://quizster.app/b/7k3m9q2p, openable and shareable straight away. Previews self-destruct after about an hour and anonymous creation is capped at roughly 10 per hour per IP; sign in and use create_form to keep an assessment.

These tools are the rooquiz-skills SKILL.md files vendored into bin/skills.json — the same instructions that repo ships as a Claude Code plugin, served here over MCP instead. That repo is their source of truth; re-vendor after editing one:

ROOQUIZ_SKILLS_DIR=../rooquiz-skills node scripts/sync-skills.mjs

They disappear once a working token is set: with an account, create_form builds a permanent form rather than a link that expires.

Support

Questions or issues: support@rooquiz.com


This repository carries the server.json manifest published to the official MCP Registry, plus the MIT-licensed stdio bridge. The hosted server implementation itself is closed source.

Available Tools

52 tools
add_lead_commentA

Write an internal follow-up note on a lead of the current team (visible to team members only, never to the respondent). Max 2000 characters. Optionally attach the record id of the submission the note is about, as context. Read existing notes with get_lead(includeComments: true). Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
bodyYesThe note text
leadIdYesThe lead id (the leadId returned by list_leads)
recordIdNoOptional record id this note is about (as returned by get_lead records / list_records)

Output Schema

ParametersJSON Schema
NameRequiredDescription
bodyNoThe note text as stored
leadIdNoThe lead it was written on
commentIdNoThe created note
createdAtNoISO datetime

TDQS

A4.7/5.0
Behavior5/5

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

With annotations offering no safety profile (all hints false), the description carries the full burden of behavioral disclosure. It does this thoroughly: it warns that the operation is not idempotent, explains that a timeout may still have succeeded, and advises checking before retrying to avoid duplicates. It also discloses the visibility constraint and the character limit, which are behavioral traits the schema and annotations do not express.

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: purpose first, then constraints, then the retry warning. Every sentence carries essential information, and the non-idempotency warning is placed last where it can be recalled when handling errors. No filler.

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

Completeness5/5

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

For a small write-only tool with a defined output schema, the description is complete: it states what the note is, who sees it, the size limit, the optional context parameter, how to verify existing notes, and how to safely handle timeouts. No critical call-time behavior is left undisclosed.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful semantics beyond the schema by clarifying that leadId refers to a lead of the current team and that recordId provides optional submission context. It also restates the 2000-character cap, reinforcing the schema's maxLength constraint.

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 action and resource: 'Write an internal follow-up note on a lead.' It immediately distinguishes the tool from siblings by specifying visibility (team members only, never the respondent) and by naming how to read existing notes via get_lead, which separates it from read operations.

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 context for when this tool is appropriate: adding an internal note with team-only visibility, optional record context, and a max length. It explicitly points to get_lead(includeComments: true) as the way to read existing notes, but does not explicitly name exclusions or alternatives beyond that reading path, so it stops short of a full when-not-to-use guide.

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

add_questionA

Append an item to the end of a form. type is a question type or Breaker (page break — only formId + type are needed, other fields are ignored). Question types: SingleCheck / MultiCheck / TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via multiple — prefer it over SingleCheck/MultiCheck past 20 choices); Cascade (hierarchical via choices[i].children, scored_quiz only); Ordering (quiz only, order-sensitive grading); DateField / TimeField (unscored data-collection fields, scored_quiz only, no correctAnswer/score); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz only, the submitted 1..steps rating is the question score unless per-star scores are set in the web app). Configure random_knowledge_quiz question banks in the web app. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoNumberField only: maximum allowed input value (must be >= min). Rejected for other question types.
minNoNumberField only: minimum allowed input value (respondents cannot submit a smaller number). Rejected for other question types.
codeNoOptional stable identifier for this question (field code). Omit it to let the server auto-generate one. Set a meaningful code (e.g. "q1") when report.formula or a dimension needs to reference this question, so you can write the formula as `{{q1}}` in the same call instead of round-tripping via get_form. Rules: start with a letter or underscore, then only letters/digits/underscores (no hyphens, spaces, or leading digit), at most 64 chars, and not a reserved math word (e, E, pi, PI, tau, phi, i, Infinity, NaN, true, false, null, undefined). Must be unique among all items in the form.
nameNoQuestion stem text. Allows plain text or restricted HTML (tag allowlist: <p> <strong>/<b> <em>/<i> <u> <s> <mark> <span> <sup> <sub> <br>; other tags are stripped and the text kept).
typeYesQuestion type; Breaker means a page break, no name/choices etc. needed
unitNoNumberField only: display unit suffix shown after the input, e.g. "kg" / "$" / "min". Rejected for other question types.
scoreNoPoints this question is worth, default 0 (not scored). Quiz scene: awarded when the answer matches correctAnswer, and a positive value is required once correctAnswer is set. Scored Quiz scene: pairing it with correctAnswer enables the fallback mode above, but choices[i].score is more flexible. Rejected in the outcome_quiz scene, for DateField / TimeField / Rate, and — in the scored_quiz scene — for NumberField (where the submitted number itself is the score) and FillBlank (collected only, never scored).
stepsNoRate only: number of rating steps, i.e. the highest rating (3-10, default 5). In the scored_quiz scene the submitted rating value (1..steps) is the question score, unless a per-star score is configured in the web app. Rejected for other question types.
wordsNoRate only: optional scale labels evenly distributed under the rating control, e.g. ["Poor", "Excellent"] for the two endpoints (up to 5 labels). Rejected for other question types.
formIdYesThe form ID to append the item to
aiMatchNoOnly for FillBlank in the knowledge_quiz scene. Enables AI grading: the AI compares the respondent answer against correctAnswer and scores by accuracy, instead of requiring an exact string match. Requires correctAnswer (the standard answer) and score > 0 (the score earned when accuracy reaches the threshold). Pass an empty object {} to enable with default settings; omit for plain exact-match grading.
choicesNoChoice-based questions only (SingleCheck / MultiCheck / DropDown / Ordering / Cascade), where it is required; ignored for every other type, including TrueFalse — its two options come from trueLabel / falseLabel. Per-type limits: SingleCheck / MultiCheck 2-20 items — for a longer list use DropDown (2-100 items) instead; Ordering 2-10 items; Cascade nests via choices[i].children (up to 3 levels, at most 100 nodes in total). IMPORTANT (knowledge_quiz scene): vary the position of the correct option(s) across questions — do NOT always place the correct answer first. Distribute correct answers roughly evenly over all positions so they are not predictable.
explainNoOptional answer explanation. The frontend renders it in the question's "answer explanation" field (DescriptionEditor); the rich-text rules are identical to description. Do not stuff the answer explanation into description — that is the question's supplementary note and will not be shown as an explanation to respondents/graders.
shuffleNoOrdering only: shuffle the displayed choice order for each respondent. Defaults to true for MCP-created questions — the stored choices order would otherwise leak the correct order when correctAnswer matches it. Pass false only when the initial order is intentionally meaningful. Rejected for other question types.
multipleNoDropDown only: allow selecting multiple options (default false = single select). Affects the quiz-scene correctAnswer shape: an array of labels/codes when true, a single one when false. Rejected for other question types (SingleCheck/MultiCheck are inherently single/multi).
requiredNoWhether the question is required, default false
precisionNoDateField / TimeField only: picker precision. DateField accepts year | month | day | hour | minute | second (default day; e.g. "month" shows a year-month picker, "second" a full datetime picker). TimeField accepts only minute | second (default minute). Ignored for other question types.
trueLabelNoTrueFalse only: custom display text for the "true" option (e.g. "Yes" / "Agree"). Ignored for other question types. Leave empty to fall back to the built-in default for the form language ("Correct" in English forms). Does not change the stored answer value, which stays "true".
falseLabelNoTrueFalse only: custom display text for the "false" option (e.g. "No" / "Disagree"). Ignored for other question types. Leave empty to fall back to the built-in default for the form language ("Incorrect" in English forms). Does not change the stored answer value, which stays "false".
descriptionNoOptional supplementary note for the question. Allows a wider HTML subset: everything the stem allows + <h1>-<h6> <ul> <ol> <li> <blockquote> <a href> <img src> <hr> <art-field> (variable placeholder, data-type / data-cid); unsafe protocols (javascript:/data:) and unknown attributes are stripped. This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.
trueOutcomesNoOutcome scene + TrueFalse only (required there together with falseOutcomes): the outcome codes that answering "true" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes.
correctAnswerNoThe "correct answer" of the knowledge_quiz scene; setting it makes the question scored, so pair it with a positive `score`. The shape follows the question type — see the anyOf branches; a choice is referenced by its label or its code, so reference it by code whenever the same label appears more than once (Ordering rejects an ambiguous label outright). Required on SingleCheck / MultiCheck / DropDown / Ordering in the knowledge_quiz scene, optional on FillBlank / NumberField there. NumberField answers must be typeable within min / max and decimalPlaces. Rejected for DateField / TimeField / Rate (data-collection and rating fields; configure date/time scoring in the web app), rejected for FillBlank in the scored_quiz scene (free text is collected only there), and rejected in the outcome_quiz scene (no right or wrong answers there). In the scored_quiz scene prefer choices[i].score per option; passing correctAnswer + score there only falls back to "the matching choice gets score, others get 0".
decimalPlacesNoNumberField only: how many decimal places respondents may enter (stored as the field's numeric precision), default 0 = integers only. Rejected for other question types. Note this is different from the string `precision` of DateField / TimeField.
falseOutcomesNoOutcome scene + TrueFalse only (required there together with trueOutcomes): the outcome codes that answering "false" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fieldNoThe created question, including its generated code
formIdNoThe form that was edited
itemCountNoQuestion / page-break count after the append

TDQS

A4.2/5.0
Behavior5/5

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

The description goes well beyond the all-false annotations by disclosing that the call is not idempotent and that retrying after a timeout can create duplicates. It also specifies that irrelevant fields are either rejected with an explanatory error or ignored, and details scene/type restrictions such as 'Rejected for DateField / TimeField / Rate' and 'scored_quiz only'.

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 long but packed with necessary information for a 24-parameter tool, and it fronts the core purpose before enumerating types. The non-idempotency warning is placed at the end, which is slightly buried but still present; 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?

Between the tool description, the exhaustive schema-level field-applicability text, and the output schema, an agent has everything needed to call this correctly: type/scene rules, scoring semantics, field rejection behavior, and the retry caveat. 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 each parameter already carries detailed semantics (e.g., `multiple` shape, `choice` nesting, `aiMatch` grading). The tool description adds a high-level summary and a few cross-cutting notes (e.g., 'prefer DropDown past 20 choices'), but most parameter detail is redundant with 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 'Append an item to the end of a form', naming the action, resource, and position precisely. The subsequent breakdown of question types reinforces the scope, and the 'to the end' wording implicitly distinguishes it from the sibling insert_question.

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 the tool is for appending to the end of a form, but it never explicitly contrasts it with alternatives such as insert_question for positional insertions or update_question for modifications. The extensive type/scene guidance is about parameter selection rather than tool selection, so an agent gets no explicit when-not guidance.

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

assign_leadsA

Assign one or more leads of the current team to a member, or clear the assignee. Pass every lead id in a single call (up to 50) — do not loop one call per lead. The assignee must be an active non-viewer member (see list_lead_settings.assignableMembers); pass "me" for yourself, or omit / null to unassign. Each change is recorded on the lead's timeline, and the assignee gets one aggregated notification for the whole batch.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdsYesThe lead ids to assign, max 50 per call
assigneeIdNoThe member userId to assign to, or "me" for the current token's own user. Omit (or pass null) to clear the assignee.

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoHow many leads were changed
itemsNoPer-lead result
assigneeIdNoThe member they were assigned to, or null when cleared

TDQS

A5/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, destructiveHint=false), the description discloses side effects: Each change is recorded on the lead's timeline, and the assignee gets one aggregated notification for the whole batch. It also explains unassign behavior and the active non-viewer member requirement, with no contradiction of 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 four compact sentences with no filler; purpose, batching, assignee rules, and side effects each get exactly one sentence. It is front-loaded with the core action before constraints.

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 mutation with an output schema, the description covers what, when, how, constraints, and side effects. There is no missing information an agent needs 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.

Parameters5/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it frames leadIds as a batch that must be passed in one call and adds assignee validity constraints and the me/null convention. This materially improves an agent's ability to set both parameters correctly.

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 pair, Assign one or more leads of the current team to a member, or clear the assignee, which also covers the unassign case. This clearly distinguishes assign_leads from siblings like update_lead, set_lead_tags, or add_lead_comment.

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 batching guidance: Pass every lead id in a single call (up to 50) — do not loop one call per lead. It also references the sibling tool for valid assignees (see list_lead_settings.assignableMembers) and specifies the me vs omit/null semantics.

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

create_formA

Create a form in the team this token is bound to. Pass the questions array and report configuration in one call instead of following up with per-question calls. In the outcome_quiz scene report.outcomes is REQUIRED at create time (TrueFalse votes via trueOutcomes/falseOutcomes). The returned structuredContent.fields carries each question code — read those first, then fill in a scored_quiz report.formula (e.g. q_a + q_b) or a report.dimensionAnalysis via update_form / set_dimension_analysis. Creates the primary language only; add other languages with create_form_translation. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
sceneYesquiz=exam, scored_quiz=scored_quiz, outcome=typing quiz (votes decide which outcome type wins)
themeNoOptional visual theme matching the quiz topic/mood. Default light. Pick the one that best fits the quiz: light (clean neutral bright; default — formal/general quizzes); corporate (professional blue+gray; B2B, career, business assessments); dark (modern sleek dark; tech, night, cool personality quizzes); cupcake (soft pink cute rounded; fun, food, kids, lighthearted); pastel (gentle pastel artsy; lifestyle, aesthetics, soft mood); valentine (pink romantic hearts; love, relationships, holidays); synthwave (neon purple/pink retro; gaming, trends, bold personality); luxury (dark + gold premium; finance, luxury brands, high-end); forest (deep green nature; environment, health, outdoors); coffee (warm brown cozy; food & drink, cafe, lifestyle); autumn (warm orange/brown seasonal; autumn, cozy, harvest); halloween (purple+orange spooky; Halloween, horror, festive fun); night (deep calm blue; astronomy, mindfulness, calm tech); cyberpunk (high-contrast neon yellow; tech, esports, gaming).light
titleYesForm title (1-200 characters)
reportNoReport configuration. knowledge_quiz / scored_quiz: overallAnalysis fields are flat at the top level and dimensionAnalysis is nested (strongly recommended for the scored_quiz scene, optional for the knowledge_quiz scene). outcome: only the outcomes key is allowed, and it is required at create time.
languageNoDefault zh_CNzh_CN
openGraphNoSocial share card (Open Graph) settings: the title / description / image shown when the answer link is shared to social media or chat apps. In update_form each sub-key is merged independently (only the keys you pass change; pass an empty string to clear one). SEO keywords are generated automatically and cannot be set here.
questionsNoOptional. A list of questions/page breaks to create at once, written into form.fields in order. Question types: SingleCheck/MultiCheck/TrueFalse; FillBlank (free text — scored in quiz via correctAnswer, an unscored data-collection field in scored_quiz); DropDown (single or multiple via `multiple`, use it instead of SingleCheck/MultiCheck when there are more than 20 choices); Cascade (hierarchical choices via children, scored_quiz only); Ordering (quiz only, correctAnswer = all choices in the correct order); DateField/TimeField as unscored data-collection fields (scored_quiz only); NumberField (quiz: optional numeric correctAnswer + score; scored_quiz: the submitted number feeds report formulas); Rate (scored_quiz only, the 1..steps rating value is the question score unless per-star scores are set in the web app). Insert a page break with { type: "Breaker" }, which the AI can interleave between questions to paginate. At most 100 items.
systemTextNoOptional. Answer-page system text overrides as a key→text map; empty values are dropped and fall back to the language default.
descriptionNoOptional form description. Allows description-scope rich text (including <img src>). This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe new form id
urlNoAdmin edit URL
sceneNoknowledge_quiz / scored_quiz / outcome_quiz
themeNoAnswer-page theme name
titleNoForm title
fieldsNoEvery question code — read these before writing a formula or dimensions
languageNoPrimary language of the form
outcomesNoOutcome types (outcome_quiz scene only)
shareUrlNoPublic share / answer link
hasReportNoWhether a report configuration was passed
publicTokenNoToken behind the public answer link
questionCountNoHow many questions / page breaks were created

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint/destructiveHint/openWorldHint annotations, the description discloses non-obvious behaviors: the operation is not idempotent, it creates only the primary language, and the returned structuredContent.fields carries question codes that should be read before constructing formulas. These are valuable traits not available in 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?

Six sentences, each earning its place: purpose, usage pattern, scene constraint, response/flow, language scope, and idempotency warning. The order is logical and there is no 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 9-parameter tool with nested objects, the description covers the critical non-schema facts: when to pass questions/report together, how to handle generated codes, scene-specific requirements, language scope, and retry safety. Since an output schema exists, return values are already covered structurally.

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%, giving a baseline of 3. The description adds useful cross-parameter workflow: report.outcomes is required with trueOutcomes/falseOutcomes in the outcome_quiz scene, and report.formula/dimensionAnalysis depend on server-generated question codes. However, the example 'q_a + q_b' omits the required `{{ }}` wrappers that the schema explicitly mandates, making it slightly unreliable.

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 'Create a form in the team this token is bound to', a specific verb+resource+scope statement. It further distinguishes from siblings by explaining that questions and report configuration are created in one call, and by pointing to create_form_translation for other languages.

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 states when to use this tool ('Pass the questions array and report configuration in one call instead of following up with per-question calls') and names alternatives: create_form_translation for additional languages, and update_form / set_dimension_analysis for post-create report configuration. It also provides a clear retry-after-timeout guideline.

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

create_form_from_templateA

Create a new form in the current team from a public template (find template ids with list_templates). Clones the template structure, scoring/report configuration, visual settings, and all language versions in one call; pass title to override the template title. After creation you can adjust it with update_form / update_question etc. This is the fastest way to build a quiz when a suitable template exists — prefer it over building from scratch with create_form. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoOptional new form title; defaults to the template title
templateIdYesThe template ID to create the form from

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe new form id
urlNoAdmin edit URL
sceneNoknowledge_quiz / scored_quiz / outcome_quiz
titleNoForm title
languageNoPrimary language cloned from the template
shareUrlNoPublic share / answer link
publicTokenNoToken behind the public answer link
translationLanguagesNoLanguages cloned along with the structure

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (mutation allowed, not read-only), the description proactively discloses the non-idempotent behavior: 'if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.' It also details exactly what is cloned (structure, scoring/report config, visual settings, all language versions), which is materially useful context not captured by annotations or schema.

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

Conciseness5/5

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

All four sentences earn their place: purpose, scoping/cloning detail, guidance on alternatives, and a critical non-idempotency warning. The main verb and object are front-loaded, and there is no redundant 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?

For a two-parameter tool with an output schema, the description covers everything needed: what it creates, where to get template IDs, what is cloned, how to override the title, how to adjust afterward, when to prefer it, and the retry caveat. With an output schema present, return values need no further explanation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds value by telling the agent to 'find template ids with list_templates' — a concrete source for the templateId parameter — and by clarifying the title override behavior, even though the schema already mentions the default. This extra guidance lifts it to 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 opens with a specific action and resource: 'Create a new form in the current team from a public template.' It distinguishes itself from siblings by explicitly referencing create_form as the alternative to build from scratch and by mentioning subsequent adjustability via update_form/update_question, so an agent can tell this tool 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?

The description gives clear when-to-use guidance: 'prefer it over building from scratch with create_form' when a suitable template exists. It also points to list_templates for finding template IDs and notes post-creation adjustment with update_form/update_question, making both the selection and follow-up path explicit.

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

create_form_translationA

Add a language version (translation) to a form. Clones the source text as the initial draft and returns it so you can translate right away: edit the human-readable text in place, keep every code identical to the source, then save with update_form_translation. The language must differ from the form's primary language, and there is at most one translation per language (see list_form_translations).

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe source form UUID
languageYesTarget language for the new version. Must differ from the form's primary language.

Output Schema

ParametersJSON Schema
NameRequiredDescription
clonedNoThe cloned source draft — translate the text in place, keep every code, then save
formIdNoThe source form
languageNoLanguage of the new version
shareUrlNoPublic link for this language (source token + ?lang=)
translationIdNoThe new translation id

TDQS

A4.2/5.0
Behavior4/5

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

Annotations are minimal (readOnly=false, destructive=false), so the description carries behavioral context. It discloses the cloning behavior, that the return value is the draft to edit, the language constraint, and the at-most-one-per-language rule. 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, each earning its place: the core action, the workflow and next step, and the constraints. The most important information is front-loaded, and there is no padding 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 covers the creation workflow, the return behavior, the uniqueness constraint, and points to the relevant sibling tool. With an output schema and fully documented parameters, this is nearly complete; the only minor gap is explicit error behavior for duplicate or same-primary-language attempts.

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 already documents both parameters at 100% coverage, including the language constraint. The description restates the language constraint without adding new parameter-level detail, so it neither adds nor detracts beyond the baseline.

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 ('Add a language version (translation) to a form') and the resource (a form translation). It also distinguishes itself from siblings like update_form_translation and delete_form_translation by describing the creation-specific clone-and-return behavior.

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 a concrete workflow: create, edit the draft, then save with update_form_translation, and it points to list_form_translations for the one-per-language constraint. It does not explicitly state 'use update_form_translation if a translation already exists,' but the workflow and uniqueness constraint imply this context.

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

delete_formA
Destructive

Move a form into the trash (soft delete) in the current team. The form is hidden from list_forms but kept recoverable for 5 days (then auto-purged); use restore_form to bring it back. Only the form owner / team owner can delete. Submission records are kept until permanent purge.

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe form UUID to move to trash

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe form moved to trash
messageNoHuman-readable result, including how long it stays recoverable

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already convey destructive intent, but the description adds substantial behavioral context: the soft-delete behavior, hiding from list_forms, 5-day retention and auto-purge, reversibility via restore_form, owner/team-owner authorization, and preservation of submission records. This goes well beyond the structured annotation data.

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 dense, purposeful sentences, each contributing essential information: the action and scope, lifecycle and recovery behavior, and permission requirements plus submission handling. No filler or redundant repetition of schema content.

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 is complete for this tool's complexity: it covers scope, effects, recovery, retention, permissions, and data preservation. With an output schema present, return values need not be described, and the annotation set already covers read/destructiveness.

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 parameter formId is fully described in the schema itself. The description doesn't add extra parameter-level detail, but none is needed given the simple one-parameter interface.

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

Purpose5/5

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

States a specific verb and resource: 'Move a form into the trash (soft delete)'. It clearly distinguishes itself from siblings by explicitly contrasting with list_forms and restore_form, and by describing the soft-delete semantics.

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?

Provides explicit context for when to use the tool: when you want to soft-delete a form. It names restore_form as the way to undo, specifies the 5-day recoverable window, and gives an explicit permission constraint ('Only the form owner / team owner can delete'), which acts as a when-not condition.

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

delete_form_translationA
Destructive

Delete one language version (translation) of a form. Submission records are anchored to the source form and are NOT deleted; reports for historical records in this language fall back to the source text. The primary language cannot be deleted this way (it lives on the form itself).

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe source form UUID
languageYesWhich language version to delete

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe source form
deletedNoAlways true on success; submission records are kept
languageNoLanguage version that was deleted

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the destructiveHint=true annotation, the description discloses important non-obvious consequences: submission records are NOT deleted, reports for historical records fall back to source text, and the primary language is not removable through this operation. This is precisely the behavioral context an agent needs before invoking a destructive 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?

Three short sentences, each earning its place: the first states the action, the second explains data-retention implications, and the third states the primary-language exclusion. The essential scoping is front-loaded, with no redundancy or extraneous 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 destructive operation with an output schema and annotations already present, the description covers all the necessary context: what is deleted, what is preserved, fallback behavior for reports, and a hard constraint on the primary language. No critical operational information 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 both formId and language are already documented in the schema. The description's phrase 'language version (translation)' reinforces the meaning of the language parameter and clarifies that formId refers to the source form, but it does not add substantial parameter-level detail 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 names the exact verb and resource: 'Delete one language version (translation) of a form.' It clearly distinguishes this from delete_form by specifying the object is a translation/language version, and it adds the critical constraint that the primary language cannot be deleted.

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 the tool's scope clear: deleting a language version is the intended use, and deleting the primary language is explicitly excluded. It does not explicitly name an alternative tool like delete_form for that case, so it stops short of perfectly explicit routing, but the usage context is otherwise unambiguous.

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

delete_questionA
Destructive

Delete a single question or a page break (Breaker) from a form by code. Deleting the last one is allowed (a form can be an empty shell).

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe code of the question to delete
formIdYesThe form ID the question belongs to

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe form that was edited
deletedCodeNoThe question code that was removed
remainingCountNoQuestion / page-break count left in the form

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already mark the tool destructive, so the description doesn't need to restate that. It adds valuable behavior beyond the annotation by stating that deleting the last element is permitted and that a form can end up as an empty shell. No contradiction with annotations 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 two sentences with no filler. The main purpose is front-loaded, and the important boundary behavior about deleting the last item is separated cleanly. 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 two-parameter destructive tool with an output schema and destructiveHint annotation, the description provides all essential calling context: what gets deleted, how it is identified, and the notable edge case. There are no major gaps that would prevent correct invocation.

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

Parameters4/5

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

The input schema already documents both parameters at 100% coverage with clear descriptions. The description adds extra meaning by revealing that 'code' may refer to either a question or a page break (Breaker), which broadens the interpretation of the schema's 'question' term.

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 ('Delete'), a precise resource ('a single question or a page break (Breaker) from a form'), and the identifier used ('by code'). This distinguishes it from sibling tools like delete_form, which deletes the entire form. There is no ambiguity about what this tool operates on.

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: it is for removing an individual question/breaker from a form, not the whole form. It also clarifies an important edge case—deleting the last item is allowed—so an agent knows not to avoid calling it for fear of invalidating a form. However, it does not explicitly mention alternatives like delete_form or update_question.

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

duplicate_formA

Duplicate a form in the current team: clones its structure, scoring, report, visual settings and all language translations into a brand-new form owned by you (with fresh share links). Does NOT copy submission records, sharing, integrations, or ban state. Useful for cloning a proven quiz and tweaking it. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
newTitleNoOptional title for the copy; defaults to "<source title> (copy)"
sourceFormIdYesThe form UUID to duplicate

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe new (copied) form id
urlNoAdmin edit URL of the copy
sceneNoknowledge_quiz / scored_quiz / outcome_quiz
titleNoTitle of the copy
shareUrlNoPublic share / answer link of the copy
fieldCountNoHow many questions were copied
publicTokenNoFresh token of the copy
translationLanguagesNoLanguages copied along with the structure

TDQS

A4.5/5.0
Behavior5/5

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

The description goes well beyond annotations by detailing side effects: it creates a brand-new form with fresh share links, does not copy submissions/integrations/ban state, and is explicitly non-idempotent with timeout-ambiguity warnings. This is exactly the kind of behavioral context an agent needs beyond readOnly/destructive hints.

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

Conciseness5/5

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

The description is structured effectively: main action and scope first, then exclusions, use case, and a critical non-idempotency warning. Every sentence carries meaningful information with 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?

Given the tool's complexity—mutating, with timeout ambiguity and precise copy/exclusion semantics—the description covers everything needed to call it correctly. It explains what happens, what does not happen, when to use it, and how to handle retries. An output schema exists, so return-value documentation is not required here.

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 already have clear descriptions in the schema. The description adds general context about ownership and fresh links but no extra 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 clearly states the verb 'duplicate' with a specific resource ('a form in the current team') and enumerates exactly what is cloned and what is not copied, such as submission records and sharing. This active scoping differentiates it from related form tools like create_form or create_form_from_template without needing to open 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 provides clear context: 'Useful for cloning a proven quiz and tweaking it.' It also gives guidance on retry behavior after a timeout. It does not explicitly name alternatives or state when not to use this tool, but the intended use case is clear 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.

finalize_image_uploadA

Step 2 of 2 for adding an image: call this AFTER you have PUT the file to the uploadUrl returned by prepare_image_upload. It verifies the uploaded object in storage, records it in the team media library and returns a media id + public URL. To use the image as a quiz cover or a landing-page cover, call update_form with flagImg or landingImage set to the returned media id.

ParametersJSON Schema
NameRequiredDescriptionDefault
altNoOptional alt text for the image.
keyYesThe object key returned by prepare_image_upload.
filenameYesOriginal filename for admin display / download (same value passed to prepare_image_upload).
mimeTypeYesImage MIME type used at prepare time. Must be one of image/png, image/jpeg, image/gif, image/webp.

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyNoPermanent object key
urlNoPublic URL of the stored image
mediaIdNoMedia id — pass it to update_form as flagImg / landingImage
filenameNoOriginal filename
filesizeNoSize in bytes, as measured on storage
mimeTypeNoDetected image MIME type

TDQS

A4.3/5.0
Behavior4/5

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

The description discloses the side effect of recording the image in the team media library and the verification step, which goes beyond the annotations and schema. Annotations only say readOnlyHint=false, so the description usefully clarifies that this is a mutating finalization step, not merely a metadata update.

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 with no wasted words. The prerequisite and step ordering are front-loaded, the action and outcome are stated, and the follow-up usage is a single targeted 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 an output schema present, the description need not spell out the return shape; it still mentions media id + public URL. Combined with the explicit prepare_image_upload prerequisite and update_form consumer guidance, an agent has everything needed to invoke this 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 description coverage is 100%, and each parameter already carries accurate context: key is the object key from prepare_image_upload, filename must match the prepare call, mimeType is the prepare-time MIME type, and alt is optional. The description reinforces the flow but adds no new parameter-level detail.

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 clear action ('call this AFTER you have PUT the file'), a specific resource (the uploaded object / team media library), and a concrete outcome (verifies, records, returns a media id + public URL). It clearly distinguishes itself from prepare_image_upload by framing it as 'Step 2 of 2'.

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?

Usage is explicitly sequenced: it must be called after the PUT to the uploadUrl from prepare_image_upload, and the description gives a follow-up path via update_form for covers. It does not explicitly state when not to call it, but the protocol is unambiguous.

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

get_active_tenantA
Read-only

Return the team (tenant) this token is currently operating against. All write tools default to this team. Also reports examineeSignupDisabled: when true this team has switched respondent self-signup off, so only respondents already on its roster can sign in — every quiz that asks for a login (submissionAccess examinee_only, or login_to_view_report at the report gate) turns away anyone new. Check it before blaming a quiz for "nobody can submit".

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoTeam id
nameNoTeam name
roleNoYour role in this team
slugNoTeam slug
examineeSignupDisabledNotrue = respondent self-signup is off for this team, so any quiz that asks for a login turns away respondents who are not on the roster yet

TDQS

A4.4/5.0
Behavior5/5

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

Annotations already mark this read-only and non-destructive, so the safety bar is met. The description adds meaningful behavior beyond annotations: all write tools default to this tenant, and the examineeSignupDisabled flag has operational consequences for login-gated quizzes. This is exactly the kind of context an agent needs.

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 core purpose is front-loaded in the first sentence, followed by the tenant-default behavior and then the flag explanation. Every sentence adds distinct value, and the practical troubleshooting tip is phrased 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?

With no parameters, an output schema, and read-only annotations, the remaining burden is explaining what the output means and when to care. The description does that thoroughly, including the exact login scenarios affected by examineeSignupDisabled.

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 baseline is 4. There is nothing for the description to clarify, and the schema already confirms an empty input. No deduction is warranted.

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 starts with a clear verb and resource: 'Return the team (tenant) this token is currently operating against.' It also names the secondary returned signal, examineeSignupDisabled. It doesn't explicitly name or contrast a sibling like switch_active_tenant, so it doesn't fully earn the sibling-differentiation point, but 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 Guidelines4/5

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

It gives a concrete use case: check this tool before diagnosing why nobody can submit, and explains how the signup-disabled flag affects login-gated quizzes. It doesn't mention alternatives or exclusions, but for a read-only getter with no parameters, this is useful contextual guidance.

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

get_booking_availabilityA
Read-only

Read the current team's bookable time slots in a date range, computed from the team's weekly booking rules minus what is already taken. Returns enabled:false when the team has booking switched off or the plan does not include it. Pass bookingId to get the slots for rescheduling that booking (its own slot is not counted as taken) — always call this before reschedule_booking, since a start time outside the available slots is rejected. The range is clamped server-side if you ask for too many days.

ParametersJSON Schema
NameRequiredDescriptionDefault
toDateYesRange end (exclusive), ISO datetime
fromDateYesRange start, ISO datetime
bookingIdNoOptional: compute availability for rescheduling this booking, excluding the slot it currently occupies. Omit to see availability for the team as a whole.

Output Schema

ParametersJSON Schema
NameRequiredDescription
slotsNoBookable start times as ISO datetimes — reschedule_booking only accepts one of these
enabledNofalse when the team has booking off or the plan does not include it
timezoneNoThe team's booking timezone
slotSeatsNoPer-slot capacity
requireApprovalNoWhether new requests need approval (returned when booking is off)
slotDurationMinutesNoLength of one slot

TDQS

A4.9/5.0
Behavior5/5

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

Annotations already signal read-only and non-destructive, and the description adds meaningful behavior beyond that: the enabled:false return case, server-side range clamping, and the special exclusion of a booking's own slot when rescheduling. These are exactly the non-obvious behavioral details an agent needs.

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?

Four dense sentences with no filler, front-loaded with the primary action and followed by edge cases and usage guidance. Every sentence earns its place and adds information an agent cannot reliably infer from schema or annotations alone.

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 availability tool with an output schema, annotations, and related siblings, the description covers the core behavior, failure mode (enabled:false), range limiting, rescheduling prerequisite, and bookingId semantics. Nothing material is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds genuine value for bookingId by explaining its rescheduling purpose and the 'own slot is not counted as taken' behavior. It also clarifies that date ranges may be clamped server-side, going beyond the schema's basic field 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?

States a specific verb 'Read' and resource 'the current team's bookable time slots in a date range', and explains how the slots are computed ('weekly booking rules minus what is already taken'). This clearly distinguishes it from booking-management siblings like list_bookings or update_booking_status.

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 instructs to call this before reschedule_booking, explains why ('a start time outside the available slots is rejected'), and tells when to pass bookingId. This gives an agent a clear decision rule for when and how to use the tool.

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

get_examineeA
Read-only

View the full detail of one examinee (a.k.a. respondent) in the current team by its examineeId (the business ID shown in list_examinees, e.g. AB1234567890), including customData. Sensitive auth fields are never returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
examineeIdYesThe examinee business ID (e.g. AB1234567890), as shown in list_examinees

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoMasked name (J*n)
emailNoMasked email (j***g@example.com); never pass it back as an argument
avatarNoUploaded avatar as { id, url }
statusNoAccount status
tenantNoTeam (tenant) the respondent belongs to
createdAtNoISO datetime of first sign-up
updatedAtNoISO datetime of the last change
customDataNoTeam-defined custom fields; phone-typed values come back masked
examineeIdNoBusiness ID of the respondent (e.g. AB1234567890) — use it to address them
avatarPresetNoPreset avatar key, when no image was uploaded
emailVerifiedNoWhether the email has been verified

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description does not need to restate safety. It adds useful behavioral context beyond annotations: 'Sensitive auth fields are never returned' and that customData is included. This helps an agent understand the response boundary.

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 behavior and key parameter are front-loaded, and the sensitive-field caveat is placed as a concise follow-up. 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?

Given an output schema exists and the tool has only one parameter, the description is complete. It states scope (current team), the ID source, included data (customData), and an important exclusion (sensitive auth fields). No critical information needed 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.

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 fully documents examineeId as the business ID shown in list_examinees. The description repeats this example and adds the alias 'respondent,' but it does not meaningfully extend the parameter semantics 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 uses a specific verb ('View the full detail of one examinee'), names the resource ('examinee / respondent'), and specifies the lookup key ('examineeId'). It clearly distinguishes this from list_examinees and update_examinee by indicating it returns the full detail of a single examinee, including customData.

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 context: it is for viewing one examinee by business ID, scoped to the current team, and references list_examinees as the source of the ID. It does not explicitly state when not to use it or mention alternatives, but the single-resource vs. list distinction is implied strongly enough.

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

get_formA
Read-only

View one form of the current team in full, including the questions list fields[] and the report configuration. For outcome forms, the outcome codes that question votes reference live in report.outcomeAnalysis.outcomes. language is the primary language; existing non-primary language versions are listed in translationLanguages.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe form UUID
includeFieldsNoWhether to return fields[] (raw data of questions + page breaks), default true. For large forms you can pass false to skip
includeReportNoWhether to return the report configuration, default true

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoForm id
sceneNoknowledge_quiz / scored_quiz / outcome_quiz
themeNoAnswer-page theme name
titleNoForm title
fieldsNoFull question list with code / choices / scoring (only when includeFields)
reportNoReport configuration, trimmed to the scene (only when includeReport)
isActiveNoWhether the form is open for submissions
languageNoPrimary language
shareUrlNoPublic share / answer link
createdAtNoISO datetime
openGraphNoSocial share card { title, description, image, keywords }
updatedAtNoISO datetime
systemTextNoOverridden system copy, keyed by text key
descriptionNoForm description
publicTokenNoToken behind the public answer link
translationLanguagesNoLanguages that already have a translation

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context beyond annotations: it identifies where outcome codes live (report.outcomeAnalysis.outcomes) and clarifies the meaning of language fields in the response.

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 carry substantial, non-redundant information. The main purpose is front-loaded, and the follow-up sentences add only high-value context about outcome analysis and translation languages.

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 single-form retrieval tool with one required parameter and an output schema, the description is complete: it states scope, what is returned, and two edge-context behaviors. Nothing essential for the agent 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.

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all three parameters well. The description mentions fields[] and report configuration, which loosely map to includeFields and includeReport, but does not add meaningful parameter-level detail beyond the schema.

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

Purpose5/5

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

The description opens with a specific verb and resource: 'View one form of the current team in full,' and clarifies what is included (questions list fields[] and report configuration). This clearly distinguishes it from siblings like list_forms and get_form_translation.

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 context: use it to view a single form in detail, including raw question data and report config. It does not explicitly name alternatives or exclusions, but the scope is unambiguous enough to guide selection among the many sibling tools.

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

get_form_funnelA
Read-only

Read the conversion funnel for a form in the current team over the last N days, from the form_sessions telemetry: overall stages (viewed → started → submitted → leadCaptured → reportViewed → ctaClicked → shared), per-channel funnel (by utm_source, with embedded flag), UTM combos, and drop-off points (which question unsubmitted sessions stalled on). Use this to find where respondents drop and improve conversion.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days, default 30, max 180
formIdYesThe form UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysNoLook-back window actually used
formIdNoThe form this funnel belongs to
dropOffNoWhere unsubmitted sessions gave up
overallNoStage counts: { viewed, started, submitted, leadCaptured, reportViewed, ctaClicked, shared }
channelsNoFunnel split by channel
utmCombosNoFunnel split by UTM combo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context beyond that: the scope ('in the current team'), the telemetry source ('form_sessions'), and the exact stage/breakdown details. No contradiction with annotations.

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

Conciseness4/5

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

The description is dense but not bloated. It front-loads the verb and resource, uses a colon to organize the breakdown list, and ends with a practical usage sentence. Every segment contributes information, though the enumeration is long.

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 only needs to convey scope, timing, and intended use, which it does thoroughly. It covers the team scope, the look-back window, the breakdown dimensions, and the drop-off analysis use case. Nothing needed 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 both formId and days are already documented with defaults and bounds. The description only echoes 'form' and 'last N days' without adding new parameter 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 opens with a specific verb and resource: 'Read the conversion funnel for a form...' and enumerates the exact breakdowns available (overall stages, per-channel, UTM combos, drop-offs). This clearly differentiates it from sibling tools like get_form_stats or list_records.

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 states a clear use case: 'Use this to find where respondents drop and improve conversion.' It does not explicitly name alternatives or when-not-to-use scenarios, but the funnel-specific context makes the appropriate usage apparent.

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

get_form_share_infoA
Read-only

Everything needed to put a form of the current team in front of an audience: the public answer link (also per language version), the team's custom domain and whether it is actually serving, ready-to-paste embed snippets in three modes (inline / popup / iframe), and the current delivery settings so you can tell whether the form will even accept responses. Pass utmSource to get every link and snippet tagged for one channel. Use this to answer "give me the link / the embed code" and to sanity-check a launch; change the switches with update_form_settings.

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe form UUID
utmSourceNoOptional channel tag applied to the links and snippets (letters, digits, _ and - only, max 64). Omitted or invalid = no tag, in which case the embed script forwards whatever utm_* the host page already has.
iframeHeightNoOptional pixel height for the iframe snippet, default 600
popupButtonTextNoOptional label for the popup-mode button; empty uses the built-in default

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugNoCustom path under the custom domain; only shapes shareUrl while that domain is serving
embedNoCopy-paste embed snippets { inline, popup, iframe }; null when the form has no public token
titleNoForm title
formIdNoThe form
deliveryNoDelivery state: { isActive, submissionAccess, reportGateRequireCode, timeLimit, sharing, answerSheet, booking, gaTrackingId, sharedWithAll }; get_form_share_info adds the team-level examineeSignupDisabled (respondent self-signup off = a login-gated quiz turns away anyone not on the roster)
shareUrlNoThe link to hand out (custom domain when one is serving)
publicTokenNoToken behind the public answer link
customDomainNoCustom-domain state { domain, status, serving, plan }
languageUrlsNoOne link per language version
defaultShareUrlNoThe same quiz on the default domain — always works

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true, and the description reinforces this by presenting only read-oriented outputs like 'current delivery settings' and by explicitly deferring changes to update_form_settings. It adds meaningful behavioral detail beyond annotations, such as how omitted or invalid utmSource affects the embed script's forwarding of utm_* parameters.

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 efficient, front-loading the main value proposition and then compactly guiding usage. It is a long first sentence, but each listed item contributes to the output picture without unnecessary 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 a rich output schema, high parameter coverage, and explicit annotations, the description covers all essential operational context: what the tool returns, when to use it, how to pass the optional channel tag, and which sibling tool handles modifications. Nothing needed for a correct call 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?

Schema coverage is 100%, so the baseline is 3, but the description adds useful semantic context for utmSource by explaining its channel-tagging purpose and effect on all links and snippets. It also functionally signals that iframeHeight and popupButtonText are optional output customizations, though the schema already documents them well.

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, specific purpose: retrieving everything needed to share a form, including the public answer link, custom domain status, embed snippets, and delivery settings. It clearly distinguishes this read-only retrieval tool from siblings like update_form_settings by naming the tool that performs the mutation.

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 explicitly says when to use the tool: to answer 'give me the link / the embed code' and to sanity-check a launch. It also directs the user to update_form_settings when changes are needed, providing a clear alternative and excluding misuse.

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

get_form_statsA
Read-only

Read submission statistics for a form in the current team over the last N days: KPI overview (total / today / last 7 / last 30, unique examinees, anonymous, report status counts, average score, latest submission), daily submission trend, channels (by utm_source), UTM combos, login types (anonymous vs registered), device breakdown, and per-question answer distributions. Use this to gauge how a quiz is performing and to suggest improvements.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoLook-back window in days, default 30, max 180
formIdYesThe form UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
daysNoLook-back window actually used
trendNoOne entry per day in the window, zero-filled
formIdNoThe form these stats belong to
devicesNoSubmissions by device type
channelsNoSubmissions by utm_source
overviewNoKPI block: { totalSubmissions, todaySubmissions, yesterdaySubmissions, last7daysSubmissions, last30daysSubmissions, uniqueExaminees, anonymousSubmissions, reportCompleted, reportFailed, reportPending, avgScore, latestSubmittedAt }
utmCombosNoSubmissions by UTM combo
loginTypesNoAnonymous vs registered submissions
answerDistributionsNoPer-question answer distribution (choice-style questions only)

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description starts with 'Read', which is consistent. It adds meaningful behavioral context by specifying team scoping, the time window, and the full breadth of returned statistics, giving the agent a good sense of what an invocation will produce. It does not cover performance or rate limits, but the annotations and output schema lower the 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?

The description is dense but every element earns its place: the opening verb/resource/scope, the detailed list of returned statistics, and the closing use case. It is front-loaded with the core action and uses an em-dash list to keep the information structured and 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?

Given the tool's moderate complexity, the 100% schema coverage, the presence of an output schema, and annotations covering safety, the description is complete. It explains what the tool does, what data it operates on, the team scope, the time-window parameter, and the intended usage. Nothing essential 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 coverage is 100%: formId and days both have descriptions in the input schema. The description reinforces the meaning of days ('last N days') and adds the 'current team' scope, but it does not add parameter-level detail beyond the schema, 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 opens with a specific verb and resource: 'Read submission statistics for a form in the current team over the last N days.' It then enumerates the exact categories of statistics returned, making it easy to distinguish from the form CRUD siblings and from get_form_funnel even without opening the schema.

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

Usage Guidelines4/5

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

The description gives an explicit intended use: 'Use this to gauge how a quiz is performing and to suggest improvements.' It does not mention alternatives or exclusions, but the clear use case and the read-only scoping in the first sentence provide enough context 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.

get_form_translationA
Read-only

Read the full content of one language version (translation) of a form, including the mirrored fields[] and report. Use this to fetch the current draft before translating: edit the human-readable text in place, keep every code identical to the source form, then save with update_form_translation. Returns an error if that language version does not exist yet (create it first with create_form_translation).

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe source form UUID
languageYesWhich language version to read

Output Schema

ParametersJSON Schema
NameRequiredDescription
titleNoTranslated title
fieldsNoTranslated questions, mirroring the source codes
formIdNoThe source form
reportNoTranslated report copy
isActiveNoWhether this language version is live
languageNoLanguage of this version
shareUrlNoPublic link for this language
updatedAtNoISO datetime
systemTextNoTranslated system copy
descriptionNoTranslated description

TDQS

A4.7/5.0
Behavior5/5

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

Beyond the readOnlyHint annotation, the description discloses concrete behavior: it returns an error when the language version does not exist yet, includes mirrored fields[] and report in the result, and assumes a specific editing workflow. This is meaningful behavioral context that is not present in the annotations or schema alone.

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, each earning its place: the first states what the tool does, the second gives workflow guidance, and the third covers the error case and prerequisite. Information is front-loaded and there is no redundancy or 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 tool is simple (two parameters) and has a full output schema, so return-value details need not be repeated. The description covers the success case, error case, prerequisite, and how this tool fits into the broader translation workflow, making it 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%, so both formId and language are already fully described, including the language enum. The description does not add parameter-level details beyond what the schema provides, so the high-coverage 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 operation: 'Read the full content of one language version (translation) of a form.' It also specifies what is included ('mirrored fields[] and report') and distinguishes this read tool from related siblings like update_form_translation and create_form_translation.

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 explicitly tells the agent when to use this tool ('Use this to fetch the current draft before translating') and names the follow-up tool ('save with update_form_translation'). It also gives an important exclusion condition: if the language version doesn't exist, create it first with create_form_translation.

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

get_leadA
Read-only

View one lead of the current team by leadId: follow-up status, assignee, colour tags, the respondent block, and the next upcoming booking. Optionally include the respondent's submission history (which quizzes they took, with score / level), the team's internal follow-up comments, and the change timeline (status / assignee / tag changes plus submissions). Reference a lead by its leadId and a respondent by examineeId, never by a masked email.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead id (the leadId returned by list_leads)
includeRecordsNoInclude the respondent's submission history (default true)
includeCommentsNoInclude the internal follow-up comments written by team members (default false)
includeActivitiesNoInclude the change timeline: status / assignee / tag changes and submissions (default false)

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsNoColour tag codes on this lead
leadIdNoLead id — address a lead by this, never by a masked email
statusNoFollow-up status code (team-defined, see list_lead_settings)
recordsNoSubmission history as { totalDocs, items } (unless includeRecords was false)
assigneeNoThe member handling this lead as { id, email, username }, or null
commentsNoInternal follow-up notes written by team members (only when includeComments)
createdAtNoISO datetime the lead was created
firstFormNoThe quiz that first captured this lead as { id, title }
activitiesNoChange timeline as { totalDocs, items } (only when includeActivities)
respondentNoThe respondent { id, examineeId, email, name, customData, ... }, PII masked
nextBookingNoThe next active booking of this respondent, or null
recordCountNoHow many times this respondent submitted
lastRecordAtNoISO datetime of the most recent submission
firstRecordAtNoISO datetime of the first submission

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already signal read-only and non-destructive behavior, and the description adds task-relevant context such as current-team scoping, optional inclusions, and the leadId/examineeId addressing rule. It does not cover error cases or defaults, but the annotation safety profile lowers the burden.

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 dense paragraph with a front-loaded purpose, a colon-delimited payload list, and a closing ID rule. It is information-dense without filler; only the somewhat run-on structure prevents a 5.

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 annotations, an output schema, and full schema parameter coverage, the description is contextually adequate: it states what is returned, which flags affect breadth, and the team/ID scoping. It does not state exact when-to-use alternatives, but that is a minor gap for a single-item getter.

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 baseline is 3. The description's optional-inclusions wording maps loosely to the boolean flags but adds no parameter details 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?

Description names a specific verb ('View'), a resource ('one lead of the current team'), a key ('leadId'), and enumerates what is included. This clearly distinguishes get_lead from list_leads and get_examinee 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 context: use this for a single lead scoped to the current team, and it supplies an explicit identifier constraint ('never by a masked email'). It does not explicitly name sibling alternatives such as list_leads for multi-lead views, so it falls short of a full 5.

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

get_recordA
Read-only

View the full detail of one submission record (lead) in the current team by its record id (the id field returned by list_records), including the examinee, the submitted answers, UTM metadata and the complete frozen report result (overall / dimensions / outcome / AI evaluation). Answers are returned as the respondent wrote them, except that any email address or phone number inside them comes back masked.

ParametersJSON Schema
NameRequiredDescriptionDefault
recordIdYesThe record id (the `id` returned by list_records)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoRecord id — address a submission by this
dataNoThe submitted answers keyed by question code, as typed by the respondent — with any email address or phone number inside them masked
formIdNoThe quiz this submission belongs to
examineeNoThe respondent { id, examineeId, email, name, customData }, PII masked
metadataNoChannel attribution { utmSource, utmMedium, utmCampaign, utmTerm, utmContent, referrer }
reportUrlNoPublic report page URL for this submission
updatedAtNoISO datetime of the last change
shareTokenNoToken that makes this single report page shareable
submittedAtNoISO datetime of submission
reportResultNoThe complete frozen report { status, overallAnalysis, dimensionAnalysis, outcome, aiEvaluation, aiSuggestion }
serialNumberNoPer-form sequence number of the submission

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the readOnlyHint and destructiveHint annotations, it discloses meaningful behavior: the returned report is frozen, answers are returned as written, and email addresses or phone numbers are masked. It also clarifies team scope and that the full report structure is 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?

The description is front-loaded with the core purpose, then efficiently enumerates the significant output components and a special masking behavior. Every sentence carries useful information without filler or unnecessary 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 single-parameter read tool with rich annotations and an output schema, the description supplies all necessary context: what the record contains, how to identify it, current-team scope, and the masking caveat. Nothing important 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% and the description essentially restates the schema's parameter explanation: recordId is the id from list_records. The description adds no new details about the parameter's format, constraints, or behavior 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 opens with a precise verb and resource: 'View the full detail of one submission record (lead)...' and explicitly scopes it by record id, distinguishing it from list_records and other sibling tools like get_lead. It clearly states what the returned detail includes.

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 it: when you need full detail for one record identified by the id from list_records. It does not explicitly state when not to use it or name alternatives, but the scoping and id reference give solid context.

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

insert_questionA

Insert an item (question or page break) at a specific position. type can be a question type or Breaker. Use after / before to reference an existing field code (from get_form's field.code). To insert at the very front: before references the first field's code. To insert at the end, use add_question. Not idempotent: if the call times out it may still have succeeded, so retrying blindly can create a duplicate — check first, then retry only if it is really missing.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoNumberField only: maximum allowed input value (must be >= min). Rejected for other question types.
minNoNumberField only: minimum allowed input value (respondents cannot submit a smaller number). Rejected for other question types.
codeNoOptional stable identifier for this question (field code). Omit it to let the server auto-generate one. Set a meaningful code (e.g. "q1") when report.formula or a dimension needs to reference this question, so you can write the formula as `{{q1}}` in the same call instead of round-tripping via get_form. Rules: start with a letter or underscore, then only letters/digits/underscores (no hyphens, spaces, or leading digit), at most 64 chars, and not a reserved math word (e, E, pi, PI, tau, phi, i, Infinity, NaN, true, false, null, undefined). Must be unique among all items in the form.
nameNoQuestion stem text. Allows plain text or restricted HTML (tag allowlist: <p> <strong>/<b> <em>/<i> <u> <s> <mark> <span> <sup> <sub> <br>; other tags are stripped and the text kept).
typeYesQuestion type; Breaker means a page break, no name/choices etc. needed
unitNoNumberField only: display unit suffix shown after the input, e.g. "kg" / "$" / "min". Rejected for other question types.
afterNoInsert after this code; choose either after or before
scoreNoPoints this question is worth, default 0 (not scored). Quiz scene: awarded when the answer matches correctAnswer, and a positive value is required once correctAnswer is set. Scored Quiz scene: pairing it with correctAnswer enables the fallback mode above, but choices[i].score is more flexible. Rejected in the outcome_quiz scene, for DateField / TimeField / Rate, and — in the scored_quiz scene — for NumberField (where the submitted number itself is the score) and FillBlank (collected only, never scored).
stepsNoRate only: number of rating steps, i.e. the highest rating (3-10, default 5). In the scored_quiz scene the submitted rating value (1..steps) is the question score, unless a per-star score is configured in the web app. Rejected for other question types.
wordsNoRate only: optional scale labels evenly distributed under the rating control, e.g. ["Poor", "Excellent"] for the two endpoints (up to 5 labels). Rejected for other question types.
beforeNoInsert before this code; choose either after or before
formIdYesThe form ID to insert the item into
aiMatchNoOnly for FillBlank in the knowledge_quiz scene. Enables AI grading: the AI compares the respondent answer against correctAnswer and scores by accuracy, instead of requiring an exact string match. Requires correctAnswer (the standard answer) and score > 0 (the score earned when accuracy reaches the threshold). Pass an empty object {} to enable with default settings; omit for plain exact-match grading.
choicesNoChoice-based questions only (SingleCheck / MultiCheck / DropDown / Ordering / Cascade), where it is required; ignored for every other type, including TrueFalse — its two options come from trueLabel / falseLabel. Per-type limits: SingleCheck / MultiCheck 2-20 items — for a longer list use DropDown (2-100 items) instead; Ordering 2-10 items; Cascade nests via choices[i].children (up to 3 levels, at most 100 nodes in total). IMPORTANT (knowledge_quiz scene): vary the position of the correct option(s) across questions — do NOT always place the correct answer first. Distribute correct answers roughly evenly over all positions so they are not predictable.
explainNoOptional answer explanation. The frontend renders it in the question's "answer explanation" field (DescriptionEditor); the rich-text rules are identical to description. Do not stuff the answer explanation into description — that is the question's supplementary note and will not be shown as an explanation to respondents/graders.
shuffleNoOrdering only: shuffle the displayed choice order for each respondent. Defaults to true for MCP-created questions — the stored choices order would otherwise leak the correct order when correctAnswer matches it. Pass false only when the initial order is intentionally meaningful. Rejected for other question types.
multipleNoDropDown only: allow selecting multiple options (default false = single select). Affects the quiz-scene correctAnswer shape: an array of labels/codes when true, a single one when false. Rejected for other question types (SingleCheck/MultiCheck are inherently single/multi).
requiredNoWhether the question is required, default false
precisionNoDateField / TimeField only: picker precision. DateField accepts year | month | day | hour | minute | second (default day; e.g. "month" shows a year-month picker, "second" a full datetime picker). TimeField accepts only minute | second (default minute). Ignored for other question types.
trueLabelNoTrueFalse only: custom display text for the "true" option (e.g. "Yes" / "Agree"). Ignored for other question types. Leave empty to fall back to the built-in default for the form language ("Correct" in English forms). Does not change the stored answer value, which stays "true".
falseLabelNoTrueFalse only: custom display text for the "false" option (e.g. "No" / "Disagree"). Ignored for other question types. Leave empty to fall back to the built-in default for the form language ("Incorrect" in English forms). Does not change the stored answer value, which stays "false".
descriptionNoOptional supplementary note for the question. Allows a wider HTML subset: everything the stem allows + <h1>-<h6> <ul> <ol> <li> <blockquote> <a href> <img src> <hr> <art-field> (variable placeholder, data-type / data-cid); unsafe protocols (javascript:/data:) and unknown attributes are stripped. This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.
trueOutcomesNoOutcome scene + TrueFalse only (required there together with falseOutcomes): the outcome codes that answering "true" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes.
correctAnswerNoThe "correct answer" of the knowledge_quiz scene; setting it makes the question scored, so pair it with a positive `score`. The shape follows the question type — see the anyOf branches; a choice is referenced by its label or its code, so reference it by code whenever the same label appears more than once (Ordering rejects an ambiguous label outright). Required on SingleCheck / MultiCheck / DropDown / Ordering in the knowledge_quiz scene, optional on FillBlank / NumberField there. NumberField answers must be typeable within min / max and decimalPlaces. Rejected for DateField / TimeField / Rate (data-collection and rating fields; configure date/time scoring in the web app), rejected for FillBlank in the scored_quiz scene (free text is collected only there), and rejected in the outcome_quiz scene (no right or wrong answers there). In the scored_quiz scene prefer choices[i].score per option; passing correctAnswer + score there only falls back to "the matching choice gets score, others get 0".
decimalPlacesNoNumberField only: how many decimal places respondents may enter (stored as the field's numeric precision), default 0 = integers only. Rejected for other question types. Note this is different from the string `precision` of DateField / TimeField.
falseOutcomesNoOutcome scene + TrueFalse only (required there together with trueOutcomes): the outcome codes that answering "false" votes for. Use [] for a side that votes for nothing. Rejected for other question types / scenes.

Output Schema

ParametersJSON Schema
NameRequiredDescription
fieldNoThe created question, including its generated code
formIdNoThe form that was edited
positionNo0-based index the question landed at
itemCountNoQuestion / page-break count after the insert

TDQS

A4.6/5.0
Behavior4/5

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

The annotations are all false/neutral (readOnlyHint=false, destructiveHint=false), so the description carries the burden and delivers: it discloses that the call is not idempotent, that a timeout may still mean success, that blind retries can duplicate items, and prescribes a check-then-retry strategy. This is exactly the kind of non-obvious behavioral trait an agent needs. It stops short of a 5 only because it doesn't touch on post-success effects or reversibility.

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?

Four sentences, zero filler. The core purpose is front-loaded, followed by the positioning mechanics, the sibling route for the end case, and the idempotency warning. Every sentence carries load and the most critical operational caveat (retry behavior) is placed last where the risk context has been built.

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 complex (26 params, nested choices/aiMatch) but the schema is exceptionally rich — every parameter documented and a long FIELD APPLICABILITY note covers per-type/per-scene rules — so the description need not restate parameters. It supplies exactly the missing operational layer: positioning semantics, the get_form reference mechanism, end-case routing, and retry policy. An output schema exists, so return values need no explanation. A 5 would require something additional the agent still needs that isn't covered.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the schema already documents every parameter thoroughly. The description adds genuine value on top for the positional parameters: after/before values come from get_form's field.code, and 'before the first field's code' is the front-insertion trick — detail the schema's terse 'Insert after this code; choose either after or before' does not convey.

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+scope: 'Insert an item (question or page break) at a specific position.' It immediately distinguishes itself from the sibling add_question by scoping to positional insertion (front/middle) versus appending, so an agent can tell them apart without reading either schema.

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

Usage Guidelines5/5

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

The description explicitly names the alternative and the selecting condition: 'To insert at the end, use add_question.' It also gives the mechanical recipe — reference existing field codes from get_form's field.code via after/before, and use before on the first field's code for front insertion. No inference is required.

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

invite_memberA

Invite someone to the active team (tenant) by email. Sends an invitation email with a join link and returns that link. Only the team owner or an admin can invite; the call is rejected for other roles. role defaults to "member" and may be "viewer" (read-only) or "admin" (only the owner may grant admin). You cannot invite someone as the owner. Fails if the email is already a member or already has a pending invite, or if the team has hit its member limit. Operates on the team this token currently targets — use list_my_tenants / switch_active_tenant to change teams first.

ParametersJSON Schema
NameRequiredDescriptionDefault
roleNoRole to grant. Defaults to "member". "admin" can only be granted by the team owner.
emailYesEmail address of the person to invite.

Output Schema

ParametersJSON Schema
NameRequiredDescription
roleNoRole granted by the invite
emailNoAddress the invite was sent to
inviteUrlNoThe invite link that was emailed — you may relay it to the user
inviteTokenNoToken embedded in the invite link
membershipIdNoThe created membership record
isUserRegisteredNoWhether that address already had a RooQuiz account

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false), the description reveals the real-world side effect (sending an email), the authentication/role requirements, and all notable rejection cases such as already-member, pending invite, and member limit. This gives an agent a complete behavioral model without needing to invoke 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?

The description is dense but every sentence earns its place: purpose, side effect, permissions, role constraints, failure modes, and team-targeting context are all covered in about four sentences. The core action is front-loaded, and there is no filler or repetition that would dilute an agent's attention.

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 tool with side effects, authorization constraints, and multiple failure paths, the description covers all the contextual information an agent needs: how the active tenant is determined, how to switch it, what roles are available, and exactly when the call will fail. The output schema covers the return shape, so the description need not expand 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 schema already covers the role enum and the default, but the description adds meaning by clarifying that 'viewer' is read-only, that no one can be invited as owner, and that the invite fails for already-member or already-pending emails. This goes beyond the raw schema definitions and informs role choices.

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: 'Invite someone to the active team (tenant) by email.' It also states the side effect (sends an invitation email) and return value (the join link), leaving no ambiguity about what the tool does or how it differs from other team-management tools.

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 explicitly says when the call is permitted (team owner or admin only) and rejected for other roles, and it gives concrete routing guidance: operate on the currently targeted team first, using list_my_tenants / switch_active_tenant to change teams. It also names the failure conditions that would make the call invalid.

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

list_bookingsA
Read-only

List the 1:1 bookings (discovery calls / consultations booked from a quiz report page) of the current team, earliest first. Each item carries the time range, status, meeting type, the attendee, the source quiz and submission, and the lead owner who should handle it. Filter by status / quiz / respondent / time range. Typical use: status "pending" lists the approval queue waiting on someone. Reference a booking by its bookingId; the attendee name / email come back masked.

ParametersJSON Schema
NameRequiredDescriptionDefault
toNoOnly bookings starting strictly before this ISO datetime, optional
fromNoOnly bookings starting on/after this ISO datetime, optional
pageNoPage number (1-based), default 1
sortNoSort by start time, default startAt (earliest first)
limitNoItems per page, default 20, max 100
formIdNoOnly bookings that came from this quiz, optional
statusNoFilter by status. pending = a request awaiting approval (the team has requireApproval on), scheduled = a confirmed meeting, the rest are terminal. Optional.
recordIdNoOnly bookings tied to this submission record, optional
examineeIdNoOnly bookings by this respondent — the internal examinee id (get_lead's respondent.id), not the examineeId business code. Optional.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo1-based page returned
itemsNoThe page of bookings (earliest first by default)
totalDocsNoTotal bookings matching the filter
totalPagesNoTotal pages available

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already convey readOnlyHint and non-destructive intent, and the description adds meaningful context: bookings are scoped to the current team, attendee names/emails come back masked, and statuses carry workflow semantics (pending = approval queue). No contradiction with annotations.

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

Conciseness4/5

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

Four sentences, each carrying distinct useful information: scope/order, item fields, filter capabilities, typical use, and masking behavior. The description is well front-loaded and contains no filler.

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

Completeness4/5

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

For a read-only list operation with an output schema and safety annotations, the description adequately covers entity type, included fields, filtering, ordering, identification, and privacy masking. Pagination and sort details are left to the schema, which is acceptable.

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 describes all 9 optional parameters with 100% coverage, so the description need not repeat per-parameter detail. It adds only a high-level filter summary and a bookingId reference for downstream use, which doesn't deepen parameter 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?

Clearly states the verb 'List' and the resource '1:1 bookings of the current team', with a clarifying parenthetical about discovery calls/consultations and the default order. This differentiates it from sibling tools like list_leads and list_records without needing to open their 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?

Provides a concrete typical use case ('status "pending" lists the approval queue waiting on someone') and summarizes filtering options, giving an agent a clear context for invocation. It does not explicitly name alternative tools for mutating bookings, 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.

list_examineesA
Read-only

List the examinees — also called respondents, the people who answer the quizzes — of the current team, newest first. Sensitive auth fields (password, verification code, reset token, etc.) are never returned. The examineeId business ID is returned unmasked and is what get_examinee / update_examinee take. Use get_examinee for one examinee's full detail including customData.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoItems per page, default 20, max 100
searchNoFuzzy match by email or name, optional
statusNoFilter by status, optional

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoHow many are returned in this page
itemsNoThe page of respondents (newest first), PII masked
totalNoTotal respondents matching the filter

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, which cover the safety profile. The description adds significant behavior beyond the annotations: 'newest first' ordering, sensitive auth fields never returned, and the examineeId being returned unmasked for use in other tools. This is valuable context that an agent needs to interpret results correctly.

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, each earning its place: purpose and scope, data exclusion behavior, and routing to related tools. The key outcome 'newest first' is front-loaded, and there is no fluff or repetition of schema content.

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 list tool with an output schema already describing the response shape, the description completes the picture: it defines the resource, the team scope, ordering, sensitive-field redaction, and how the returned ID feeds into sibling tools. Nothing an agent needs to call or interpret 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 description coverage is 100%, with each parameter (limit, search, status) already documented in the input schema. The description does not add parameter-level details such as formats or defaults — it focuses on result behavior. Baseline 3 is appropriate since the schema carries the parameter semantics.

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 'List' and the resource 'examinees', and even clarifies synonyms ('respondents'). It distinguishes itself from get_examinee by indicating that this returns a list while get_examinee returns full detail, making sibling differentiation explicit.

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 states when to use an alternative: 'Use get_examinee for one examinee's full detail including customData.' It also scopes usage to the current team and notes the returned examineeId as the input for get_examinee/update_examinee, giving clear routing guidance.

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

list_formsA
Read-only

List the forms of the current team. Returned in reverse chronological order of creation, without question content (use get_form for details).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoItems per page, default 20, max 100
sceneNoFilter by scene, optional
titleContainsNoFuzzy match by title, optional

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNoThe page of forms (newest first)
totalDocsNoTotal forms matching the filter

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already mark this as read-only and non-destructive; the description adds genuinely useful behaviors: reverse-chronological order by creation and omission of question content. No contradiction with annotations was found.

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 core action, scope, ordering, and content limitation without filler or redundancy. 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 read-only list tool with an output schema and fully documented optional filters, the description is adequate: it covers scope, ordering, and content omission. Minor details like whether deleted forms are included are not critical 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?

The input schema fully describes all three optional parameters (limit, scene, titleContains), so schema description coverage is 100%. The description adds no additional parameter-specific 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?

States a specific verb ('List'), resource ('forms'), and scope ('current team'), and explicitly notes it excludes question content and routes to get_form for details. This clearly distinguishes it from sibling get_form and makes its 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 Guidelines4/5

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

Explicitly points to get_form as the alternative when form details are needed, which gives a clear when-to-use signal. It does not mention other related siblings like list_templates, so differentiation from all alternatives is not fully covered.

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

list_form_translationsA
Read-only

List the existing language versions (translations) of a form. Returns each translation's language, isActive flag, public share link and timestamps. The primary language lives on the form itself (see get_form.language) and is not listed here.

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe source form UUID

Output Schema

ParametersJSON Schema
NameRequiredDescription
countNoHow many translations exist (the primary language is not listed)
formIdNoThe source form
translationsNoThe existing language versions

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark this read-only and non-destructive; the description adds what specific data is returned (language, isActive, public share link, timestamps) and what is excluded. No side effects or surprising behavior are omitted.

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 compact sentences; the action and return value are front-loaded, and the primary-language caveat is placed as a short final note. 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 one-parameter read-only list tool with an output schema and full annotations, the description covers scope, return contents, and the key caveat. No additional information is needed 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 already documents formId as 'The source form UUID' with 100% coverage. The description only restates that these are translations of a form, adding no extra format or constraint semantics.

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 verb 'List', resource 'existing language versions (translations) of a form', and explicitly distinguishes itself from get_form by noting the primary language is not included. This differentiates it from sibling translation CRUD tools 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 Guidelines4/5

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

Clearly sets the boundary that the primary language lives on get_form.language, so an agent knows not to expect it here. It does not, however, mention when to prefer get_form_translation for a single translation, so routing guidance is partial.

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

list_leadsA
Read-only

List the leads (CRM records) of the current team — one lead per respondent across all forms, carrying follow-up status, assignee, colour tags, submission count and the next upcoming booking. Newest activity first by default. Filter by status / assignee / tags / created-at range / keyword / whether they have an upcoming booking. Status codes and tag codes are team-defined — call list_lead_settings first to get the valid ones, never guess. Reference a lead by its leadId and a respondent by examineeId, never by a masked email.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based), default 1
sortNoSort order, default -lastRecordAt (most recent submission first)
limitNoItems per page, default 20, max 100
statusNoFilter by follow-up status code (see list_lead_settings), optional
keywordNoFuzzy match on the respondent's name or email. Matching runs server-side against the real values, so you can search by a full or partial email even though results come back masked.
tagCodesNoFilter by colour tag codes; a lead matches if it has ANY of them (OR). Optional.
createdToNoOnly leads created strictly before this ISO datetime (half-open), optional
assigneeIdNoFilter by the assigned member userId (see list_lead_settings.assignableMembers). Pass "me" for the current token's own user. Optional.
createdFromNoOnly leads created on/after this ISO datetime, optional
hasUpcomingBookingNotrue = only leads with an active upcoming booking, false = only those without. Omit to not filter. Note: this filters within the page, so counts stay on the unfiltered basis.

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo1-based page returned
itemsNoThe page of leads, PII masked
totalDocsNoTotal leads matching the filter
totalPagesNoTotal pages available
hasNextPageNoWhether another page follows

TDQS

A4.3/5.0
Behavior5/5

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

Annotations declare readOnlyHint=true and destructiveHint=false, and the description does not contradict this. It adds valuable behavioral context: 'Newest activity first by default', 'Filter by status / assignee / tags / created-at range / keyword / whether they have an upcoming booking', and critical notes about server-side matching with masked emails and the half-open pagination/filtering behavior for hasUpcomingBooking. These details go beyond the schema and annotations, ensuring the agent knows exactly how filtering and data masking behave.

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 well-structured: it opens with the primary function, then describes typical return contents and default sorting, followed by filtering options and important usage caveats. It is moderately concise, with every sentence adding value (e.g., the note about never guessing codes and the leadId/examineeId distinction). Some redundancy exists (filter list partially repeats schema), but overall it is efficient and front-loaded.

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 has 10 parameters and an output schema exists, the description does not need to explain return values. It covers the key operational aspects: scope, default sort, filtering options, and essential preconditions (calling list_lead_settings). It also discloses the hasUpcomingBooking filtering nuance. Minor gaps include no mention of pagination behavior beyond the schema (though page/limit are self-explanatory in the schema) and no explicit note on performance/limits, but these are adequately addressed by the schema and 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?

The schema description coverage is 100%, so the baseline is 3. While the description reinforces some param semantics (e.g., the need to use codes from list_lead_settings for status and tagCodes, and that keyword matches the real email server-side despite masking), it does not add significant meaning beyond what the schema already provides. The schema descriptions themselves are detailed, and the tool description offers only marginal additional parameter insight.

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 CRM leads for the current team, describes the fields returned (follow-up status, assignee, colour tags, submission count, next booking), and specifies default ordering. This differentiates it from siblings like list_records and get_lead, which have different purposes. The verb 'list' is specific and the resource is defined 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 actionable guidance: call list_lead_settings to obtain valid status/tag codes and never guess, reference leads by leadId and respondents by examineeId. It also clarifies the scope ('of the current team' and 'across all forms'). While it does not explicitly mention alternative tools or when not to use this tool, the context is clear enough for an agent to decide 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_lead_settingsA
Read-only

Read the current team's lead configuration: the follow-up status codes (with label and colour, in display order), the colour tag library, and the members a lead can be assigned to. Call this before update_lead / set_lead_tags / assign_leads — status codes, tag codes and member ids are all team-specific and the write tools reject unknown values.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsNoThe team's colour tag library
statusesNoFollow-up statuses in display order
assignableMembersNoActive non-viewer members a lead can be assigned to

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds meaningful behavioral context: the read is scoped to the current team, and the values returned are not universally valid but team-specific, which directly affects downstream writes.

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 states exactly what is read and the second gives actionable usage guidance. It is well front-loaded and 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?

Given that an output schema exists, the return format is already documented. The description provides the missing context an agent needs: when to call the tool, why team-specific values matter, and which sibling tools depend on its results. Nothing important is left unstated.

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 already fully defines inputs. The description adds no parameter-specific semantics because none are needed; it instead clarifies that the tool requires no inputs and simply reads current settings. This matches the baseline for parameterless tools.

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 ('Read'), a precise resource ('the current team's lead configuration'), and enumerates exactly what is returned: follow-up status codes with label, colour, and display order, the colour tag library, and assignable members. This clearly separates it from sibling write tools like update_lead, set_lead_tags, and assign_leads.

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 explicitly instructs the agent to call this tool before update_lead, set_lead_tags, and assign_leads, and explains why: status codes, tag codes, and member ids are team-specific and the write tools reject unknown values. This gives both a positive trigger and a concrete exclusion boundary.

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

list_my_tenantsA
Read-only

List all teams (tenants) the current user belongs to. isActive marks the team this token currently operates against.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
tenantsNoTeams you are an active member of
activeTenantIdNoThe team this token currently operates on

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to restate safety. It adds useful context beyond annotations by explaining that 'isActive marks the team this token currently operates against,' which clarifies the output semantics.

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 fully cover the tool's purpose and the key output field semantics. There is no filler or 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 zero-parameter read-only list tool with an output schema available, the description is complete. It states what is returned, the user scope, and the meaning of isActive, which is all an agent needs to invoke 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 input schema has zero parameters, so there is nothing for the description to explain about parameters. The baseline of 4 applies because no parameter documentation is needed.

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 is specific: 'List all teams (tenants) the current user belongs to' names the exact verb and resource. It also distinguishes itself from siblings like get_active_tenant and switch_active_tenant by clarifying it returns all tenant memberships, not just the current one.

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 makes the use case clear: call when you need the full set of tenants for the current user. However, it does not explicitly contrast with get_active_tenant or switch_active_tenant, so an agent must infer when this tool is preferable to those alternatives.

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

list_recordsA
Read-only

List submission records (leads) of the current team, newest first. Each item includes the examinee (name / email / customData if captured), the submitted answers, UTM metadata and a compact report result (status / score / level / outcome). Optionally filter by form, report status, and submitted-at range. Reference a respondent by examineeId, never by a masked email; email addresses and phone numbers written into the answers come back masked too. Use get_record for one record's full detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number (1-based), default 1
limitNoItems per page, default 20, max 100
sinceNoOnly records submitted on/after this ISO datetime, optional
untilNoOnly records submitted on/before this ISO datetime, optional
formIdNoFilter by form UUID, optional
statusNoFilter by report generation status, optional

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageNo1-based page returned
itemsNoThe page of submissions (newest first)
limitNoPage size actually used
totalDocsNoTotal submissions matching the filter

TDQS

A4.5/5.0
Behavior5/5

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

Even though readOnlyHint=true and destructiveHint=false are already annotated, the description adds useful behavioral context: records are returned newest first, email/phone values inside answers are masked, and respondents must be referenced by examineeId rather than masked email. These are non-obvious behaviors not present in 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?

Four purposeful sentences, front-loaded with the verb and resource, with no filler or repetition. Each sentence adds value: scope/ordering, item composition, filters, masking warning, and routing to get_record.

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 input schema covers pagination and filtering, the output schema covers the item shape, and the description adds scope, ordering, masking, and an explicit alternative for full-record retrieval. 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.

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, and the description only paraphrases the existing filter parameters ('form, report status, and submitted-at range') without adding new syntax or format details. The schema already carries the parameter meaning.

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

Purpose5/5

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

The description opens with a specific verb-resource pair ('List submission records (leads)'), defines scope ('current team'), ordering ('newest first'), and names the included fields, including compact report results, UTM metadata, and examinee info. It also explicitly contrasts itself with get_record for full detail, distinguishing it from the closest sibling.

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 context for when to use this tool: when listing or filtering submission records, and explicitly directs the agent to get_record when one record's full detail is needed. However, it does not explicitly distinguish itself from the sibling list_leads, leaving a possible ambiguity without an exclusion.

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

list_templatesA
Read-only

List active templates in the public template library (id, title, scene, description, category, recommended flag, usage count), most-used first. Use this to find a template, then call create_form_from_template with its id to create a form from it — the fastest way to build a quiz when a suitable template exists.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoItems per page, default 20, max 100
sceneNoFilter by scene, optional
categoryIdNoFilter by category id, optional
isRecommendedNoWhen true, only return recommended templates
titleContainsNoFuzzy match by title, optional

Output Schema

ParametersJSON Schema
NameRequiredDescription
itemsNoThe page of templates
totalDocsNoTotal templates matching the filter

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already signal readOnlyHint=true and destructiveHint=false, so the description adds useful behavioral context: only active templates are returned, the library is public, and results are sorted by usage count. This goes beyond the schema and aligns with the annotations.

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

Conciseness5/5

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

Two tight sentences with no filler: the first front-loads the resource, fields, and sort order; the second gives a concrete downstream action. 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?

With annotations covering safety and an output schema present, the description provides the essential scoping (active/public/most-used) and the intended workflow. An agent has everything needed to select and invoke this 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 all five parameters already have descriptions in the input schema. The description does not add parameter-level detail, but it does clarify the return context and sort behavior, which is helpful though not required.

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

Purpose5/5

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

States a specific verb and resource: 'List active templates in the public template library,' and enumerates the returned fields and sort order. This clearly distinguishes the tool from siblings like list_forms because it targets the public template library rather than user-created forms.

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?

Explicitly says when to use the tool: 'Use this to find a template, then call create_form_from_template with its id to create a form from it.' It gives the workflow but does not explicitly state when not to use it or name an alternative listing tool, though the intent is clear.

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

move_questionA

Move an existing question or page break to a specific position by code. Choose either after or before, referencing another field's code. Move to the front: before references the current first field's code. Move to the end: after references the current last field's code.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYesThe field code to move (a question or a Breaker)
afterNoMove after this code; choose either after or before
beforeNoMove before this code; choose either after or before
formIdYesform ID

Output Schema

ParametersJSON Schema
NameRequiredDescription
toNo0-based index after the move
codeNoThe question that was moved
fromNo0-based index before the move
formIdNoThe form that was edited
changedNofalse when the question already sat at the target position
positionNoCurrent index — returned instead of from/to when no move was needed
questionCountNoTotal question / page-break count

TDQS

A4.2/5.0
Behavior3/5

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

Annotations indicate a mutation (readOnlyHint=false) but do not detail side effects. The description adds useful context on the after/before mechanics and the front/end positioning, going slightly beyond the schema. However, it does not disclose what happens if both after and before are provided, if the referenced code does not exist, or whether the operation is reversible—gaps that the description could address given minimal 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?

The description is two sentences, with the core purpose front-loaded and no redundant phrasing. Every sentence contributes: the first states the action and object, the second explains the after/before options and how to achieve front/end placement. It is concise and well-structured.

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 moderate complexity (4 params, output schema present) and the existence of siblings, the description covers the essential usage scenarios. It explains the after/before logic and front/end moves. It does not mention error handling or prerequisites, but these are not critical for an agent to invoke the tool correctly. The output schema reduces the need to describe return values.

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%, so the baseline is 3. The description adds value by explaining how to use after/before for front/end positioning, which is not in the schema. It also clarifies that 'code' refers to a question or a Breaker (page break), adding semantic meaning beyond the schema's generic 'field code'.

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 and resource: 'Move an existing question or page break to a specific position by code.' It also specifies the mechanism (after/before) and distinguishes this from sibling tools like insert_question or update_question by focusing on repositioning existing elements rather than adding or editing content.

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 instructions on when to use this tool and how to use its parameters: 'Choose either after or before, referencing another field's code.' It also explains how to move to the front and end. While it doesn't explicitly name alternatives or state when not to use it, the context makes it clear this is for reordering, and the front/end tips add practical guidance.

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

prepare_image_uploadA
Read-only

Step 1 of 2 for adding an image (PNG / JPEG / GIF / WebP) to the current team media library. This tool does NOT receive image bytes — it returns a short-lived presigned URL you upload the file to directly, so even large images never pass through this conversation. Workflow: (1) save the image to a local temp file; (2) if the file is larger than 5MB, compress / downscale it to 5MB or less FIRST (e.g. sips -Z 2048 in.png --out out.jpg on macOS, or magick in.png -resize "2048x2048>" -quality 82 out.webp) — uploads over 5MB are rejected; (3) call this tool with filename, mimeType and (optionally) fileSize; (4) HTTP PUT the temp file to the returned uploadUrl with the matching Content-Type header, e.g. curl -X PUT --upload-file <file> "<uploadUrl>" -H "Content-Type: image/png"; (5) call finalize_image_upload with the returned key; (6) delete the temp file. Max 5MB after compression. Only image/png, image/jpeg, image/gif and image/webp are accepted.

ParametersJSON Schema
NameRequiredDescriptionDefault
fileSizeNoOptional file size in bytes (of the file you will actually upload, after any compression). If provided it is checked against the 5MB cap and the team storage quota up front; the authoritative check still runs in finalize_image_upload against the actual uploaded size.
filenameYesOriginal filename for admin display / download, e.g. "cover.png".
mimeTypeYesImage MIME type. Must be one of image/png, image/jpeg, image/gif, image/webp.

Output Schema

ParametersJSON Schema
NameRequiredDescription
keyNoStaging object key to pass to finalize_image_upload
expiresInNoSeconds until the presigned URL expires
uploadUrlNoPresigned PUT URL — upload the bytes here, then call finalize_image_upload
requiredContentTypeNoContent-Type header the PUT must send, or R2 rejects it

TDQS

A4.9/5.0
Behavior5/5

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

Annotations provide readOnlyHint=true and destructiveHint=false, but the description adds critical behavioral context: it returns a short-lived presigned URL, rejects uploads >5MB, only accepts four MIME types, and that the authoritative check happens in finalize_image_upload. This goes well beyond annotations and clarifies the two-step mechanism.

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?

Long but every sentence earns its place. The workflow is numbered and front-loaded with purpose. Examples (sips, magick, curl) are concrete and useful, not fluff. Structure is logical: what it does, what it doesn't do, steps, constraints.

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?

Comprehensive for a complex two-step upload with output schema. Covers all parameters, constraints, workflow, sibling linkage, and error conditions (size rejection). No missing information an agent needs to call it correctly. Output schema presumably documents the returned URL and key.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3. The description enriches fileSize ('of the file you will actually upload, after any compression', checked against 5MB cap and quota up front) and clarifies filename purpose ('for admin display / download'). It adds meaningful details beyond the schema without redundancy.

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 'Step 1 of 2 for adding an image ... to the current team media library' with explicit resource (image upload), verb (prepare), and context. It distinguishes itself from finalize_image_upload and lists accepted types. No ambiguity.

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?

Provides a numbered workflow (steps 1-6) including exact conditions: compress if >5MB, accepted MIME types, explicit statement that this tool does NOT receive bytes, and names the sibling finalize_image_upload. Tells when not to use (e.g., non-image files, over 5MB after compression). Fully covers when and how.

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

preview_guideA
Read-onlyIdempotent

Authoring guide for one RooQuiz preview assessment type: the full field schema, question types, scoring rules, themes, common mistakes and a worked example. Read the guide for the type you want before calling preview_quiz, preview_scorecard, preview_outcome.

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesquiz = right/wrong graded test; scorecard = every option adds points toward a level; outcome = personality/type test with no right answers.

TDQS

A4.2/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's 'Read the guide' framing reinforces the read-only nature and enumerates the guide's contents, but it does not add behavioral traits beyond what annotations provide—no auth needs, side effects, or response-shape caveats.

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 first sentence front-loads what the tool provides, and the second delivers the actionable usage instruction. Every sentence earns its place and no redundant phrases appear.

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

Completeness4/5

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

For a one-parameter, read-only documentation tool with no output schema, the description is nearly complete: it lists the returned content and states when to call it. A minor gap is that it never explicitly states the response is the guide text itself, though the content enumeration strongly implies it.

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 single enum parameter `type` already explains each value (quiz, scorecard, outcome) with concrete meaning. The description adds only the implicit mapping that the chosen type selects which guide to read, which is consistent but not a substantive addition beyond the schema's own explanations.

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 purpose: an authoring guide containing field schema, question types, scoring rules, themes, common mistakes, and a worked example for a RooQuiz preview type. It also distinguishes itself from siblings by explicitly naming preview_quiz, preview_scorecard, and preview_outcome, so an agent can tell it apart without opening their 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?

The description gives an explicit usage directive: 'Read the guide for the type you want before calling preview_quiz, preview_scorecard, preview_outcome.' This names the exact alternatives and the condition under which this tool should be invoked, leaving nothing to inference.

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

preview_outcomeA

Create a shareable RooQuiz preview personality / outcome test — options vote for result types and the most-voted type is the result — and get a link to open in the browser. No account, login, or API key required. Use this when someone wants to build, try out, or share a personality quiz, a "which X are you" / type / archetype test, or any quiz where there are no right answers and the taker is sorted into one of several result types. For a right/wrong graded quiz, use the preview-quiz skill; for a scored questionnaire that totals points into a level, use the preview-scorecard skill.

This tool takes the finished assessment JSON and nothing else. Unless its field schema, scoring rules and worked example are already in context, call preview_guide with type "outcome" first.

ParametersJSON Schema
NameRequiredDescriptionDefault
formYesThe complete assessment JSON, shaped as documented by preview_guide (type "outcome"). "scene" is forced to "outcome_quiz" for you.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesBrowser link to the preview — hand it over verbatim.
expiresAtNoISO timestamp; the link 404s afterwards.
publicTokenYesIdentifier the link is built from.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations already cover read-only/write and destructive hints, and the description adds meaningful behavioral context beyond them: no account/login/API key required, produces a browser link, takes only the finished assessment JSON, and forces 'scene' to 'outcome_quiz'. It does not discuss persistence or side effects, but the annotations plus these details give a solid behavioral picture.

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 front-loaded with the core purpose and then delivers usage guidance, alternatives, prerequisites, and parameter constraints in a compact sequence. Every sentence contributes new information; there is no filler or repetition of the input 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?

For a tool with one parameter, a rich output schema, and clear sibling definitions, the description covers all needed decision points: what the tool does, when to use it, when not to, authentication requirements, schema prerequisites, and a self-remediating instruction to call preview_guide if context is missing. Nothing essential is left unaddressed.

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% and there is only one parameter, form, which already describes the expected JSON shape. The description adds value by stating that the tool takes 'the finished assessment JSON and nothing else,' clarifying that no additional credentials or options are needed, and by pointing to preview_guide as the source of 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: 'Create a shareable RooQuiz preview personality / outcome test' and immediately explains the voting mechanism. It also distinguishes itself from siblings by naming preview-quiz and preview-scorecard as different quiz types, so an agent can choose correctly 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?

It explicitly states when to use this tool ('Use this when someone wants to build, try out, or share a personality quiz...') and gives alternatives with contrasting conditions: right/wrong graded quizzes go to preview-quiz, scored questionnaires go to preview-scorecard. It also provides a clear prerequisite: call preview_guide with type 'outcome' first unless the schema is already in context.

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

preview_quizA

Create a shareable RooQuiz preview quiz — a right/wrong assessment where correct answers earn points and the taker gets a score — and get a link to open in the browser. No account, login, or API key required. Use this when someone wants to build, try out, or share a graded quiz, test, trivia, or exam with correct answers and a final score. For a scored questionnaire where every option adds points, use the preview-scorecard skill; for a personality/type test with no right answers, use the preview-outcome skill.

This tool takes the finished assessment JSON and nothing else. Unless its field schema, scoring rules and worked example are already in context, call preview_guide with type "quiz" first.

ParametersJSON Schema
NameRequiredDescriptionDefault
formYesThe complete assessment JSON, shaped as documented by preview_guide (type "quiz"). "scene" is forced to "knowledge_quiz" for you.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesBrowser link to the preview — hand it over verbatim.
expiresAtNoISO timestamp; the link 404s afterwards.
publicTokenYesIdentifier the link is built from.

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already flag readOnly=false, destructive=false, and the description adds context beyond them: no account/login/API key required, the tool consumes a finished JSON and nothing else, and the output is a browser-openable share link. It does not detail side effects beyond creation, but the preview/try-out framing plus existing annotations cover the safety profile.

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

Conciseness4/5

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

Two tight paragraphs: the first front-loads purpose and sibling disambiguation, the second covers the input contract and prerequisite. Minor redundancy between the appositive description of a graded quiz and the later 'graded quiz... with correct answers and a final score' phrase keeps it just short of flawless.

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 a single nested object parameter, the description covers everything needed: purpose, use cases, alternatives, prerequisite, auth requirements, and input shape pointer. No material gap remains 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?

Schema coverage is 100% for the single 'form' object, and the schema itself documents the shape source (preview_guide) and the forced 'scene' value. The description reinforces this with 'takes the finished assessment JSON and nothing else,' which clarifies that the parameter must be the complete, ready-to-use artifact.

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 outcome — 'Create a shareable RooQuiz preview quiz... and get a link to open in the browser' — with the grading model spelled out (right/wrong, points, score). It also names the sibling skills it is not (preview-scorecard, preview-outcome), so an agent can reliably tell the three preview tools apart.

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?

Gives explicit when-to-use criteria ('when someone wants to build, try out, or share a graded quiz, test, trivia, or exam'), names the two alternatives with their distinguishing conditions, and states the prerequisite to call preview_guide with type 'quiz' when the schema isn't already in context.

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

preview_scorecardA

Create a shareable RooQuiz preview scorecard — a scored questionnaire where each option adds points toward a total that buckets into levels — and get a link to open in the browser. No account, login, or API key required. Use this when someone wants to build, try out, or share a self-assessment, health/habit score, readiness or maturity check, satisfaction survey, or any rated questionnaire that turns answers into a total score and a level (no "correct" answer). For a right/wrong graded quiz, use the preview-quiz skill; for a personality/type test with no scores, use the preview-outcome skill.

This tool takes the finished assessment JSON and nothing else. Unless its field schema, scoring rules and worked example are already in context, call preview_guide with type "scorecard" first.

ParametersJSON Schema
NameRequiredDescriptionDefault
formYesThe complete assessment JSON, shaped as documented by preview_guide (type "scorecard"). "scene" is forced to "scored_quiz" for you.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlYesBrowser link to the preview — hand it over verbatim.
expiresAtNoISO timestamp; the link 404s afterwards.
publicTokenYesIdentifier the link is built from.

TDQS

A4.5/5.0
Behavior4/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses that no account/login/API key is required, that the tool forces 'scene' to 'scored_quiz', that it returns a shareable browser link, and that it accepts only finished assessment JSON. These are useful behavioral facts not expressed in the structured fields; only minor details like validation-error behavior are omitted.

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?

Four dense sentences, purpose front-loaded before usage, alternatives, and precondition. Every sentence carries distinct information: the definition, the no-auth constraint, the routing rules, and the preview_guide dependency. The length is fully justified by the three-way sibling routing complexity; there is no filler.

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

Completeness5/5

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

Given that an output schema exists, return-value documentation is unnecessary. The description covers the entire decision surface: selection criteria, exclusions naming both alternatives, input sourcing via preview_guide, and auth requirements. An agent can correctly select and prepare an invocation from this text alone.

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% — the form parameter is already documented with its shape, the reference to preview_guide for the structure, and the forced 'scene' value. The description adds modest reinforcement ('takes the finished assessment JSON and nothing else') but no substantive new parameter semantics, 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?

Opens with a specific verb+resource ('Create a shareable RooQuiz preview scorecard') and immediately defines the concept ('each option adds points toward a total that buckets into levels'). It also states what it is not — no 'correct' answer — which distinguishes it from the graded-quiz sibling without requiring schema inspection.

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

Usage Guidelines5/5

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

Explicitly says 'Use this when' and enumerates concrete scenarios (self-assessment, health/habit score, readiness/maturity check, satisfaction survey). It then routes to alternatives with precise conditions: 'For a right/wrong graded quiz, use the preview-quiz skill; for a personality/type test with no scores, use the preview-outcome skill.' It also states a precondition to call preview_guide if the schema is not already in context.

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

reschedule_bookingA

Move a confirmed booking of the current team to a different time, as the organiser. The new start time must be one of the available slots — call get_booking_availability with this bookingId first and pick a startAt from its slots. The attendee is emailed about the new time, the 24h reminder is re-armed, and the booking.rescheduled integration event fires. Only works on a scheduled booking; it is rejected if the slot got taken in the meantime or if that respondent already has another active booking.

ParametersJSON Schema
NameRequiredDescriptionDefault
startAtYesThe new start time, ISO datetime — must be one of the slots from get_booking_availability
bookingIdYesThe booking id (the bookingId returned by list_bookings)

Output Schema

ParametersJSON Schema
NameRequiredDescription
endAtNoNew end, ISO datetime
statusNoBooking status after the move
startAtNoNew start, ISO datetime
timezoneNoTimezone of the new slot
bookingIdNoThe booking that was moved
slotDurationMinutesNoLength of the slot

TDQS

A4.7/5.0
Behavior5/5

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

Goes well beyond the annotations by disclosing concrete side effects: the attendee is emailed, the 24h reminder is re-armed, and the booking.rescheduled integration event fires. It also exposes failure modes such as a taken slot or another active booking, adding meaningful behavioral context.

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

Conciseness5/5

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

The description is compact and well-structured: one sentence each for the core purpose, prerequisite workflow, side effects, and failure conditions. No filler or redundant restatement of the tool name 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?

Covers the key elements an agent needs: what the tool does, who may use it, how to obtain a valid parameter, what side effects occur, and when it will fail. Since an output schema exists, omitting the return shape is acceptable.

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 schema already describes both parameters well, so the baseline is a 3. The description adds value by specifying the proper workflow dependency: call get_booking_availability with this bookingId first and select startAt from its slots, which clarifies how the two parameters relate.

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 action and object: 'Move a confirmed booking of the current team to a different time, as the organiser.' It also adds role and state constraints ('confirmed', 'scheduled', 'organiser') that make it clearly distinct from sibling tools like review_booking or update_booking_status.

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?

Explicitly instructs the agent to first call get_booking_availability with the bookingId and pick a startAt from its slots, and states the rejection conditions. It does not explicitly name alternative tools to prefer instead, but the prerequisite workflow and operational constraints are clearly conveyed.

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

restore_formA

Restore a form from the trash in the current team (undo delete_form). Only the form owner / team owner can restore; errors if the form is not in the trash.

ParametersJSON Schema
NameRequiredDescriptionDefault
formIdYesThe form UUID to restore from trash

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe form restored from trash
messageNoHuman-readable result

TDQS

A4.3/5.0
Behavior4/5

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

Beyond the annotations, the description discloses important behavioral traits: permission requirements and an error condition when the form is not in the trash. It also makes the inverse relationship to delete_form explicit, which helps the agent predict side effects.

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

Conciseness5/5

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

The description is a single efficient sentence with no filler. It front-loads the primary action and scope, then packs in the permission and error conditions without bloating the text.

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 mutation tool with an output schema and annotations, this description is complete. It covers purpose, scope, preconditions, permissions, and a failure case, giving an agent enough information to select and 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?

The schema already provides 100% coverage for the single formId parameter, so the description does not need to add much. It reinforces the semantic link to the trash but does not add detail beyond the schema's 'form UUID' description.

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 ('Restore a form from the trash') with the resource scope ('in the current team') and explicitly frames it as 'undo delete_form'. This clearly differentiates it from sibling tools like delete_form, update_form, and duplicate_form.

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 provides clear conditions for use: the form must be in the trash, within the current team, and only the form owner or team owner can perform the restore. It does not explicitly enumerate alternatives, but the 'undo delete_form' linkage gives enough context for an agent to decide when to use it.

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

review_bookingA

Approve or decline a pending booking request of the current team. Approving turns it into a confirmed meeting and sends the attendee the confirmation with the meeting address; declining sends a short "not approved" note with the optional reason. Only works on a booking whose status is pending, and a request whose meeting time has already passed can only be declined. On approval you may set the meeting link / instructions for this one meeting (leave empty to fall back to the team-level settings). Only the team owner / admin or the lead owner can review.

ParametersJSON Schema
NameRequiredDescriptionDefault
decisionYesapprove = confirm the meeting and release the address; decline = reject the request
bookingIdYesThe booking id (the bookingId returned by list_bookings)
meetingLinkNoApprove only: the meeting URL for this meeting. Empty falls back to the team setting.
declineReasonNoDecline only: the reason shown to the attendee, max 500 chars. Optional.
meetingInstructionsNoApprove only: how to join / what to prepare, max 1000 chars. Empty falls back to the team setting.

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNoscheduled after approving, cancelled after declining
bookingIdNoThe booking that was reviewed
reviewedAtNoISO datetime of the review

TDQS

A4.4/5.0
Behavior5/5

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

Beyond annotations (readOnlyHint=false, destructiveHint=false), the description discloses the key side effects: confirming the meeting, sending the confirmation with the meeting address, sending a decline note, optionally using meeting link/instructions with team-level fallback, and permission restrictions. This is exactly the behavioral context an agent needs for a mutating, externally-visible action.

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

Conciseness5/5

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

The description is dense but well-structured, with the core action front-loaded and every clause carrying operational meaning. It avoids filler and packs preconditions, side effects, parameter exceptions, fallback behavior, and authorization into a compact block.

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 state-changing booking review tool, it covers preconditions, decision outcomes, email notifications, parameter-specific behavior, fallback semantics, and authorization. With an output schema present, return-value documentation is not required, and nothing critical to selecting or invoking the tool 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?

Schema coverage is 100%, so the baseline is 3. The description adds useful cross-parameter meaning by tying decision=approve to address release and meetingLink/meetingInstructions, and decision=decline to declineReason, while clarifying fallback behavior. This adds value but mostly reinforces what the parameter descriptions already state.

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-resource pair ('Approve or decline a pending booking request') and immediately explains the resulting state transition and external effects. It is clearly distinct from list_bookings and reschedule_booking, though it does not explicitly contrast itself with the sibling update_booking_status for non-pending status changes.

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 applicability conditions: only pending bookings can be reviewed, past meeting times can only be declined, and only team owners/admins or lead owners can perform the review. It does not explicitly say when to prefer update_booking_status or list the exclusions for confirmed/cancelled bookings, so it stops short of full alternative routing.

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

set_dimension_analysisA

Set the multi-dimension analysis (form.report.dimensionAnalysis) of a form, replacing it as a whole without touching overallAnalysis. In the knowledge_quiz scene each dimension needs fieldCodes (question codes); in the scored_quiz scene each needs a formula. Pass an empty dimensions array to clear the multi-dimension analysis. Call get_form first to read the question codes. Not supported for random_knowledge_quiz forms.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoMulti-dimension analysis title
formIdYesThe form ID to configure
dimensionsNoThe dimension list (at most 50). Pass an empty array to clear the multi-dimension analysis.
showRadarChartNoWhether to show the radar chart, default true
showStandardLineNoWhether to show the standard-score line on the radar chart

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe form that was edited
dimensionsNoThe dimensions after the replace
dimensionCountNoHow many dimensions are configured now (0 = cleared)

TDQS

A4.5/5.0
Behavior4/5

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

The annotations only indicate a mutating operation, so the description carries the behavioral burden. It clearly discloses that the whole dimensionAnalysis is replaced, that overallAnalysis is preserved, that an empty array clears the configuration, and that the tool is unsupported for random_knowledge_quiz forms. This goes well beyond the 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?

The description is compact and front-loaded, with every sentence carrying useful information: replacement semantics, scene requirements, clearing behavior, prerequisite action, and an unsupported case. There is no filler or repetition of schema details.

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 tool with nested parameters and scene-dependent requirements, the description is complete enough to invoke correctly. It covers replacement semantics, clearing, unsupported form types, and the get_form prerequisite, while the output schema and rich parameter descriptions handle the remaining detail.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3, but the description adds cross-parameter meaning by tying fieldCodes to knowledge_quiz and formula to scored_quiz, and by recommending get_form as a prerequisite. This helps the agent reason about scene-dependent parameters more efficiently than reading each schema field alone.

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 ('Set') with an exact resource ('multi-dimension analysis (form.report.dimensionAnalysis)') and states the replacement semantics. It also distinguishes itself by explicitly saying it replaces the analysis as a whole while not touching overallAnalysis, which separates it from other form-update 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: call get_form first to read question codes, pass an empty dimensions array to clear, and avoid random_knowledge_quiz forms. It does not explicitly name a sibling alternative tool for the unsupported case, but it still provides strong when-to-use and prerequisite guidance.

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

set_lead_tagsA

Set the colour tags on one or more leads of the current team. Pass every lead id in a single call (up to 50) — do not loop. mode: "replace" (default, overwrite the whole tag set — for editing a single lead), "add" or "remove" (for batches, where each lead has different tags and overwriting would wipe other people's tags). Tag codes must exist in the team's tag library (see list_lead_settings.tags); "remove" also accepts stale codes. Changes are recorded on each lead's timeline.

ParametersJSON Schema
NameRequiredDescriptionDefault
modeNoHow to apply the tags, default replacereplace
tagsYesThe tag codes to apply, from list_lead_settings.tags[].code
leadIdsYesThe lead ids to tag, max 50 per call

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNoreplace / add / remove
countNoHow many leads were changed
itemsNoPer-lead result

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses key behavioral traits: the 'replace' mode overwrites the whole tag set (potentially destructive), 'remove' accepts stale codes, and changes are recorded on each lead's timeline. Annotations only declare readOnlyHint false and destructiveHint false, but the description adds meaningful context about side effects and what happens to existing tags, going beyond what annotations provide.

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 moderately long but every sentence carries load-bearing information. It opens with the primary purpose, then the critical batching constraint, then mode semantics, then tag library reference, then behavioral note. It could be slightly more compact (e.g., merging some clauses), but it is well-structured and free of 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?

Given the presence of an output schema (Has output schema: true) and a 100% schema description coverage, the description needs to cover only operational context, which it does comprehensively. It addresses batching limits, mode selection, tag validation rules, and side-effect logging. No essential information for correct invocation is missing.

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

Parameters5/5

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

The schema already covers parameters with descriptions (leadIds max 50, tags from list_lead_settings.tags[].code, mode enum). The description adds substantial semantics beyond the schema: it explains the practical difference between modes, justifies batch usage, and notes that 'remove' accepts stale codes. This is high-value enrichment that helps the agent choose correct parameter values.

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 the specific verb and resource: 'Set the colour tags on one or more leads.' It clearly indicates the tool's function and distinguishes it from related operations like update_lead or assign_leads by focusing on tag manipulation. The mention of 'current team' adds scope, while the instruction to pass all lead ids in a single call sets it apart from potential per-lead tools.

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 when-to-use guidance, including the prohibition against looping ('do not loop'), and explains the three modes ('replace', 'add', 'remove') with specific scenarios for each (e.g., 'replace' for editing a single lead, 'add'/'remove' for batches). It also directs users to the tag library via list_lead_settings.tags, making the usage contextfully complete.

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

switch_active_tenantA

Switch the active team (tenant) for this token. The change persists across sessions until switched again. Caller must be a member of the target team.

ParametersJSON Schema
NameRequiredDescriptionDefault
tenantIdYesTarget team ID. Use list_my_tenants to discover.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoThe team the token now operates on
nameNoTeam name
slugNoTeam slug

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already mark the operation as non-read-only and non-destructive. The description adds meaningful behavioral detail: persistence across sessions and the membership requirement. This goes beyond what the annotations convey.

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, each earning its place: one states the action and scope, the other states persistence and the caller prerequisite. No filler 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 single-parameter tool with full schema coverage and an output schema, the description supplies the essential behavioral context: persistence, token scope, and membership 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?

The schema fully documents tenantId with its own description and a pointer to list_my_tenants. The main description does not add parameter-level 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?

The description uses a specific verb ('Switch') and resource ('active team (tenant) for this token'), making the operation unmistakable. It is clearly distinct from siblings like get_active_tenant, which reads rather than changes state.

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: the switch persists across sessions and requires membership in the target team. It does not explicitly name alternatives or exclusions, but the behavioral context is sufficient for a tool with this scope.

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

update_booking_statusA

Close out a confirmed booking of the current team: mark it completed, mark the attendee as a no-show, or cancel it. Only works on a booking whose status is scheduled; completed / no_show additionally require the meeting to have already started. Cancelling notifies the attendee by email and fires the booking.cancelled integration event; completed / no_show are internal bookkeeping and do not contact the attendee. To handle a pending request use review_booking instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
statusYescompleted = the meeting happened, no_show = the attendee did not turn up, cancelled = call it off and notify them
bookingIdYesThe booking id (the bookingId returned by list_bookings)

Output Schema

ParametersJSON Schema
NameRequiredDescription
statusNocompleted / no_show / cancelled
bookingIdNoThe booking that was closed out
cancelledAtNoISO datetime, set when the booking was cancelled

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses side effects that annotations do not convey: cancellation notifies the attendee by email and fires booking.cancelled, while completed/no_show are internal and do not contact the attendee. It also flags partial applicability of statuses, which is meaningful behavioral context beyond the readOnly/destructive hints.

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

Conciseness5/5

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

Three sentences with no filler: purpose, constraints, side effects, and sibling routing are all packed in efficiently. The most decision-relevant information (statuses, preconditions, and alternative) is front-loaded.

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

Completeness5/5

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

With two fully described parameters, an output schema, and annotations provided, the description covers the essential call semantics and side effects. There is no missing guidance an agent would need to invoke the tool safely and 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 both parameters already have clear descriptions. The description still adds value by clarifying preconditions tied to status values (only scheduled bookings; completed/no_show need the meeting to have started) and the booking lifecycle meaning, so slightly above the baseline.

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 ('Close out a confirmed booking of the current team') and enumerates the three supported outcomes (completed, no_show, cancelled). It also preempts ambiguity by pointing to review_booking for pending requests, so an agent can tell this apart from nearby sibling tools.

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 states the exact precondition ('Only works on a booking whose status is scheduled') and the additional temporal requirement for completed/no_show ('require the meeting to have already started'). It names the alternative tool and condition ('To handle a pending request use review_booking instead'), leaving no inference needed.

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

update_examineeA
Destructive

Update an examinee (a.k.a. respondent) in the current team, located by its examineeId (the business ID from list_examinees). Editable: name / status (active|disabled) / customData (validated against the team's examinee field definitions: required / unique / type / regex). email, tenant and examineeId cannot be changed. customData REPLACES the whole object and masked values are rejected: never re-send customData you just read, or you will wipe or corrupt phone fields — only write values the user gave you.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoNew examinee name
statusNoEnable (active) or disable the examinee
customDataNoCustom field values as a code→value map, validated against the team's examineeFields definitions (required / unique / type / regex). The keys are that team's own field codes — get_examinee shows which codes exist, but only send values the user gave you: this replaces the whole customData object, and re-sending a value you read back (phone fields come back masked) wipes or corrupts it.
examineeIdYesThe examinee business ID (e.g. AB1234567890) to update

Output Schema

ParametersJSON Schema
NameRequiredDescription
nameNoMasked name (J*n)
emailNoMasked email (j***g@example.com); never pass it back as an argument
avatarNoUploaded avatar as { id, url }
statusNoAccount status
tenantNoTeam (tenant) the respondent belongs to
createdAtNoISO datetime of first sign-up
updatedAtNoISO datetime of the last change
customDataNoTeam-defined custom fields; phone-typed values come back masked
examineeIdNoBusiness ID of the respondent (e.g. AB1234567890) — use it to address them
avatarPresetNoPreset avatar key, when no image was uploaded
emailVerifiedNoWhether the email has been verified

TDQS

A4.5/5.0
Behavior5/5

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

Beyond the annotations (destructiveHint=true), the description discloses the destructive behavior concretely: customData replaces the whole object, masked values are rejected, and re-sending read customData can wipe or corrupt phone fields. This tells the agent exactly why the operation is destructive and how to use it safely.

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?

Four sentences, each carrying distinct information: the action and locating rule, the editable fields, the immutable fields, and the critical customData warning. It is front-loaded with the purpose and every sentence earns its place without 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 destructive mutation tool with an output schema and rich annotations, the description is complete: it explains the team context, how to reference the examinee, which fields are editable vs. immutable, and the exact risk with customData. An agent can select and invoke this tool correctly without additional lookup.

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

Parameters3/5

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

Schema coverage is 100%, and the schema's customData property already documents the replacement semantics, validation rules, and the masked-value hazard in detail. The description largely repeats that information, adding only a slightly more explicit warning about not re-sending read values. Thus it provides little extra 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 names a specific verb ('Update'), resource ('examinee', alias 'respondent'), and scope ('in the current team'), and states the locating key (examineeId from list_examinees). It clearly separates editable from immutable fields, so the agent knows 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 Guidelines4/5

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

It gives clear context: the examinee is team-scoped and must be located via the business ID from list_examinees. It also conveys when-not by stating that email, tenant, and examineeId cannot be changed and warning against re-sending customData. It does not name a sibling alternative explicitly, but no sibling directly updates examinees, so the guidance is sufficient.

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

update_formA

Update a form of the current team: title / description / isActive / flagImg / landingImage / theme / report / openGraph / language / systemText. flagImg is the quiz cover, landingImage the landing-page cover (sets the image only, does not toggle the landing page); both take a media id from finalize_image_upload, a media URL, or "" to clear. report and openGraph (the social share card on the answer link) merge by sub-key — only what you pass is replaced, "" clears an openGraph sub-key; in the outcome_quiz scene outcomes are matched by code so existing images survive, and removing an outcome still referenced by question votes is rejected. systemText is replaced wholesale ({} clears it). language is changeable only while the form has no language versions; scene never. Questions go through add_question / update_question / delete_question / move_question, dimensionAnalysis alone through set_dimension_analysis.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesThe form ID to update
themeNoNew visual theme for the answer page. Only this sub-key of personalized is changed; settings are kept. Optional visual theme matching the quiz topic/mood. Default light. Pick the one that best fits the quiz: light (clean neutral bright; default — formal/general quizzes); corporate (professional blue+gray; B2B, career, business assessments); dark (modern sleek dark; tech, night, cool personality quizzes); cupcake (soft pink cute rounded; fun, food, kids, lighthearted); pastel (gentle pastel artsy; lifestyle, aesthetics, soft mood); valentine (pink romantic hearts; love, relationships, holidays); synthwave (neon purple/pink retro; gaming, trends, bold personality); luxury (dark + gold premium; finance, luxury brands, high-end); forest (deep green nature; environment, health, outdoors); coffee (warm brown cozy; food & drink, cafe, lifestyle); autumn (warm orange/brown seasonal; autumn, cozy, harvest); halloween (purple+orange spooky; Halloween, horror, festive fun); night (deep calm blue; astronomy, mindfulness, calm tech); cyberpunk (high-contrast neon yellow; tech, esports, gaming).
titleNoNew title
reportNoReport configuration, merged by sub-key into form.report: passing overallAnalysis fields (title/formula/levels/summaryTemplate/suggestionsTemplate/hideOverallScore) replaces overallAnalysis; passing dimensionAnalysis replaces it (an empty dimensions array clears it); in the outcome_quiz scene passing outcomes replaces the outcome list (matched by code, existing images kept; cannot be emptied, and removing an outcome still referenced by question votes is rejected); unspecified parts are kept. Common usage: either set custom question codes in create_form and pass report.formula / dimensionAnalysis in the same call, or call create_form first to get the auto-generated field codes, then update_form to fill in report.formula and/or dimensionAnalysis (which reference question codes).
flagImgNoQuiz cover image: a media ID returned by finalize_image_upload, or a media URL. Pass an empty string to clear the cover.
isActiveNoWhether to enable response collection
languageNoChange the form's language. Only allowed while the form has no translation links and is not referenced by other language versions; otherwise rejected.
openGraphNoSocial share card (Open Graph) settings: the title / description / image shown when the answer link is shared to social media or chat apps. In update_form each sub-key is merged independently (only the keys you pass change; pass an empty string to clear one). SEO keywords are generated automatically and cannot be set here.
systemTextNoAnswer-page system text overrides as a key→text map. Replaces the whole map (pass {} to clear); empty values are dropped and fall back to the language default.
descriptionNoNew description; pass an empty string to clear. Allows description-scope rich text (including <img src>). This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.
landingImageNoLanding page cover image: a media ID returned by finalize_image_upload, or a media URL. Pass an empty string to clear it. Note: this only sets the image and does NOT toggle the landing page on/off; the landing image is shown only when the landing page is enabled.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoForm id
sceneNoknowledge_quiz / scored_quiz / outcome_quiz
themeNoAnswer-page theme name
titleNoForm title after the update
flagImgNoMedia id of the quiz cover
isActiveNoWhether the form is open for submissions
languageNoPrimary language
hasReportNoWhether this call replaced the report configuration
openGraphNoSocial share card
updatedAtNoISO datetime
systemTextNoOverridden system copy
descriptionNoForm description
landingImageNoMedia id of the landing-page cover

TDQS

A4.8/5.0
Behavior5/5

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

Annotations carry almost nothing (readOnlyHint=false, openWorldHint=false, destructiveHint=false), so the description shoulders the behavioral burden — and it delivers richly. It discloses merge-by-sub-key semantics for report and openGraph, the outcome matching rule that preserves existing images, the rejection of removing an outcome still referenced by question votes, wholesale replacement of systemText ({} clears it), and the image-input convention of media id / URL / empty-string-to-clear. An agent needs these traits to call the tool correctly, and they go far beyond 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.

Conciseness4/5

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

The description is dense but front-loaded: purpose and field list first, then the subtle image semantics, merge behavior, language/scene constraints, and sibling routing. Every sentence earns its place given the tool's complexity. It loses a point for being one em-dash-heavy run-on paragraph with slash-separated lists, which is harder to parse at a glance than a lightly structured version.

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 tool with 11 parameters, nested objects, and an output schema present, the description targets exactly the parts an agent cannot infer from structured fields: partial-merge semantics, code-matched outcome updates, rejection of destructive removals, the language-version precondition, and the scene immutability. The exhaustive schema and output schema cover the remaining detail, so nothing required for a correct call 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?

Schema coverage is 100%, so the baseline is 3, but the description adds synthesized cross-parameter meaning: the flagImg-vs-landingImage role distinction (quiz cover vs landing-page cover that 'sets the image only, does not toggle the landing page') and the unified rule that both image fields accept a media id from finalize_image_upload, a media URL, or "" to clear. The merge-vs-replace principle spanning report/openGraph/systemText is genuinely additive over the schema's per-field docs. Not a 5 because the schema already documents most field-level detail.

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?

Opens with a specific verb and resource — 'Update a form of the current team' — and enumerates the exact mutable fields (title / description / isActive / flagImg / landingImage / theme / report / openGraph / language / systemText). It differentiates from siblings by routing questions to add_question/update_question/delete_question/move_question and dimensionAnalysis to set_dimension_analysis, and by declaring 'scene never' changeable. Not a tautology, not vague.

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?

Gives explicit when-not guidance with named alternatives: 'Questions go through add_question / update_question / delete_question / move_question, dimensionAnalysis alone through set_dimension_analysis.' It also states the precondition for language changes ('only while the form has no language versions; scene never') and the merge behavior that determines how partial updates behave. The only implicit part is when to prefer create_form, which is self-evident from the verb contrast.

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

update_form_settingsA

Change how a form of the current team is delivered, as opposed to what it says (use update_form for title / questions / report / theme). Editable: submissionAccess (who may answer and whether seeing the report needs a login — this is the lead-capture gate), reportGateRequireCode (whether that login gate collects an emailed verification code, trading completion rate against lead quality), timeLimit, sharing (the result-page share button and personalised share card, which is what drives organic spread), answerSheet, booking (the result-page booking block that feeds the 1:1 call queue), gaTrackingId, sharedWithAll (whether every team member can see this form), and slug (the custom path that gives the public link a memorable, SEO-friendly address). Only the keys you pass are changed. Read the current values with get_form_share_info.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugNoCustom path of the public answer link — the SEO-friendly address (e.g. quizster.app/<team>/burnout-test on the platform domain, or <custom-domain>/burnout-test when the team's custom domain is serving). Lowercase letters, digits and hyphens, 2-64 chars, must start and end with a letter or digit, unique within the team. Pass an empty string to clear back to the random address. Changing it breaks the previous custom path right away, but the token address (/a/<publicToken>) always keeps working and the page's canonical URL follows the custom path.
formIdYesThe form UUID
bookingNoThe result-page booking block. The bookable hours live in the team's booking settings, not here — this is only the switch and the copy. Bookings that come in are handled with list_bookings / review_booking.
sharingNoResult-page sharing: the share button, the personalised share card and the public summary. Turning this off stops respondents spreading their results.
timeLimitNoAnswer-time countdown
answerSheetNoThe answer-sheet sidebar on the answering page
gaTrackingIdNoGoogle Analytics measurement id (G-XXXXXX) or Universal Analytics id (UA-XXXX-Y). Pass an empty string to clear.
sharedWithAllNoWhether every member of the team can see and open this form
submissionAccessNopublic = anyone answers and sees the report; login_to_view_report = anyone answers but must sign in to see the report (the default, this is how leads get captured); examinee_only = a login is required before answering at all
reportGateRequireCodeNoOnly applies when submissionAccess is login_to_view_report. false (the default for newly created quizzes) = the respondent only types an email and a name to see this one result — far more people finish, but the address is unverified and they get no account, and since result links do get forwarded, the report is effectively as reachable as public for whoever opens the link first. true = the respondent must confirm an emailed 6-digit code, so every captured lead has a verified address and the respondent gets an account they can return to. Quizzes created before this setting existed read as true.

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugNoCustom path after this change; null when cleared (back to the random address)
formIdNoThe form that was changed
changedNoWhich settings this call changed
deliveryNoDelivery state: { isActive, submissionAccess, reportGateRequireCode, timeLimit, sharing, answerSheet, booking, gaTrackingId, sharedWithAll }; get_form_share_info adds the team-level examineeSignupDisabled (respondent self-signup off = a login-gated quiz turns away anyone not on the roster)

TDQS

A5/5.0
Behavior5/5

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

The description goes far beyond the annotations by explaining partial-update behavior ('Only the keys you pass are changed') and by disclosing real-world consequences, such as submissionAccess acting as the lead-capture gate, reportGateRequireCode trading completion rate against lead quality, and slug changes breaking the previous custom path while the token address keeps working. This is rich behavioral context that annotations do not provide.

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 front-loaded with the core distinction and then presents a dense but purposeful enumeration of all editable fields with their behavioral implications. No filler or redundant phrasing is present; every sentence contributes to selecting and invoking the tool correctly.

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 tool with 10 parameters, nested objects, and an output schema, the description covers all editable fields, states the partial-update contract, names the sibling for content edits, and points to the read-side companion. The presence of an output schema reduces the need to document return values, and nothing required for correct invocation appears missing.

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

Parameters5/5

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

Although schema coverage is 100%, the description adds significant semantic framing by grouping parameters as delivery/lead-capture mechanics (e.g., 'the lead-capture gate', 'trading completion rate against lead quality', 'drives organic spread'). It clarifies the business purpose of each editable field, which is value beyond the raw schema 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 opens with a specific verb and resource: 'Change how a form of the current team is delivered,' and immediately contrasts with 'what it says (use update_form for title / questions / report / theme).' This clearly distinguishes update_form_settings from its closest sibling, update_form, so an agent knows exactly which tool to pick.

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 explicitly says when to use this tool versus update_form, and it directs agents to get_form_share_info for reading current values. The description makes the boundary between content editing and delivery/settings editing explicit, leaving no ambiguity about which sibling to call.

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

update_form_translationA

Save translated copy for one language version of a form. Pass the translated title / description / fields / report / systemText / booking, mirroring the shape returned by get_form_translation; fields you omit keep their current value and partial translation is allowed. Translation fields[] must not introduce codes that do not exist on the source form. Pass isActive=false to pause just this language version, independently of the form's overall isActive.

ParametersJSON Schema
NameRequiredDescriptionDefault
titleNoTranslated form title
fieldsNoTranslated questions mirroring the source structure: same codes, translated text. The current draft comes from get_form_translation (or the clone create_form_translation returns) — edit the text in place and send it back. Merging is by code, not position, so a partial list is fine and omitted questions stay untranslated.
formIdYesThe source form UUID
reportNoTranslated report display text, mirroring the stored report that get_form_translation returns — the nested overallAnalysis / dimensionAnalysis / outcomeAnalysis shape, NOT the flattened `report` input of create_form / update_form. Scores, formulas, thresholds and codes always come from the source; only the text keys below are applied.
bookingNoTranslated copy for the result-page booking block (the block that offers a call). Whether the block shows at all always comes from the source form — this only translates its wording. Omit a key or send it empty to keep falling back to the source text.
isActiveNoEnable/pause this language version (independent of the form's overall isActive).
languageYesWhich language version to update
systemTextNoTranslated answer-page system copy, as an open key→text map (e.g. { "submitButton": "Absenden", "nextPage": "Weiter" }). Keys are the answer-page copy keys — read the ones already set from get_form_translation, and note that keys the answer page does not know are stored but never rendered. Every key is optional; an empty value falls back to the built-in text for this language.
descriptionNoTranslated form description

Output Schema

ParametersJSON Schema
NameRequiredDescription
formIdNoThe source form
updatedNoWhich parts of the translation this call changed
languageNoLanguage that was saved

TDQS

A4.1/5.0
Behavior4/5

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

Annotations provide no behavioral guidance (readOnlyHint=false, destructiveHint=false, openWorldHint=false), so the description carries the burden. It discloses partial-update behavior, the independence of the per-version `isActive`, and a validation constraint ('must not introduce codes that do not exist on the source form'). It does not mention deeper consequences like error behavior or what happens with unknown systemText keys, but those are covered in the schema, so the description adds solid context beyond annotations.

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

Conciseness4/5

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

The description is a single four-sentence paragraph that front-loads the purpose and then states the key behaviors and constraints. Every sentence is useful and no filler is present. It could benefit from bulleted structure given the complexity, but it is appropriately compact relative to the large 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 9 parameters, nested objects, and an output schema, the description covers the essential usage context: what to pass, the partial-update workflow, and the `isActive` semantics. It does not explicitly mention that this tool requires an existing translation (or how to route to `create_form_translation`), but the name and 'keep their current value' strongly imply it. Overall it is complete enough 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%, so the schema fully documents each parameter, including nested match-key semantics. The description adds only a high-level cross-reference to `get_form_translation` and restates the code-match constraint already present in the schema. It does not meaningfully explain individual parameters beyond what the schema provides, 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?

The description states a clear verb and resource: 'Save translated copy for one language version of a form.' It explicitly distinguishes the action from reading (`get_form_translation`) by referencing the shape to mirror, and 'fields you omit keep their current value' signals an update rather than a create. No ambiguity remains 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 Guidelines4/5

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

The description gives clear context: mirror the shape from `get_form_translation`, partial translation is allowed, and `isActive` can be toggled per language version. It does not explicitly name alternatives (e.g., 'use create_form_translation for new language versions') or state when not to use this tool, so it stops short of a 5. The intended workflow is nonetheless easy to infer.

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

update_leadA

Move one lead of the current team to another follow-up status (e.g. new → contacted). The change is recorded on the lead's timeline. Status codes and tag codes are team-defined — call list_lead_settings first to get the valid ones, never guess.

ParametersJSON Schema
NameRequiredDescriptionDefault
leadIdYesThe lead id (the leadId returned by list_leads)
statusYesThe target status code, must be one of list_lead_settings.statuses[].code

Output Schema

ParametersJSON Schema
NameRequiredDescription
leadIdNoThe lead that was moved
statusNoStatus code after the move

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-destructive operation. The description adds useful behavioral context: the change 'is recorded on the lead's timeline' and status codes are team-defined. No contradiction with annotations.

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

Conciseness4/5

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

Three short sentences place the main action first, the side effect second, and the critical precondition last. The only small flaw is mentioning 'tag codes' in a tool whose parameters contain no tag field, which is slightly extraneous.

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 definition covers the action, scope, valid status source, and a side effect, and an output schema exists to describe the return value. It lacks an explicit statement about overwriting the previous status, but the 'move to another status' wording sufficiently implies it.

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

Parameters4/5

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

Schema coverage is 100%, but the description still adds meaning by framing status as a team-defined follow-up status with an example and stressing that codes must come from list_lead_settings. This enriches the bare schema description of status.

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

Purpose5/5

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

States a specific verb and resource: 'Move one lead ... to another follow-up status', with an illustrative example. The scope 'of the current team' and focus on follow-up status clearly distinguish it from sibling lead tools like assign_leads or set_lead_tags.

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?

Explicitly instructs the agent to call list_lead_settings first to obtain valid status codes and warns 'never guess', which is a clear operational precondition. It does not explicitly name exclusions or alternatives, but it gives enough context to avoid incorrect status use.

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

update_questionA

Update a single question of an existing form, located by code. Changeable: name / description / explain / required / score / correctAnswer / aiMatch (FillBlank AI grading) / precision (DateField/TimeField picker precision) / min / max / unit / decimalPlaces (NumberField) / words (Rate scale labels) / choices (replaces ALL choices of a choice-based question). NOT changeable — delete_question then add_question instead: question type, Rate steps, DropDown multiple, Ordering shuffle. DateField / TimeField / Rate reject score / correctAnswer / aiMatch (configure date/time scoring in the web app). The scored_quiz and outcome_quiz scenes reject the top-level score / correctAnswer / aiMatch as well: pass choices carrying choices[i].score or choices[i].outcomes instead (TrueFalse outcome votes still need delete + recreate).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxNoNumberField only: new maximum allowed value; pass null to remove the upper bound. Ignored for other question types.
minNoNumberField only: new minimum allowed value; pass null to remove the lower bound. Ignored for other question types.
codeYesQuestion code (field.code), from the get_form / create_form return value
nameNoNew question stem, optional
unitNoNumberField only: new display unit suffix (e.g. "kg"); pass null or an empty string to clear. Ignored for other question types.
scoreNoScore for this question; 0 or omitted + no correctAnswer means not scored
wordsNoRate only: new scale labels shown under the rating control (up to 5); pass null or [] to remove the labels. Ignored for other question types.
formIdYesThe form ID the question belongs to
aiMatchNoFillBlank AI grading config (knowledge_quiz scene only). Pass an object to enable AI matching (requires the question to have correctAnswer + score > 0); pass null to turn it off and revert to exact-match grading. Omit to leave the existing grading mode untouched.
choicesNoReplace ALL choices of a choice-based question (SingleCheck / MultiCheck / DropDown / Ordering / Cascade; rejected for other types). To keep an existing choice's identity (so past answers still match it) pass its current code from get_form; entries without a code get a new auto-generated code. knowledge_quiz scene: if the existing correctAnswer references a code missing from the new choices, pass a new correctAnswer in the same call. scored_quiz scene: set choices[i].score to rebuild Option Scoring (required if the question currently has Option Scoring). outcome_quiz scene: every choice must carry an outcomes vote list (use [] for a neutral choice).
explainNoNew answer explanation (the question's "answer explanation" field, not the question note); pass an empty string to clear. Same rich-text rules as description.
requiredNoWhether the question is required
precisionNoDateField / TimeField only: new picker precision. DateField accepts year | month | day | hour | minute | second; TimeField accepts only minute | second. Ignored for other question types.
trueLabelNoTrueFalse only: new custom display text for the "true" option; pass an empty string to clear and fall back to the localized default. Ignored for other question types.
falseLabelNoTrueFalse only: new custom display text for the "false" option; pass an empty string to clear and fall back to the localized default. Ignored for other question types.
descriptionNoNew question note; pass an empty string to clear. This field also accepts an inline image: put an <img src="..."> in it, where src is a direct image URL that renders in <img src> (a page URL that merely contains an image does not work). Use finalize_image_upload to host an image yourself, or a direct URL the user supplied. Never invent an image URL — omit the image instead of risking a broken one.
correctAnswerNoNew correct answer; the shape follows the question type — see the anyOf branches. Choices are referenced by label or code (use the code when the same label repeats), and they must exist in the question's current choices, or in the `choices` replacement passed in this same call. NumberField answers must stay typeable within min / max and decimalPlaces. Rejected for DateField / TimeField / Rate, and in the scored_quiz / outcome_quiz scenes.
decimalPlacesNoNumberField only: new number of decimal places allowed (0 = integers only); pass null to reset to the default 0. Ignored for other question types.

Output Schema

ParametersJSON Schema
NameRequiredDescription
codeNoThe question that was updated
fieldNoThe question after the merge
formIdNoThe form that was edited
changedNoWhich question attributes this call changed

TDQS

A4.8/5.0
Behavior5/5

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

Adds significant behavioral context beyond the annotations: choices replaces ALL existing choices, omitting aiMatch leaves grading mode untouched, pass-null removes bounds, certain scenes reject top-level score/correctAnswer/aiMatch, and TrueFalse outcome votes still require delete+recreate. No contradiction with readOnlyHint=false or destructiveHint=false.

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

Conciseness4/5

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

Front-loaded with a clear first sentence, and the length is justified by 18 parameters. However, the description is one dense semicolon-separated block that would benefit from bullet or section grouping, making scanning slightly harder than it should be.

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 covers the remaining operational constraints an agent needs: replacing choices while preserving identity via codes, scene-specific rejections, correctAnswer referencing the same-call choices replacement, and the delete+recreate escape hatch. Nothing material is missing for correct invocation.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds real value by grouping changeable fields, flagging the NOT-changeable set that the schema cannot express, and summarizing type-specific constraints (e.g., precision per field type). Most parameter meaning still comes from the schema, but the description's high-level map and exclusions justify 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?

States a specific verb + resource: 'Update a single question of an existing form, located by code.' It enumerates changeable fields and explicitly names the alternative path (delete_question then add_question) for non-changeable attributes, clearly distinguishing this tool from add_question/insert_question/delete_question siblings.

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

Usage Guidelines5/5

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

Explicitly says when NOT to use this tool: question type, Rate steps, DropDown multiple, and Ordering shuffle require delete_question plus add_question. It also gives scene-specific routing for scored_quiz/outcome_quiz (use choices[i].score or choices[i].outcomes) and directs date/time scoring configuration to the web app.

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

update_tenant_slugA

Change the team address of the current team — the first path segment of every quiz link on the platform domain (quizster.app//). Owner / admin only. Lowercase letters, digits, hyphens and underscores, 4-32 chars, must start and end with a letter or digit, unique across the whole platform, and cannot be cleared. Changing it moves EVERY public quiz link of the team at once and the old address stops resolving (cached entries may linger briefly), so treat this as a rare, deliberate rename — not routine tuning; token addresses (/a/) keep working. Read the current value with get_active_tenant.

ParametersJSON Schema
NameRequiredDescriptionDefault
slugYesThe new team address

Output Schema

ParametersJSON Schema
NameRequiredDescription
slugNoThe new team address — the first path segment of every platform-domain quiz link
tenantIdNoThe team that was renamed

TDQS

A4.9/5.0
Behavior5/5

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

Annotations only say the operation is not read-only, not open-world, and not destructive in the teardown sense. The description adds crucial hidden behavior: changing the slug moves EVERY public quiz link at once, old addresses stop resolving with possible cached-entry lag, and the slug cannot be cleared. This is exactly the behavioral context an agent needs beyond the annotation flags.

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

Conciseness5/5

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

The description is dense but every sentence earns its place: what changes, the URL format, permission, constraints, side effects, and the safe-reading alternative. The critical long-term consequence is front-loaded before the cautions, and nothing is redundant with the 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?

For a single-parameter mutation that affects public URLs, the description gives the permission model, uniqueness domain, character constraints, side effects on existing links, and a pointer to the read tool. An output schema exists, so return values need no explanation. An agent has everything required to decide when to call it and how to construct a valid slug.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description adds meaningful constraints beyond the schema: allowed character set, length range, start/end requirements, global uniqueness, and the fact that the value cannot be cleared. These are essential for constructing a valid argument and are absent from the schema's terse property description.

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 and resource ('Change the team address of the current team'), defines the exact URL path segment it affects, and clearly distinguishes it from reading the slug (get_active_tenant) and from token addresses. The behavior is exact — an agent cannot confuse this with any sibling.

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 states the permission requirement, the uniqueness and format constraints, and warns when NOT to use it ('rare, deliberate rename — not routine tuning'). It also tells the agent to read the current value using get_active_tenant and notes token addresses continue working — giving clear when-to-use and when-to-avoid guidance.

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. 4 tool updatesv1.1.0
    • Addedpreview_guide
    • Addedpreview_outcome
    • Addedpreview_quiz
    • Addedpreview_scorecard
  2. 48 tool updatesv0.1.0
    • First observedadd_lead_comment
    • First observedadd_question
    • First observedassign_leads
    • First observedcreate_form
    • First observedcreate_form_from_template
    • First observedcreate_form_translation
    • First observeddelete_form
    • First observeddelete_form_translation
    • First observeddelete_question
    • First observedduplicate_form
    • First observedfinalize_image_upload
    • First observedget_active_tenant
    • First observedget_booking_availability
    • First observedget_examinee
    • First observedget_form
    • First observedget_form_funnel
    • First observedget_form_share_info
    • First observedget_form_stats
    • First observedget_form_translation
    • First observedget_lead
    • First observedget_record
    • First observedinsert_question
    • First observedinvite_member
    • First observedlist_bookings
    • First observedlist_examinees
    • First observedlist_form_translations
    • First observedlist_forms
    • First observedlist_lead_settings
    • First observedlist_leads
    • First observedlist_my_tenants
    • First observedlist_records
    • First observedlist_templates
    • First observedmove_question
    • First observedprepare_image_upload
    • First observedreschedule_booking
    • First observedrestore_form
    • First observedreview_booking
    • First observedset_dimension_analysis
    • First observedset_lead_tags
    • First observedswitch_active_tenant
    • First observedupdate_booking_status
    • First observedupdate_examinee
    • First observedupdate_form
    • First observedupdate_form_settings
    • First observedupdate_form_translation
    • First observedupdate_lead
    • First observedupdate_question
    • First observedupdate_tenant_slug

TDQS

A4/5.0

Scored across 52 tools

Disambiguation4/5

The toolset is organized by resource (forms, questions, translations, examinees, records, leads, bookings, tenants) and the descriptions are unusually precise, so most choices are clear. A few near-neighbor pairs remain (create_form / create_form_from_template / duplicate_form, update_form / update_form_settings, list_records / list_leads / list_examinees), but the documentation draws those boundaries well.

Naming Consistency4/5

Almost every tool follows a lowercase snake_case verb_noun pattern, with clear CRUD families for forms, questions, translations, records, leads, and bookings. Minor inconsistencies such as add_question vs insert_question, set_dimension_analysis next to update_form, and update_tenant_slug beside switch_active_tenant keep it from a perfect score.

Tool Count1/5

At 52 tools, this crosses the 50+ threshold for an extreme tool surface and is far beyond the 3-15 sweet spot; the sheer volume will consume context and make reliable tool selection harder. The scope is genuinely broad, but a single MCP server this large is a mismatch and should be split into quiz-builder, analytics/CRM, and booking/team servers.

Completeness4/5

The core quiz lifecycle is thoroughly covered: form CRUD plus restore/duplicate, question editing, translations, media upload, delivery settings, analytics, submission records, leads, and bookings. Minor gaps exist - no media list/delete, no member removal, no examinee delete - but agents can work around them.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers