tiktok-uploader-mcp
Prepares photo carousel bundles for manual upload to the TikTok mobile app, including image validation, caption formatting, and manifest generation.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@tiktok-uploader-mcp Create a bundle from ./images with caption 'Hello TikTok!' and hashtags viral"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
tiktok-uploader-mcp
MCP server + CLI để đóng gói (bundle) TikTok photo carousel uploads. Chuẩn bị folder ảnh + caption + manifest cho upload thủ công qua app mobile.
Tại sao cần repo này?
TikTok chỉ cho upload photo carousel (slide ảnh) qua app mobile, không qua
web PC (đã verify: TikTok VN redirect tiktok.com/creator-center/upload →
tiktokstudio/upload chỉ có "Select Video", không có Photo mode).
Repo này giải quyết bằng cách đóng gói sẵn ảnh + caption + manifest + README hướng dẫn thành 1 bundle, bạn copy vào điện thoại rồi upload qua app TikTok (nhanh, ~2 phút/post).
Related MCP server: Instagram Carousel MCP
Tính năng
✅ Bundle folder ảnh + caption thành package phone-ready.
✅ 4 MCP tools tích hợp Antigravity / Claude Desktop / Cursor.
✅ CLI wrappers cho agent auto-approve (
.cmdon Windows).✅ caption.txt paste-ready, manifest.json có SHA-256 hash.
✅ README.txt hướng dẫn upload từng bước (tiếng Việt).
✅ ZIP optional để dễ transfer sang điện thoại.
✅ Cross-platform Windows/Linux/macOS (không cần Playwright browser).
✅ Error playbook E1-E5 với retry protocol.
✅ 22 unit tests validation + end-to-end.
Cài đặt
Yêu cầu
Python 3.11+
pip
Install
git clone https://github.com/leanhduy-iuh/tiktok-uploader-mcp.git
cd tiktok-uploader-mcp
pip install -e .Sử dụng
CLI (qua wrapper)
# Tạo bundle
.\wrappers\run_bundle.cmd `
--images-dir "C:\path\to\slides" `
--caption "Hook...
Body text.
CTA." `
--hashtags sinhVienIT thuthuatvat `
--series-slug office-real-vs-fake `
--part-slug phan-1
# Liệt kê bundle đã tạo
.\wrappers\run_list.cmdMCP server
Thêm vào config MCP client của bạn:
{
"mcpServers": {
"tiktok-uploader": {
"command": "uv",
"args": [
"tool", "run", "--from",
"git+https://github.com/leanhduy-iuh/tiktok-uploader-mcp.git",
"tiktok-uploader-mcp"
]
}
}
}4 tools:
tiktok_create_bundle(images_dir, caption, hashtags=[], series_slug, part_slug, make_zip=True)tiktok_list_bundles()tiktok_get_bundle(bundle_id)tiktok_delete_bundle(bundle_id)
Output structure
bundles/
├── <series>_<part>_<timestamp>/
│ ├── images/
│ │ ├── 01.png
│ │ ├── 02.png
│ │ └── ...
│ ├── caption.txt ← Paste vào TikTok
│ ├── manifest.json ← Metadata (hashes, timestamps)
│ └── README.txt ← Hướng dẫn upload từng bước
└── <series>_<part>_<timestamp>.zipUpload lên TikTok (trên điện thoại)
Sau khi có bundle:
Copy bundle folder (hoặc ZIP) vào điện thoại qua:
Google Drive (recommend — đã sync sẵn với
pdf_to_images.py).USB cable.
AirDrop / Quick Share.
Giải nén ZIP nếu cần.
Mở app TikTok → bấm [+] → [Tải lên] → tab [Ảnh].
Chọn tất cả ảnh trong
images/(theo thứ tự 01, 02, ...).Bấm [Tiếp] → dán nội dung
caption.txtvào ô [Chú thích].Bấm [Đăng].
Chi tiết trong file README.txt đi kèm mỗi bundle.
Architecture
┌──────────────────────────────────────────────────────────┐
│ MCP Client │
│ (Antigravity / Claude / Cursor) │
└──────────────────────┬───────────────────────────────────┘
│ stdio JSON-RPC
▼
┌──────────────────────────────────────────────────────────┐
│ tiktok-uploader-mcp (FastMCP) │
│ │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌─────────┐ │
│ │ create_ │ │ list_ │ │ get_ │ │ delete_ │ │
│ │ bundle │ │ bundles │ │ bundle │ │ bundle │ │
│ └────┬─────┘ └────┬─────┘ └────┬─────┘ └────┬────┘ │
│ │ │ │ │ │
│ ▼ ▼ ▼ ▼ │
│ ┌──────────────────────────────────────────────────┐ │
│ │ bundler.py │ │
│ │ ├── collect_images() validate_caption() │ │
│ │ ├── build_full_caption() make_bundle_id() │ │
│ │ ├── create_bundle() list_bundles() │ │
│ │ ├── get_bundle() delete_bundle() │ │
│ │ └── BundleManifest dataclass │ │
│ └──────────────────────────────────────────────────┘ │
│ │ │
│ ▼ │
│ bundles/<bundle_id>/ │
│ ├── images/ caption.txt │
│ ├── manifest.json README.txt │
│ └── <bundle_id>.zip │
└──────────────────────────────────────────────────────────┘
│ Copy to phone
▼
TikTok mobile appTesting
pip install -e ".[dev]"
pytest tests/22 unit tests cover:
Caption validation (empty, too long, hashtag count, strip leading #).
Image collection (mixed exts, sorted, unsupported, count limits).
Bundle ID generation (special chars, slug formatting).
End-to-end bundle creation (with/without ZIP, manifest correctness).
List / get / delete lifecycle.
Roadmap
Auto-copy bundle to Google Drive folder (giảm manual step).
Generate QR code linking to bundle (scan từ điện thoại).
Caption templates (per audience type: student/office/dev).
Multi-account support (different bundle dirs per TikTok account).
Upload tracking (mark bundle as "posted" + post URL).
Why not auto-upload?
Đã thử 3 hướng trước khi pivot sang bundle workflow:
Playwright qua web PC: TikTok VN redirect tới TikTok Studio chỉ có "Select Video", không có Photo mode. (Đã verify với 6 URL khác nhau.)
TikTok Content Posting API: Yêu cầu đăng ký TikTok for Developers + review process dài. Photo carousel API chưa stable.
ADB automation trên app Android: Khả năng cao nhưng cần thiết bị test Android + risk break khi TikTok update app.
Bundle workflow đơn giản, ổn định, không phụ thuộc TikTok UI changes — chỉ là tổ chức file.
FAQ
Q: Tại sao không tự upload luôn?
A: TikTok VN không hỗ trợ photo carousel upload qua web. Bundle là cách tiếp cận务实 — chuẩn bị sẵn mọi thứ, user chỉ paste + click.
Q: Có thể tự động copy sang Google Drive không?
A: Có, xem roadmap. Hiện tại copy thủ công (nhưng nhanh — chỉ 1 thao tác).
Q: Bundle lưu ở đâu?
A: Mặc định bundles/ ở repo root. Có thể override qua --bundles-dir.
Q: Có support Linux/macOS không?
A: Code Python thuần, không phụ thuộc Playwright nên chạy được. Wrapper .cmd
chỉ cho Windows — PR .sh cho Linux/macOS welcome.
Contributing
PR welcome. Branch main = stable, branch dev = WIP.
License
MIT © Duy Le
Available Tools
4 toolstiktok_create_bundleA
Bundle a folder of images + caption for TikTok mobile upload.
Photo carousel can only be uploaded from TikTok mobile app (not web). This tool prepares a folder + ZIP with:
images/ (sorted 01.png, 02.png, ...)
caption.txt (ready to paste into TikTok)
manifest.json (metadata)
README.txt (human upload instructions)
User then copies the ZIP/folder to their phone and uploads manually.
Args: images_dir: Absolute path to folder with 2-35 PNG/JPG images. caption: Caption text (1-2200 chars). Hashtags can be inline or via arg. hashtags: Optional list of hashtags without '#'. Max 30. series_slug: Series identifier for bundle naming (lowercase, no spaces). part_slug: Part identifier (optional). bundles_dir: Override default bundles output directory. make_zip: Also create <bundle_id>.zip alongside the folder.
Returns: JSON with {"ok": true, "bundle_id": "...", "zip_path": "...", ...}.
Inputs: caption (required), images_dir (required), hashtags, make_zip, +3 more. Returns: result
tiktok_delete_bundleA
Delete a bundle folder + its ZIP file.
Args: bundle_id: Bundle identifier. bundles_dir: Override default bundles directory.
Returns: JSON with list of removed paths.
Inputs: bundle_id (required), bundles_dir. Returns: result
tiktok_get_bundleA
Get full manifest for a bundle.
Args: bundle_id: Bundle identifier (from list_bundles). bundles_dir: Override default bundles directory.
Returns: JSON manifest with image hashes, caption, timestamps, etc.
Inputs: bundle_id (required), bundles_dir. Returns: result
tiktok_list_bundlesA
List all prepared bundles with summary metadata.
Args: bundles_dir: Override default bundles directory.
Returns: JSON array of bundle summaries (id, image_count, created_at, has_zip, ...).
Inputs: bundles_dir. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 4 tools
Each tool has a clearly distinct purpose: create, delete, get, and list bundles. No overlap exists, and the descriptions make it easy to differentiate.
All tools follow the consistent pattern tiktok_verb_noun (e.g., tiktok_create_bundle, tiktok_list_bundles). Naming is predictable and uniform.
Four tools is well-scoped for the domain of bundle management. Each tool serves a necessary CRUD-like function without being excessive or too sparse.
The tool set covers all essential operations for bundle lifecycle: create, read (get/list), and delete. No obvious gaps given the manual upload workflow.
Maintenance
Related MCP Connectors
MCP server for QPost — lets AI agents publish video and image posts to YouTube, TikTok, Instagram.
Hosted TikTok Pages MCP server, with each action switched on or off per account.
TikTok Ads MCP server: run TikTok campaigns, ad groups, ads and reports from AI.
MCP server for Wan AI video generation
Related MCP Servers
- AlicenseAqualityDmaintenanceMCP server that turns articles, transcripts, and markdown into LinkedIn carousel PDFs, Instagram PNGs, and Threads PNGs. Content in, slides out. No web UI, no cloud service.53MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that designs multi-slide Instagram carousels as SVG, provides a live swipeable preview, and exports to PNG. Supports multiple templates, themes, and sizes.1-
- FlicenseBqualityDmaintenanceMCP server for TikTok that enables searching videos, users, hashtags, and fetching trending content, user profiles, and video details via official API or public scraping.8-
- FlicenseNot gradedqualityDmaintenanceMCP server for automatic Instagram publishing — single image, carousel and Reels — via the official Instagram Graph API.7 npm-