Skip to main content
Glama

Review Panel Launch

launch_panel
Destructive

Open the MCP App for human review of the saved study plan and complete current panel estimate. The first call only previews and does not spend. For App clients, a human must click Approve and launch in the App. For clients without MCP Apps, return the saved plan and quote in chat, ask the human to confirm, then call this tool again with the returned chat_approval_nonce and human_confirmed=true. Never infer confirmation from a prior study or quote. The estimate must match the study, country, inputs, balance and price at approval time.

Input Schema

NameRequiredDescriptionDefault
targetYes
study_idYes
frequencyNoone-time
estimate_idYesCurrent estimate identifier from estimate_panel. Paid launch fails if the study, inputs, balance, or price changed, or the estimate expired.
country_codeYesRequired explicit country code from userintuition://catalog/panel-countries. Never infer a country.
incident_rateYesPercentage points. Values below 10 require submit_feasibility_request instead of direct launch.
human_confirmedNo
idempotency_keyNoReuse the same key and inputs if a prior call timed out. A different operation needs a new key.
organization_idNo
chat_approval_nonceNo

Output Schema

NameRequiredDescriptionDefault
studyNo
launchNo
resultNo
statusNo
estimateNo
approval_methodNo
chat_approval_nonceNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • addedInput schema / properties / chat_approval_nonce
      Added value: +{
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • addedInput schema / properties / human_confirmed
      Added value: +{
      +  "const": true,
      +  "type": "boolean"
      +}
    • addedOutput schema / properties / approval_method
      Added value: +{
      +  "enum": [
      +    "app",
      +    "chat"
      +  ],
      +  "type": "string"
      +}
    • addedOutput schema / properties / chat_approval_nonce
      Added value: +{
      +  "format": "uuid",
      +  "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$",
      +  "type": "string"
      +}
    • addedOutput schema / properties / result
      Added value: +{}
    • removedOutput schema / required
      Removed value: -[
      -  "study",
      -  "estimate",
      -  "launch",
      -  "status"
      -]
  2. Changed9 schema fields changed
    • addedInput schema / additionalProperties
      Added value: +false
    • removedInput schema / properties / organization_id / description
      Removed value: -"Platform admins only: select an organization for this operation. Required when changing another organization’s study or using its wallet."
    • changedInput schema / required
      Previous value: -[
      -  "study_id",
      -  "target",
      -  "incident_rate",
      -  "country_code",
      -  "estimate_id"
      -]New value: +[
      +  "target",
      +  "incident_rate",
      +  "country_code",
      +  "estimate_id",
      +  "study_id"
      +]
    • addedOutput schema / properties / estimate
      Added value: +{}
    • addedOutput schema / properties / launch
      Added value: +{}
    • removedOutput schema / properties / result
      Removed value: -{
      -  "additionalProperties": {},
      -  "description": "Panel launch acknowledgement or dry-run estimate.",
      -  "properties": {
      -    "assumptions": {
      -      "items": {
      -        "type": "string"
      -      },
      -      "type": "array"
      -    },
      -    "available_credit_balance": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "card_hold_usd": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "country_code": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "credit_cost_per_interview": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "credit_deficit": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "dry_run": {
      -      "type": [
      -        "boolean",
      -        "null"
      -      ]
      -    },
      -    "estimate_id": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "estimated_timeline_hours": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "estimated_total_cost_per_interview_usd": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "estimated_total_cost_usd": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "expires_at": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "frequency": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "language_code": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "panel_status": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "reward_per_interview_usd": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    },
      -    "study_id": {
      -      "type": [
      -        "string",
      -        "null"
      -      ]
      -    },
      -    "sufficient_credits": {
      -      "type": [
      -        "boolean",
      -        "null"
      -      ]
      -    },
      -    "target": {
      -      "anyOf": [
      -        {
      -          "maximum": 9007199254740991,
      -          "minimum": -9007199254740991,
      -          "type": "integer"
      -        },
      -        {
      -          "type": "null"
      -        }
      -      ]
      -    },
      -    "total_credit_cost": {
      -      "type": [
      -        "number",
      -        "null"
      -      ]
      -    }
      -  },
      -  "type": "object"
      -}
    • addedOutput schema / properties / status
      Added value: +{
      +  "const": "awaiting_human_approval",
      +  "type": "string"
      +}
    • addedOutput schema / properties / study
      Added value: +{}
    • changedOutput schema / required
      Previous value: -[
      -  "result"
      -]New value: +[
      +  "study",
      +  "estimate",
      +  "launch",
      +  "status"
      +]
  3. Changed1 schema field changed
    • addedInput schema / properties / organization_id
      Added value: +{
      +  "description": "Platform admins only: select an organization for this operation. Required when changing another organization’s study or using its wallet.",
      +  "maxLength": 128,
      +  "minLength": 1,
      +  "type": "string"
      +}
  4. Changed36 schema fields changed
    • changedInput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • removedInput schema / additionalProperties
      Removed value: -false
    • addedInput schema / properties / study_id / pattern
      Added value: +"^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
    • changedOutput schema / $schema
      Previous value: -"http://json-schema.org/draft-07/schema#"New value: +"https://json-schema.org/draft/2020-12/schema"
    • changedOutput schema / properties / result / additionalProperties
      Previous value: -trueNew value: +{}
    • removedOutput schema / properties / result / properties / available_credit_balance / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / available_credit_balance / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / card_hold_usd / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / card_hold_usd / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / country_code / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / country_code / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / credit_cost_per_interview / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / credit_cost_per_interview / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / credit_deficit / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / credit_deficit / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / estimate_id / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / estimate_id / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / estimated_timeline_hours / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / estimated_timeline_hours / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / estimated_total_cost_usd / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / estimated_total_cost_usd / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / expires_at / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / expires_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / frequency / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / frequency / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / language_code / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / language_code / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / panel_status / $ref
      Removed value: -"#/properties/result/properties/study_id"
    • addedOutput schema / properties / result / properties / panel_status / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / reward_per_interview_usd / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / reward_per_interview_usd / type
      Added value: +[
      +  "number",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / sufficient_credits / $ref
      Removed value: -"#/properties/result/properties/dry_run"
    • addedOutput schema / properties / result / properties / sufficient_credits / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • changedOutput schema / properties / result / properties / target / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / result / properties / total_credit_cost / $ref
      Removed value: -"#/properties/result/properties/estimated_total_cost_per_interview_usd"
    • addedOutput schema / properties / result / properties / total_credit_cost / type
      Added value: +[
      +  "number",
      +  "null"
      +]
  5. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Annotations already declare destructiveHint=true, openWorldHint=true and idempotentHint=false, and the description adds real behavioral depth beyond those: the first call does not spend money, the second requires fresh human confirmation, and launch fails if the estimate no longer matches study/country/inputs/balance/price or has expired. It stops short of describing cancellation/reversibility or the cost implications of a paid launch.

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?

Purpose and the preview/no-spend caveat are front-loaded, and each sentence carries distinct information about the approval flow, the nonce round-trip, and estimate validity. The fourth sentence is long and carries several instructions at once, but overall the length is proportionate to a high-stakes two-phase tool.

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

Completeness4/5

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

For a destructive, paid, 10-parameter tool with a 5-required-parameter gate, the description covers the critical path: preview, human approval, nonce return, and estimate-freshness failure. With an output schema present it need not describe return values, though the relationship to approve_panel_launch and any cancellation path remain unaddressed.

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 only 40%, so the description must compensate; it does explain human_confirmed (must be true), the role of the returned chat_approval_nonce, and the consistency conditions behind estimate_id. It says nothing about target, frequency, organization_id, or study_id, leaving several undocumented parameters unexplained in both places.

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

Purpose4/5

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

The description states a specific verb and resource ('launch' the 'review panel' for a saved study plan) and immediately explains the two-phase preview-then-spend behavior, so the purpose is unmistakable. It does not, however, differentiate itself from the close sibling approve_panel_launch or explicitly route agents from estimate_panel, so an agent must infer the boundary.

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

Usage Guidelines4/5

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

It gives clear when-to-use guidance with alternatives: the first call previews without spending, App clients require an in-App Approve click, and non-App clients must round-trip through chat with chat_approval_nonce and human_confirmed=true. It also supplies an exclusion ('Never infer confirmation from a prior study or quote'), though it never names the near-identical sibling approve_panel_launch, leaving that choice ambiguous.

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