create_update_google_ads_ad
Create a new or update an existing Google Ads text ad on the Metadata platform.
Destructive creative
Deletes, archives, launches or moves budget. Do not give an agent this one without a human gate.
What it does
Create a new or update an existing Google Ads text ad on the Metadata platform.
IMPORTANT: This tool is ONLY for Google Ads (GOOGLE_ADS channel) text ads.
Do NOT use this tool for Facebook, LinkedIn, or Instagram ads.
For other channels or ad types use the dedicated tools: create_update_image_ad (IMAGE/GIF) or create_update_video_ad (VIDEO). CAROUSEL is not yet covered by the new tools — flag it if you hit that case.
BEHAVIOR:
- If "id" is NOT provided → creates a new Google Ads text ad.
- If "id" IS provided → updates the existing Google Ads text ad with that ID.
⚠️ CRITICAL — GOOGLE ADS CHARACTER LIMITS (HARD LIMITS — API WILL REJECT IF EXCEEDED) ⚠️
- Headlines: MAXIMUM 30 characters each (minimum 3, maximum 15 headlines)
- Descriptions: MAXIMUM 90 characters each (2 to 4 descriptions). Each description string MUST be 90 characters or fewer. Count every letter, space, and punctuation mark. 90 is the absolute maximum.
- Ad name: MAXIMUM 50 characters
⚠️ DESCRIPTIONS — 90 CHARACTER HARD LIMIT — READ THIS CAREFULLY ⚠️
THIS IS THE #1 MOST COMMON FAILURE MODE. DO NOT SKIP THIS SECTION.
- 90 characters is an ABSOLUTE, NON-NEGOTIABLE HARD CEILING.
- 91 characters = REJECTION. 100 characters = REJECTION. 89 characters = OK.
- "Characters" means EVERY character: letters, digits, spaces, punctuation,
apostrophes, hyphens, slashes, line breaks, and emoji code points. ALL count.
- There is NO grace, NO rounding, NO partial credit. The boundary is exact.
- The MCP schema enforces maxLength=90 — an over-length string is rejected
before your tool call even runs. The server ALSO truncates as a backstop,
meaning your over-length copy will be SILENTLY CUT MID-SENTENCE if it
somehow slips through. Either way, you will not get the description you wrote.
- This rule applies to EACH description independently. 4 descriptions of 80
chars each is fine. 1 description of 91 chars is NOT fine.
- Do NOT pad descriptions to "use the space." Shorter is always safer.
- Do NOT rely on the user noticing — you are responsible for compliance.
COMMON WAYS LLMs BLOW THE 90-CHAR LIMIT (avoid these):
- Writing a "complete sentence" without counting first.
- Adding a CTA at the end ("Sign up today!") that pushes past 90.
- Including the company name AND a tagline AND a benefit in one description.
- Using em dashes (—), ellipses (…), or smart quotes (" ") which still count
as characters and often appear longer than expected when counted.
- Trusting your "feel" for length — LLMs systematically underestimate by 5-15
characters. ALWAYS COUNT.
RECOMMENDED SAFETY MARGIN:
- Target 70-85 characters per description. This leaves headroom for sanitization
(smart-quote conversion, whitespace normalization) and avoids edge-case
rejections. 90 is the cliff — do not write to the cliff.
⚠️ MANDATORY PRE-CALL VALIDATION — YOU MUST DO THIS BEFORE EVERY CALL:
1. Write out each headline and count its characters — each MUST be ≤ 30 characters
2. Write out each description and count its characters — each MUST be ≤ 90 characters (this is the most common error — descriptions MUST NOT exceed 90 characters)
3. For EACH description, do an explicit character count: len(description). If the
number is 91 or higher, REWRITE before calling. Do not "estimate" — count.
4. If any text exceeds the limit, rewrite and shorten it BEFORE calling the tool
5. Do NOT rely on the API to catch these errors — validate client-side first
6. When in doubt, make descriptions shorter. A 70-character description is better than a rejected 91-character one
7. If a user provides copy that is too long, shorten it yourself and proceed —
do NOT submit known-bad copy and hope for the best.
EXAMPLES — DESCRIPTIONS AT THE 90-CHAR BOUNDARY:
- "Shop the best deals online." (27 chars) ✅ SAFE
- "Free shipping on every order over fifty dollars. Sign up today!" (63 chars) ✅ SAFE
- "Discover our award-winning marketing platform built for B2B teams of every size today" (89 chars) ✅ SAFE — at the edge
- "Discover our award-winning marketing platform built for modern B2B teams of every size today" (94 chars) ❌ REJECTED — 4 over
- "Transform your B2B marketing strategy with AI-powered automation that drives real revenue today!" (98 chars) ❌ REJECTED — REWRITE
USAGE INSTRUCTIONS FOR LLM:
Use this tool when users want to:
- Create a new Google Ads text ad
- Update an existing Google Ads text ad (headlines, descriptions, or name)
- Set up a Google Ads responsive search ad with headlines and descriptions
WHEN TO USE:
- User asks "create a Google Ads ad"
- User wants to create a text ad for Google Ads
- User says "make a new Google ad with these headlines and descriptions"
- User wants to update the headlines or descriptions of an existing Google Ads ad
- User says "update Google ad 23149 with new headlines"
WHEN NOT TO USE:
- User wants to create a Facebook, LinkedIn, Instagram, or Reddit IMAGE ad → use create_update_image_ad
- User wants to create a Facebook, LinkedIn, Instagram, or Reddit VIDEO ad → use create_update_video_ad
- User wants to update a non-Google Ads ad → use create_update_image_ad or create_update_video_ad (whichever matches the ad's adType)
INPUT PARAMETERS:
- id: The ad ID (optional). If provided, the ad with this ID will be updated. If omitted, a new ad is created. This is the adLibraryId inside the creatives of the google channel in campaign response.
- name: The name/label for the ad (required, max 50 characters)
- headlines: Array of headline text strings (required, minimum 3, maximum 15 headlines, each STRICT MAX 30 CHARACTERS)
- descriptions: Array of description text strings (required, 2 to 4 descriptions, each STRICT MAX 90 CHARACTERS — count characters carefully, this is the most common validation failure)
EXAMPLE USAGE (Create):
create_update_google_ads_ad(
name="My Google Ad Q1 2025",
headlines=["Buy Now", "Best Deals", "Free Shipping"],
descriptions=["Shop the best deals online.", "Free shipping on all orders."]
)
EXAMPLE USAGE (Update):
create_update_google_ads_ad(
id=23149,
name="My Google Ad Q1 2025 Updated",
headlines=["Updated Headline 1", "Updated Headline 2", "Updated Headline 3"],
descriptions=["Updated description 1.", "Updated description 2."]
)Arguments
| Argument | Type | Notes | |
|---|---|---|---|
id |
integer | The existing ad ID to update. If omitted, a new ad will be created. | |
name |
string | required | The name/label for the ad in Metadata platform (max 50 characters) |
headlines |
array | required | List of headline texts for the Google Ads ad (minimum 3, maximum 15 headlines, each max 30 characters) |
descriptions |
array | required | List of description texts for the Google Ads ad (2 to 4 descriptions). CRITICAL #1 FAILURE MODE: each description MUST be ≤ 90 characters — this is enforced by maxLength schema validation AND by server-side truncation. Going over 90 means either (a) the call is rejected before it runs, or (b) the de |
Request
curl
curl -s -X POST https://mcp-server.metadata.io/mcp \
-H "Authorization: $METADATA_PAT" \
-H "Content-Type: application/json" \
-H "Accept: application/json, text/event-stream" \
-H "MCP-Protocol-Version: 2025-11-25" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"create_update_google_ads_ad","arguments":{"name":"<name>","headlines":[],"descriptions":[]}}}'
Response
No recorded response. This tool can delete, archive, launch or move budget, so it is never executed to build these docs.
The request above is still the exact shape to send. Nothing on this page is invented.
Related
Other creative tools: