TikTok Ads MCP Server – Model Context Protocol Server for TikTok Ads Marketing API Integration
49
stars
0
commits
Python
primary language
Jul 4, 2026
updated
A local Model Context Protocol (MCP) server for TikTok Ads API integration. It lets MCP clients such as Claude Desktop connect to TikTok Ads, authenticate with a TikTok Business app, and use read-only tools for campaign lookup, ad group and ad inspection, performance reporting, audience breakdowns, advertiser info, pixels, and targeting locations.
This repository is for users who want to run a local TikTok Ads MCP server.
If you do not want to install Python, manage dependencies, or configure a TikTok developer app, AdsMCP provides a hosted remote MCP server:
AdsMCP Remote MCP Server Setup Guide
The rest of this README covers the local setup.
You need:
uv for dependency managementmacOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
After installation, confirm that uv is available:
uv --version
Find the absolute path to uv before configuring a desktop MCP client:
macOS and Linux:
whereis uv
which uv
Use the path returned by whereis uv or which uv as the MCP command value if your client cannot find uv by name.
Windows PowerShell:
where.exe uv
Common paths are:
/Users/<your-name>/.local/bin/uvC:\\Users\\<your-name>\\.local\\bin\\uv.exeClone the repository and install dependencies:
git clone https://github.com/AdsMCP/tiktok-ads-mcp-server.git
cd tiktok-ads-mcp-server
uv sync
Find the absolute path to the project directory. You will use this path in the MCP config as the uv --directory value:
macOS and Linux:
pwd
Windows PowerShell:
Get-Location
Verify that the project environment can import MCP:
uv run python -c "from mcp.server import Server; print('ok')"
You should see:
ok
Do not configure your MCP client to run this server with system python or python3 unless you have manually installed all dependencies into that exact Python environment.
Use this:
uv run python run_server.py
Not this:
python run_server.py
python3 run_server.py
Why: MCP desktop apps often launch a different Python than the one you use in your terminal. If that Python does not have the mcp package installed, the server exits with:
No module named 'mcp'
uv run makes the MCP client use this project's dependency environment.
Claude Desktop reads its MCP server config from:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%\\Claude\\claude_desktop_config.json
Linux paths vary by distribution and client package, but they are usually under:
~/.config/Claude/
Use uv --directory so the server starts from the project directory even if your MCP client does not apply cwd correctly.
To fill in "/absolute/path/to/tiktok-ads-mcp-server", open a terminal in the cloned repository and run:
pwd
Use the printed value as the --directory argument. If Claude cannot find uv, replace "uv" with the absolute path from whereis uv or which uv, such as "/Users/yourname/.local/bin/uv".
{
"mcpServers": {
"tiktok-ads": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/tiktok-ads-mcp-server",
"run",
"python",
"run_server.py"
],
"env": {
"TIKTOK_APP_ID": "your_app_id",
"TIKTOK_APP_SECRET": "your_app_secret"
}
}
}
}
Use escaped backslashes in JSON paths. To find the project path, open PowerShell in the cloned repository and run:
Get-Location
Use the printed value as the --directory argument, with each \ escaped as \\ in JSON:
{
"mcpServers": {
"tiktok-ads": {
"command": "uv",
"args": [
"--directory",
"C:\\path\\to\\tiktok-ads-mcp-server",
"run",
"python",
"run_server.py"
],
"env": {
"TIKTOK_APP_ID": "your_app_id",
"TIKTOK_APP_SECRET": "your_app_secret"
}
}
}
}
If Claude cannot find uv on Windows, use the full path:
"command": "C:\\Users\\yourname\\.local\\bin\\uv.exe"
After editing the config, fully restart Claude Desktop.
https://adsmcp.com
env.Once the MCP server is connected:
tiktok_ads_login from your MCP client.code parameter from the redirect URL.tiktok_ads_complete_auth with that code.tiktok_ads_auth_status to confirm the account is authenticated.After OAuth completes, TikTok access and refresh tokens are stored locally under:
~/.tiktok_ads_mcp/tokens.json
This file is what lets the local MCP server call TikTok Marketing API after you authenticate. Treat it like a password:
The local server stores tokens only for the TikTok account you authorize, and only so it can make authenticated TikTok API calls for that account.
The local server currently exposes the following tools through its MCP registry. This list is the source of truth for the open-source package.
tiktok_ads_login - Start TikTok Ads OAuth authentication.tiktok_ads_complete_auth - Complete OAuth using the authorization code.tiktok_ads_auth_status - Check current authentication status.tiktok_ads_switch_ad_account - Switch to a different advertiser account.tiktok_ads_get_campaigns - Retrieve campaigns for the advertiser account.tiktok_ads_get_campaign_details - Get details for a specific campaign.tiktok_ads_get_adgroups - Retrieve ad groups for a campaign.tiktok_ads_get_adgroup_details - Get details for a specific ad group.tiktok_ads_get_ads - Retrieve ads by campaign, ad group, ad ID, or status.tiktok_ads_get_ad_details - Get details for a specific ad.tiktok_ads_get_campaign_performance - Get campaign-level metrics.tiktok_ads_get_adgroup_performance - Get ad group-level metrics.tiktok_ads_get_ad_performance - Get ad-level metrics.tiktok_ads_get_audience_breakdown - Break down campaign, ad group, or ad performance by audience dimension.tiktok_ads_wasted_spend_audit - Run a read-only audit for spend and clicks without conversion signal.tiktok_ads_get_custom_audiences - List custom audiences.tiktok_ads_get_advertiser_info - Get account-level advertiser details such as currency, timezone, status, industry, country, and creation time.tiktok_ads_get_location_info - Resolve TikTok targeting location IDs.tiktok_ads_get_pixel_list - List pixels attached to the advertiser account.tiktok_ads_get_pixel_event_stats - Get pixel event activity for a date range.Current MCP tools are only listed when they are wired to real OAuth, local token state, or TikTok Marketing API calls. This repository does not expose placeholder or mock tools.
| Tool | Backing implementation |
|---|---|
tiktok_ads_login | Starts TikTok OAuth and returns an authorization URL. |
tiktok_ads_complete_auth | Exchanges an OAuth code for TikTok tokens and stores them locally. |
tiktok_ads_auth_status | Checks local configuration and saved token state. |
tiktok_ads_switch_ad_account | Switches the active local advertiser account after authentication. |
tiktok_ads_get_campaigns | Calls TikTok Marketing API campaign/get/. |
tiktok_ads_get_campaign_details | Calls TikTok Marketing API campaign/get/ with campaign_ids filtering. |
tiktok_ads_get_adgroups | Calls TikTok Marketing API adgroup/get/. |
tiktok_ads_get_adgroup_details | Calls TikTok Marketing API adgroup/get/ with adgroup_ids filtering. |
tiktok_ads_get_ads | Calls TikTok Marketing API ad/get/. |
tiktok_ads_get_ad_details | Calls TikTok Marketing API ad/get/ with ad_ids filtering. |
tiktok_ads_get_campaign_performance | Calls TikTok Marketing API report/integrated/get/ at campaign level. |
tiktok_ads_get_adgroup_performance | Calls TikTok Marketing API report/integrated/get/ at ad group level. |
tiktok_ads_get_ad_performance | Calls TikTok Marketing API report/integrated/get/ at ad level. |
tiktok_ads_get_audience_breakdown | Calls TikTok Marketing API report/integrated/get/ with report_type=AUDIENCE. |
tiktok_ads_wasted_spend_audit | Read-only workflow that calls campaign/get/, adgroup/get/, and report/integrated/get/. |
tiktok_ads_get_custom_audiences | Calls TikTok Marketing API dmp/custom_audience/list/. |
tiktok_ads_get_advertiser_info | Calls TikTok Marketing API advertiser/info/ and enriches with recent spend dates from report/integrated/get/. |
tiktok_ads_get_location_info | Calls TikTok Marketing API tool/targeting/info/. |
tiktok_ads_get_pixel_list | Calls TikTok Marketing API pixel/list/. |
tiktok_ads_get_pixel_event_stats | Calls TikTok Marketing API pixel/event/stats/. |
Planned areas:
The MCP client cannot find the command you configured.
Fix:
"command": "uv" if uv is on the app's PATH."command": "/Users/yourname/.local/bin/uv"
You are running the server with system Python instead of the project's environment.
Fix your MCP config to use:
"command": "uv",
"args": ["--directory", "/path/to/tiktok-ads-mcp-server", "run", "python", "run_server.py"]
Then run:
cd /path/to/tiktok-ads-mcp-server
uv sync
Your MCP client started uv, but it did not run the command from the project directory.
Fix your MCP config to put the project directory in the uv arguments instead of relying on cwd:
"command": "uv",
"args": ["--directory", "/path/to/tiktok-ads-mcp-server", "run", "python", "run_server.py"]
The server did not receive TIKTOK_APP_ID or TIKTOK_APP_SECRET.
Fix:
env in your MCP client config.Check whether the token file exists:
ls ~/.tiktok_ads_mcp/tokens.json
If you want to restart authentication, remove the token file and run tiktok_ads_login again:
rm ~/.tiktok_ads_mcp/tokens.json
Fully quit and reopen Claude Desktop. On macOS, closing the window is not always enough.
.env, token files, App Secrets, or OAuth codes.~/.tiktok_ads_mcp/tokens.json private.Install dependencies:
uv sync
Run tests:
uv run --extra dev pytest
Run the server manually:
uv run python run_server.py
This project is licensed under the MIT License. See LICENSE for details.
For issues and questions, please create an issue in this repository.
Python
100.0%
TikTok Ads MCP Server – Model Context Protocol Server for TikTok Ads Marketing API Integration
49
stars
0
commits
Python
primary language
Jul 4, 2026
updated
A local Model Context Protocol (MCP) server for TikTok Ads API integration. It lets MCP clients such as Claude Desktop connect to TikTok Ads, authenticate with a TikTok Business app, and use read-only tools for campaign lookup, ad group and ad inspection, performance reporting, audience breakdowns, advertiser info, pixels, and targeting locations.
This repository is for users who want to run a local TikTok Ads MCP server.
If you do not want to install Python, manage dependencies, or configure a TikTok developer app, AdsMCP provides a hosted remote MCP server:
AdsMCP Remote MCP Server Setup Guide
The rest of this README covers the local setup.
You need:
uv for dependency managementmacOS and Linux:
curl -LsSf https://astral.sh/uv/install.sh | sh
Windows PowerShell:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
After installation, confirm that uv is available:
uv --version
Find the absolute path to uv before configuring a desktop MCP client:
macOS and Linux:
whereis uv
which uv
Use the path returned by whereis uv or which uv as the MCP command value if your client cannot find uv by name.
Windows PowerShell:
where.exe uv
Common paths are:
/Users/<your-name>/.local/bin/uvC:\\Users\\<your-name>\\.local\\bin\\uv.exeClone the repository and install dependencies:
git clone https://github.com/AdsMCP/tiktok-ads-mcp-server.git
cd tiktok-ads-mcp-server
uv sync
Find the absolute path to the project directory. You will use this path in the MCP config as the uv --directory value:
macOS and Linux:
pwd
Windows PowerShell:
Get-Location
Verify that the project environment can import MCP:
uv run python -c "from mcp.server import Server; print('ok')"
You should see:
ok
Do not configure your MCP client to run this server with system python or python3 unless you have manually installed all dependencies into that exact Python environment.
Use this:
uv run python run_server.py
Not this:
python run_server.py
python3 run_server.py
Why: MCP desktop apps often launch a different Python than the one you use in your terminal. If that Python does not have the mcp package installed, the server exits with:
No module named 'mcp'
uv run makes the MCP client use this project's dependency environment.
Claude Desktop reads its MCP server config from:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
Windows:
%APPDATA%\\Claude\\claude_desktop_config.json
Linux paths vary by distribution and client package, but they are usually under:
~/.config/Claude/
Use uv --directory so the server starts from the project directory even if your MCP client does not apply cwd correctly.
To fill in "/absolute/path/to/tiktok-ads-mcp-server", open a terminal in the cloned repository and run:
pwd
Use the printed value as the --directory argument. If Claude cannot find uv, replace "uv" with the absolute path from whereis uv or which uv, such as "/Users/yourname/.local/bin/uv".
{
"mcpServers": {
"tiktok-ads": {
"command": "uv",
"args": [
"--directory",
"/absolute/path/to/tiktok-ads-mcp-server",
"run",
"python",
"run_server.py"
],
"env": {
"TIKTOK_APP_ID": "your_app_id",
"TIKTOK_APP_SECRET": "your_app_secret"
}
}
}
}
Use escaped backslashes in JSON paths. To find the project path, open PowerShell in the cloned repository and run:
Get-Location
Use the printed value as the --directory argument, with each \ escaped as \\ in JSON:
{
"mcpServers": {
"tiktok-ads": {
"command": "uv",
"args": [
"--directory",
"C:\\path\\to\\tiktok-ads-mcp-server",
"run",
"python",
"run_server.py"
],
"env": {
"TIKTOK_APP_ID": "your_app_id",
"TIKTOK_APP_SECRET": "your_app_secret"
}
}
}
}
If Claude cannot find uv on Windows, use the full path:
"command": "C:\\Users\\yourname\\.local\\bin\\uv.exe"
After editing the config, fully restart Claude Desktop.
https://adsmcp.com
env.Once the MCP server is connected:
tiktok_ads_login from your MCP client.code parameter from the redirect URL.tiktok_ads_complete_auth with that code.tiktok_ads_auth_status to confirm the account is authenticated.After OAuth completes, TikTok access and refresh tokens are stored locally under:
~/.tiktok_ads_mcp/tokens.json
This file is what lets the local MCP server call TikTok Marketing API after you authenticate. Treat it like a password:
The local server stores tokens only for the TikTok account you authorize, and only so it can make authenticated TikTok API calls for that account.
The local server currently exposes the following tools through its MCP registry. This list is the source of truth for the open-source package.
tiktok_ads_login - Start TikTok Ads OAuth authentication.tiktok_ads_complete_auth - Complete OAuth using the authorization code.tiktok_ads_auth_status - Check current authentication status.tiktok_ads_switch_ad_account - Switch to a different advertiser account.tiktok_ads_get_campaigns - Retrieve campaigns for the advertiser account.tiktok_ads_get_campaign_details - Get details for a specific campaign.tiktok_ads_get_adgroups - Retrieve ad groups for a campaign.tiktok_ads_get_adgroup_details - Get details for a specific ad group.tiktok_ads_get_ads - Retrieve ads by campaign, ad group, ad ID, or status.tiktok_ads_get_ad_details - Get details for a specific ad.tiktok_ads_get_campaign_performance - Get campaign-level metrics.tiktok_ads_get_adgroup_performance - Get ad group-level metrics.tiktok_ads_get_ad_performance - Get ad-level metrics.tiktok_ads_get_audience_breakdown - Break down campaign, ad group, or ad performance by audience dimension.tiktok_ads_wasted_spend_audit - Run a read-only audit for spend and clicks without conversion signal.tiktok_ads_get_custom_audiences - List custom audiences.tiktok_ads_get_advertiser_info - Get account-level advertiser details such as currency, timezone, status, industry, country, and creation time.tiktok_ads_get_location_info - Resolve TikTok targeting location IDs.tiktok_ads_get_pixel_list - List pixels attached to the advertiser account.tiktok_ads_get_pixel_event_stats - Get pixel event activity for a date range.Current MCP tools are only listed when they are wired to real OAuth, local token state, or TikTok Marketing API calls. This repository does not expose placeholder or mock tools.
| Tool | Backing implementation |
|---|---|
tiktok_ads_login | Starts TikTok OAuth and returns an authorization URL. |
tiktok_ads_complete_auth | Exchanges an OAuth code for TikTok tokens and stores them locally. |
tiktok_ads_auth_status | Checks local configuration and saved token state. |
tiktok_ads_switch_ad_account | Switches the active local advertiser account after authentication. |
tiktok_ads_get_campaigns | Calls TikTok Marketing API campaign/get/. |
tiktok_ads_get_campaign_details | Calls TikTok Marketing API campaign/get/ with campaign_ids filtering. |
tiktok_ads_get_adgroups | Calls TikTok Marketing API adgroup/get/. |
tiktok_ads_get_adgroup_details | Calls TikTok Marketing API adgroup/get/ with adgroup_ids filtering. |
tiktok_ads_get_ads | Calls TikTok Marketing API ad/get/. |
tiktok_ads_get_ad_details | Calls TikTok Marketing API ad/get/ with ad_ids filtering. |
tiktok_ads_get_campaign_performance | Calls TikTok Marketing API report/integrated/get/ at campaign level. |
tiktok_ads_get_adgroup_performance | Calls TikTok Marketing API report/integrated/get/ at ad group level. |
tiktok_ads_get_ad_performance | Calls TikTok Marketing API report/integrated/get/ at ad level. |
tiktok_ads_get_audience_breakdown | Calls TikTok Marketing API report/integrated/get/ with report_type=AUDIENCE. |
tiktok_ads_wasted_spend_audit | Read-only workflow that calls campaign/get/, adgroup/get/, and report/integrated/get/. |
tiktok_ads_get_custom_audiences | Calls TikTok Marketing API dmp/custom_audience/list/. |
tiktok_ads_get_advertiser_info | Calls TikTok Marketing API advertiser/info/ and enriches with recent spend dates from report/integrated/get/. |
tiktok_ads_get_location_info | Calls TikTok Marketing API tool/targeting/info/. |
tiktok_ads_get_pixel_list | Calls TikTok Marketing API pixel/list/. |
tiktok_ads_get_pixel_event_stats | Calls TikTok Marketing API pixel/event/stats/. |
Planned areas:
The MCP client cannot find the command you configured.
Fix:
"command": "uv" if uv is on the app's PATH."command": "/Users/yourname/.local/bin/uv"
You are running the server with system Python instead of the project's environment.
Fix your MCP config to use:
"command": "uv",
"args": ["--directory", "/path/to/tiktok-ads-mcp-server", "run", "python", "run_server.py"]
Then run:
cd /path/to/tiktok-ads-mcp-server
uv sync
Your MCP client started uv, but it did not run the command from the project directory.
Fix your MCP config to put the project directory in the uv arguments instead of relying on cwd:
"command": "uv",
"args": ["--directory", "/path/to/tiktok-ads-mcp-server", "run", "python", "run_server.py"]
The server did not receive TIKTOK_APP_ID or TIKTOK_APP_SECRET.
Fix:
env in your MCP client config.Check whether the token file exists:
ls ~/.tiktok_ads_mcp/tokens.json
If you want to restart authentication, remove the token file and run tiktok_ads_login again:
rm ~/.tiktok_ads_mcp/tokens.json
Fully quit and reopen Claude Desktop. On macOS, closing the window is not always enough.
.env, token files, App Secrets, or OAuth codes.~/.tiktok_ads_mcp/tokens.json private.Install dependencies:
uv sync
Run tests:
uv run --extra dev pytest
Run the server manually:
uv run python run_server.py
This project is licensed under the MIT License. See LICENSE for details.
For issues and questions, please create an issue in this repository.
Python
100.0%