Skip to main content
Glama

Customize Study

customize_study
Destructive

Send one research-design turn to Customize Plan. This operation may fetch a researcher-provided concept URL and use an external analysis model. A 2026 Tasks client receives a durable task for turns without concept_image; poll tasks/get for the completed planning turn. Native concept images use the synchronous call. Put operational workflow constraints in execution_policy, never in message. Set decisions=agent only when the human delegated research-design choices; report assumptions and relay only remaining required questions. Otherwise use human mode and relay questions[]. If the client exposes an attached image as bytes or a readable local path, ask for a participant-facing label when missing, base64-encode the raw bytes, and send concept_image. Completed plans and setting changes are persisted. Then get_study, return the full saved plan for review, and obtain approval before invitations or paid launch.

Input Schema

NameRequiredDescriptionDefault
messageYesThe user's research brief, requested change, or answer to the previous Customize Plan question.
study_idYes
decisionsNoagent makes ordinary research-design assumptions when the human delegated those choices; human relays required questions.human
concept_imageNoOptional native concept-image attachment for this Customize Plan turn.
idempotency_keyNoReuse the same key and inputs if a prior call timed out. A different operation needs a new key.
organization_idNoOrganization for this operation and billing. Use list_organizations to choose an active membership.
execution_policyNoCaller workflow policy, kept out of the participant-facing research brief. This call never starts recruitment.review_before_fieldwork

Output Schema

NameRequiredDescriptionDefault
resultYesThe next Customize Plan turn and current study state.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changed
    • changedInput schema / properties / organization_id / description
      Previous value: -"Platform admins only: select an organization for this operation. Required when changing another organization’s study or using its wallet."New value: +"Organization for this operation and billing. Use list_organizations to choose an active membership."
  2. 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"
      +}
  3. Changed27 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: +{}
    • changedOutput schema / properties / result / properties / study / additionalProperties
      Previous value: -trueNew value: +{}
    • changedOutput schema / properties / result / properties / study / properties / byop_config / additionalProperties
      Previous value: -trueNew value: +{}
    • removedOutput schema / properties / result / properties / study / properties / byop_config / properties / auto_send_incentives / $ref
      Removed value: -"#/properties/result/properties/study/properties/byop_config/properties/is_incentives_enabled"
    • addedOutput schema / properties / result / properties / study / properties / byop_config / properties / auto_send_incentives / type
      Added value: +[
      +  "boolean",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / dashboard_url / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / dashboard_url / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • addedOutput schema / properties / result / properties / study / properties / expected_duration_seconds / maximum
      Added value: +9007199254740991
    • addedOutput schema / properties / result / properties / study / properties / expected_duration_seconds / minimum
      Added value: +-9007199254740991
    • changedOutput schema / properties / result / properties / study / properties / interview_count / anyOf
      Previous value: -[
      -  {
      -    "type": "integer"
      -  },
      -  {
      -    "type": "null"
      -  }
      -]New value: +[
      +  {
      +    "maximum": 9007199254740991,
      +    "minimum": -9007199254740991,
      +    "type": "integer"
      +  },
      +  {
      +    "type": "null"
      +  }
      +]
    • removedOutput schema / properties / result / properties / study / properties / language / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / language / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / name / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / name / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / recruiting_method / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / recruiting_method / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / study_link / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / study_link / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / updated_at / $ref
      Removed value: -"#/properties/result/properties/study/properties/created_at"
    • addedOutput schema / properties / result / properties / study / properties / updated_at / description
      Added value: +"ISO 8601 timestamp."
    • addedOutput schema / properties / result / properties / study / properties / updated_at / type
      Added value: +[
      +  "string",
      +  "null"
      +]
    • removedOutput schema / properties / result / properties / study / properties / use_case / $ref
      Removed value: -"#/properties/result/properties/questions/items/properties/default"
    • addedOutput schema / properties / result / properties / study / properties / use_case / type
      Added value: +[
      +  "string",
      +  "null"
      +]
  4. First observed

TDQS

A3.9/5.0
Behavior4/5

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

Adds substantial context beyond the annotations: external concept-URL fetches, an external analysis model, durable-task vs synchronous behavior depending on concept_image presence, and that completed plans and setting changes are persisted (consistent with destructiveHint=true and readOnlyHint=false). It does not spell out exactly what a turn overwrites in an existing plan, which is the main residual gap for a destructive mutation.

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

Conciseness3/5

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

Every sentence is roughly actionable, but the definition is a dense wall of mixed concerns — image handling appears between workflow-policy rules and post-call approval steps, so ordering is not front-loaded by task phase. It could be tightened or split into grouped clauses without losing content.

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 an output schema exists, return values needn't be described, and the description instead covers call shape, async vs sync path, image encoding, and the approval gate — close to complete for a complex write tool. The main omission is what state an existing plan loses when a turn is applied.

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 already 86%, so the baseline is 3; the description still adds decision-mode semantics for `decisions` and the encoding/labeling workflow for `concept_image` (ask for a participant-facing label, base64-encode raw bytes). The execution_policy/message separation rule is also meaningful usage semantics rather than schema restatement.

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?

Opens with a concrete verb and resource: "Send one research-design turn to Customize Plan," and makes the turn-based nature explicit. It does not, however, differentiate itself from the close siblings queue_customize_study or get_customize_study_job, which an agent would likely wonder about.

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 real routing rules: decisions=agent only when the human delegated research-design choices, otherwise human mode with questions[] relayed, and workflow constraints belong in execution_policy rather than message. It also states the follow-up sequence (get_study, show plan, obtain approval before invitations or paid launch). What's missing is explicit comparison against the queue/get job siblings.

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