Skip to main content
Glama

Draft conversion action changes

draft_update_conversion_action

Draft a partial UPDATE of an existing ConversionAction — returns PREVIEW.

Only parameters passed non-empty/non-default are sent to the API. Covers renaming, demoting a Primary to Secondary, changing value, adjusting the call-duration threshold, changing attribution, or moving the action to another goal with category. SMART_CAMPAIGN_* and GOOGLE_HOSTED types reject mutations with MUTATE_NOT_ALLOWED at apply time. Returns a preview with a plan_id (plus warnings where relevant); nothing changes until confirm_and_apply applies it.

Google Ads API: https://developers.google.com/google-ads/api/docs/start

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "conversion_action_id": "<conversion_action_id>"
    },
    "name": "draft_update_conversion_action"
  }
}

Input Schema

NameRequiredDescriptionDefault
nameNoNew name. Empty keeps the current name.
categoryNoConversionActionCategory to move the action to, e.g. PHONE_CALL_LEAD; that decides which goal it belongs to. The preview pins the current one (current_category); if the category is changed in Google Ads before the apply, nothing is sent. Empty leaves it unchanged.
customer_idNoGoogle Ads customer ID (digits, dashes allowed). Defaults to the configured account.
counting_typeNoONE_PER_CLICK or MANY_PER_CLICK. Empty leaves it unchanged.
currency_codeNoNew 3-letter ISO 4217 currency code. Empty leaves it unchanged.
default_valueNoNew default value in the action's currency (not micros), >= 0. 0 leaves it unchanged.
primary_for_goalNoTrue makes it Primary (Smart Bidding optimizes toward it); False demotes it to Secondary. Omit to leave unchanged.
attribution_modelNoAttributionModel enum value, e.g. GOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN. Empty leaves it unchanged.
conversion_action_idYesNumeric ConversionAction ID. It comes from: SELECT conversion_action.id, conversion_action.name FROM conversion_action.
always_use_default_valueNoTrue always uses default_value; False uses it only as a fallback when the tag/import supplies no value (the preview warns when combined with a positive default_value). Omit to leave unchanged.
view_through_window_daysNoView-through attribution window in days, 1-30. 0 leaves it unchanged.
click_through_window_daysNoClick-through attribution window in days, 1-90. 0 leaves it unchanged.
phone_call_duration_secondsNoMinimum call length in seconds for a call to count. 0 leaves it unchanged.
include_in_conversions_metricNoRefused when passed: Google answers IMMUTABLE_FIELD at apply, and a dry run does not catch it. It derives the value from primary_for_goal and whether the goal of the action's category is biddable; use those instead.

Output Schema

NameRequiredDescriptionDefault

No arguments

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed2 schema fields changed
    • addedInput schema / properties / category
      Added value: +{
      +  "default": "",
      +  "description": "ConversionActionCategory to move the action to, e.g.\nPHONE_CALL_LEAD; that decides which goal it belongs to. The preview\npins the current one (current_category); if the category is changed\nin Google Ads before the apply, nothing is sent. Empty leaves it\nunchanged.",
      +  "type": "string"
      +}
    • changedInput schema / properties / include_in_conversions_metric / description
      Previous value: -"True shows the action in the\n\"Conversions\" column; False in \"All conversions\" only. Mutable here\n(unlike on create). Omit to leave unchanged."New value: +"Refused when passed: Google answers\nIMMUTABLE_FIELD at apply, and a dry run does not catch it. It derives\nthe value from primary_for_goal and whether the goal of the action's\ncategory is biddable; use those instead."
  2. Changed13 schema fields changed
    • addedInput schema / properties / always_use_default_value / description
      Added value: +"True always uses default_value; False uses\nit only as a fallback when the tag/import supplies no value (the\npreview warns when combined with a positive default_value). Omit to\nleave unchanged."
    • addedInput schema / properties / attribution_model / description
      Added value: +"AttributionModel enum value, e.g.\nGOOGLE_SEARCH_ATTRIBUTION_DATA_DRIVEN. Empty leaves it unchanged."
    • addedInput schema / properties / click_through_window_days / description
      Added value: +"Click-through attribution window in days,\n1-90. 0 leaves it unchanged."
    • addedInput schema / properties / conversion_action_id / description
      Added value: +"Numeric ConversionAction ID. It comes from:\nSELECT conversion_action.id, conversion_action.name FROM\nconversion_action."
    • addedInput schema / properties / counting_type / description
      Added value: +"ONE_PER_CLICK or MANY_PER_CLICK. Empty leaves it\nunchanged."
    • addedInput schema / properties / currency_code / description
      Added value: +"New 3-letter ISO 4217 currency code. Empty leaves it\nunchanged."
    • addedInput schema / properties / customer_id / description
      Added value: +"Google Ads customer ID (digits, dashes allowed). Defaults\nto the configured account."
    • addedInput schema / properties / default_value / description
      Added value: +"New default value in the action's currency (not micros),\n>= 0. 0 leaves it unchanged."
    • addedInput schema / properties / include_in_conversions_metric / description
      Added value: +"True shows the action in the\n\"Conversions\" column; False in \"All conversions\" only. Mutable here\n(unlike on create). Omit to leave unchanged."
    • addedInput schema / properties / name / description
      Added value: +"New name. Empty keeps the current name."
    • addedInput schema / properties / phone_call_duration_seconds / description
      Added value: +"Minimum call length in seconds for a call\nto count. 0 leaves it unchanged."
    • addedInput schema / properties / primary_for_goal / description
      Added value: +"True makes it Primary (Smart Bidding optimizes toward\nit); False demotes it to Secondary. Omit to leave unchanged."
    • addedInput schema / properties / view_through_window_days / description
      Added value: +"View-through attribution window in days,\n1-30. 0 leaves it unchanged."
  3. First observed

TDQS

A4.6/5.0
Behavior5/5

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

Goes well beyond the annotations: preview/plan_id semantics, 'nothing changes until confirm_and_apply applies it', the partial-update rule that only non-empty/non-default params are sent, SMART_CAMPAIGN_*/GOOGLE_HOSTED rejection with MUTATE_NOT_ALLOWED at apply time, and the include_in_conversions_metric refusal quirk. These are non-obvious traits an agent could not derive from readOnlyHint=false / destructiveHint=false.

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 most important fact (preview, no mutation) is front-loaded in the first line, followed by scoping, then failure modes. The trailing Google Ads API documentation URL adds little for an agent and is the one line that could be dropped.

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 14-parameter mutation-adjacent tool with an output schema, the description covers the draft/apply workflow, the preview artifact, the partial-update contract, and the type-level rejection case. Nothing an agent needs in order 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 already 100%, so the baseline is 3; the description still adds real value by naming the semantic groups it covers and by stating the partial-update rule governing all 14 parameters. It does not restate individual parameter constraints, so it sits just above baseline rather than at 5.

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 ('Draft a partial UPDATE of an existing ConversionAction') plus the key outcome ('returns PREVIEW'). This clearly distinguishes it from draft_create_conversion_action and from confirm_and_apply, which the description names.

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 confirm_and_apply as the follow-up ('nothing changes until confirm_and_apply applies it') and enumerates the covered edit scenarios (rename, demote Primary to Secondary, value, call-duration, attribution, goal/category move). It does not explicitly state when to prefer draft_create_conversion_action or draft_remove_conversion_action instead, leaving that inference to the agent.

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.