Skip to main content
Glama

compare_options

Run a simulated A/B (or A/B/C…) test (a Pulse compare) on text options. Each respondent reads every option and ranks them; you get a leaderboard with Borda scores and the winner, without individual answers. Use it for product descriptions, headlines, policy framings, slogans or value propositions.

RECOMMENDED FLOW: if the user didn't pick an audience, call list_demographic_presets and propose one or two; call preview_cost for the price; confirm with the user; then run. Studies are charged to the account's wallet at the same per-respondent rate as on the web.

Your plan allows up to 20 respondents per study (Free 20, Pro 500, Max 1,000). Your plan compares up to 3 options (Free 3, Pro 5, Max 10).

To show respondents an image with the question (a product photo, a chart, a screenshot), pass image_url: a public https link to it. To have them watch videos or look at images as creatives, use screen_creatives; to test an ad in the feed, use test_ads.

Returns: { id, status, mode='comparison', topic, demographic_preset, population_size, options, winner, leaderboard (first_place_votes, vote_pct, borda_score, borda_pct, scores {mean, n, positive_pct, neutral_pct, negative_pct} of each option's 0-10 scores), counted_agent_count, breakdowns (each option's first-choice share and mean score by age_band, gender, political_ideology, region and, where respondents carry their market's party lean, party), [undecided] (when respondents could choose none of the options: an election or referendum question, or undecided_option; each leaderboard row then adds decided_vote_pct), total_responses, billing }.

Read first-choice shares as a direction, beside each option's scores, not as a market share. WHEN IT MISLEADS: options described unevenly (one with its costs or limits spelled out, the others with strengths only; some priced, others not), or a panel of the whole market read as a survey of buyers. Pass the draft to preview_cost first: its brief_warnings flag these.

Input Schema

NameRequiredDescriptionDefault
topicYesThe question framing the comparison, e.g. 'Which of these product descriptions resonates most with you?'
contextNoBackground every respondent reads before answering: a product description, the ad copy, a news story, the terms of an offer. Plain text, up to 16,000 characters. The result's shown_to_respondents block echoes what the panel read.
optionsYes2-3 text options to compare, each up to 500 characters (Free 3, Pro 5, Max 10).
languageNoLanguage the respondents answer in. Default: en.en
image_urlNoOptional public HTTPS URL of an image every respondent considers while ranking the options (a product photo, the ad the headlines go with). Same shape as run_focus_group.image_url.
custom_audienceNoOptional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter, and its age and gender mix follows the market's profile within the filter's age, gender, place, income and heritage terms (interest tags pick who within each group, not how many of each). Results carry panel_check (the panel's age, gender and region mix against that profile) and, for an uncommon audience, audience_note. Guide: https://crowdos.ai/mcp.
population_sizeNoRespondents. Default 20. Your plan's limit is 20 (Free 20, Pro 500, Max 1,000).
undecided_optionNoWhether respondents may choose none of the options (undecided, would not vote). Omit it and it is on for an election or referendum question and off otherwise. When on, the result adds undecided {first_choice_pct, respondents, chance_pct, chance_respondents} and each leaderboard row a decided_vote_pct.
demographic_presetNoAudience preset. Use list_demographic_presets to see all options. Default: us_general_population.us_general_population

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • addedInput schema / properties / undecided_option
      Added value: +{
      +  "description": "Whether respondents may choose none of the options (undecided, would not vote). Omit it and it is on for an election or referendum question and off otherwise. When on, the result adds undecided {first_choice_pct, respondents, chance_pct, chance_respondents} and each leaderboard row a decided_vote_pct.",
      +  "type": "boolean"
      +}
  2. Changed1 schema field changed
    • addedInput schema / properties / image_url
      Added value: +{
      +  "description": "Optional public HTTPS URL of an image every respondent considers while ranking the options (a product photo, the ad the headlines go with). Same shape as run_focus_group.image_url.",
      +  "maxLength": 2048,
      +  "type": "string"
      +}
  3. Changed1 schema field changed
    • changedInput schema / properties / custom_audience / description
      Previous value: -"Optional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter. Guide: https://crowdos.ai/mcp."New value: +"Optional filter narrowing the panel INSIDE the market preset. Keys (all optional): countries, regions, cities (each market's own vocabulary), age_min / age_max, genders ('all' | 'men' | 'women' | 'non_binary'), interests / interest_exclusions (taxonomy tags), income_min_tier / income_max_tier (affluence ladder 0-7, 7 = top), income_currency + income_min_amount / income_max_amount (REAL annual household amounts in a named ISO currency — currency is required with amounts; e.g. {'income_currency': 'USD', 'income_min_amount': 100000}), income_match ('position' = the equivalent affluence standing within each market's own income ladder, the default; 'absolute' = actual earnings at indicative FX), ethnicities / religions (multi-ethnic markets only). Preview a custom_audience with the free estimate_reach tool before paying for a run — it reports the audience size and which constraint cuts hardest. A 'small' audience is not a blocker: the panel is still delivered at the population_size you ask for, with every respondent matching the filter, and its age and gender mix follows the market's profile within the filter's age, gender, place, income and heritage terms (interest tags pick who within each group, not how many of each). Results carry panel_check (the panel's age, gender and region mix against that profile) and, for an uncommon audience, audience_note. Guide: https://crowdos.ai/mcp."
  4. Changed1 schema field changed
    • addedInput schema / properties / context
      Added value: +{
      +  "description": "Background every respondent reads before answering: a product description, the ad copy, a news story, the terms of an offer. Plain text, up to 16,000 characters. The result's shown_to_respondents block echoes what the panel read.",
      +  "maxLength": 16000,
      +  "type": "string"
      +}
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

No annotations, so the description carries full burden and does so: it discloses wallet billing at per-respondent rates, plan-based caps on respondents and option counts, and the full return shape including breakdowns and undecided handling. It even warns about the conditions under which results mislead.

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 clearly sectioned (RECOMMENDED FLOW, plan limits, alternatives, Returns, WHEN IT MISLEADS). The Returns block is long but earns its place since no output schema exists; some prose could be trimmed.

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

Completeness5/5

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

With no output schema, the description supplies the return contract in detail (leaderboard fields, breakdowns, undecided, billing) plus cost and plan constraints. An agent has everything needed to call it and interpret results correctly.

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

Parameters4/5

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

Schema coverage is 100%, so baseline is 3, but the description adds real meaning: image_url vs screen_creatives routing, undecided_option's default-on-for-elections behavior and its output effect, and previewing custom_audience with estimate_reach. It leaves some params (language, topic) to the already-rich 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?

Specific verb+resource: 'Run a simulated A/B (or A/B/C…) test (a Pulse compare) on text options' plus exactly what comes back (leaderboard with Borda scores and winner). It explicitly distinguishes itself from sibling tools screen_creatives (videos/images as creatives) and test_ads (in-feed ads).

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

Usage Guidelines5/5

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

Provides an explicit RECOMMENDED FLOW (list_demographic_presets → preview_cost → confirm → run) and names alternatives with the conditions that select them (screen_creatives for videos/image creatives, test_ads for feed ads). It also gives a WHEN IT MISLEADS section describing misuse conditions.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources