Self-hosted Douyin and TikTok data API with an identity pool, scheduler, MCP and web console
dtk presents well-structured tool definitions with consistent naming, clear descriptions, and complete input schemas. All 8 tools follow verb_noun naming conventions (parse_url, get_video, list_user_posts, etc.). Descriptions are substantive (average ~150 chars) and explain WHAT the tool does and WHEN to use it. Input schemas are properly typed with JSON Schema. However, output schemas are not documented in the visible source, parameter descriptions lack explicit constraint guidance (ranges, formats, patterns), and error handling recovery guidance is absent. Composition is strong, tools chain naturally (parse_url → get_video/get_user → list_user_posts/list_comments). All tools are READ_ONLY, reducing security risk but also reducing mutation capability.
Fetch the result of a long-running task by its ID.
Fetch metadata for a user by ID.
Fetch metadata and comments for a post by ID.
List comments on a post.
List posts by a user.
Query historical metrics from the pool.
Fetch whatever a Douyin or TikTok link points at. The entry point to use when you have a link rather than an id: it works out the platform and the resource type itself and returns the normalized post or author. Short links are expanded server-side.
Output schemas not documented in visible source. Tools return data structures but LLMs cannot predict field names, types, or availability. Forces LLMs to guess what fields to extract for chaining.
Parameter descriptions lack explicit constraints. 'endpoint' parameter described as 'Optional: which endpoint to use' with no guidance on format, valid values, or behavior when omitted. 'cursor' described as 'opaque' but no hint about type (string?) or how to detect end-of-results. 'count' has no range (is 1-100 valid? 1-1000?). LLMs will guess.
Error handling and recovery guidance absent. No indication what errors are retryable, what user action is needed, or how to recover from common failures (endpoint down, rate limit, invalid cursor). LLMs will fail to self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 72 | 2026-07-28+ | v2 |
Query the health of the endpoint pool.
Pagination and result limits not described. list_user_posts and list_comments accept 'count' and 'cursor' but no documentation of default page size, max results per page, or total result count in response. LLMs may request too many or too few items, or loop indefinitely.
Platform enum limited to ['douyin', 'tiktok']. Parameter names and descriptions do not clarify case sensitivity, string format, or what to do if user provides variant like 'Douyin' or 'tiktok.com'. LLMs may hallucinate invalid values.
Task handling incomplete. get_task_result accepts a task_id but no documentation of how task_id is generated, what states tasks can be in, or how to detect completion. If other tools return 'task_id' when result not immediately available, that contract is not visible.