Skip to main content
Glama

TheySaid

Server Details

AI-native customer research and AI usability testing. Search customer feedback and full conversation transcripts; get themes, ratings, recommendations and quotes; compare projects and trends; generate charts. Plan, review and launch AI usability tests on any public URL or design and get prioritized issues with paste-ready fix prompts for coding agents. OAuth 2.0 with dynamic client registration; sign in with a TheySaid account (free plan available).

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

TDQS

A3.8/5.0

Scored across 33 tools

Disambiguation4/5

The vast majority of tools target a distinct resource+action (e.g. contact_list vs contact_detail, recent_responses vs responses_search, similar_projects vs cross_project_comparison), and the descriptions explicitly disambiguate close pairs. Minor overlap exists among the project-level tools: project_overview already returns estimatedCompletionTime, making project_estimated_duration somewhat redundant, and project_stats overlaps project_overview on metrics.

Naming Consistency4/5

All names are consistently snake_case and readable. However the set mixes verb_noun action names (list_projects, get_question, generate_chart, launch_usability_test, flag_result) with bare noun-noun resource names (project_overview, channel_breakdown, contact_detail, theme_detail, company_data), so the pattern is not uniform.

Tool Count3/5

33 tools is heavy for a single server and sits in the 'too many' band. The count is partly justified because the server spans two substantial surfaces (AI usability-test lifecycle ~13 tools and feedback analytics ~15 tools), but the size invites overlap and increases selection cost.

Completeness4/5

Coverage is broad and mostly end-to-end: the usability-test lifecycle (prepare/upload/check/propose/revise/launch/relaunch/status/wait/results/flag) and the analytics surface (projects, questions, responses, contacts, themes, comparisons, trends, charts, docs, company profile) are all present. Minor gaps remain around project-level management/edit operations, but nothing that blocks core agent workflows.

Available Tools

33 tools
channel_breakdownB
Read-only
Inspect

How a project's responses split across collection channels (link/website/email/qr-code/social-media/panel), with counts and average completion progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYes
includeLowQualityNoLow-quality (archived) responses are excluded by default. Set true ONLY when the user explicitly asks to include low-quality/archived responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
channelsNo

TDQS

B3.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds what is actually computed (counts and average completion progress), which is mild extra value, but it omits any note about the default exclusion of low-quality responses or scoping to a single project.

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

Conciseness4/5

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

A single, front-loaded sentence with no filler. It is a fragment rather than a full sentence, but every clause (channels list, counts, average completion progress) 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?

An output schema exists, so return values need no further explanation, and annotations cover safety. The description is sufficient for a simple two-parameter read-only aggregate; only the low-quality filtering caveat is left to the schema.

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 50%: projectId is undocumented but self-explanatory, while includeLowQuality carries a thorough description in the schema. The description contributes nothing about either parameter, so it neither compensates for nor improves on the schema.

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

Purpose4/5

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

The description states a specific computation (how responses split across collection channels) and enumerates the channel values plus the reported metrics (counts, average completion progress). This clearly separates it from the sibling question_breakdown, though it does not name that sibling explicitly.

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

Usage Guidelines2/5

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

There is no when-to-use guidance, no prerequisites, and no mention of alternatives such as question_breakdown or project_stats. The agent must infer the use case (channel-distribution analytics) entirely from the purpose statement.

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

check_design_snapshotA
Read-only
Inspect

Verifies an uploaded design snapshot: the object must exist and be non-empty, self-contained HTML within the size limit. Returns { ok, previewUrl, sizeBytes, needsConfirmation, message }. needsConfirmation: true means the user should look at previewUrl and confirm it is the intended design. A missing, empty, oversized or non-HTML file returns an error; re-upload and check again. After a successful check: propose_usability_test(uploadId) for a new test, or relaunch_usability_test(projectId, uploadId) to re-test an existing project.

ParametersJSON Schema
NameRequiredDescriptionDefault
uploadIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
okNoAlways true when returned (a failed check throws a coded error).
messageNoUser-facing status message the agent relays.
sizeBytesNoThe hosted object's size in bytes.
previewUrlNoPublic URL to open the hosted design.
needsConfirmationNoTrue → show the user the preview before proposing.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the specific validation rules, the error conditions (missing/empty/oversized/non-HTML), and the meaning of needsConfirmation and previewUrl. Only the semantics of confirmation handling could be slightly richer.

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 text is dense and front-loaded: purpose first, then return semantics, then error behavior, then next-step routing. The only mild redundancy is enumerating the return keys when an output schema already exists, though the explanation of needsConfirmation earns that space.

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 detail return fields, yet it still supplies the one non-obvious semantic (what needsConfirmation=true means) and the full follow-up workflow. Nothing an agent needs to call this correctly appears to be 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 single parameter has 0% schema description coverage and no enum, so the description should carry the meaning. It implies uploadId refers to a previously uploaded snapshot, but never states where the value comes from (presumably upload_design_snapshot) or its format. This is adequate given one trivial param but leaves a small gap.

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 precise verb ('Verifies') on a specific resource ('an uploaded design snapshot') and states the exact validation criteria (exists, non-empty, self-contained HTML, within size limit). It is clearly distinguishable from siblings like upload_design_snapshot and prepare_design_snapshot.

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 downstream routing: after a successful check use propose_usability_test(uploadId) for a new test or relaunch_usability_test(projectId, uploadId) to re-test. It also names the failure path ('re-upload and check again'), so an agent knows exactly what to do in either branch.

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

company_dataA
Read-only
Inspect

The caller's own company profile: company name, a summary of what they do, their category, and their products/services (with features, benefits and unique selling points). Use this to GROUND ideation and strategy (e.g. "new project ideas", positioning, what to ask next) in what the company actually offers. No arguments — it is always the caller's organization.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
noteNo
companyNo

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the meaningful behavioral fact that it takes no arguments and always resolves to the caller's own organization, but discloses nothing about response freshness, permissions, or limits.

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 sentences, front-loaded with what is returned, then why it matters. The second sentence is somewhat long with nested parentheticals, but every clause carries usable guidance.

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?

An output schema exists, so return-value details are already covered and the description need not restate them. For a zero-parameter, annotated read-only tool, the definition supplies enough context for correct invocation, though it omits any note on how current the profile data is.

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

Parameters4/5

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

With zero parameters, the baseline is 4, and the description reinforces this by explicitly stating 'No arguments — it is always the caller's organization', which pre-empts an agent hunting for an org or company ID. No further parameter meaning is needed.

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

Purpose4/5

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

The description names the resource precisely and enumerates its contents (company name, summary, category, products/services with features, benefits, USPs), so an agent knows exactly what it gets. It does not explicitly differentiate itself from a sibling like org_documents, which keeps it just below a 5.

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 when to use it — grounding ideation and strategy such as new project ideas, positioning, and what to ask next — with concrete examples. There is no explicit when-not guidance or named alternative, but the usage context is unambiguous.

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

contact_detailA
Read-only
Inspect

One contact (respondent): their name, email, phone, and recent responses across all projects (insight id + share id, project, summary, signal, date). Resolve contact ids via contact_list.

ParametersJSON Schema
NameRequiredDescriptionDefault
contactIdYesThe contact id (from contact_list).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
contactNo
responsesNo

TDQS

A4/5.0
Behavior3/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 the notable fact that it exposes PII (email, phone) and aggregates responses 'across all projects', but says nothing about permissions, rate limits, or pagination for the response list.

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 zero filler; the resource and its returned fields are front-loaded, and the ID prerequisite follows immediately.

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

Completeness4/5

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

With an output schema present, the description needn't enumerate return values, and annotations carry the safety profile, so remaining needs are small. The one-parameter schema is fully documented, leaving only minor gaps around pagination of the 'recent responses' set.

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

Parameters3/5

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

Schema coverage is 100% and the single contactId parameter is fully documented in the schema, including its 'from contact_list' provenance. The description's 'Resolve contact ids via contact_list' repeats that schema note rather than adding syntax or format detail, 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 names a specific resource and scope: 'One contact (respondent)' with a concrete inventory of returned fields (name, email, phone, recent responses). The singular 'One contact' cleanly distinguishes it from the plural sibling contact_list.

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 explicitly routes the agent to contact_list for ID resolution, establishing the prerequisite for calling this tool. However, it doesn't state when to prefer this detail view over the list view or other response-level siblings like response_detail.

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

contact_listA
Read-only
Inspect

List the organization's contacts (respondents) — optionally limited to those who responded to specific projects. Each contact shows their name, email, total responses, last response date, and which projects they responded to. Use projectIds to find who responded to given projects, or search to find a person by name/email. Pass a returned contact id to contact_detail or responses_search (contactId).

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax contacts (default 25, max 50).
searchNoCase-insensitive match on name/email, or null.
projectIdsNoOnly contacts who responded to these projects, or null for all org contacts.

Output Schema

ParametersJSON Schema
NameRequiredDescription
contactsNo

TDQS

A4/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered. The description adds that contacts are respondents and enumerates returned fields, but it stays silent on pagination behavior and auth scope; with an output schema present, the field list is largely redundant.

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 sentences that are front-loaded with purpose, then returns, then parameter routing; each earns its place. The returned-field enumeration mildly overlaps the output schema but remains readable.

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 full schema coverage, an output schema for return values, and annotations covering safety, the description supplies everything an agent needs: purpose, scope, parameter intent, and downstream id usage. No material gaps remain.

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

Parameters3/5

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

Schema description coverage is 100%, so all three parameters are already documented in the schema. The description's projectIds and search notes restate rather than extend the schema semantics, so the baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ("List the organization's contacts") plus the scope (optionally limited to project respondents), and equates contacts with respondents. This clearly separates it from contact_detail (single contact) and responses_search (response-level), so an agent can route 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?

Explicitly tells the agent when to use projectIds (find who responded to projects) versus search (find a person by name/email), and points the returned id downstream to contact_detail or responses_search(contactId). No explicit when-not-to-use or preference ordering against list-oriented siblings like recent_responses.

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

cross_project_comparisonA
Read-only
Inspect

Compare feedback across projects. Pass explicit projectIds (2+) to compare those. Pass a single projectId (or none) and the tool finds the most comparable projects by theme similarity. Returns each project headline plus shared and divergent themes.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdsNoExplicit projects to compare, or null/one to auto-find comparable projects.
maxProjectsNoCap on projects compared (default 3).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
projectsNo
sharedThemesNo
divergentThemesNo

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, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the automatic project-selection fallback when projectIds is absent or singular, and the shape of the comparison output.

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, zero filler, with the primary purpose front-loaded and the two usage modes following in order of importance. Every sentence earns its place.

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

Completeness5/5

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

With an output schema present, the description need not detail return values, yet it still summarizes them usefully. For a two-parameter, zero-required, read-only comparison tool, nothing an agent needs to call it correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds a real threshold not stated in the schema: that explicit comparison requires at least two projectIds, while one or zero switches to auto-discovery. That is meaningful semantics beyond the parameter descriptions.

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

Purpose4/5

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

States a specific verb and resource ('Compare feedback across projects') and elaborates with the two operating modes, so the agent knows exactly what the tool produces (headline plus shared/divergent themes). It does not, however, explicitly contrast itself with the sibling 'similar_projects', which is the closest potential confusion.

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

Usage Guidelines4/5

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

Gives concrete invocation conditions: 2+ projectIds for an explicit comparison, one or none to trigger auto-discovery of comparable projects. This is clear operational context, but it never states when to prefer this tool over alternatives such as similar_projects or project_overview.

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

flag_resultAInspect

Flag a synthesized usability issue as inaccurate or hallucinated to help tune the models. Pass the testId and the issue id from get_test_results; reason is optional.

ParametersJSON Schema
NameRequiredDescriptionDefault
reasonNo
testIdYes
issueIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
flaggedNoTrue once the issue was recorded as flagged.
issueIdNoThe flagged issue id (echoed).

TDQS

A4.2/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=false, destructiveHint=false and openWorldHint=false, so the safety profile is covered and the 'flag' wording is consistent with a non-read-only write. The description adds the downstream consequence ('to help tune the models'), but does not say whether the flag is reversible, how it affects the issue/result, or any auth requirements.

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

Conciseness5/5

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

Two tight sentences with the core purpose front-loaded and the parameter guidance second. No redundant or filler text.

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?

An output schema exists so return values need no explanation, and annotations cover the safety profile. The definition is nearly complete, with only minor gaps around reversibility and the semantics of the reason field.

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

Parameters4/5

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

With 0% schema description coverage the description must carry the param burden, and it does name all three (testId, issueId, reason), identifies where the IDs come from, and marks reason as optional. It stops short of describing the format or expected content of reason.

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

Purpose5/5

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

The description states a specific verb 'flag' plus the resource 'a synthesized usability issue' and the semantic outcome ('inaccurate or hallucinated'). An agent can immediately tell this is a feedback/marking operation distinct from the get_test_results sibling that only reads data.

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 names the source of the required IDs ('from get_test_results'), which routes the agent to call that tool first, and clarifies 'reason is optional'. It gives clear context but no explicit when-not-to-use or exclusion guidance.

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

generate_chartAInspect

Render a chart to a hosted image; returns a URL to embed in markdown as title. Types: bar (grouped vertical), horizontal_bar (best for long category names or ranked lists), stacked_bar (part-to-whole across categories), line / area (trend over an ordered axis), pie / doughnut (share-of-total of ONE series).

ParametersJSON Schema
NameRequiredDescriptionDefault
typeYesPick the type that best fits the data.
titleYes
labelsYesCategory labels (x axis; slice labels for pie/doughnut).
seriesYesOne or more series; each values array aligns with labels. pie/doughnut use the first series only.
valueSuffixNoe.g. '%' or null.

Output Schema

ParametersJSON Schema
NameRequiredDescription
urlNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations declare readOnlyHint=false, destructiveHint=false, and openWorldHint=false, but the description usefully adds what the tool actually produces: a hosted image URL formatted for markdown embedding. That return-format disclosure is genuine value 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?

Front-loaded with the core action and return value, then a compact type-to-purpose map. It is dense but every clause carries selection-relevant information; slightly list-heavy but no wasted sentences.

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

Completeness4/5

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

With an output schema present, the description needn't detail return shape, and it covers purpose, output URL, and type selection well. It leaves only ancillary questions (limits, styling) unanswered, which is reasonable for this tool.

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 80%, but the description meaningfully enriches the most consequential parameter (type) far beyond the schema's terse 'Pick the type that best fits the data,' noting horizontal_bar for long category names and that pie/doughnut take a single series. It adds real meaning on top 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?

States a specific verb and resource ('Render a chart to a hosted image') plus the concrete output ('returns a URL to embed in markdown as ![title](url)'). This clearly distinguishes it from every sibling, none of which produce charts or hosted images.

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 gives strong guidance for choosing among chart types, but that is really selection within the enum. It never states when to reach for this tool versus its siblings or any preconditions, so usage vs alternatives is only implied.

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

get_questionA
Read-only
Inspect

Full detail of ONE question: its type, text, 1-based position (order) among the project's questions, the total question count, options, contentUrl, AI follow-up depth, and — for task questions — whether the success/feedback follow-ups are enabled. Use it to inspect a question's current position, options, and settings. Resolve question ids via project_overview's questions list.

ParametersJSON Schema
NameRequiredDescriptionDefault
questionIdYesThe question id (from project_overview.questions).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
questionNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds useful behavioral detail about the payload (1-based order, total count, task-question follow-up flags) but says nothing about permissions, rate limits, or error behavior.

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 the resource and scope, then the returned fields, then usage. The field enumeration is long but every item is informative for selection; no filler sentences.

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?

An output schema exists, so enumeration of return fields is partly redundant, yet the description still gives an agent enough to know it should call this tool to inspect a single question and how to source the id. Adequate for a simple single-param read tool.

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?

Single required parameter with 100% schema coverage, so the schema does the heavy lifting. The description reinforces provenance ('from project_overview.questions'), which is genuinely helpful for resolving the id, though it adds no new format constraints.

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

Purpose5/5

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

Specific verb (get) plus resource (question) with explicit scope 'ONE question', and it enumerates the returned fields (type, text, order, options, contentUrl, follow-up depth). This clearly distinguishes it from siblings like question_breakdown and project_overview.

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

Usage Guidelines4/5

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

States when to use it ('inspect a question's current position, options, and settings') and how to obtain the id ('Resolve question ids via project_overview's `questions` list'). No explicit when-not or named alternative for the aggregate case, so not 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_test_resultsA
Read-only
Inspect

Returns the usability results for a test. resultsMarkdown is a display-ready summary of every issue (summary, severity, a paste-ready fix prompt for a coding or design agent such as v0, Cursor or Lovable, and a conversation link) plus the instant design scan. Structured fields: prioritizedIssues[].{title, severity, detail, fixPrompt, conversationLink}, quickScan, phase and message. Results are final only when phase is "done". For a "partial" or "failed" run it returns the partial findings and a message describing what happened. wait_for_results returns the same data once a test finishes.

ParametersJSON Schema
NameRequiredDescriptionDefault
testIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
phaseNo
messageNo
partialNo
quickScanNo
resultsMarkdownNo
prioritizedIssuesNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already cover the read-only, non-destructive safety profile. The description adds real behavioral value beyond that: it explains the phase lifecycle ('done' vs 'partial'/'failed') that determines whether data is final, and what a failed/partial run yields. This is substantive lifecycle context 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.

Conciseness4/5

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

Front-loaded with the core purpose, then lifecycle semantics, then the alternative. It is somewhat dense and spends notable text enumerating return fields (prioritizedIssues, quickScan, phase, message) that an existing output schema already captures, which is mild redundancy rather than waste.

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 1-param read-only tool with annotations and an output schema, the description is complete: it covers purpose, phase-gated finality, partial/failed behavior, and routes to wait_for_results. Nothing 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.

Parameters2/5

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

Schema description coverage is 0% for the single testId parameter, so the schema contributes nothing and the description must compensate. It only refers to 'a test' indirectly and gives no hint about the identifier's format or source (e.g., launch_usability_test). The required param remains semantically thin.

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 ('Returns the usability results for a test') and clearly distinguishes itself from get_test_status by describing what results (issues, fix prompts) are returned. It names the sibling wait_for_results, so an agent can tell the two 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 Guidelines4/5

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

Gives clear context: results are final only when phase is 'done', and partial/failed runs return partial findings. It names the alternative wait_for_results for waiting until completion. No explicit exclusions ('do not use when...'), but the selection conditions are well conveyed.

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

get_test_statusA
Read-only
Inspect

Returns a one-off progress snapshot for a running usability test: phase, an approximate percent complete and, for a failed run, failureReason ("partial" means the run was limited). Runs normally take several minutes. wait_for_results is the usual way to follow a test to completion.

ParametersJSON Schema
NameRequiredDescriptionDefault
testIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
phaseNo
updatedAtNo
etaSecondsNo
perPersonaNo
failureReasonNo
findingsSoFarNo

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so safety is covered. The description adds genuinely new behavioral context beyond that: the expected runtime ('runs normally take several minutes') and the meaning of the 'partial' failureReason, which is not derivable from structured fields.

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 tight sentences that front-load what the tool returns, then the runtime expectation, then the routing hint. Slightly dense with parenthetical caveats, but 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?

An output schema exists, so the description is not obligated to explain return values, yet it still disambiguates the failureReason semantics and runtime. Combined with annotations covering the safety profile, an agent has enough to call this 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 0%, but there is only a single required parameter, testId, whose name and type make its meaning self-evident. The description does not restate the parameter or clarify its format, so it neither compensates for nor worsens the coverage gap – baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb and resource ('returns a one-off progress snapshot for a running usability test') and enumerates the payload fields (phase, percent complete, failureReason). It implicitly distinguishes itself from the sibling wait_for_results by being the one-off rather than the follow-to-completion tool.

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

Usage Guidelines4/5

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

Explicitly names the alternative and the condition selecting it: 'wait_for_results is the usual way to follow a test to completion,' which tells the agent this tool is for a single snapshot rather than polling. It stops short of stating when this tool is preferred or what to do if the test has already finished.

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

insight_video_metadataA
Read-only
Inspect

Video-derived UX signals extracted from ONE usability-test session recording: findings (claims about the product, with polarity/severity and supporting quotes), frictions (taxonomy-classified problems with outcome, recovery action, channel and timings), task performance (per-task outcome and operational/perceived/efficient success), emotional moments (fear/anger/frustration/delight with triggers), and mental-model gaps (belief vs actual behaviour). Look it up by insightId (from responses_search / recent_responses / response_detail). Only usability-test responses whose recording was processed by video-metadata extraction have this; other responses return empty facets.

ParametersJSON Schema
NameRequiredDescriptionDefault
insightIdYesThe response/insight id (from responses_search, recent_responses, or response_detail).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
tasksNo
emotionsNo
findingsNo
frictionsNo
insightIdNo
mentalModelsNo

TDQS

A3.9/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 safety is covered. The description adds a genuinely useful behavioral trait beyond annotations: non-processed responses return empty facets rather than erroring, which tells the agent how to interpret an apparently-successful but empty result. No auth or rate-limit context, but none is expected for a read-only lookup.

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 sentences, no filler, and the empty-facets caveat lands at the end where it functions as a guard. The first sentence is a dense facet enumeration that is slightly heavier than needed given an output schema exists, but each listed facet is substantive rather than padding.

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

Completeness4/5

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

For a single-parameter read tool with an output schema, annotations, and 100% schema coverage, the description supplies what the structured fields do not: the precondition for non-empty results and the provenance of the ID. Nothing needed to call it correctly is missing, though the facet enumeration partially duplicates the output schema.

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

Parameters3/5

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

There is a single parameter with 100% schema description coverage, and the description's mention of insightId sourcing largely mirrors the schema's own description. Baseline 3 applies since the schema carries the parameter documentation and the description adds no format or constraint detail beyond it.

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 names the exact resource and scope: video-derived UX signals for ONE usability-test session recording, and enumerates the five facet families returned. An agent can tell this apart from sibling retrieval tools because it is explicitly tied to video-metadata extraction rather than raw response data. It stops short of explicitly contrasting itself with response_detail or responses_search beyond naming them as ID sources.

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 the lookup key and where to get it (responses_search / recent_responses / response_detail), and gives a concrete precondition: only responses whose recording was processed by video-metadata extraction have this data, others return empty facets. That is a clear usage context. It does not spell out a 'use X instead when Y' branch for the ID-source siblings.

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

launch_usability_testAInspect

Starts the AI usability test for a proposal from propose_usability_test or revise_usability_test. Intended to run only after the user has reviewed the plan and explicitly approved launching it, because it spends AI-tester runs and creates a new project. Requires the latest proposalId: each revise replaces earlier ids, and an outdated id fails with PROPOSAL_NOT_FOUND. Optional last-minute edits: add or remove tasks or questions, swap personas. Returns the testId, the final personas and plan, and a startedMessage with the expected duration (usually several minutes). Results come from wait_for_results. Another batch on an existing project is run with relaunch_usability_test, which avoids a duplicate project.

ParametersJSON Schema
NameRequiredDescriptionDefault
editsNo
proposalIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
testIdNoThe created project/test id.
audienceNoThe resolved audience envelope echoed back so the caller can report exactly what was applied.
personasNo
taskPlanNo
taskDetailsNo
learningGoalsNo
startedMessageNoExpectation-setting line for how long the run takes.
questionDetailsNo

TDQS

A4.9/5.0
Behavior5/5

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

The description adds substantial behavior beyond the annotations (readOnlyHint=false, openWorldHint=true, destructiveHint=false): it spends AI-tester runs, creates a new project, and requires the latest proposalId with the concrete failure mode PROPOSAL_NOT_FOUND when stale. It also discloses the return shape (testId, final personas/plan, startedMessage with expected duration) and that results are retrieved via wait_for_results.

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

Conciseness5/5

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

Front-loaded with the action and approval prerequisite, then prerequisites, failure mode, edits, return values, and the sibling alternative in a dense, well-ordered sequence. Every sentence carries distinct information with 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 launch/mutation tool with a rich nested edits schema, the description covers the full calling lifecycle: prerequisite tool, approval requirement, id freshness and failure mode, return values, results retrieval, and the correct alternative for re-runs. An output schema exists, yet the description still appropriately orients the agent on what comes back.

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 0%, so the description must carry parameter meaning, and it does explain proposalId semantics (latest id only, revise replaces earlier ids, stale id fails) plus the edits intent (add/remove tasks or questions, swap personas). It leaves the audience sub-object and addLearningGoals variants undetailed, so it doesn't fully compensate for the 0% coverage, but the high-value semantics are present.

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?

Starts with a specific verb and resource ('Starts the AI usability test for a proposal') and immediately roots the tool in its lifecycle by naming the producing siblings propose_usability_test and revise_usability_test. It also distinguishes itself from relaunch_usability_test for a different scenario, so an agent can disambiguate without opening schemas.

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

Usage Guidelines5/5

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

Explicitly states the when ('only after the user has reviewed the plan and explicitly approved') and the when-not rationale (spends AI-tester runs, creates a new project). It names the alternative relaunch_usability_test and the exact condition that selects it (running another batch on an existing project to avoid a duplicate).

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

list_projectsA
Read-only
Inspect

List the organization's projects with filtering, sorting and cursor pagination. Use to discover/disambiguate projects, resolve a project the user named, or page through a large set. Returns each project's id, title, status, type, response count and last response date, plus pageInfo { endCursor, hasNextPage, total } — pass endCursor back as cursor to fetch the next page.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter to projects carrying these tag names, or null.
typeNoFilter by project type, or null for any.
limitNoPage size (default 20, max 50).
cursorNoendCursor from a previous call to fetch the next page; null for the first page.
searchNoCase-insensitive title search, or null.
statusNoFilter by one or more statuses, or null for any.
sortFieldNoSort field (default last_response_date).
isTemplateNotrue = only templates; false or null = exclude templates (default).
sortDirectionNoSort direction (default desc).

Output Schema

ParametersJSON Schema
NameRequiredDescription
pageInfoNo
projectsNo

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, openWorldHint=false, destructiveHint=false, so the safety profile is covered. The description adds genuinely useful behavior: the exact fields returned per project and the pagination contract (endCursor passed back as `cursor`), which the annotations cannot convey.

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

Conciseness4/5

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

Front-loaded with purpose in the first clause, then usage, then return shape. Two sentences with essentially no filler, though the second sentence is dense with a list of returned fields.

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?

An output schema exists so return values need not be spelled out, yet the description summarizes them anyway and explains pagination. With annotations covering safety and full schema coverage on parameters, an agent has everything needed to call this 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 already documents all nine parameters including defaults and enum values. The description only reinforces the cursor parameter, adding no syntax or format detail beyond the schema. Baseline 3 applies.

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

Purpose5/5

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

States a specific verb and resource ('List the organization's projects') plus the three capabilities the tool supports (filtering, sorting, cursor pagination), which distinguishes it from siblings like project_overview, project_stats, and similar_projects that operate on a single or related project.

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

Usage Guidelines4/5

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

Gives explicit use cases: discover/disambiguate projects, resolve a project the user named, or page through a large set. This is clear when-to-use guidance, though it does not name an alternative tool or state when NOT to use this (e.g. when the project id is already known and project_overview is better).

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

org_documentsA
Read-only
Inspect

The organization's own uploaded knowledge sources ("Teach AI" documents — files, links and pasted text the org added). With no query, lists those sources (name, type, status). With a query, semantically searches their CONTENT and returns a grounded answer plus supporting snippets. Use it to ground ideation or to answer questions from the org's own material.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoA question to semantically search the documents' content, or null to just list the sources.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
queryNo
answerNo
sourcesNo
documentsNo

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, destructiveHint=false, and openWorldHint=false, but the description adds substantive behavior beyond them: the dual-mode contract, the list fields returned (name, type, status), and that search returns a grounded answer plus supporting snippets. Missing only things like pagination or freshness limits, which are minor here.

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

Conciseness5/5

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

Three compact sentences, front-loaded with the resource definition followed by the two behavioral branches. The parenthetical gloss on 'Teach AI' documents earns its place by clarifying what counts as a source; nothing is padding.

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

Completeness5/5

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

With an output schema present, the description need not explain return values, and annotations carry the safety profile. Both operating modes and the intended use are covered, so nothing an agent needs to call it correctly is missing.

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

Parameters3/5

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

Schema coverage is 100% and the schema description already explains that the query is searched semantically or null to list sources. The description restates that contract ('With no query, lists those sources. With a query, semantically searches their CONTENT') but adds no syntax or format guidance beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

Specific verb+resource pair ('the organization's own uploaded knowledge sources') with the scope defined precisely (files, links, pasted text added by the org). It also disambiguates the two distinct modes — list vs. semantic search — so an agent can predict the behavior before 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?

Explicitly states when to reach for it: 'Use it to ground ideation or to answer questions from the org's own material.' That is clear context for selection, but no exclusion or named alternative is given, so an agent must infer the boundary against siblings like company_data on its own.

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

pingA
Read-only
Inspect

Health/echo check for the TheySaid MCP connection. Returns the message you send (or "pong"). Instant — use it to confirm the server is reachable.

ParametersJSON Schema
NameRequiredDescriptionDefault
messageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageNoThe message you sent, or "pong".

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is covered. The description adds genuine value beyond that: it is instant, it echoes the input back, and it defaults to 'pong' when no message is supplied.

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, zero filler, with the core purpose stated first and the call-to-action last. Every clause earns its place.

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

Completeness5/5

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

An output schema exists, so return structure needn't be spelled out. For a trivial zero-required-parameter connectivity tool, the description covers purpose, behavior, return value, and latency — nothing an agent needs 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 0% and the single 'message' parameter has no description in the schema, so the description must carry the load — and it does: it explains the parameter is echoed back verbatim and that omitting it yields 'pong', implying it is optional. It could be sharper about the nullable type, but the semantics are conveyed.

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 — a health/echo check for the TheySaid MCP connection — and describes its exact return ('the message you send (or "pong")'). No sibling tool performs this function, so the agent can identify it immediately.

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

Usage Guidelines4/5

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

Explicitly names the use case: 'use it to confirm the server is reachable.' That is a clear context for invocation. It stops short of stating when *not* to call it or naming an alternative, but no sibling tool overlaps with a connectivity check, so the gap is minor.

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

prepare_design_snapshotAInspect

Creates an upload slot for a self-contained design (HTML) so TheySaid's AI testers can run a usability test on it. Suited to designs without a durable public URL, such as a Claude Design or Artifact. Temporary preview links (for example claudeusercontent.com) expire during a test, so they are not suitable as prototypeUrl. Live apps built with v0, Lovable, Bolt or Replit are better tested through their published public URL, because a snapshot of them loses styling. The design HTML is temporarily uploaded to TheySaid. Returns { uploadId, uploadUrl, expiresInSeconds, nextStep }. Upload the HTML (text/html, CSS/JS inlined, large assets on absolute CDN URLs) with one PUT to uploadUrl, or with upload_design_snapshot when the environment blocks that host. Then: check_design_snapshot, followed by propose_usability_test(uploadId) for a new test or relaunch_usability_test(projectId, uploadId) to re-test an existing project. This tool does not start a test. Snapshots suit static designs and click-through prototypes; apps that need a live backend or login need a reachable public URL.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextStepNoGuidance: upload → check → propose/relaunch → review → launch.
uploadIdNoOpaque handle for check_design_snapshot / propose / relaunch.
uploadUrlNoPresigned PUT URL to upload the self-contained design HTML.
expiresInSecondsNoSeconds the presigned PUT stays valid.

TDQS

A4.8/5.0
Behavior5/5

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

Annotations declare a non-read-only, non-open-world, non-destructive write, and the description adds substantive context beyond them: the HTML is 'temporarily uploaded to TheySaid', the response shape {uploadId, uploadUrl, expiresInSeconds, nextStep}, the required content form (text/html, inlined CSS/JS, absolute CDN URLs), and the explicit disclaimer that it does not start a test.

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

Conciseness4/5

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

Front-loaded with purpose, then sequencing via 'Then:' and 'This tool does not start a test'. It is long and includes mild redundancy — the point that live apps need a public URL is made twice — but nearly every sentence carries actionable information given the tool's complexity.

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, the return-value explanation is a bonus rather than a necessity, and the definition still covers the full workflow (upload, check, propose/relaunch), the fallback tool, and the static-vs-live boundary. Nothing an agent needs to invoke it correctly is missing.

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

Parameters4/5

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

With zero parameters, the baseline is 4. The description usefully documents the upload contract that the agent must fulfill (single PUT to uploadUrl, content types, inlining rules), even though this concerns the workflow rather than named parameters.

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

Purpose5/5

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

States a specific verb and resource — 'Creates an upload slot for a self-contained design (HTML)' — and immediately scopes the purpose to enabling a usability test. It also distinguishes itself from the similarly named sibling upload_design_snapshot by positioning that tool as the fallback when the upload host is blocked.

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?

Explicit when-to-use ('designs without a durable public URL, such as a Claude Design or Artifact') and when-not ('live apps built with v0, Lovable, Bolt or Replit are better tested through their published public URL'; temporary preview links expire). It names the follow-on alternatives propose_usability_test and relaunch_usability_test, and clarifies it does not itself start a test.

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

project_estimated_durationA
Read-only
Inspect

How long ONE project takes a respondent to complete: estimatedCompletionTimeSeconds (and the same rounded to estimatedCompletionTimeMinutes), derived from the project's question types and AI follow-up depth. A rough upper bound — branching rules may shorten the actual path. Use this when the user asks how long a survey/project takes; project_overview already includes the same figure.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe project id (resolve via list_projects if unsure).

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
projectIdNo
estimatedCompletionTimeMinutesNo
estimatedCompletionTimeSecondsNo

TDQS

A4.3/5.0
Behavior4/5

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

Annotations already cover the safety profile (readOnly, non-destructive, closed world). The description adds real behavioral context beyond that: it is a 'rough upper bound' because 'branching rules may shorten the actual path', and the figure is 'derived from question types and AI follow-up depth'. That caveat meaningfully informs how much to trust the value.

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

Conciseness5/5

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

Three tight sentences, front-loaded with what it returns and immediately followed by the caveat and the usage/routing hint. Every sentence earns its place with no padding.

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

Completeness5/5

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

An output schema exists, so return values need no explanation, yet the description still clarifies the derived nature and limitation of the value. For a simple read-only single-param tool it is fully complete.

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

Parameters3/5

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

Only one parameter (projectId) with 100% schema description coverage, so the schema carries the semantics. The description adds nothing about the parameter itself; baseline 3 is appropriate.

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

Purpose5/5

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

States a specific verb+resource ('How long ONE project takes a respondent to complete') and names the exact return fields (estimatedCompletionTimeSeconds/Minutes). Capitalizing 'ONE' clearly scopes it to a single project, and naming project_overview as carrying the same figure distinguishes it from 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?

Explicitly says when to use it ('when the user asks how long a survey/project takes') and points to project_overview as containing the same figure. It stops short of saying the agent should prefer project_overview instead, so routing is implied rather than fully directive.

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

project_overviewA
Read-only
Inspect

Deep overview of ONE project: its purpose, top themes (with sentiment, strategic recommendations and response counts), average ratings, top open-ended keywords, a few verbatim respondent quotes with share ids for citation, the project's questions (id, type, text, 1-based order, options), and estimatedCompletionTime (rough upper-bound seconds a respondent takes to finish, from question types and AI follow-up depth) — pass a question id to question_breakdown for a full per-question distribution, or to get_question for its editable detail.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectIdYesThe project id (resolve via list_projects if unsure).
includeLowQualityNoLow-quality (archived) responses are excluded by default. Set true ONLY when the user explicitly asks to include low-quality/archived responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
themesNo
optionsNo
projectNo
purposeNo
ratingsNo
keywordsNo
citationsNo
questionsNo
estimatedCompletionTimeNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare a safe read (readOnlyHint=true, destructiveHint=false), lowering the bar. The description still adds useful context: quotes carry share ids for citation, estimatedCompletionTime is a rough upper-bound, and it exposes the fields returned. The archived-response default is only covered in the schema, not here.

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?

It is front-loaded with the core purpose and every clause maps to actual output content, so little is wasted. It is, however, a single dense run-on with nested parentheticals that is heavier than needed.

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 needn't explain return formatting, and it already covers scope, contents, and onward routing. Nothing an agent needs 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 coverage is 100%, so both params (projectId, includeLowQuality) are fully documented in the schema. The description adds no parameter-specific meaning beyond that, so the baseline of 3 applies.

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

Purpose5/5

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

The description states a specific verb+resource ('Deep overview of ONE project') and then enumerates the exact contents: themes with sentiment/recommendations/response counts, average ratings, keywords, quotes with share ids, questions, and estimatedCompletionTime. The 'ONE project' framing cleanly separates it from cross_project_comparison and sibling list tools.

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

Usage Guidelines4/5

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

It explicitly routes the agent onward: use question_breakdown for a full per-question distribution, or get_question for editable detail. That is clear alternative guidance, though it does not state when to prefer this over the likely lighter-weight sibling project_stats.

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

project_statsA
Read-only
Inspect

Quantitative metrics for ONE project: total responses, risk (negative) and growth (positive) signals, unread responses, average conversation depth, first/last response dates, and a per-channel breakdown (count + median completion). Use this for "how is project X doing" / health questions. Optional since/until ISO dates window the metrics.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date — only count responses on/after this, or null.
untilNoISO date — only count responses on/before this, or null.
projectIdYesThe project id (resolve via list_projects if unsure).
includeLowQualityNoLow-quality (archived) responses are excluded by default. Set true ONLY when the user explicitly asks to include low-quality/archived responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
channelsNo
riskSignalsNo
growthSignalsNo
totalResponsesNo
avgMessageDepthNo
unreadResponsesNo
lastResponseDateNo
firstResponseDateNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, and openWorldHint=false, so the safety profile is fully covered by structured data. The description adds the metric inventory and date-windowing scope, but nothing about pagination, latency, or freshness beyond that.

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

Conciseness4/5

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

Front-loaded with the metric list, then usage, then the optional date params — a sensible order. The enumeration of return fields partly duplicates the output schema, a mild redundancy, but nothing is 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?

An output schema exists, so return values needn't be spelled out, yet the description does so anyway and covers the single-project scope, usage, and date windowing. For a read-only 4-param tool, nothing material an agent needs to call it is missing.

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

Parameters3/5

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

Schema coverage is 100% and each parameter already has a descriptive entry, including the low-quality exclusion rule and the projectId resolution hint. The description only restates that since/until window the metrics, adding no format or edge-case detail beyond the schema. Baseline 3.

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

Purpose5/5

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

The description names a specific resource (one project) and enumerates a concrete metric set: total responses, risk/growth signals, unread responses, avg conversation depth, first/last dates, and per-channel breakdown. The 'ONE project' emphasis distinguishes it cleanly from cross_project_comparison and stats_trend.

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

Usage Guidelines4/5

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

It gives a clear use case — 'how is project X doing' / health questions — and implicitly scopes to a single project. However, it never names or excludes close siblings like project_overview or stats_trend, so an agent still has to infer which one to pick for overlapping 'health' questions.

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

propose_usability_testAInspect

Plans an AI usability test on a public prototype URL or an uploaded design (uploadId) without launching it: no AI testers run and nothing is spent. It creates a new draft test; re-testing an existing project is done with relaunch_usability_test instead. Plans are better with context from the user: the decision the test informs, the target users (titles, industry, company size, worldview, motivation, familiarity with the product) and the key flows. These map to learningGoals, audienceSpec and tasks. The default plan is short: about 2 tasks and 2 questions with 0-1 AI follow-ups each (a ~15-20 minute run); depth: "deep" or extra tasks/questions make it longer. Returns a proposalId, personas, tasks, questions, learning goals, an instant design scan and a reviewMessage for the user. Edits go through revise_usability_test, and the test starts only through launch_usability_test once the user approves the plan. Without a prototype source, or with a URL behind a login, the response lists the options (a public URL, or a design snapshot via prepare_design_snapshot). Fields you set (tasks, questions, audienceSpec, project, learningGoals) are applied verbatim and echoed back; omitted fields get AI defaults. Use audienceSpec (exact) or audience (free text); with personaIds, only audienceSpec.numTesters applies. voice.voiceIds takes ElevenLabs voice IDs from search_ai_tester_voices, not voice names.

ParametersJSON Schema
NameRequiredDescriptionDefault
depthNo
tasksNo
intentNo
projectNo
audienceNo
uploadIdNo
questionsNo
personaIdsNo
audienceSpecNo
prototypeUrlNo
learningGoalsNo
prototypeImageNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
depthNo
intentsNoIntent presets available for a re-propose.
audienceNoThe resolved audience envelope echoed back so the caller can report exactly what was applied.
personasNoPersonas this proposal will run.
taskPlanNo
quickScanNoInstant L1 design scan; null when nothing surfaced.
numTestersNoNumber of AI testers this proposal will deploy.
proposalIdNoCache handle passed to launch_usability_test.
projectMetaNoResolved project copy/metadata persisted at launch.
taskDetailsNoFully-resolved tasks with per-task success/feedback toggles.
learningGoalsNoAnalytics objectives this test will be measured against.
reviewMessageNoUser-facing message: this is a reviewable plan that has NOT launched.
personaGalleryNoOther gallery personas the caller can swap in.
questionDetailsNoFully-resolved follow-up questions with depth/type/options.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=false, and the description reinforces this with consequential detail the annotations cannot carry: no AI testers run, nothing is spent, a draft is created, set fields are applied verbatim and echoed, omitted fields get AI defaults. It stops short of stating auth/permission requirements or rate limits, but the mutation-safety picture is well covered.

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

Conciseness4/5

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

Front-loaded with the core action and the 'nothing is spent' constraint before routing details. It is a dense single block, but for a 12-parameter planning tool most sentences earn their place; the routing and precedence rules are load-bearing rather than 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?

Given 12 optional params, a write annotation set, and an existing output schema, the description supplies the decision-relevant context an agent needs: source requirements, draft-vs-launch semantics, defaults behavior, and field precedence. Return values needn't be documented because an output schema exists, though the description still lists them helpfully.

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

Parameters4/5

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

With 0% schema description coverage across 12 params, the description carries the full burden and delivers real semantics: learningGoals/audienceSpec/tasks mapping, the audienceSpec-vs-audience-vs-personaIds precedence rule, depth quick/deep, default plan sizing, and that voice.voiceIds expects ElevenLabs IDs from search_ai_tester_voices. It does not explain intent, prototypeImage, or the project sub-fields, so coverage is strong but not exhaustive.

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 and scope: 'Plans an AI usability test on a public prototype URL or an uploaded design (uploadId) without launching it'. It explicitly distinguishes itself from the sibling verbs it could be confused with (relaunch_usability_test, revise_usability_test, launch_usability_test), so the agent can separate them 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?

Gives explicit when/when-not routing: re-testing an existing project goes to relaunch_usability_test, edits go through revise_usability_test, and the test starts only via launch_usability_test after approval. It also names the precondition (public URL, or a snapshot via prepare_design_snapshot) and the failure path (login-gated URL, no source).

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

question_breakdownA
Read-only
Inspect

Deep results for ONE question: response count, average (rating questions), the full option distribution (option label, count, %) for multiple-choice/rating/ranking, and top phrases for open-ended. For ranking questions the distribution counts FIRST-place ranks only (each respondent contributes one), so % is the share of respondents who ranked that option top. Resolve question ids via project_overview's questions list. Optional since/until window the results.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date lower bound, or null.
untilNoISO date upper bound, or null.
projectIdYesThe project the question belongs to.
questionIdYesThe question id (from project_overview.questions).
includeLowQualityNoLow-quality (archived) responses are excluded by default. Set true ONLY when the user explicitly asks to include low-quality/archived responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
averageNo
keywordsNo
questionNo
distributionNo
responseCountNo

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, so safety is covered. The description adds genuinely useful semantics not in the annotations: that ranking distributions count FIRST-place ranks only and that each respondent contributes one entry, so percentages read as share of respondents. It doesn't discuss pagination or result-size limits.

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-loads the return contents in one dense sentence and reserves the second for the ranking caveat, which is the highest-value clarification. The trailing fragment 'Optional since/until window the results' is grammatically incomplete and slightly wasteful, keeping it from a 5.

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 read-only annotations covering safety, a fully documented schema, and an output schema present, the description fills its remaining job well: it clarifies the non-obvious ranking-percentage semantics and points to where question ids come from. Nothing an agent needs to invoke this correctly is missing.

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

Parameters3/5

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

Schema coverage is 100%, so the schema already documents since, until, projectId, questionId, and includeLowQuality in detail. The description only restates the date window as 'optional since/until window the results' and adds no format or semantic detail beyond the schema, matching the baseline for full-coverage schemas.

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 resource (results for ONE question) and enumerates exactly what it returns: response count, average, option distribution, and top phrases. It also distinguishes itself from siblings like get_question and channel_breakdown by scoping to a single question's aggregated breakdown.

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

Usage Guidelines4/5

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

Gives clear context: resolve question ids via project_overview's `questions` list, and states the optional since/until window. It does not explicitly name when to prefer a sibling (e.g. channel_breakdown or get_question), so the when-not guidance is implied rather than stated.

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

recent_responsesB
Read-only
Inspect

The most recent responses for a project (summary title, sentiment, quality, channel, share id, date). Use for 'latest feedback' or to surface citable responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax responses (default 10).
projectIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
responsesNo

TDQS

B3.3/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true, destructiveHint=false, openWorldHint=false, so the safety profile is covered structurally. The description adds only the returned field list and a use case; with an output schema present, that field list largely restates structured data rather than adding new behavior context such as result counts or limits.

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 short clauses; the resource and field list are front-loaded and the usage trigger follows. No filler, though the parenthetical field enumeration is somewhat dense and partly redundant with the output 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 simple read-only list tool with an output schema covering return shape and annotations covering safety, the description is adequate: it says what comes back, how many by default (via schema) and the typical intent. Only the missing projectId provenance keeps it from being fully self-contained.

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

Parameters2/5

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

At 50% schema coverage, projectId is undocumented in both the schema and the description — no hint about where the id comes from (list_projects). The description adds nothing about the limit parameter either, so it fails to compensate for the coverage gap.

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

Purpose4/5

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

States a specific resource and scope: the most recent responses for a project, plus the fields carried (summary title, sentiment, quality, channel, share id, date). That distinguishes it from response_detail (single response) and responses_search (filtered search), though it never names those siblings explicitly.

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?

Gives usable trigger phrases ('latest feedback', 'surface citable responses'), which implies when to reach for it. It stops short of explicit when-not guidance or naming responses_search / response_detail as the alternatives, leaving the agent to infer the boundary.

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

relaunch_usability_testA
Destructive
Inspect

Re-runs an existing usability-test project ("relaunch", "re-run", "run again", "same test") with a fresh batch of AI testers on the same project. Unlike propose_usability_test + launch_usability_test, it does not create a new, duplicate project. Takes projectId (the testId from an earlier launch) and an optional numTesters for this run. Without uploadId it re-runs against the design already hosted for the project; a live public URL always serves its latest version. For an updated snapshot-hosted design, pass a new uploadId (prepare_design_snapshot, then check_design_snapshot) to point the same project at the new design; the result echoes designRefreshed: true. It does not change the audience or questions; audience changes are saved first with revise_usability_test(projectId). Returns the same testId (reusedProject: true), the resolved audience and a startedMessage. Spends AI-tester runs. Results come from wait_for_results or get_test_results.

ParametersJSON Schema
NameRequiredDescriptionDefault
uploadIdNo
projectIdYes
numTestersNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
testIdNoThe reused project id (no new project created).
audienceNoThe resolved audience envelope echoed back so the caller can report exactly what was applied.
personasNo
reusedProjectNoConfirms the run was added to the existing project.
startedMessageNo
designRefreshedNoTrue when a fresh uploadId re-pointed the design before this run.

TDQS

A4.9/5.0
Behavior5/5

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

Despite annotations already covering the safety profile (readOnly=false, destructive=true, openWorld=true), the description adds substantial context: it spends AI-tester runs, does not change audience or questions, does not create a duplicate project, echoes designRefreshed: true, and returns the reused testId. This is behavior beyond what 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.

Conciseness4/5

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

The core purpose is front-loaded and nearly every sentence carries distinct information (cost, project reuse, uploadId behavior, audience caution, return values). It is dense and fairly long for a single paragraph, but there is little 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 mutation tool with three params and an output schema, the description covers the essentials: what it mutates (spends tester runs), what it does not change, how to redirect it, and where results come from. An agent has everything needed to 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 description coverage is 0%, so the description must carry the load, and it does: projectId is defined as 'the testId from an earlier launch,' numTesters as optional testers for this run, and uploadId as an optional pointer to a newly prepared design snapshot with the resulting designRefreshed: true behavior explained.

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: 'Re-runs an existing usability-test project.' It explicitly names the siblings it differs from (propose_usability_test + launch_usability_test) and clarifies it reuses rather than duplicates the project, so an agent can distinguish it without opening any 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?

Gives explicit when-to-use and alternatives: use this to re-run on the same project, versus launch_usability_test to create a new one. It also routes related needs to revise_usability_test (audience changes) and prepare_design_snapshot/check_design_snapshot (updated design), and notes results come from wait_for_results or get_test_results.

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

response_detailA
Read-only
Inspect

Full detail of ONE response: its transcript (each message with its messageId + questionId, so you can cite a specific message), per-question answers, the themes it hit, the respondent (name/email), channel, signal, quality and date. Look it up by insightId or shareId (share ids come from citations / responses_search / recent_responses).

ParametersJSON Schema
NameRequiredDescriptionDefault
shareIdNoThe response share id, or null if using insightId.
insightIdNoThe response/insight id, or null if using shareId.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
themesNo
answersNo
contactNo
responseNo
transcriptNo

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare the safety profile (readOnlyHint=true, destructiveHint=false, openWorldHint=false), so the description's remaining job is narrower. It does disclose the identity of the respondent (name/email) and the breadth of data returned, which is useful privacy-relevant context, but says nothing about permissions or cost.

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?

One front-loaded sentence that leads with the essential scope then enumerates fields; no wasted preamble. It is dense, but every clause carries information.

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

Completeness4/5

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

With an output schema present, the description needn't explain return structure, and it covers lookup keys, their sources, and the field categories returned. It stops short of covering edge cases such as what happens if neither id is supplied, but that is minor.

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 params are documented there, so the baseline is 3. However the description adds real value by explaining the provenance of shareId (citations / responses_search / recent_responses), which the schema 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?

States a specific scope ('Full detail of ONE response') and enumerates exactly what comes back: transcript with messageId/questionId, per-question answers, themes, respondent, channel, signal, quality, date. The 'ONE' framing immediately distinguishes it from list-style siblings like recent_responses and responses_search.

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

Usage Guidelines4/5

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

Gives clear lookup keys (insightId or shareId) and, importantly, tells the agent where share ids originate: citations, responses_search, recent_responses. That is functional routing guidance, though it never states an explicit when-not-to-use condition vs. those siblings.

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

revise_usability_testA
Destructive
Inspect

Edits a usability test. Takes exactly one of proposalId (an unlaunched draft) or projectId (an already-launched test). Draft: plain-language changes and/or structured edits (add or remove tasks, questions and learning goals by index, swap personaIds, set edits.audience). Returns an updated plan under a new proposalId that replaces the previous one; nothing is launched. The number of AI testers changes only through edits.audience.numTesters. Launched test: only the audience can change (edits.audience, edits.personaIds). The change is saved to the project and echoed back as audience, and nothing runs until relaunch_usability_test. Tasks, questions and learning goals of a launched test cannot be edited; a new test is needed for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
editsNo
changesNo
projectIdNo
proposalIdNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
depthNo
testIdNoLaunched-project variant: the edited project id (unchanged).
intentsNoIntent presets available for a re-propose.
messageNoLaunched-project variant: the change is saved; relaunch to run it.
audienceNoThe resolved audience envelope echoed back so the caller can report exactly what was applied.
personasNoPersonas this proposal will run.
taskPlanNo
quickScanNoInstant L1 design scan; null when nothing surfaced.
numTestersNoNumber of AI testers this proposal will deploy.
proposalIdNoCache handle passed to launch_usability_test.
projectMetaNoResolved project copy/metadata persisted at launch.
taskDetailsNoFully-resolved tasks with per-task success/feedback toggles.
learningGoalsNoAnalytics objectives this test will be measured against.
reusedProjectNoLaunched-project variant: confirms no new project was created.
reviewMessageNoUser-facing message: this is a reviewable plan that has NOT launched.
personaGalleryNoOther gallery personas the caller can swap in.
questionDetailsNoFully-resolved follow-up questions with depth/type/options.

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: it discloses that the updated plan replaces the previous one under a new proposalId, that nothing is launched until relaunch, that numTesters only changes via edits.audience.numTesters, and that launched-test edits are saved and echoed back as audience. This matches destructiveHint=true with concrete detail on what is replaced.

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-loads the core action and then branches cleanly into Draft vs Launched, so the branching is scannable. It is dense and a bit long, but nearly every clause encodes a constraint that would otherwise be missed.

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 4-param, deeply nested mutation tool with an output schema, the description supplies the operational rules an agent needs (which id, which edits allowed, launch state, replacement semantics). The only gap is the internal structure of edits.audience, which is neither in the schema descriptions nor the text.

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

Parameters4/5

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

With 0% schema coverage the description must carry the load, and it explains all four top-level params (proposalId, projectId, changes, edits) plus the meaning of key edit sub-operations (add/remove tasks, questions, goals by index, swap personaIds). It does not, however, explain the many nested audience fields (voice, personality, age ranges), leaving that part of the deep schema unannotated.

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 (Edits) and resource (usability test) and immediately splits the operation into two precise modes keyed by proposalId vs projectId. An agent can distinguish this from propose_usability_test and relaunch_usability_test without opening any schema.

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

Usage Guidelines5/5

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

Explicitly states when to use proposalId (unlaunched draft) vs projectId (already-launched test), names relaunch_usability_test as the follow-up and notes tasks/questions/goals of a launched test cannot be edited and 'a new test is needed for that.' When-to-use, when-not-to, and the alternative are all present.

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

search_ai_tester_voicesA
Read-only
Inspect

Searches the curated list of AI-tester voices by name, style or accent. Returns { voices: [{ voiceId, name, gender, accent, descriptive, previewUrl }], hasMore, totalCount }. The voiceId is the value accepted by audienceSpec.voice.voiceIds in propose_usability_test and edits.audience.voice.voiceIds in revise_usability_test; voice names are not valid ids. page is 1-based; pageSize defaults to 30 (max 100).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
queryYes
pageSizeNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
voicesNoMatching curated AI-tester voices; pass a voiceId to propose/revise.
hasMoreNoWhether more pages exist beyond this one.
totalCountNoTotal voices matching the query.

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true, openWorldHint=true and destructiveHint=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the return shape, 1-based paging, and default/max page size, which an agent needs to page correctly.

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 the purpose, then return shape, id semantics, and pagination rules in sequence with no filler. It is dense and slightly packed, but every clause adds actionable information.

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

Completeness5/5

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

For a three-parameter search tool it covers purpose, id semantics, downstream consumers, and pagination. The return-shape sentence is technically redundant against the output schema but harmless, and nothing an agent needs to call or page it correctly is missing.

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

Parameters4/5

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

Schema description coverage is 0%, so the description must carry the load. It does: query is characterized as matching by name, style or accent, page is stated as 1-based, and pageSize is given a default of 30 and a max of 100. Only the exact query syntax (substring vs fuzzy) is left unspecified.

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 (Searches) and resource (curated list of AI-tester voices) plus the search dimensions (name, style, accent). It also ties itself to the sibling tools that consume its output, so an agent can place it precisely in the workflow.

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

Usage Guidelines4/5

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

Clearly explains the downstream purpose: the returned voiceId feeds audienceSpec.voice.voiceIds in propose_usability_test and edits.audience.voice.voiceIds in revise_usability_test, and warns that voice names are not valid ids. It does not state explicit exclusions or when NOT to call it, 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.

similar_projectsA
Read-only
Inspect

Find projects related by SEMANTIC similarity, using each project's objective (learning-goal) embeddings — falling back to its theme embeddings when objectives are not embedded yet. Pass a seedProjectId to rank the projects most similar to it (with 0–1 scores). Pass null for seedProjectId to cluster ALL of the org's projects into thematic groups. Each project notes its basis ("objectives" or "themes"). Use this for "which projects are like X?" or "group my projects"; use cross_project_comparison instead to compare a known set side-by-side by theme.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxProjectsNoSeed mode only: how many similar projects to return (default 5, max 10).
seedProjectIdNoA project id to rank others against. Pass null to cluster ALL the org's projects instead.
similarityThresholdNoCluster mode only: cosine cutoff to group projects (0.3–0.95, default 0.6). Higher = tighter, more clusters.

Output Schema

ParametersJSON Schema
NameRequiredDescription
modeNo
noteNo
seedNo
basisNo
errorNo
similarNo
clustersNo
thresholdNo

TDQS

A4.4/5.0
Behavior4/5

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

Annotations already declare it as a safe read (readOnlyHint=true, destructiveHint=false, openWorldHint=false), yet the description adds real behavioral detail beyond them: the objectives→themes fallback, the per-project `basis` marker, and the 0–1 score range. It does not discuss cost/latency of the all-projects clustering mode, so it falls short of a 5.

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

Conciseness4/5

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

Front-loaded with the core purpose, and every sentence carries a distinct fact (fallback, seed mode, cluster mode, basis field, sibling routing). It is dense—the second sentence packs several clauses—but nothing is wasted.

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?

An output schema exists, so return formatting need not be explained, and the description still covers both operating modes, the fallback logic, and the routing decision to a sibling. Nothing 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 all three parameters are already documented including their mode restrictions and defaults. The description restates the seed/null distinction and the basis/score semantics rather than adding new syntax or constraints, which is the baseline-3 case.

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 (find/rank/cluster) and resource (projects) plus the mechanism (objective embeddings with theme-embedding fallback). It explicitly distinguishes itself from cross_project_comparison, so an agent can route between them without opening either schema.

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

Usage Guidelines5/5

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

Gives explicit dual-mode usage: pass a seedProjectId to rank similar projects, pass null to cluster the whole org, and names the alternative (cross_project_comparison) with the condition that selects it (compare a known set side-by-side by theme). Two concrete user phrasings are even supplied.

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

stats_trendA
Read-only
Inspect

Response volume over time for a project, bucketed by day or week and split by signal (positive/negative/neutral). Use for trend / volume-over-time questions, then feed the points into generate_chart (line) for a visual.

ParametersJSON Schema
NameRequiredDescriptionDefault
sinceNoISO date lower bound, or null.
untilNoISO date upper bound, or null.
projectIdYes
granularityNoBucket size (default 'week').
includeLowQualityNoLow-quality (archived) responses are excluded by default. Set true ONLY when the user explicitly asks to include low-quality/archived responses.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
pointsNo
granularityNo

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnly/destructive/openWorld, so the safety profile is covered. The description adds real behavioral context beyond that: the series is bucketed and split by sentiment signal, and the output points are intended as chart input. It does not mention defaults or auth, but the annotation bar is lower here.

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 tightly packed sentences with no filler; the core purpose is front-loaded ahead of the usage/next-step hint.

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?

An output schema exists, so return-value detail is unnecessary, and the description still sketches the shape (bucketed points). For a read-only trend tool with high param coverage, this is nearly complete; only the default granularity and low-quality exclusion behavior are left solely to the schema.

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 80%, so the schema already documents since, until, granularity, and includeLowQuality. The description reinforces the granularity choice (day/week) and the signal split but adds no syntax or format detail beyond the schema, so baseline 3 applies.

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

Purpose5/5

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

States a specific verb+resource+scope: 'Response volume over time for a project', then qualifies it with the bucketing (day/week) and the signal split. An agent can distinguish this from siblings like project_stats or channel_breakdown without opening a schema.

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

Usage Guidelines4/5

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

Explicitly says 'Use for trend / volume-over-time questions' and names the follow-up tool (generate_chart, line). It gives clear triggering context but no explicit when-not guidance or differentiation from adjacent stats tools such as project_stats.

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

theme_detailA
Read-only
Inspect

Drill into ONE theme of a project: its summary, sentiment, strategic recommendations, how many responses mention it, and verbatim respondent quotes with share ids to cite. Resolve theme ids via project_overview.

ParametersJSON Schema
NameRequiredDescriptionDefault
themeIdYesThe theme id (from project_overview.themes).
projectIdYesThe project the theme belongs to.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNo
themeNo
citationsNo
recommendationsNo

TDQS

A3.9/5.0
Behavior3/5

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

Annotations already declare readOnlyHint/destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds useful content scope (sentiment, recommendations, mention counts, citable quotes), but since an output schema exists it adds little behavioral detail beyond that.

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

Conciseness4/5

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

Compact: one front-loaded sentence describing scope and contents, plus a short prerequisite sentence. No filler, though the first sentence is a dense list.

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

Completeness4/5

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

With an output schema, full param coverage, and annotations present, the description only needs to convey purpose and routing. It does both, leaving little an agent would miss before calling 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 coverage is 100% and both parameters are documented in the schema, so the baseline is 3. The description's note to resolve themeId via project_overview only echoes the schema's own 'from project_overview.themes' hint, adding no new syntax or format 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?

States a specific verb and scope ('Drill into ONE theme of a project') and enumerates the contents returned, which distinguishes it from siblings like question_breakdown and project_overview. An agent can tell what it retrieves 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?

Explicitly routes the agent to project_overview to resolve theme ids, giving a clear prerequisite. It does not state when-not to use it or name an alternative for deeper theme exploration, but the context is clear.

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

upload_design_snapshotA
Destructive
Inspect

Fallback upload for a design snapshot, for when the PUT to the uploadUrl from prepare_design_snapshot is blocked by the environment's network (for example "Host not in allowlist"). Takes the uploadId and the complete, self-contained design HTML, and hosts it under that uploadId. The design HTML is temporarily uploaded to TheySaid. Re-using an uploadId replaces the stored design. Returns { uploadId, previewUrl, nextStep }; the next step is check_design_snapshot. This tool does not start a test.

ParametersJSON Schema
NameRequiredDescriptionDefault
htmlYes
uploadIdYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
nextStepNoGuidance: verify → propose/relaunch → review → launch.
uploadIdNoThe same handle passed in, echoed for check_design_snapshot.
previewUrlNoPublic URL of the hosted design the AI testers navigate.

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=false and destructiveHint=true; the description adds real behavioral context beyond them — re-using an uploadId replaces the stored design (the destructive behavior), the HTML is temporarily hosted by TheySaid, and the mutation does not launch a test. It doesn't cover auth requirements or hosting lifetime, so not a full 5.

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

Conciseness4/5

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

The fallback rationale and the network-block condition are front-loaded, and every sentence carries information (use case, params, overwrite semantics, return shape, negative scope). It is dense but slightly packed, with the return-shape and 'does not start a test' details competing for attention.

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

Completeness4/5

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

With an output schema present the description needn't spell out return values, yet it summarizes { uploadId, previewUrl, nextStep } and names the follow-up tool, so an agent can chain correctly. Given only two undocumented params and full annotation coverage, the remaining gaps are minor edge cases rather than blocking omissions.

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 0%, so the description must carry the load, and it largely does: uploadId is framed as the hosting key whose reuse overwrites prior content, and html must be the complete, self-contained design HTML. It doesn't detail uploadId provenance or size limits, so it stops short of full compensation.

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 (upload/host) and resource (design snapshot) plus its precise scope: a fallback path used when the PUT to the uploadUrl from prepare_design_snapshot is blocked. It explicitly names the related sibling tools (prepare_design_snapshot, check_design_snapshot), so an agent can distinguish it without opening a schema.

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

Usage Guidelines5/5

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

Gives an explicit condition for use ("when the PUT ... is blocked by the environment's network, for example 'Host not in allowlist'"), identifies the primary alternative path, and adds a clear exclusion: "This tool does not start a test." Nothing about when-to-use is left to inference.

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

wait_for_resultsA
Read-only
Inspect

Waits server-side, for a bounded window, for a usability test to finish, and sends progress notifications meanwhile, so no polling is needed. Returns message (a user-facing summary), phase and, once finished, results (the same data as get_test_results, including resultsMarkdown). If the window elapses first, stillRunning is true; long runs are normal, and calling wait_for_results again continues waiting. For a "partial" or "failed" run, the partial findings and instant design scan are included. Optional maxWaitSeconds shortens a single wait.

ParametersJSON Schema
NameRequiredDescriptionDefault
testIdYes
maxWaitSecondsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
phaseNo
statusNo
messageNoUser-facing framing the caller can relay verbatim.
resultsNoPopulated on a terminal phase; null while still running.
stillRunningNoTrue on timeout/abort while non-terminal — call again.

TDQS

A4.4/5.0
Behavior5/5

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

Annotations only cover the read-only/non-destructive safety profile; the description adds substantial traits beyond that: bounded server-side window, progress notifications emitted during the wait, `stillRunning` semantics on timeout, that re-invoking continues waiting, and how partial/failed runs are handled. This is exactly the operational context an annotations-only view lacks.

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 the core purpose before the return-shape and edge-case details. Dense but every sentence carries information (notifications, stillRunning, re-call continuation, partial runs). Slightly sprawling for a two-parameter tool, but nothing is 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?

Covers the return contract (message, phase, results, resultsMarkdown), the timeout path, the continuation pattern, and degraded-run behavior, which is more than enough given an output schema already exists. An agent has everything needed to call and re-call it correctly.

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

Parameters3/5

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

Schema description coverage is 0%, so the description must carry parameter meaning. It explains maxWaitSeconds ('shortens a single wait') but does not define testId beyond implication. One of two parameters gets real semantics added, leaving an unmet gap against the low coverage 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?

States a specific verb and resource (server-side wait for a usability test to finish) plus the mechanism (progress notifications, no polling). It implicitly distinguishes itself from get_test_results and get_test_status by being the blocking-wait variant. An agent can select it without opening a schema.

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

Usage Guidelines4/5

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

Gives clear usage context: 'so no polling is needed', 'long runs are normal', and 'calling wait_for_results again continues waiting' — behaviorally important for an agent choosing between waiting and polling. However it never explicitly names get_test_status as the non-blocking alternative or states when NOT to wait (e.g. for a quick status check).

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. 33 tool updates
    • First observedchannel_breakdown
    • First observedcheck_design_snapshot
    • First observedcompany_data
    • First observedcontact_detail
    • First observedcontact_list
    • First observedcross_project_comparison
    • First observedflag_result
    • First observedgenerate_chart
    • First observedget_question
    • First observedget_test_results
    • First observedget_test_status
    • First observedinsight_video_metadata
    • First observedlaunch_usability_test
    • First observedlist_projects
    • First observedorg_documents
    • First observedping
    • First observedprepare_design_snapshot
    • First observedproject_estimated_duration
    • First observedproject_overview
    • First observedproject_stats
    • First observedpropose_usability_test
    • First observedquestion_breakdown
    • First observedrecent_responses
    • First observedrelaunch_usability_test
    • First observedresponse_detail
    • First observedresponses_search
    • First observedrevise_usability_test
    • First observedsearch_ai_tester_voices
    • First observedsimilar_projects
    • First observedstats_trend
    • First observedtheme_detail
    • First observedupload_design_snapshot
    • First observedwait_for_results

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Enables brand visibility monitoring across major AI platforms like ChatGPT, Claude, Gemini, and Perplexity. It allows users to track visibility scores, analyze competitor data, and receive actionable insights to improve AI-generated brand recommendations.
    16
    11 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Browse IndustryLens's published competitive-intelligence reports and head-to-head competitor comparisons from any AI agent — real, source-backed data.
    MIT
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources