Read-only TikTok Shop Partner API: orders, finance, products and analytics across shops.
A Model Context Protocol (MCP) server for the TikTok Shop Partner API — query orders, finance, products, analytics, and affiliate performance across multiple shops from Claude, or any other MCP client.
Built for sellers and agencies who operate TikTok Shops and want their AI assistant to answer questions like "what did the US shop sell yesterday?", "which SKUs are trending this week?", or "pull the settlement statements for June" — directly against the official API, with no browser scraping.
seller_name (partial match) to pick the shopstart_date=2026-07-01 + an IANA timezone instead of unix timestamps; the server handles conversionmcp-retry (exponential backoff + jitter on 429/5xx/network errors)shops.json, when it refreshes tokens, with owner-only (0600) permissions. For defense in depth, authorize the Partner Center app with read scopes only| Group | Tools |
|---|---|
| Shops & auth | list_shops · refresh_token · refresh_all_tokens |
| Orders | get_shop_orders · get_order_detail · search_returns · search_cancellations |
| Finance | get_shop_statements · get_shop_transactions |
| Products | get_shop_products · get_product_detail |
| Shop analytics | get_shop_performance · get_shop_performance_hourly · get_shop_products_performance · get_product_performance · get_shop_videos_performance · get_sku_performance · get_customer_service_performance |
| Video & affiliate | get_account_video_gmv · get_videos_bestselling · get_creators_bestselling · get_products_bestselling |
pip install tiktok-shop-mcp
Or from source, into a virtualenv, with the direct dependencies pinned to the versions the tests run against:
git clone https://github.com/Buer2333/tiktok-shop-mcp.git
cd tiktok-shop-mcp
python3 -m venv .venv
.venv/bin/pip install -r requirements.txt
.venv/bin/pip install --no-deps -e .
requirements.txt pins the direct runtime dependencies to exact versions,
including mcp-retry, which wraps every API call and so sees your tokens.
Transitive dependencies (pydantic, starlette, and so on) are not pinned; for a
fully reproducible install, generate a lock file with pip-compile --generate-hashes. Bump a pin only after reading what changed in that release.
Works with both mcp 1.x and 2.x. mcp 2.0 renamed FastMCP to MCPServer
(mcp.server.mcpserver) and turned mcp.server.fastmcp into a raising stub;
server.py imports via a try-v2-except-v1 shim. Tests pass on 1.28.1 and 2.1.1;
requirements.txt pins 2.1.1.
Credentials live in a JSON file outside the repo (default ~/.config/tiktok-mcp/shops.json, override with the TIKTOK_SHOP_CONFIG env var). The server never reads a shops.json from the project folder, so a copy there can't be picked up and synced or committed by accident. Keep the file owner-only:
chmod 700 ~/.config/tiktok-mcp && chmod 600 ~/.config/tiktok-mcp/shops.json
The setup scripts leave token backups (shops.json.bak.* and a recovery/ folder) next to it; delete them once your shops are working. A small shops.json.lock file also lives there; it is how the server, the cron refresher, and the setup scripts avoid writing the file at the same time, so leave it be.
[
{
"seller_name": "MY SHOP US",
"seller_base_region": "US",
"app_key": "...",
"app_secret": "...",
"access_token": "TTP_...",
"refresh_token": "TTP_...",
"shop_id": "...",
"shop_cipher": "..."
}
]
You get app_key / app_secret by creating an app on the TikTok Shop Partner Center, then authorize your shop(s) to obtain tokens. shop_id / shop_cipher are returned by the authorized-shops endpoint; the bundled probe_authorized_shops.py script can fetch them for you.
The three *_bestselling tools need a shop whose app has the Bestsellers scope. The lists are platform-wide, so one such shop is enough: set TIKTOK_SHOP_BESTSELLERS_SHOP to its seller_name (partial match OK) and the tools use it whenever seller_name is omitted. Without it they fall back to the first shop in shops.json.
claude mcp add tiktok-shop -- tiktok-shop-mcp
{
"mcpServers": {
"tiktok-shop": {
"command": "tiktok-shop-mcp",
"env": { "TIKTOK_SHOP_CONFIG": "/path/to/shops.json" }
}
}
}
tiktok_shop_mcp/
├── server.py # FastMCP app — tool definitions, date handling, error envelope
├── client.py # Signed HTTP client (HMAC-SHA256 request signing, via mcp-retry)
├── config.py # Multi-shop credential loading & resolution
└── tools/ # One module per API domain (orders, finance, products, analytics…)
All tools return structured JSON. Errors come back as {"error": true, "message": …, "suggestion": …} so the model can self-correct (e.g. refresh an expired token and retry).
This is an independent open-source project, not affiliated with or endorsed by TikTok. Use of the TikTok Shop API is subject to TikTok's own terms.
Source-derived launch command. Check the maintainer’s required arguments and credentials before running:
uvx tiktok-shop-mcpMerge this template into ~/Library/Application Support/Claude/claude_desktop_config.json. Keep existing servers. Add any arguments, credentials, and permissions required by the maintainer; this template has not been install-tested.
{
"mcpServers": {
"io-github-buer2333-tiktok-shop-mcp": {
"command": "uvx",
"args": [
"tiktok-shop-mcp"
]
}
}
}Restart Claude Desktop completely for changes to take effect. Confirm the server appears connected in the client’s tool list, then try a read-only example from its documentation.
Claude Desktop setup referenceTikTok Shop works with any MCP-compatible client. Copy the config snippet from the Configuration section above and add it to the file shown for your client, then restart the application.
~/Library/Application Support/Claude/claude_desktop_config.jsonRestart Claude Desktop completely for changes to take effect.~/.cursor/mcp.jsonRestart Cursor for changes to take effect..vscode/mcp.jsonReload VS Code window for changes to take effect.~/.codeium/windsurf/mcp_config.jsonRestart Windsurf for changes to take effect..mcp.jsonSave at the project root, then start Claude Code in that project and review the MCP server approval prompt. Keep real credentials out of shared files.