Check Draft
check_draftRuns Mark's content checks on draft text without saving it (six on every channel, two more on a competitor_page, and one more on a website post with a target keyword): exclusion (phrases this workspace blocks or warns on), char_limit, required_meta, ai_fluff (generic AI-sounding words), unsourced_number (percentages, money and multipliers no active claim states), and placeholder (a marker left for the writer, such as [needs source], [TBD] or a bare TODO, ignored inside code, link targets and URLs; it fails). A competitor_page also gets table (a markdown table; it fails, use headings and lists) and open_placeholder (a [confirm: …] fact left to confirm; it fails), and its unsourced_number fails instead of warning. A blog, faq or competitor_page with meta.seo.keyword set also gets keyword (whether seo.title and the body's first paragraph use the target keyword, plurals counted; it only warns, naming each place it is missing). Each result is pass, warn or fail with the matched text, field and position; exclusion matches carry the rule's reason. A fail is what submit_post refuses on a draft; warnings never block. For an X thread, pass assetIds to check each post's media too. On a blog, faq or competitor_page whose post type a CMS maps, required_meta also checks language (pass the post's language): it fails when the CMS collection stores pages per language (get_website_cms localized) and warns otherwise. Uses this workspace's active exclusions and claims. Writes nothing. Related: save_post, get_channel_rules, get_brand_context, list_claims, get_website_cms.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"channel": "<channel>",
"body": "<body>"
},
"name": "check_draft"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| body | Yes | Draft body / caption. | |
| meta | No | Channel-specific fields from get_channel_rules. | |
| channel | Yes | Channel id such as linkedin or blog. | |
| assetIds | No | X threads: the asset ids save_post would get, so required_meta checks each post's media (4 images, or 1 video, or 1 GIF) with meta.threadMedia. | |
| language | No | Website posts: the post's language, a BCP 47 code such as de or de-CH. Omitted or null reads as unset, which fails required_meta when the CMS collection stores pages per language. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| checks | Yes | Mark's content checks on the saved content: exclusion, char_limit, required_meta, ai_fluff, unsourced_number, placeholder, on a competitor_page also table and open_placeholder, and on a website post with meta.seo.keyword also keyword. On a draft, a fail stops submit_post; warn never does. |