<< All versions

Skill v1.0.0

currentAutomated scan100/100
ruslan2027/adako-mcp/creative
──Details
PublishedSeptember 27, 2026 at 04:44 AM
Content Hashsha256:0b882abfa3a975a6...
Git SHA
──Files
Files (1 file, 11.5 KB)
SKILL.md11.5 KBactive
SKILL.md · 208 lines · 11.5 KB

version: "1.0.0" name: creative description: Copy limits, asset specs and the creative fatigue playbook for Adako, the MCP server and REST API that connects this assistant to Google Ads, Meta Ads, ChatGPT Ads, TikTok Ads and LinkedIn Ads. Use it whenever the user asks to write, review, resize or refresh ad copy, headlines, descriptions, primary text, chat cards or video and image assets for those platforms, asks why an ad was rejected or is underperforming, or asks whether a creative will fit. It carries the exact character counts and image and video specs per platform, the free validator tool for each, and what to do when click-through falls while frequency rises. license: MIT


Creative: limits and fatigue

Adako is an MCP server and REST API that connects Claude, ChatGPT, Cursor and other assistants to Google Ads, Meta Ads, ChatGPT Ads, TikTok Ads and LinkedIn Ads. Adako never writes copy. You write it; Adako checks it against the platform rules before anything is created.

Check first, propose second. Every validator below is free and instant.

The file: where an image or video has to live

Adako never receives the file. Every platform downloads it itself, from its own servers, often hours after the call — so an ad needs a public https link straight to the file, and that is the whole constraint. check_media is the one tool for this: free, needs no account, takes the link exactly as the user gave it.

check_media(urls=["<whatever the user pasted>"]) # repairs, checks, judges per platform
check_media() # no link yet → where to put the file

It rewrites the share links that serve a page instead of a file (Drive, Dropbox, OneDrive, GitHub, Imgur), refuses the ones that never work with the reason, reads the file's real type, size, dimensions and an MP4's length from its first bytes, and reports slot by slot what fits.

Three ways in, cheapest first. Ask in this order; most users never reach the third.

  1. Already in the ad account. Anything uploaded in Ads Manager stays in the account library and

needs no link at all. meta_list_media (hash and video id), tiktok_list_ad_videos, google_list_assets. Then pass image_hash or video_id instead of a URL — nothing is uploaded twice, and a file with no public link still reaches an ad.

  1. Already on their website. Right-click the image, copy the image address. A Shopify,

WordPress, Webflow or Squarespace media library gives the same link from its file list.

  1. Neither. Upload it once in the platform's own Ads Manager — the only host they already have

an account with — then use door 1. For one file across several platforms, their own site or any public bucket.

Never works, whatever the user says: a path on their computer, a photo library link, a transfer service, a design-tool page, a chat attachment, a signed link that expires within a day, or a platform CDN address. A YouTube link is right for a Google Ads video asset and for nothing else.

Say what is wrong and what to do instead. Do not retry a create with a file that was refused.

PlatformValidator
Google Adsgoogle_validate_ad_copy, google_validate_and_prepare_assets
Meta Adsmeta_validate_creative_url, meta_list_media
ChatGPT Adschatgpt_validate_chat_card
TikTok Adstiktok_validate_assets
LinkedIn Adslinkedin_validate_assets

get_campaign_spec on the diagnostics router returns the full field list and asset rules for any campaign type, and validate_campaign_draft checks a whole draft at once.

The validators run through each platform's read router (google_ads, meta_ads and so on). The tools below that add an ad, cap frequency or pause run through its _write router (meta_ads_write and so on), and each one becomes a proposal.

Google Ads

Responsive search ad

FieldCountCharacters
Headlines3 to 1530
Descriptions2 to 490
Display paths215 each
Final URL12048
Keyword text80

Under about 8 headlines Google reports a poor ad strength. One exclamation mark per ad and none in a headline. ALL-CAPS words are disapproved. No duplicate headlines.

Performance Max asset group

FieldCountCharacters
Headlines3 to 1530
Long headlines1 to 590
Descriptions2 to 590
Business name125
Search themesup to 2580

Images: 1.91:1 at 1200x628 (minimum 600x314), 1:1 at 1200x1200 (minimum 300x300), optional 4:5 at 960x1200, square logo 1200x1200 (minimum 128x128), optional 4:1 logo at 1200x300. Each under 5 MB, jpg or png. Video must already be on YouTube and be at least 10 seconds; Google generates one from your assets when you supply none.

Extensions Sitelinks, callouts, structured snippets (a fixed header plus 3 to 10 values), call assets and a business name are separate tools: google_add_sitelinks, google_add_callouts, google_add_structured_snippets, google_add_call_asset, google_set_business_name. google_get_asset_performance reports each headline and description as BEST, GOOD, LOW, LEARNING or PENDING. Swap the LOW ones rather than rebuilding the ad.

Meta Ads

FieldCharacters
Primary text125
Headline40
Description30 (carousel card description 20)
Campaign, ad set and ad name200
  • Feed image: 1:1, 4:5 or 1.91:1; 1080x1080 or 1080x1350; minimum 600x600; under 30 MB; jpg or png.
  • Stories and Reels: 9:16 at 1080x1920. Keep text and logos out of the top and bottom 14%.
  • Feed video: 4:5, 1:1 or 16:9; best under 15 seconds; hook in the first 3 seconds, where most views

end. Reels and Stories video: 9:16, up to 90 seconds.

  • Carousel: 2 to 10 cards, every card 1:1. Mixed ratios get cropped. Two cards is usually worse than

one image; use a carousel when there are at least three real things to show.

  • Text over about 20% of the image is no longer rejected but still suppresses delivery.
  • meta_create_flexible_ad carries several texts, headlines and images in one ad and lets Meta

assemble the combinations.

ChatGPT Ads

One format, the chat card.

FieldLimit
Title3 to 50 characters
Bodyup to 100 characters
Destination URLhttps, up to 2048
Imagesquare, at least 400 px a side, under 10 MB, jpeg, png or webp
Context hintsup to 20, each up to 100 characters

The card crops to a square, so a non-square asset is cropped by the platform rather than by you. Review is per ad and the verdict shows in chatgpt_list_ads.

TikTok Ads

FieldLimit
Ad text100 characters
Display name20 characters
Call to action30 characters
  • In-feed video: 9:16 at 1080x1920 preferred, also 1:1 and 16:9; 5 to 60 seconds; minimum 540x960;

under 500 MB; mp4, mov, mpeg, avi, 3gp.

  • Best-performing length is about 21 to 34 seconds.
  • Safe zone: keep text and logos out of the top 13% and the bottom 20%.
  • Cover frame: optional, 9:16. TikTok picks a frame when you omit one.
  • Horizontal video in a vertical feed reads as recycled television. Ask for the vertical cut.

LinkedIn Ads

FieldCharacters
Intro text600, but it collapses behind "see more" after about 150
Headline200
Description70
Text adheadline 25, description 75
Campaign name255
  • Sponsored image: 1.91:1 at 1200x627 or 1:1 at 1200x1200; minimum 640x360; under 5 MB; jpg, png or

gif. A 1.91:1 image is cropped to square in some placements, so check the square crop.

  • Video: 1:1, 16:9 or 9:16; mp4; 3 seconds to 30 minutes; under 200 MB. Under 30 seconds for

awareness, 15 for a single message. Caption it; most feed video plays silent.

  • Carousel: 2 to 10 square images, each with its own headline and destination.

Writing for each platform

  • Search: the query is the context. Put the term in a headline, the offer in the second, proof in the

third. Descriptions carry the detail the headline cannot.

  • Feed (Meta, LinkedIn): the first line is the ad. Everything after "see more" is for the people

already convinced.

  • TikTok: the first 3 seconds decide. Hook, then the claim, then the call to action.
  • Chat card: 50 characters of title and 100 of body. One idea, one destination.

Never claim a result the account cannot show. Never put a price, a discount or a guarantee in copy the user did not give you.

The fatigue playbook

Fatigue is a pattern, not a bad day: click-through falling while frequency and CPM rise, over a window of at least 14 days.

  1. Detect. meta_detect_creative_fatigue, tiktok_detect_creative_fatigue,

linkedin_analyze_creative_performance, google_get_asset_performance.

  1. Confirm the shape. Falling CTR alone can be a seasonal week or an audience change. Rising

frequency beside it is the signal.

  1. Check reach first. On a small audience, frequency climbs because the audience is exhausted, not

because the creative is tired. Widen the audience, or cap it: meta_set_frequency_cap.

  1. Refresh, do not restart. Add a new ad in the same ad set or campaign so the learning survives:

meta_add_ad, tiktok_add_ad, linkedin_add_creative, google_create_responsive_search_ad.

  1. Change one thing. New hook, or new image, or new offer. Changing all three teaches nothing.
  2. Pause the tired ad after the new one is approved and delivering, not before.
  3. On Google, swap the assets marked LOW instead of building a new ad.

Rough refresh cadence: TikTok fastest, then Meta, then LinkedIn, whose audiences are small and reached repeatedly. Let the numbers set it, not the calendar.

Do not

  • Do not propose copy that has not been through the platform's validator.
  • Do not send an asset URL that needs a login, expires, or points at a share page; run check_media

first and send the link it gives back.

  • Do not tell the user to "host it somewhere" and stop there. Offer the three doors in order — the

account library first, their own site second, an Ads Manager upload third.

  • Do not stretch a horizontal asset into a vertical placement.
  • Do not pause every ad in an ad set at once to "reset" it.
  • Do not call one week of falling CTR fatigue.
All versions