Skip to main content
Glama

preview_cost

Estimate the cost (credits) and runtime (seconds) of a hypothetical run_focus_group, run_debate, compare_options, screen_creatives or test_ads call WITHOUT actually running it. Use this when you need to budget before committing — autonomous agents should preview before any sim with population_size > 100 or any debate at all.

Free to call (no wallet debit, no rate-limit penalty beyond the regular per-key limit). Pricing is a fixed rate per respondent. Returns: estimate_credits, min_credits and max_credits (the figures below in credits — quote these to the user), estimate_cents (what a real run reserves — a completed vote is charged exactly this), min_cents / max_cents (the settle range: a debate may settle lower if it reaches consensus early, down to min_cents; respondents who fail to answer are never charged), expected_seconds_min / expected_seconds_max (so you can set a sensible tool-call timeout), plan, agent_cap, and within_agent_cap (false means the population_size exceeds the user's plan limit and the real call would 400).

BRIEF CHECK: also pass the draft brief (topic, the options for a comparison, demographic_preset and custom_audience as you plan to run them) and the result adds brief_warnings, a list of { code, message, options?, compared_with?, phrase? }. Codes: choice_question_in_vote (a vote or debate that asks people to pick between options — use compare_options), election_question_in_vote (a vote or debate on an election or referendum — use compare_options with each candidate or answer as an option), election_question (a compare_options run on an election or referendum — name each candidate's party in its option and ask whom respondents would vote for), one_sided_option (some options state a cost or limit and others state none), uneven_prices (some options carry a price and others none), missing_prices (the question asks about buying and no option has a price), audience_fit (the question assumes something, such as a next car or a job, that the audience is not narrowed to). Option letters: A is the first. Show the notes to the user before running; they never block a run, and the user decides whether to change the brief.

Input Schema

NameRequiredDescriptionDefault
modeNoWhich study to price: voting (one pass), debate (priced per round), comparison (priced like a vote; send the options to have them checked) or ad_lab (a test_ads study, priced per respondent however many creatives). Default: voting.voting
topicNoOptional: the question you plan to ask. With it the result adds brief_warnings.
optionsNoOptional, comparison: the text options you plan to rank, in order.
num_roundsNoDebate-only. Default 5 to match run_debate's platform-standard default. Ignored for voting.
num_optionsNoWith comparison_tier: how many creatives you will screen (1-4).
comparison_tierNoTo price a screen_creatives study: its tier, with mode='comparison' and num_options. The quote is for the tier's panel (35 / 150 / 400); leave population_size out.
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_sizeNoThe panel to price. Your plan's limit is 20 respondents (Free 20, Pro 500, Max 1,000); an Ads Labo study (mode='ad_lab') takes 100, 200, 400 or 1,000 on every plan.
stance_statementNoOptional: the statement a vote will ask respondents to agree or disagree with.
demographic_presetNoOptional: the market preset you plan to run.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed4 schema fields changed
    • changedInput schema / properties / mode / description
      Previous value: -"Which study to price: voting (one pass), debate (priced per round) or comparison (priced like a vote; send the options to have them checked). Default: voting."New value: +"Which study to price: voting (one pass), debate (priced per round), comparison (priced like a vote; send the options to have them checked) or ad_lab (a test_ads study, priced per respondent however many creatives). Default: voting."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "voting",
      -  "debate",
      -  "comparison"
      -]New value: +[
      +  "voting",
      +  "debate",
      +  "comparison",
      +  "ad_lab"
      +]
    • changedInput schema / properties / population_size / description
      Previous value: -"Default 200 to match run_focus_group's Standard Pulse default. Pass the same value the user agreed to."New value: +"The panel to price. Your plan's limit is 20 respondents (Free 20, Pro 500, Max 1,000); an Ads Labo study (mode='ad_lab') takes 100, 200, 400 or 1,000 on every plan."
    • changedInput schema / properties / population_size / maximum
      Previous value: -20New value: +1000
  2. Changed2 schema fields changed
    • addedInput schema / properties / comparison_tier
      Added value: +{
      +  "description": "To price a screen_creatives study: its tier, with mode='comparison' and num_options. The quote is for the tier's panel (35 / 150 / 400); leave population_size out.",
      +  "enum": [
      +    "quick_pulse",
      +    "balanced_insight",
      +    "deep_research"
      +  ],
      +  "type": "string"
      +}
    • addedInput schema / properties / num_options
      Added value: +{
      +  "description": "With comparison_tier: how many creatives you will screen (1-4).",
      +  "maximum": 2,
      +  "minimum": 1,
      +  "type": "integer"
      +}
  3. Changed7 schema fields changed
    • addedInput schema / properties / custom_audience
      Added value: +{
      +  "description": "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.",
      +  "type": "object"
      +}
    • addedInput schema / properties / demographic_preset
      Added value: +{
      +  "description": "Optional: the market preset you plan to run.",
      +  "type": "string"
      +}
    • changedInput schema / properties / mode / description
      Previous value: -"Which study to price: voting (one pass) or debate (priced per round). Default: voting."New value: +"Which study to price: voting (one pass), debate (priced per round) or comparison (priced like a vote; send the options to have them checked). Default: voting."
    • changedInput schema / properties / mode / enum
      Previous value: -[
      -  "voting",
      -  "debate"
      -]New value: +[
      +  "voting",
      +  "debate",
      +  "comparison"
      +]
    • addedInput schema / properties / options
      Added value: +{
      +  "description": "Optional, comparison: the text options you plan to rank, in order.",
      +  "items": {
      +    "maxLength": 500,
      +    "type": "string"
      +  },
      +  "maxItems": 10,
      +  "type": "array"
      +}
    • addedInput schema / properties / stance_statement
      Added value: +{
      +  "description": "Optional: the statement a vote will ask respondents to agree or disagree with.",
      +  "type": "string"
      +}
    • addedInput schema / properties / topic
      Added value: +{
      +  "description": "Optional: the question you plan to ask. With it the result adds brief_warnings.",
      +  "maxLength": 4000,
      +  "type": "string"
      +}
  4. Changed1 schema field changed
    • changedInput schema / properties / population_size / default
      Previous value: -200New value: +20
  5. First observed

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations present, the description carries the full burden and does so: it declares the call is free ('no wallet debit, no rate-limit penalty beyond the regular per-key limit'), explains the charging model ('a completed vote is charged exactly this', 'respondents who fail to answer are never charged'), and flags a failure mode ('within_agent_cap (false means ... the real call would 400)'). It also notes brief_warnings 'never block a run', which is a behavioral fact an agent could otherwise misread as a gate.

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 correctly (what it does, then cost/free status, then the return fields) and split with clear headers, so an agent can stop reading early. It is on the long side: the brief-check section enumerates eight warning codes with parenthetical guidance, and the custom_audience guidance edge could be trimmed without losing callable 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 10-parameter tool with a nested object and no output schema, the description fully documents the return shape (estimate_credits, min/max_credits, estimate_cents, min/max_cents, expected_seconds_min/max, plan, agent_cap, within_agent_cap, plus brief_warnings) and explains the settle-range semantics. Nothing an agent needs to invoke or interpret it correctly appears to be missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3; the description earns more by explaining how parameters interact rather than restating them — e.g. comparison_tier must be paired with mode='comparison' and num_options, its panel sizes (35/150/400), and 'leave population_size out'. It likewise explains what to pass for the brief check (topic, options, demographic_preset, custom_audience) and enumerates the resulting warning codes, which is meaning the schema cannot 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 verb and two specific outputs ('estimate the cost (credits) and runtime (seconds)') and names exactly which sibling tools it prices (run_focus_group, run_debate, compare_options, screen_creatives, test_ads). The phrase 'WITHOUT actually running it' cleanly separates it from those siblings 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 trigger ('use this when you need to budget before committing') plus a hard rule for autonomous agents ('preview before any sim with population_size > 100 or any debate at all'). It also routes a related need to a different tool: 'Preview a custom_audience with the free estimate_reach tool before paying for a run'.

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