Connect your AI Agents to TikTok for Business in minutes

Merge lets you securely connect your agents to TikTok for Business and thousands of tools instantly

Available tools

list_ads

List ads for an advertiser with pagination. Requires advertiserid; use listauthorizedadvertisers to find valid IDs. Optional filters (JSON-encoded 'filtering' object): adids, adgroupids, campaignids, primarystatus, adname. Returns ads and page_info.

create_ad

Create an ad under an ad group. Requires advertiserid, adgroupid and adname, plus the creative fields: identitytype/identityid (use listidentities), adformat ('SINGLEVIDEO', 'SINGLEIMAGE' or 'CAROUSELADS'), and the media: videoid for SINGLEVIDEO, imageids for SINGLEIMAGE/CAROUSELADS (use uploadimage/uploadvideo or search*), adtext, calltoaction and landingpageurl. Returns the created ad with its new adid.

update_ad

Update an ad incrementally (only the fields you pass change). Requires adgroupid and adid; optional: adname, adtext, videoid, imageids. Returns the ad ID and the fields you changed; use list_ads to read the full ad.

update_ad_status

Enable, disable (pause), or delete an ad. Requires advertiserid, adid, and operationstatus. Use listads to find ad IDs. Returns the updated ad.

list_adgroups

List ad groups for an advertiser with pagination. Requires advertiserid; use listauthorizedadvertisers to find valid IDs. Returns ad groups and pageinfo.

create_adgroup

Create an ad group under a campaign. Requires advertiserid, campaignid, adgroupname, optimizationgoal, billingevent, placementtype, budgetmode, budget, pacing, scheduletype and schedulestarttime. Use listcampaigns for campaign IDs and listauthorizedadvertisers for advertiser IDs. Returns the created ad group with its new adgroupid.

update_adgroup

Update an ad group's name, budget, bid, or schedule. Requires advertiserid and adgroupid; all other fields are optional partial updates (pass null to leave unchanged). Use list_adgroups to find ad group IDs. Returns the updated ad group.

update_adgroup_budget

Update an ad group's budget. Requires advertiserid, adgroupid, budgetmode ('BUDGETMODEDAY' or 'BUDGETMODETOTAL') and budget. Use listadgroups to find ad group IDs. Returns the updated ad group.

update_adgroup_status

Enable, disable (pause), or delete an ad group. Requires advertiserid, adgroupid, and operationstatus. Use listadgroups to find ad group IDs. Returns the updated ad group.

list_authorized_advertisers

List advertiser (ad account) IDs the access token is authorized to manage. Call this first to discover the advertiser_id that nearly every other tool requires. Returns advertisers with pagination.

get_advertiser_info

Get detailed account info (name, company, currency, timezone, status) for one or more advertiser IDs. Use listauthorizedadvertisers to find valid IDs.

list_identities

List identities (posting entities used when creating ads) for an advertiser. Use listauthorizedadvertisers to find advertiser IDs. Returns identities with pagination.

list_custom_audiences

List custom audiences for an advertiser with pagination. Optionally filter by customaudienceids (the get-by-ID path). Returns audiences and page_info.

get_custom_audiences

Get details for specific custom audiences by ID. Requires customaudienceids. Returns the audiences' full details.

create_rule_audience

Create a rule-based (engagement) custom audience. Requires customaudiencename, audiencetype (e.g. 'ENGAGEMENT'), and inclusionruleset: {'operator': 'or'|'and', 'rules': [...]} where each rule carries 'type', 'ruletype', 'field', 'operator', 'value' and event source fields per the /dmp/customaudience/rule/create/ doc. exclusionruleset, retentionindays and isautorefresh are optional. Returns the new customaudience_id.

create_lookalike_audience

Create a lookalike audience from a source custom audience. Requires customaudiencename, sourceaudienceid and lookalikespec ({'locationids': [...], 'mobileos': 'IOS'|'ANDROID', 'placements': [...], 'audiencesize': 'Balanced', 'includesource': bool} per the /dmp/customaudience/lookalike/create/ doc). Returns the new customaudienceid.

unshare_custom_audiences

Stop sharing a custom audience with an advertiser account. Requires customaudienceid (find it with listcustomaudiences) and sharedadvertiserid (an advertiser the audience was shared with via sharecustomaudiences; find advertiser IDs with listauthorizedadvertisers). One audience per call.

update_custom_audience

Update a custom audience (currently its name). Requires customaudienceid; customaudiencename is optional. Returns the updated audience ID.

delete_custom_audiences

Permanently delete custom audiences by ID. Requires customaudienceids. This is destructive and cannot be undone.

share_custom_audiences

Share custom audiences to other advertiser accounts. Requires customaudienceids and sharedadvertiserids (the accounts to share to).

list_business_centers

List the Business Centers the access token can access, with pagination. Returns business centers and page_info.

list_bc_assets

List assets (advertiser accounts, catalogs, pixels, etc.) a user can access under a Business Center. Requires bcid and assettype ('ADVERTISER', 'CATALOG', 'TIKTOKSHOP', 'PIXEL', 'LEAD', 'TTACCOUNT', or 'MANAGEDBUSINESSACCOUNT'). Optional filters: userid or useremail (not both), keyword. Keyed by bcid — no advertiserid needed.

list_bc_members

List members of a Business Center. Requires bcid. Optional filters: keyword, userrole ('ADMIN'|'STANDARD'), relationstatus ('BOUND'|'PENDING'|'REJECTED'). Keyed by bcid — no advertiser_id needed.

list_campaigns

List campaigns for an advertiser with pagination. Requires advertiserid; use listauthorizedadvertisers to find valid IDs. Returns campaigns and pageinfo.

create_campaign

Create a campaign under an advertiser. Requires advertiserid, campaignname, objectivetype, and budgetmode. Use listauthorizedadvertisers to find advertiser IDs. Returns the created campaign including its new campaign_id.

update_campaign

Update a campaign's name, budgetmode, or budget. Requires advertiserid and campaignid; use listcampaigns to find campaign IDs. Returns the updated campaign.

update_campaign_status

Enable, disable (pause), or delete a campaign. Requires advertiserid, campaignid, and operationstatus. Use listcampaigns to find campaign IDs. Returns the updated campaign.

search_images

Search an advertiser's image library. Optional filters: imageids, materialids, displayable. Returns images and page_info.

get_image_info

Get info for specific image IDs (max 100). Requires image_ids. Returns the images' details.

upload_image

Upload an image to the advertiser's library from a public URL (uploadtype UPLOADBYURL). Requires imageurl; filename optional (1-100 chars, unique per advertiser). File uploads by bytes are not supported. Returns the new imageid.

search_videos

Search an advertiser's video library. Optional filters: videoids, materialids, videoname (fuzzy), sortfield ('CREATETIME' or 'MODIFYTIME'). Returns videos and page_info.

get_video_info

Get info for specific video IDs. Requires video_ids. Returns the videos' details.

upload_video

Upload a video to the advertiser's library from a public URL (uploadtype UPLOADBYURL). Requires videourl; filename optional (1-100 chars, unique per advertiser). File uploads by bytes are not supported. Returns the new videoid.

list_pixels

List pixels for an advertiser with pagination. Optional filters: pixelid, name (fuzzy), orderby ('EARLIESTCREATE' or 'LATESTCREATE'). Returns pixels and page_info.

create_pixel

Create a pixel for an advertiser. Requires pixelname (max 40 chars, no emojis, unique per advertiser). Returns the new pixelid.

update_pixel

Update a pixel's name. Requires pixelid and pixelname (empty string keeps the name unchanged). Returns the updated pixel.

create_pixel_event

Create events on a pixel. Requires pixelid and pixelevents — a list of event objects each requiring 'eventtype' (see 'Event name for ad creation' in the Supported Pixel events doc) with optional 'eventname', 'eventcode', 'statistictype' ('EVERYTIME'|'ONCE'), 'currency', 'currencyvalue' and 'rules' (objects of trigger/operator/variable/value). Returns the created event IDs.

update_pixel_event

Update a pixel event's name/conversion fields. Requires eventid and eventname; currency and currency_value optional. Returns the event ID.

get_pixel_event_stats

Get pixel event statistics for up to 10 pixels over a UTC date range (startdate/enddate 'YYYY-MM-DD', span <= 30 days). Returns stats rows.

get_report

Run a synchronous integrated report for an advertiser. Requires datalevel (AUCTIONADVERTISER/AUCTIONCAMPAIGN/AUCTIONADGROUP/AUCTIONAD) and dimensions; common dimensions: stattimeday, campaignid, adgroupid, adid (audience reports add age, gender, countrycode, placement, platform). Common metrics: spend, impressions, clicks, ctr, cpc, cpm, conversion (default spend+impressions). startdate/enddate required unless querylifetime is true. Returns rows of {dimensions, metrics} plus page_info.

validate_credential

Validate TikTok for Business credentials by listing the advertisers the access token can manage. Returns success status and a human-readable message.

View all tools by creating a free accountSee more tools

How to set up Merge Agent Handler

In an mcp.json file, add the configuration below, and restart Cursor.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "url": "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
5      "headers": {
6        "Authorization": "Bearer yMt*****"
7      }
8    }
9  }
10}
11
Copy Code

Open your Claude Desktop configuration file and add the server configuration below. You'll also need to restart the application for the changes to take effect.

Make sure Claude is using the Node v20+.

Learn more in the official documentation ↗

1{
2  "mcpServers": {
3    "agent-handler": {
4      "command": "npx",
5      "args": [
6        "-y",
7        "mcp-remote@latest",
8        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
9        "--header",
10        "Authorization: Bearer ${AUTH_TOKEN}"
11      ],
12      "env": {
13        "AUTH_TOKEN": "yMt*****"
14      }
15    }
16  }
17}
Copy Code
Copied!

Open your Windsurf MCP configuration file and add the server configuration below.
Click on the refresh button in the top right of the Manage MCP server page or in the top right of the chat box in the box icon.

Learn more in the official documentation ↗

1{
2    "mcpServers": {
3      "agent-handler": {
4        "command": "npx",
5        "args": [
6          "-y",
7          "mcp-remote@latest",
8          "https://ah-api.merge.dev/api/v1/tool-packs/<tool-pack-id>/registered-users/<registered-user-id>/mcp",
9          "--header",
10          "Authorization: Bearer ${AUTH_TOKEN}"
11        ],
12        "env": {
13          "AUTH_TOKEN": "<ah-production-access-key>"
14        }
15      }
16    }
17  }
Copy Code

In Command Palette (Cmd+Shift+P on macOS, Ctrl+Shift+P on Windows), run "MCP: Open User Configuration".

You can then add the configuration below and press "start" right under servers. Enter the auth token when prompted.

Learn more in the official documentation ↗

1{
2  "inputs": [
3    {
4      "type": "promptString",
5      "id": "agent-handler-auth",
6      "description": "Agent Handler AUTH_TOKEN", // "yMt*****" when prompt
7      "password": true
8    }
9  ],
10  "servers": {
11    "agent-handler": {
12      "type": "stdio",
13      "command": "npx",
14      "args": [
15        "-y",
16        "mcp-remote@latest",
17        "https://ah-api-develop.merge.dev/api/v1/tool-packs/{TOOL_PACK_ID}/registered-users/{REGISTERED_USER_ID}/mcp",
18        "--header",
19        "Authorization: Bearer ${input:agent-handler-auth}"
20      ]
21    }
22  }
23}
Copy Code

FAQs on using Merge's TikTok for Business  MCP server

FAQs on using Merge's TikTok for Business  MCP server

Explore other MCP servers built and managed by Merge

pendo
Pendo
pipedrive
Pipedrive
plaid
Plaid
plaud
Plaud
podium
Podium
posthog
PostHog
pubmed
PubMed
pylon
Pylon
quartr
Quartr
quickbooks_online
QuickBooks Online
ramp
Ramp
readme
ReadMe
render
Render
reo
Reo.dev
ringcentral
RingCentral
rootly
Rootly
sabre
Sabre
salesforce
Salesforce
salesforce_data_360
Salesforce Data 360
salesforce_marketing_cloud
Salesforce Marketing Cloud
sanity
Sanity
sapsf
SAP SuccessFactors
sendgrid
SendGrid
sentry
Sentry

Ready to try it out?

Whether you're an engineer experimenting with agents or a product manager looking to add tools, you can get started for free now