Skip to main content
Glama

Google Ads: assign campaign to portfolio bid strategy

assign_portfolio_bidding_strategy
DestructiveIdempotent

Assigns a campaign to a portfolio bid strategy in the same account.

The campaign then bids toward the portfolio's target, and its own
bidding strategy (or the portfolio it was on) stops applying; the result
gives its bidding before and after. Supported campaign types: DISPLAY, SEARCH.
Google limits the portfolio types each campaign type takes, so a
portfolio of any other type is refused before anything is sent:
  DISPLAY: TARGET_CPA, TARGET_ROAS, TARGET_SPEND.
  SEARCH: every portfolio type.
Performance Max is refused: Google Ads does not let it use a portfolio
strategy set by resource name, so its target is set on the campaign with
update_campaign. unassign_portfolio_bidding_strategy takes a campaign
off its portfolio.

Args:
    customer_id: The Google Ads customer ID (numbers only, no hyphens).
    campaign_id: The ID of the campaign.
    bidding_strategy_id: The portfolio strategy's ID, or its resource
        name (customers/<customer_id>/biddingStrategies/<id>).

Returns:
    Dictionary with campaign_resource_name,
    bidding_strategy_resource_name, before and after, campaigns_on_strategy
    and a message.

Tools revision: d80f65c0.

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": {
      "customer_id": "<customer_id>",
      "campaign_id": "<campaign_id>",
      "bidding_strategy_id": "<bidding_strategy_id>"
    },
    "name": "assign_portfolio_bidding_strategy"
  }
}

Input Schema

NameRequiredDescriptionDefault
campaign_idYes
customer_idYes
bidding_strategy_idYes

Output Schema

NameRequiredDescriptionDefault
resultYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Added

TDQS

A4.4/5.0
Behavior3/5

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

Annotations already declare destructiveHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile is largely carried by structured data. The description still adds real value by disclosing the side effect (the campaign's prior own strategy or portfolio stops applying), pre-flight validation that refuses incompatible portfolio types before any request is sent, and the before/after result. It does not discuss reversibility or what happens to spend during the transition, but that is a modest gap given the annotated hints.

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 mutation and its side effect are front-loaded, followed by a compact allowlist and then the arguments. The 'Returns' block restates what the output schema already declares and could be dropped, and the trailing Args list is boilerplate, but overall the structure is scannable and each section is purposeful.

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 destructive three-parameter mutation with an output schema, the definition covers what an agent needs: preconditions (same account, campaign type, portfolio type compatibility), the exception case, the side effect on existing bidding, and the sibling for the inverse action. Return values are documented by the output schema, and the description's brief Returns note is consistent rather than contradictory.

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?

With schema description coverage at 0%, the description carries the burden and mostly does: it specifies customer_id as numbers only with no hyphens, and explains that bidding_strategy_id accepts either a bare ID or a full resource name with the exact format. campaign_id is only glossed as 'The ID of the campaign', which adds nothing beyond the schema, so it falls short of full compensation.

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?

The description opens with a specific verb and resource ('Assigns a campaign to a portfolio bid strategy in the same account') and scopes it to a single account. It explicitly distinguishes itself from both `unassign_portfolio_bidding_strategy` and `update_campaign` (the Performance Max path), so an agent can route correctly without inspecting sibling schemas.

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?

It names the exact conditions of use and non-use: supported campaign types (DISPLAY, SEARCH), a per-type allowlist of portfolio strategies, and an explicit refusal for Performance Max with the redirect to `update_campaign`. It also points to `unassign_portfolio_bidding_strategy` for the reverse operation, giving a complete when/when-not picture.

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