threads-mcp
by Maz1n0-zzz
README.md
# Threads MCP Server
MCP đăng & quản lý nội dung Threads qua Meta Threads API. Chạy được STDIO (npx từ GitHub, dùng local) hoặc HTTP (deploy remote cho Evose). Ai cũng dùng được — chỉ điền biến môi trường, không sửa code.
**9 tools:** get_profile, post_text, post_image, post_video, post_carousel, list_threads, get_thread, get_replies, reply.
> Đăng theo quy trình container (tạo → chờ xử lý nếu có video → publish).
Mọi tool nhận thêm hai tham số tuỳ chọn `threads_user_id` và `access_token`, nên một bản chạy phục vụ được nhiều tài khoản. Không truyền thì server dùng biến môi trường làm giá trị mặc định.
Truyền `threads_user_id` thì phải truyền cả `access_token`, và ngược lại. Truyền nửa cặp thì server báo thiếu cấu hình chứ **không** lặng lẽ dùng credential mặc định. Một ô để trống từng làm bài của tài khoản này đăng lên tài khoản khác mà vẫn báo thành công.
Mọi tham số id chỉ nhận chữ số, chữ cái và dấu gạch dưới, tối đa 64 ký tự. Id chứa `/`, `?` hay `&` bị từ chối, vì nó đổi được endpoint Graph API.
## Biến môi trường
| Biến | Bắt buộc | Mô tả |
|------|:--:|------|
| THREADS_USER_ID | ✅ | ID tài khoản Threads |
| THREADS_ACCESS_TOKEN | ✅ | Access Token (quyền threads_content_publish) |
| THREADS_GRAPH_VERSION | ❌ | Mặc định v1.0 |
| MCP_TRANSPORT | ❌ | `stdio` (mặc định) hoặc `http` (bắt buộc để dùng remote qua Evose) |
| MCP_AUTH_TOKEN | Bắt buộc khi `MCP_TRANSPORT=http` | Secret dùng cho header `Authorization: Bearer <token>` |
| HOST | ❌ | Địa chỉ bind khi chạy HTTP, mặc định `127.0.0.1` |
| PORT | ❌ | Cổng lắng nghe khi chạy HTTP, mặc định `8790` |
| MCP_PUBLIC_HOST | ❌ | Hostname công khai (qua reverse proxy) để chặn DNS rebinding |
Hai biến bắt buộc ở trên chỉ bắt buộc khi gọi tool mà không truyền `threads_user_id` và `access_token`. Server không thoát khi thiếu chúng, để client vẫn liệt kê được tool.
## Lấy token
1. developers.facebook.com → App → thêm sản phẩm **Threads API**.
2. Cấp quyền: `threads_basic`, `threads_content_publish`.
3. Qua luồng OAuth Threads → lấy access token + THREADS_USER_ID.
4. Host API: `graph.threads.net` (khác Facebook/Instagram).
## Import vào Evose (STDIO / npx)
```json
{
"mcpServers": {
"threads": {
"command": "npx",
"args": ["-y", "github:<user>/threads-mcp"],
"env": {
"THREADS_USER_ID": "...",
"THREADS_ACCESS_TOKEN": "..."
}
}
}
}
```
Thay `<user>` bằng GitHub username. Execution Timeout để 120s.
## Import vào Evose (HTTP remote)
Deploy server ở chế độ `MCP_TRANSPORT=http` (VPS/Railway/Render), sau đó khai báo trong Evose dạng Streamable HTTP:
```json
{
"mcpServers": {
"threads": {
"url": "https://<domain-cua-server>/mcp",
"type": "streamable-http",
"headers": { "Authorization": "Bearer <MCP_AUTH_TOKEN>" }
}
}
}
```
## Ghi chú
- Ảnh/video đăng từ URL công khai. License MIT.
TDQS
B3/5.0
Scored across 9 tools
Disambiguation5/5
Each tool targets a distinct action: posting types (text, image, video, carousel), retrieval (list, get), and interaction (reply, get_replies, get_profile). No overlap in functionality.
Naming Consistency5/5
All tools follow a clear verb_noun pattern (e.g., post_text, get_thread, list_threads) with consistent snake_case. No deviations or mixed conventions.
Tool Count5/5
9 tools cover key Threads operations (posting multiple formats, reading, replying) without bloat or deficiency. Well-scoped for a social media API.
Completeness4/5
Core workflows are complete: create (text, image, video, carousel), read (list, get, get_replies, profile), and reply. Minor gaps: no delete or update operations, but these are not essential for basic usage.
Maintenance
ActivityMaintained
ResponsivenessOutdated data