create_update_microsoft_ads_ad
Create a new or update an existing Microsoft Ads (Bing) 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 Microsoft Ads (Bing) text ad on the Metadata platform.
IMPORTANT: This tool is ONLY for Microsoft Ads (MICROSOFT_ADS channel) text ads.
Ad library entries are PER-CHANNEL: a Google RSA can NOT be attached to a Microsoft Ads channel, and vice versa. Building the "same" ad for both channels means two calls, one per tool.
For Google Ads text ads use create_update_google_ads_ad.
Do NOT use this tool for Facebook, LinkedIn, Instagram or Reddit ads: use create_update_image_ad (IMAGE/GIF) or create_update_video_ad (VIDEO).
ALSO KNOWN AS: Microsoft Ads text ad, Bing text ad, Bing search ad, MS Ads ad, Microsoft responsive search ad
BEHAVIOR:
- If "id" is NOT provided -> creates a new Microsoft Ads text ad.
- If "id" IS provided -> updates the existing Microsoft Ads text ad with that ID.
CHARACTER LIMITS (HARD LIMITS — THE API REJECTS ANYTHING OVER)
Microsoft Ads and Google Ads share one text-ad shape on the platform, so the limits are identical:
- Headlines: MAXIMUM 30 characters each (minimum 3, maximum 15 headlines)
- Descriptions: MAXIMUM 90 characters each (minimum 2, maximum 4 descriptions)
- Ad name: MAXIMUM 50 characters
DESCRIPTIONS — 90 CHARACTER HARD LIMIT — READ THIS CAREFULLY
THIS IS THE #1 MOST COMMON FAILURE MODE.
- 90 characters is an ABSOLUTE ceiling. 91 = REJECTION. 89 = OK.
- EVERY character counts: letters, digits, spaces, punctuation, apostrophes, hyphens, line breaks, emoji.
- The MCP schema enforces maxLength=90, and the server truncates as a backstop, so over-length copy is either rejected outright or SILENTLY CUT MID-SENTENCE.
- Target 70-85 characters per description. Do not write to the cliff.
- LLMs systematically underestimate length by 5-15 characters. ALWAYS COUNT, never estimate.
EVERY HEADLINE AND EVERY DESCRIPTION MUST BE UNIQUE
The platform rejects the WHOLE ad when two headlines carry identical text ("Enter a headline that is different from: '<text>'"), and applies the same rule to descriptions. Writing 12 real headlines plus 3 near-copies of them is the second most common rejection. Make every line genuinely different.
NO EXCLAMATION MARK IN A HEADLINE
"!" is rejected in headline text ("! is not supported"). Descriptions accept it.
DYNAMIC KEYWORD INSERTION
A headline may use the "{KeyWord:fallback text}" form; the platform measures the 30-character limit against the fallback text inside the braces.
MANDATORY PRE-CALL VALIDATION — DO THIS BEFORE EVERY CALL:
1. Count each headline: every one MUST be 30 characters or fewer, and free of "!".
2. Count each description: every one MUST be 90 characters or fewer.
3. Check for repeats across headlines, and across descriptions. Rewrite any duplicate.
4. Rewrite anything over the limit BEFORE calling. Do not submit known-bad copy and hope.
USAGE INSTRUCTIONS FOR LLM:
Use this tool when users want to:
- Create a new Microsoft Ads / Bing text ad
- Update an existing Microsoft Ads text ad (headlines, descriptions, or name)
- Give a Microsoft Ads campaign the ad it needs to become launch-ready
WHEN TO USE:
- User asks "create a Microsoft Ads ad" / "Bing ad" / "MS Ads search ad"
- A campaign has Microsoft Ads enabled and the channel has no ad yet
- User says "update Microsoft ad 23149 with new headlines"
WHEN NOT TO USE:
- User wants the Google Ads version of the ad -> use create_update_google_ads_ad
- User wants a Facebook, LinkedIn, Instagram or Reddit IMAGE ad -> use create_update_image_ad
- User wants a Facebook, LinkedIn, Instagram or Reddit VIDEO ad -> use create_update_video_ad
- User wants a sitelink, callout or other extension -> use the create_microsoft_*_extension tools
INPUT PARAMETERS:
- id: The ad ID (optional). If provided, that ad is updated. If omitted, a new ad is created. This is the adLibraryId inside the creatives of the microsoft channel in a campaign response.
- name: The name/label for the ad (required, max 50 characters)
- headlines: Array of headline text strings (required, minimum 3, maximum 15, each STRICT MAX 30 CHARACTERS, all distinct, no "!")
- descriptions: Array of description text strings (required, minimum 2, maximum 4, each STRICT MAX 90 CHARACTERS, all distinct)
EXAMPLE USAGE (Create):
create_update_microsoft_ads_ad(
name="Bing Hosting Q1 2026",
headlines=["EU Data Centers", "Local Expert Support", "Hosting Built For Founders"],
descriptions=["Keep your business data in Europe.", "2000+ local experts, one platform."]
)
EXAMPLE USAGE (Update):
create_update_microsoft_ads_ad(
id=23149,
name="Bing Hosting Q1 2026 v2",
headlines=["Updated Headline 1", "Updated Headline 2", "Updated Headline 3"],
descriptions=["Updated description one.", "Updated description two."]
)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 Microsoft Ads ad (minimum 3, maximum 15 headlines, each max 30 characters). Every headline must be DISTINCT — the platform rejects the ad if two share the same text — and must not contain '!'. |
descriptions |
array | required | List of description texts for the Microsoft Ads ad (2 to 4 descriptions — 2 is the platform minimum, a single-description ad is rejected). Each description MUST be 90 characters or fewer and MUST be distinct from the others. Count every character (incl. spaces/punctuation/emoji); target 70-85 chars |
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_microsoft_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: