# Adako > 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. Reads are free and instant. Every change becomes a proposal the > operator approves; nothing goes live without that approval. Created campaigns, ad sets and ads start paused. MCP endpoint: https://adako.ai/mcp REST API: https://adako.ai/api/v1/tools/{tool_name}/execute Web app: https://adako.ai Tools: 231 across five ad platforms, reached through 15 direct tools and 13 routers. ## Index - Documentation: https://adako.ai/docs - Quickstart: https://adako.ai/docs/quickstart - Connect Claude: https://adako.ai/docs/clients/claude - Connect Claude Code: https://adako.ai/docs/clients/claude-code - Connect ChatGPT: https://adako.ai/docs/clients/chatgpt - Connect Cursor: https://adako.ai/docs/clients/cursor - Connect Codex: https://adako.ai/docs/clients/codex - Connect Gemini CLI: https://adako.ai/docs/clients/gemini-cli - Connect Windsurf: https://adako.ai/docs/clients/windsurf - Connect Perplexity: https://adako.ai/docs/clients/perplexity - Connect VS Code: https://adako.ai/docs/clients/vscode - Google Ads: https://adako.ai/docs/google-ads - Meta Ads: https://adako.ai/docs/meta-ads - Connect Meta Ads with your own token: https://adako.ai/docs/meta-ads/own-token - ChatGPT Ads: https://adako.ai/docs/chatgpt-ads - TikTok Ads: https://adako.ai/docs/tiktok-ads - LinkedIn Ads: https://adako.ai/docs/linkedin-ads - The tool surface (routers, search_tools, fan-out): https://adako.ai/docs/routers - Workflows: https://adako.ai/docs/workflows - Monitors, briefs and reports: https://adako.ai/docs/monitors - Safety model: https://adako.ai/docs/safety - Tools reference: https://adako.ai/docs/tools - REST API: https://adako.ai/docs/api - Changelog: https://adako.ai/docs/changelog - Every tool with its first line: https://adako.ai/llms-full.txt - Pricing: https://adako.ai/pricing - Contact: https://adako.ai/contact ## Quickstart 1. Create an account and sign in. 2. Connect a platform on the Connections page, then make one account active per platform. 3. Add the MCP URL to your assistant: https://adako.ai/mcp 4. Run the first prompt: "Call start_here and tell me what is connected." 5. Ask a read question. Reads are free, run immediately and change nothing. 6. Ask for a change. Adako answers with a proposal: summary, field-level diff, expected impact, warnings. Approve it in chat (direct policy) or on the Approvals page (inbox policy). ## Connect your AI ### Claude 1. Open Claude Connectors. 2. Choose Add custom connector. Copy and paste the connection name and remote MCP server URL below. 3. Add the connector, click Connect, and complete the Adako authorization screen. 4. Start a new chat and select Adako from the connectors menu. Connection name: Adako Remote MCP server URL: https://adako.ai/mcp Adako never sends your ad platform tokens or keys to the client. The connector holds an Adako token only. ### Claude Code 1. Open a terminal in any project. 2. Copy and run the command below. 3. Start Claude Code, run /mcp, and complete the authorization screen in your browser. 4. Start a new session and ask Claude Code to use Adako. Add Adako: claude mcp add --transport http adako https://adako.ai/mcp API key instead of OAuth: claude mcp add --transport http adako https://adako.ai/mcp --header "Authorization: Bearer ak_live_…" Use an API key for headless environments (CI, servers). Create one at /keys. ### ChatGPT 1. Turn on Developer mode under Settings → Security & login, then open ChatGPT Plugins. 2. Click the + button. Copy and paste the connection name and MCP server URL below, add a short description, and choose the public endpoint connection option. Then click Create. 3. Complete the authorization screen if prompted. Start a new conversation, open the tools menu, and select Adako. Connection name: Adako MCP server URL: https://adako.ai/mcp ### Cursor 1. Open the project where you want to use Adako. 2. Create .cursor/mcp.json in the project root. Use ~/.cursor/mcp.json instead to make Adako available in every project. 3. Copy the configuration below into the file and save it. 4. Open Cursor Settings → MCP and complete the authorization screen if prompted. .cursor/mcp.json: { "mcpServers": { "adako": { "url": "https://adako.ai/mcp" } } } ### Codex 1. Open a terminal in any project. 2. Copy and run the add command below. 3. Copy and run the login command, then complete the authorization screen in your browser. 4. Start a new Codex session and ask Codex to use Adako. Add Adako: codex mcp add adako --url https://adako.ai/mcp Sign in: codex mcp login adako ### Gemini CLI 1. Create an Adako API key at /keys and export it as ADAKO_API_KEY. 2. Open ~/.gemini/settings.json, or .gemini/settings.json inside one project. 3. Add the block below and save the file. 4. Start Gemini CLI and run /mcp to confirm Adako is listed. ~/.gemini/settings.json: { "mcpServers": { "adako": { "httpUrl": "https://adako.ai/mcp", "headers": { "Authorization": "Bearer ${ADAKO_API_KEY}" } } } } The repository also carries an extension manifest (clients/gemini-cli/gemini-extension.json). Both routes are untested end to end against Adako; the configuration follows the documented format. ### Windsurf 1. Open Windsurf Settings, then Cascade, then the MCP servers panel, and choose the raw configuration file. 2. Add the adako block below beside any servers you already have. Do not replace the file. 3. Save, then refresh the server list in the panel. 4. Open Cascade and ask it to use Adako. ~/.codeium/windsurf/mcp_config.json: { "mcpServers": { "adako": { "serverUrl": "https://adako.ai/mcp" } } } API key instead of the browser sign-in: { "mcpServers": { "adako": { "serverUrl": "https://adako.ai/mcp", "headers": { "Authorization": "Bearer ak_live_…" } } } } Untested: the configuration follows Windsurf’s documented format, but Adako has not been verified in Windsurf yet. Tell support@adako.ai if a step does not match what you see. ### Perplexity 1. Open the Perplexity desktop app and go to Settings, then Connectors. 2. Add a connector. Enter Adako as the name and the URL below as the MCP server URL. 3. Complete the Adako authorization screen in the browser. 4. Start a new thread and switch the Adako connector on for it. Connector name: Adako MCP server URL: https://adako.ai/mcp Untested: connector support depends on your Perplexity plan and app version. If the app offers no connector settings, use Adako from another client or over the REST API. ### VS Code 1. Create .vscode/mcp.json in your workspace, or open your user-level mcp.json to make Adako available in every workspace. 2. Add the adako entry below beside any servers you already have, and save the file. 3. Start the server when VS Code offers to, and complete the Adako authorization screen in your browser. 4. Open Chat in agent mode and ask it to use Adako. .vscode/mcp.json: { "servers": { "adako": { "type": "http", "url": "https://adako.ai/mcp" } } } API key instead of the browser sign-in: { "servers": { "adako": { "type": "http", "url": "https://adako.ai/mcp", "headers": { "Authorization": "Bearer ak_live_…" } } } } Untested: the configuration follows VS Code’s documented format, but Adako has not been verified in VS Code yet. Tell support@adako.ai if a step does not match what you see. ## The tool surface 231 tools reach a client as 28 entries: 15 callable by name plus 13 routers. Direct: approve_proposal, get_connections_status, get_tool_schema, get_usage_status, list_connected_accounts, list_pending_proposals, reject_proposal, search_tools, start_here, switch_primary_account, google_get_campaign_performance, meta_get_campaign_performance, chatgpt_get_performance, tiktok_get_campaign_performance, linkedin_get_campaign_performance. Routers: google_ads + google_ads_write, meta_ads + meta_ads_write, chatgpt_ads + chatgpt_ads_write, tiktok_ads + tiktok_ads_write, linkedin_ads + linkedin_ads_write, monitoring + monitoring_write, diagnostics. Each platform, and monitoring, has two routers: a read router and a _write router. diagnostics has reads only. Reads: google_ads(action="execute", tool_name="google_list_campaigns", arguments={...}). They answer immediately. Changes: google_ads_write(action="execute", tool_name="google_pause_campaign", arguments={...}). A change creates a proposal; nothing changes until the user approves, in chat or in the web app. New objects are created PAUSED. A read router also takes action="list_tools" and action="get_tool_schema" for every tool it covers, changes included; both are free and instant. A _write router takes only action="execute" with a change tool. A change sent to a read router, or a read sent to a _write router, runs nothing and returns the right call. Why two: looking things up never changes an account, so an assistant that asks permission per tool can allow reads once. Every change runs through the _write tool, which asks each time and creates a proposal. search_tools ranks the whole registry from the user's own wording and returns the exact call line. Free. get_tool_schema returns a tool's JSON schema, required fields and enums. Free. Fan-out: a platform read router takes accounts=["…"] or accounts="all_active" on READ tools, runs them one after another, bills one task per account and caps at 20. _write routers take no accounts: writes stay one account at a time. Account arguments: customer_id (Google Ads), ad_account_id (Meta Ads, ChatGPT Ads, LinkedIn Ads), advertiser_id (TikTok Ads). ## Safety model 1. Everything is created PAUSED. There is no flag to skip it. 2. Every write becomes a proposal: dry run, preview with a field-level diff, approval, one execution, read-back. 3. A proposal carries an idempotency key and is claimed atomically, so a retry cannot execute it twice. 4. Pending proposals expire after 48 hours and then never run. 5. Eight tools remove anything, each behind confirm_delete: true — google_remove_negative_keywords, google_remove_asset_links, google_remove_search_themes, google_remove_label, linkedin_delete_creative, chatgpt_archive_campaign, delete_monitor, manage_scheduled_task (action delete). Pause never routes to a delete. 6. Money at the tool boundary is a decimal in the account currency, never micros or cents. IDs are strings. 7. Free text never reaches a write: locations and interests are resolved to platform IDs first, and ambiguity stops the call. 8. Platform tokens are encrypted server-side and never sent to the client. Arguments are redacted before logging. 9. A monitor never executes anything. When it fires it emails the operator and may create a proposal to approve. ## Platforms Google Ads (70 tools): Search and Performance Max, keywords and search terms, budgets and bid strategies, assets and extensions, conversion actions, labels, ad schedules, device bid modifiers, geo, hourly and device reports, anomaly decomposition, budget reallocation plans, benchmarks. Writes create paused and read back. Meta Ads (43 tools): campaigns, ad sets and ads, image, video, carousel and app-install launches, flexible ads, audiences, placements and budget analysis, creative fatigue, pixels, lead forms, Instagram identities. No delete tools at all. ChatGPT Ads (23 tools): chat card campaigns end to end, account limits, geo lookup, pixels and conversion event settings, review verdicts. One advertiser API key is one account. A lifetime budget is required. TikTok Ads (30 tools): campaigns, ad groups and in-feed video ads, Spark Ads, video metrics (2s and 6s views, completion, watch time), identities, pixels, creative fatigue. Ad group budget floor about 20/day. LinkedIn Ads (34 tools): campaign groups, image, video, carousel and text campaigns, B2B targeting by title, industry, seniority and company size, audience size and delivery forecasts, conversion rules, engagement metrics. Minimum audience 300 members; campaign budget floor about 10/day. TikTok Ads and LinkedIn Ads are available on request where a deployment carries their credentials. ## Monitors, briefs and reports Adako syncs a rolling 90 days of daily metrics per active account. A sync job runs at 06:00 UTC and a monitor pass at 07:00 UTC, evaluating every enabled monitor against yesterday in the account timezone. Monitors cost no tasks and make no platform call. Metrics: spend, clicks, impressions, conversions, conv_value, ctr, cpc, cpa, cpm, roas, conversion_rate, cost_per_lead, budget_utilization. Operators: less_than, greater_than, changes_by, drops_by, rises_by, with an absolute or relative threshold, a baseline window and consecutive_days. test_monitor replays a rule over the last 7 days before it is saved. create_monitor, update_monitor, schedule_brief and generate_report_now need the Pro plan or above. ## REST API and CLI POST https://adako.ai/api/v1/tools/{tool_name}/execute with an API key (Authorization: Bearer ak_live_…), an Idempotency-Key header and {"arguments": {...}}. The envelope is { success, tool, data, quota }. GET https://adako.ai/api/v1/tools lists the callable tools; GET https://adako.ai/api/v1/openapi.json is the OpenAPI document. Routers are MCP only: over REST the URL is the dispatch. search_tools and get_tool_schema run over REST too and return the REST request as their call line. The `adako` npm package wraps the same endpoints as a command line, for example: npx @adako/cli google list-campaigns --customer-id 1234567890 ## Pricing Plans set how many ad accounts Adako works on in a billing period (across all platforms) and how many tasks run a month. An account used in a billing period keeps its place until the period resets, even after it is switched off. Free: $0, 1 ad account a month, 30 tasks a month, 1 API key. Pro: $49/month, 5 ad accounts a month, 600 tasks a month, 5 API keys, priority support. Agency: $149/month, 20 ad accounts a month, 5000 tasks a month, 20 API keys, priority support. Enterprise: priced per contract, 50+ ad accounts a month, annual contract with invoice, security review and DPA. Contact https://adako.ai/contact?topic=enterprise or support@adako.ai. Reads are free on every transport. A task is one billable change; system, discovery, diagnostic, proposal, monitoring and resolver tools cost 0. A question or a wasted-spend review costs 0, a pause or budget change 1, a campaign launch 1 to 8 depending on the platform. Monitors, scheduled briefs and generated reports need Pro or above. ## Tools Legend: risk (read-only | write | destructive-write), cost in tasks, then how to call it. ### Adako - approve_proposal [destructive-write, free, direct] — Approve and execute a pending proposal - create_monitor [write, free, via monitoring_write] — Create a daily monitor on an ad account - delete_monitor [destructive-write, free, via monitoring_write] — Delete a monitor - explain_error [read-only, free, via diagnostics] — Explain a platform error - generate_report_now [write, free, via monitoring_write] — Compose a performance report now - get_campaign_spec [read-only, free, via diagnostics] — What a campaign needs before it can be created - get_connections_status [read-only, free, direct] — Connection health per platform - get_monitor_history [read-only, free, via monitoring] — Show what a monitor saw each day - get_tool_schema [read-only, free, direct] — Get the exact arguments a tool takes - get_usage_status [read-only, free, direct] — Plan and task usage - list_connected_accounts [read-only, free, direct] — List ad accounts (active and inactive) - list_monitors [read-only, free, via monitoring] — List the monitors on this account - list_pending_actions [read-only, free, via monitoring] — List the changes monitors have proposed - list_pending_proposals [read-only, free, direct] — List proposals waiting for approval - list_reports [read-only, free, via monitoring] — List the reports Adako has composed - list_scheduled_tasks [read-only, free, via monitoring] — List scheduled briefs and reports - list_what_i_can_do [read-only, free, via diagnostics] — Capability menu for the platforms this user has connected - manage_action [destructive-write, free, via monitoring_write] — Approve or reject a change a monitor proposed - manage_scheduled_task [write, free, via monitoring_write] — Pause, resume or delete a scheduled brief - reject_proposal [write, free, direct] — Reject a pending proposal - schedule_brief [write, free, via monitoring_write] — Schedule a recurring performance brief by email - search_tools [read-only, free, direct] — Find the right Adako tool for a job - start_here [read-only, free, direct] — Start here — personalised next step - suggest_next_action [read-only, free, via diagnostics] — Three concrete next steps from the real account state - switch_primary_account [write, free, direct] — Switch the primary ad account for a platform - test_monitor [read-only, free, via monitoring] — Dry-run a monitor against the last week - update_monitor [write, free, via monitoring_write] — Change or pause a monitor - usage_value_summary [read-only, free, via diagnostics] — What this account has actually used Adako for - validate_campaign_draft [read-only, free, via diagnostics] — Dry-run a campaign draft against the platform rules - verify_campaign_is_live [read-only, free, via diagnostics] — Check whether a campaign actually exists and is running - why_did_this_fail [read-only, free, via diagnostics] — Explain the recent failed calls ### Google Ads - google_add_audience_signal [write, 1 task, via google_ads_write] — Add an audience signal to an asset group - google_add_call_asset [write, 1 task, via google_ads_write] — Add a call extension - google_add_callouts [write, 1 task, via google_ads_write] — Add callout extensions - google_add_image_assets [write, 1 task, via google_ads_write] — Upload image assets from URLs - google_add_keywords [write, 1 task, via google_ads_write] — Add keywords to a Google Ads ad group - google_add_negative_keywords [write, 1 task, via google_ads_write] — Add campaign-level negative keywords - google_add_search_themes [write, 1 task, via google_ads_write] — Add search themes to an asset group - google_add_sitelinks [write, 1 task, via google_ads_write] — Add sitelink extensions - google_add_structured_snippets [write, 1 task, via google_ads_write] — Add structured snippet extensions - google_analyze_search_terms [read-only, free, via google_ads] — Analyse Google Ads search terms and suggest negatives - google_analyze_wasted_spend [read-only, free, via google_ads] — Find Google Ads spend with nothing to show for it - google_apply_label [write, 1 task, via google_ads_write] — Apply a label to campaigns or ad groups - google_bulk_update_keyword_bids [destructive-write, 1 task, via google_ads_write] — Change many keyword bids at once - google_bulk_update_keyword_status [destructive-write, 1 task, via google_ads_write] — Pause or enable many keywords at once - google_create_conversion_action [write, 1 task, via google_ads_write] — Create a website conversion action - google_create_label [write, 1 task, via google_ads_write] — Create a label - google_create_pmax_campaign [destructive-write, 1 task, via google_ads_write] — Create a Performance Max campaign (paused) - google_create_responsive_search_ad [write, 1 task, via google_ads_write] — Create a responsive search ad (paused) - google_create_search_campaign [write, 1 task, via google_ads_write] — Create a Google Ads Search campaign (paused) - google_explain_performance_anomaly [read-only, free, via google_ads] — Explain why a metric moved - google_get_ad_creative [read-only, free, via google_ads] — Read the copy behind an ad - google_get_ad_group_performance [read-only, free, via google_ads] — Google Ads ad group performance - google_get_ad_performance [read-only, free, via google_ads] — Ad performance with a period comparison - google_get_ad_schedule [read-only, free, via google_ads] — Read a campaign ad schedule - google_get_asset_group_performance [read-only, free, via google_ads] — Performance Max asset group performance - google_get_asset_performance [read-only, free, via google_ads] — Per-asset performance labels (BEST / GOOD / LOW) - google_get_benchmark_context [read-only, free, via google_ads] — Indicative industry benchmarks for Google Search - google_get_campaign_performance [read-only, free, direct] — Google Ads campaign performance with period-over-period change - google_get_campaign_structure [read-only, free, via google_ads] — Google Ads campaign contents (ad groups, keywords, ads) - google_get_campaign_targeting [read-only, free, via google_ads] — Google Ads campaign targeting - google_get_conversion_action_performance [read-only, free, via google_ads] — Conversion action performance - google_get_device_performance [read-only, free, via google_ads] — Performance by device - google_get_geo_performance [read-only, free, via google_ads] — Performance by country - google_get_hourly_performance [read-only, free, via google_ads] — Performance by hour and day of week - google_get_keyword_performance [read-only, free, via google_ads] — Google Ads keyword performance (top spenders) - google_get_search_themes [read-only, free, via google_ads] — Read the signals on an asset group - google_list_asset_groups [read-only, free, via google_ads] — List Performance Max asset groups - google_list_assets [read-only, free, via google_ads] — List Google Ads assets and where they are used - google_list_bidding_strategies [read-only, free, via google_ads] — List portfolio bidding strategies - google_list_campaigns [read-only, free, via google_ads] — List Google Ads campaigns - google_list_conversion_actions [read-only, free, via google_ads] — Google Ads conversion actions - google_list_labels [read-only, free, via google_ads] — List labels and what they are applied to - google_list_languages [read-only, free, via google_ads] — Language ids for campaign targeting - google_optimize_budget_allocation [read-only, free, via google_ads] — Propose a budget reallocation (writes nothing) - google_pause_ad [destructive-write, 1 task, via google_ads_write] — Pause one ad - google_pause_ad_group [destructive-write, 1 task, via google_ads_write] — Pause a Google Ads ad group - google_pause_campaign [destructive-write, 1 task, via google_ads_write] — Pause a Google Ads campaign - google_remove_asset_links [destructive-write, 1 task, via google_ads_write] — Unlink assets from a campaign or ad group - google_remove_label [destructive-write, 1 task, via google_ads_write] — Take a label off campaigns or ad groups - google_remove_negative_keywords [destructive-write, 1 task, via google_ads_write] — Remove campaign negative keywords (permanent) - google_remove_search_themes [destructive-write, 1 task, via google_ads_write] — Remove search themes from an asset group - google_research_keywords [read-only, free, via google_ads] — Google Ads keyword ideas with volume and bid ranges - google_resolve_locations [read-only, free, via google_ads] — Turn place names into Google location ids - google_resume_ad [write, 1 task, via google_ads_write] — Resume a paused ad - google_resume_ad_group [write, 1 task, via google_ads_write] — Resume a paused Google Ads ad group - google_resume_campaign [write, 1 task, via google_ads_write] — Resume a paused Google Ads campaign - google_search_audiences [read-only, free, via google_ads] — Find audiences, user lists and interest segments - google_set_ad_schedule [destructive-write, 1 task, via google_ads_write] — Set a campaign ad schedule - google_set_business_name [write, 1 task, via google_ads_write] — Set the business name asset - google_set_device_bid_modifiers [destructive-write, 1 task, via google_ads_write] — Set device bid modifiers - google_update_bid_strategy [destructive-write, 1 task, via google_ads_write] — Change a campaign bidding strategy - google_update_campaign [destructive-write, 1 task, via google_ads_write] — Update Google Ads campaign settings - google_update_campaign_budget [destructive-write, 1 task, via google_ads_write] — Change a Google Ads campaign daily budget - google_update_campaign_languages [destructive-write, 1 task, via google_ads_write] — Set the languages a campaign targets - google_update_campaign_locations [destructive-write, 1 task, via google_ads_write] — Change where a campaign runs - google_update_campaign_networks [destructive-write, 1 task, via google_ads_write] — Turn search partners and display expansion on or off - google_update_conversion_action [destructive-write, 1 task, via google_ads_write] — Change a conversion action - google_update_keyword [destructive-write, 1 task, via google_ads_write] — Change a keyword bid or state - google_validate_ad_copy [read-only, free, via google_ads] — Check responsive search ad copy against the RSA limits - google_validate_and_prepare_assets [read-only, free, via google_ads] — Check assets against Google rules before uploading ### Meta Ads - meta_add_ad [write, 2 tasks, via meta_ads_write] — Add a paused ad to a Meta ad set - meta_add_ad_set [write, 2 tasks, via meta_ads_write] — Add a paused ad set to a Meta campaign - meta_analyze_audiences [read-only, free, via meta_ads] — Rank Meta audience segments and suggest where budget should go - meta_analyze_wasted_spend [read-only, free, via meta_ads] — Find Meta spend that bought nothing - meta_browse_targeting [read-only, free, via meta_ads] — Browse Meta’s targeting catalogue - meta_create_app_install_campaign [write, 3 tasks, via meta_ads_write] — Create a paused Meta app-install campaign - meta_create_carousel_campaign [write, 3 tasks, via meta_ads_write] — Create a paused Meta carousel campaign - meta_create_flexible_ad [write, 2 tasks, via meta_ads_write] — Create a paused flexible (dynamic creative) Meta ad - meta_create_image_campaign [write, 3 tasks, via meta_ads_write] — Create a paused Meta image campaign - meta_create_video_campaign [write, 3 tasks, via meta_ads_write] — Create a paused Meta video campaign - meta_detect_creative_fatigue [read-only, free, via meta_ads] — Detect Meta creative fatigue - meta_duplicate_campaign [write, 3 tasks, via meta_ads_write] — Duplicate a Meta campaign (paused) - meta_explain_anomaly [read-only, free, via meta_ads] — Explain a change in Meta performance - meta_get_ad_creatives [read-only, free, via meta_ads] — Show the creatives behind Meta ads - meta_get_ad_performance [read-only, free, via meta_ads] — Meta ad performance - meta_get_ad_set_delivery_estimate [read-only, free, via meta_ads] — Estimate the reach of a Meta ad set - meta_get_ad_set_targeting [read-only, free, via meta_ads] — Show a Meta ad set’s targeting - meta_get_adset_performance [read-only, free, via meta_ads] — Meta ad set performance - meta_get_audience_insights [read-only, free, via meta_ads] — Break Meta performance down by audience - meta_get_campaign_performance [read-only, free, direct] — Meta campaign performance - meta_get_lead_form_submissions [read-only, free, via meta_ads] — Read submissions from a Meta lead form - meta_list_ad_sets [read-only, free, via meta_ads] — List Meta ad sets - meta_list_ads [read-only, free, via meta_ads] — List Meta ads - meta_list_campaigns [read-only, free, via meta_ads] — List Meta campaigns - meta_list_custom_audiences [read-only, free, via meta_ads] — List Meta custom and lookalike audiences - meta_list_instagram_accounts [read-only, free, via meta_ads] — List Instagram accounts an ad can run from - meta_list_lead_forms [read-only, free, via meta_ads] — List Meta lead forms - meta_list_pages [read-only, free, via meta_ads] — List promotable Facebook Pages - meta_list_pixels [read-only, free, via meta_ads] — List Meta pixels - meta_list_promotable_apps [read-only, free, via meta_ads] — List apps this Meta account can promote - meta_list_saved_audiences [read-only, free, via meta_ads] — List saved Meta audiences - meta_optimize_budget [read-only, free, via meta_ads] — Plan a Meta budget reallocation - meta_optimize_placements [read-only, free, via meta_ads] — Find Meta placements that are not earning their spend - meta_pause_entity [destructive-write, 1 task, via meta_ads_write] — Pause a Meta campaign, ad set or ad - meta_resume_entity [write, 1 task, via meta_ads_write] — Resume a Meta campaign, ad set or ad - meta_search_targeting [read-only, free, via meta_ads] — Look up Meta targeting ids - meta_set_frequency_cap [write, 1 task, via meta_ads_write] — Set a frequency cap on a Meta reach ad set - meta_update_ad [write, 1 task, via meta_ads_write] — Edit a Meta ad - meta_update_ad_set [destructive-write, 1 task, via meta_ads_write] — Edit a Meta ad set (targeting is merged) - meta_update_adset_budget [destructive-write, 1 task, via meta_ads_write] — Change a Meta ad set budget - meta_update_campaign [write, 1 task, via meta_ads_write] — Edit a Meta campaign - meta_update_campaign_budget [destructive-write, 1 task, via meta_ads_write] — Change a Meta campaign budget (CBO) - meta_validate_creative_url [read-only, free, via meta_ads] — Check an image URL and ad copy before building an ad ### ChatGPT Ads - chatgpt_archive_campaign [destructive-write, 1 task, via chatgpt_ads_write] — Archive a ChatGPT Ads campaign permanently - chatgpt_create_ad [write, 3 tasks, via chatgpt_ads_write] — Create a ChatGPT Ads chat card ad - chatgpt_create_ad_group [write, 2 tasks, via chatgpt_ads_write] — Create a ChatGPT Ads ad group - chatgpt_geo_lookup [read-only, free, via chatgpt_ads] — Find ChatGPT Ads location ids - chatgpt_get_account [read-only, free, via chatgpt_ads] — Show the connected ChatGPT Ads account - chatgpt_get_account_limits [read-only, free, via chatgpt_ads] — Show what this ChatGPT Ads account can do - chatgpt_get_performance [read-only, free, direct] — Read ChatGPT Ads performance - chatgpt_get_pixel_settings [read-only, free, via chatgpt_ads] — Read one ChatGPT Ads pixel and its conversion events - chatgpt_launch_ad [write, 8 tasks, via chatgpt_ads_write] — Launch a ChatGPT Ads chat card ad - chatgpt_list_ad_groups [read-only, free, via chatgpt_ads] — List ChatGPT Ads ad groups - chatgpt_list_ads [read-only, free, via chatgpt_ads] — List ChatGPT Ads ads - chatgpt_list_campaigns [read-only, free, via chatgpt_ads] — List ChatGPT Ads campaigns - chatgpt_list_pixels [read-only, free, via chatgpt_ads] — List ChatGPT Ads pixels - chatgpt_pause_ad [destructive-write, 1 task, via chatgpt_ads_write] — Pause a ChatGPT Ads ad - chatgpt_pause_ad_group [destructive-write, 1 task, via chatgpt_ads_write] — Pause a ChatGPT Ads ad group - chatgpt_pause_campaign [destructive-write, 1 task, via chatgpt_ads_write] — Pause a ChatGPT Ads campaign - chatgpt_resume_ad [write, 1 task, via chatgpt_ads_write] — Resume a ChatGPT Ads ad - chatgpt_resume_ad_group [write, 1 task, via chatgpt_ads_write] — Resume a ChatGPT Ads ad group - chatgpt_resume_campaign [write, 1 task, via chatgpt_ads_write] — Resume a ChatGPT Ads campaign - chatgpt_update_ad [write, 1 task, via chatgpt_ads_write] — Edit the copy on a ChatGPT Ads ad - chatgpt_update_ad_group [write, 1 task, via chatgpt_ads_write] — Edit a ChatGPT Ads ad group - chatgpt_update_campaign [write, 1 task, via chatgpt_ads_write] — Edit a ChatGPT Ads campaign - chatgpt_validate_chat_card [read-only, free, via chatgpt_ads] — Check chat card copy and image before building an ad ### TikTok Ads - tiktok_add_ad [write, 2 tasks, via tiktok_ads_write] — Add an ad to a TikTok ad group (paused) - tiktok_add_ad_group [write, 2 tasks, via tiktok_ads_write] — Add an ad group to a TikTok campaign (paused) - tiktok_analyze_geo_performance [read-only, free, via tiktok_ads] — Compare TikTok results by country - tiktok_analyze_wasted_spend [read-only, free, via tiktok_ads] — Find TikTok spend with nothing to show for it - tiktok_create_video_campaign [write, 3 tasks, via tiktok_ads_write] — Create a TikTok video campaign (paused) - tiktok_detect_creative_fatigue [read-only, free, via tiktok_ads] — Find TikTok creative that is wearing out - tiktok_explain_objective [read-only, free, via tiktok_ads] — Explain TikTok objectives and what each one needs - tiktok_get_ad_group_performance [read-only, free, via tiktok_ads] — Read TikTok ad group performance - tiktok_get_ad_performance [read-only, free, via tiktok_ads] — Read TikTok ad performance - tiktok_get_audience_insights [read-only, free, via tiktok_ads] — Break TikTok results down by audience - tiktok_get_campaign_details [read-only, free, via tiktok_ads] — Read one TikTok campaign in full - tiktok_get_campaign_performance [read-only, free, direct] — Read TikTok campaign performance - tiktok_list_ad_groups [read-only, free, via tiktok_ads] — List TikTok ad groups - tiktok_list_ad_videos [read-only, free, via tiktok_ads] — List TikTok videos in the ad account library - tiktok_list_ads [read-only, free, via tiktok_ads] — List TikTok ads - tiktok_list_campaigns [read-only, free, via tiktok_ads] — List TikTok campaigns - tiktok_list_identities [read-only, free, via tiktok_ads] — List TikTok identities the ads can post as - tiktok_list_lead_forms [read-only, free, via tiktok_ads] — List TikTok instant pages and lead forms - tiktok_list_pixels [read-only, free, via tiktok_ads] — List TikTok pixels and their events - tiktok_pause_ad [destructive-write, 1 task, via tiktok_ads_write] — Pause a TikTok ad - tiktok_pause_ad_group [destructive-write, 1 task, via tiktok_ads_write] — Pause a TikTok ad group - tiktok_pause_campaign [destructive-write, 1 task, via tiktok_ads_write] — Pause a TikTok campaign - tiktok_resume_ad [write, 1 task, via tiktok_ads_write] — Resume a TikTok ad - tiktok_resume_ad_group [write, 1 task, via tiktok_ads_write] — Resume a TikTok ad group - tiktok_resume_campaign [write, 1 task, via tiktok_ads_write] — Resume a TikTok campaign - tiktok_search_targeting [read-only, free, via tiktok_ads] — Find TikTok targeting ids - tiktok_update_ad_group [write, 1 task, via tiktok_ads_write] — Edit a TikTok ad group - tiktok_update_campaign [write, 1 task, via tiktok_ads_write] — Edit a TikTok campaign - tiktok_upload_images [write, 1 task, via tiktok_ads_write] — Upload cover images to TikTok - tiktok_validate_assets [read-only, free, via tiktok_ads] — Check TikTok creative URLs before uploading ### LinkedIn Ads - linkedin_add_creative [write, 1 task, via linkedin_ads_write] — Add a creative to a LinkedIn campaign - linkedin_analyze_creative_performance [read-only, free, via linkedin_ads] — Rank LinkedIn creatives and flag fatigue - linkedin_analyze_wasted_spend [read-only, free, via linkedin_ads] — Find LinkedIn spend that produced nothing - linkedin_associate_conversion [write, 1 task, via linkedin_ads_write] — Attach a conversion rule to a LinkedIn campaign - linkedin_batch_update_campaigns [write, 1 task, via linkedin_ads_write] — Change status or budget on many LinkedIn campaigns - linkedin_clone_campaign [write, 1 task, via linkedin_ads_write] — Copy a LinkedIn campaign - linkedin_create_campaign_group [write, 1 task, via linkedin_ads_write] — Create a LinkedIn campaign group - linkedin_create_carousel_campaign [write, 1 task, via linkedin_ads_write] — Create a LinkedIn carousel campaign - linkedin_create_image_campaign [write, 1 task, via linkedin_ads_write] — Create a LinkedIn single-image campaign - linkedin_create_text_campaign [write, 1 task, via linkedin_ads_write] — Create a LinkedIn text ad campaign - linkedin_create_video_campaign [write, 1 task, via linkedin_ads_write] — Create a LinkedIn video campaign - linkedin_delete_creative [destructive-write, 1 task, via linkedin_ads_write] — Delete a LinkedIn creative - linkedin_estimate_audience_size [read-only, free, via linkedin_ads] — Estimate a LinkedIn audience size - linkedin_explain_objectives [read-only, free, via linkedin_ads] — What each LinkedIn objective permits - linkedin_forecast_campaign_supply [read-only, free, via linkedin_ads] — Forecast LinkedIn delivery and bid range - linkedin_get_audience_insights [read-only, free, via linkedin_ads] — LinkedIn audience demographics - linkedin_get_campaign_performance [read-only, free, direct] — LinkedIn campaign performance - linkedin_get_campaign_structure [read-only, free, via linkedin_ads] — Show the LinkedIn account tree - linkedin_get_creative_performance [read-only, free, via linkedin_ads] — LinkedIn creative performance - linkedin_get_engagement_metrics [read-only, free, via linkedin_ads] — LinkedIn engagement and video metrics - linkedin_get_organizations [read-only, free, via linkedin_ads] — List the LinkedIn pages this login can post as - linkedin_list_campaign_groups [read-only, free, via linkedin_ads] — List LinkedIn campaign groups - linkedin_list_campaigns [read-only, free, via linkedin_ads] — List LinkedIn campaigns - linkedin_list_conversions [read-only, free, via linkedin_ads] — List LinkedIn conversion rules - linkedin_list_creatives [read-only, free, via linkedin_ads] — List the creatives on a LinkedIn campaign - linkedin_manage_conversions [write, 1 task, via linkedin_ads_write] — Create or edit a LinkedIn conversion rule - linkedin_pause_campaign [destructive-write, 1 task, via linkedin_ads_write] — Pause a LinkedIn campaign - linkedin_pause_creative [destructive-write, 1 task, via linkedin_ads_write] — Pause a LinkedIn creative - linkedin_resume_campaign [write, 1 task, via linkedin_ads_write] — Resume a LinkedIn campaign - linkedin_resume_creative [write, 1 task, via linkedin_ads_write] — Resume a LinkedIn creative - linkedin_search_targeting [read-only, free, via linkedin_ads] — Resolve LinkedIn targeting entities - linkedin_update_campaign [write, 1 task, via linkedin_ads_write] — Edit a LinkedIn campaign - linkedin_update_campaign_group [write, 1 task, via linkedin_ads_write] — Edit a LinkedIn campaign group - linkedin_validate_assets [read-only, free, via linkedin_ads] — Check images before a LinkedIn ad is built ## Notes for assistants - Call start_here first when you do not know what is connected. It is free. - Only the direct tools are callable by name. Reads go through the platform router (google_ads), changes through its _write router (google_ads_write). - When the right tool is not obvious, call search_tools with the user's own words. It is free. - Read before you write. Never invent an account ID, a metric or a benchmark. - Never retry a create after a timeout; ask for the proposal status instead. - Budgets are decimals in the account currency. Dates are exact (YYYY-MM-DD) or a preset. - If a tool returns candidates instead of a result, ask the user to choose; do not guess. - After a launch, call verify_campaign_is_live rather than assuming the create worked. - On an unfamiliar platform error, call explain_error or why_did_this_fail.