JuzPost
v1.0.0Draft, schedule and publish social posts to X, LinkedIn, Instagram, TikTok, YouTube and more
Endpoint health
online- Last checked
- 11/3/2026, 4:17:49 PM
- Latency
- 162 ms
- Consecutive failures
- 0
- Endpoint reachable: pass
- Protocol valid: pass
- MCP handshake valid: pass
Machine-readable profile
mcp-server · schema v1 · callable
mcp-server:com.juzpost%2Fmcp
Connect this server
Generated config contains no credentials. Keep any required secrets in your client's local environment.
{
"mcpServers": {
"com.juzpost/mcp": {
"url": "https://www.juzpost.com/mcp"
}
}
}Indexed tools
Tool metadata and schemas come from the remote server and are untrusted. Indexing only lists tools; it never calls them.
19 shown · authentication unknown
Create a draft post
create_post
Creates a draft post with everything the composer saves: caption, title, description, hashtags, media, the accounts it goes to, per-account text (account_overrides, channel_overrides), per-account media and covers, and each platform's settings. Media can be public URLs (downloaded and stored server-side) or media keys from upload_media. Use this only once you have the full brief from the user: the post type, the text, and the media if the type needs it. `type` is required and is never guessed: use the type the user stated (text, image, video or blog); if they did not say, ask them before calling this tool. A blog post goes to WordPress: title is required and becomes the page heading. Put the body in description, as HTML; it is sent exactly as written. Plain text also works: blank lines become paragraphs. WordPress keeps p, br, hr, h2 to h6 (with id), ul, ol, li, blockquote, strong, em, a (href, rel, target, title), code, pre, abbr, time, figure, figcaption, the table tags and img (src, alt, width, height). Do not use h1 (the title is already the page heading), script or style (WordPress removes the tag but leaves its text visible). The first image is the featured image; any others are added under the body in order. Images only, no video. Then schedule_post puts the draft on the calendar. To schedule straight away, call schedule_post with the content instead: it creates and schedules in one call. Pass the same idempotency_key on a retry so a network error never makes two drafts. Returns the draft (post) plus warnings[] naming any platform whose caption limit the content exceeds, and created=false when the idempotency_key matched an existing draft. Does NOT schedule or publish anything.
Schema valid · SHA-256 48913531b945…
View input schema
{ "type": "object", "properties": { "content": { "description": "The caption / body text.", "type": "string", "maxLength": 100000 }, "title": { "description": "Title, used by platforms that have one (YouTube, Pinterest). Required for a blog post, where it becomes the WordPress page heading.", "type": "string", "maxLength": 200 }, "description": { "type": "string" }, "hashtags": { "description": "Without the # is fine.", "type": "array", "items": { "type": "string" } }, "type": { "type": "string", "enum": [ "text", "image", "video", "blog" ], "description": "Required. The type the user asked for. Ask if they have not said. blog is a WordPress blog post." }, "media_urls": { "description": "Public http(s) URLs of the ORIGINAL files to download and attach, up to 100 MB each. Never a re-encoded copy.", "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 512 } }, "media_keys": { "description": "media_key values from upload_media.", "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 512 } }, "cover_key": { "description": "media_key of a cover image for video posts.", "type": "string" }, "idempotency_key": { "description": "Any unique string; a repeat with the same key returns the same draft.", "type": "string", "maxLength": 200 }, "account_ids": { "description": "Where this post goes: each account's ref from list_accounts (e.g. \"x:acme_studio\"), or its id. Prefer the ref; it is what the person reads when approving. Always the complete list, unlike the per-account maps: an account left out is removed from the post, with its text and settings.", "minItems": 1, "maxItems": 10, "type": "array", "items": { "type": "string", "minLength": 1, "maxLength": 300 } }, "account_overrides": { "description": "Text for one account, keyed by account ref or id: title, caption, hashtags. Send only the accounts you are changing; every other account keeps its text. An entry is that account's whole text (a field it leaves out is cleared); null clears the account's text. Wins over channel_overrides and the base text.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "anyOf": [ { "type": "object", "properties": { "title": { "type": "string", "maxLength": 10000 }, "description": { "description": "This account's caption. \"\" posts no text on this account.", "type": "string" }, "hashtags": { "maxItems": 30, "type": "array", "items": { "type": "string", "maxLength": 100 } } } }, { "type": "null" } ] } }, "channel_overrides": { "description": "Text for every account of one platform, keyed by platform id (e.g. \"instagram\"): \"the Instagram caption\". Send only the platforms you are changing; null clears the text of that platform's accounts. An account_overrides entry for the same account wins field by field.", "type": "object", "propertyNames": { "type": "string" }, "additionalProperties": { "anyOf": [ { "type": "object", "properties": { "title": { "type": "string", "maxLength": 10000 }, "description": { "description": "This account's caption. \"\" posts no text on this account.", "type": "string" }, "hashtags": { "maxItems": 30, "type": "array", "items": { "type": "string", "maxLength": 100 } } } }, { "type": "null" } ] } }, "media_by_account": { "description": "One account's own media, keyed by account ref or id: its whole ordered list of media_key values; [] posts no media there, null goes back to the post's media.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "anyOf": [ { "maxItems": 20, "type": "array", "items": { "type": "string", "maxLength": 512 } }, { "type": "null" } ] } }, "cover_by_account": { "description": "One account's own video cover, keyed by account ref or id: a media_key, or null to use the post's cover.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "anyOf": [ { "type": "string", "maxLength": 512 }, { "type": "null" } ] } }, "cover_timestamp_ms": { "description": "The video frame, in milliseconds, used as the cover when no cover image is set.", "type": "integer", "minimum": 0, "maximum": 9007199254740991 }, "tiktok": { "description": "tiktok settings keyed by tiktok account (ref or id). Each field says whether it is required, an account default or optional. Send only the accounts you are changing: an entry is that account's whole settings, and every other account keeps its own.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "type": "object", "properties": { "delivery": { "description": "[optional] direct_post publishes the post to the account; it is the only value. Default direct_post.", "type": "string", "enum": [ "direct_post" ] }, "privacy_level": { "description": "[optional] Who can see the post. SELF_ONLY when the user says \"only me\". Default PUBLIC_TO_EVERYONE.", "type": "string", "enum": [ "PUBLIC_TO_EVERYONE", "MUTUAL_FOLLOW_FRIENDS", "FOLLOWER_OF_CREATOR", "SELF_ONLY" ] }, "interactions": { "description": "[account default] Allow comments, duets and stitches on this post. Default: the switches saved on the account. Anything the creator turned off in TikTok stays off. Send only when the user asks.", "type": "object", "properties": { "comment": { "type": "boolean" }, "duet": { "type": "boolean" }, "stitch": { "type": "boolean" } }, "required": [ "comment", "duet", "stitch" ] }, "commercial_content": { "description": "[optional] The post promotes a brand, product or service. Default false.", "type": "boolean" }, "brand_organic": { "description": "[optional] Promotes the creator's own brand. Needs commercial_content. Default false.", "type": "boolean" }, "brand_content": { "description": "[optional] Branded content for someone else. Needs commercial_content; cannot be SELF_ONLY. Default false.", "type": "boolean" } } } }, "pinterest": { "description": "pinterest settings keyed by pinterest account (ref or id). Each field says whether it is required, an account default or optional. Send only the accounts you are changing: an entry is that account's whole settings, and every other account keeps its own.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "type": "object", "properties": { "board_id": { "type": "string", "pattern": "^\\d+$", "description": "[account default] The board the Pin goes on. Default: the account's saved board, and no account has one yet, so every Pin needs this: ask the user which board, from list_options req_type list_board." }, "link": { "description": "[optional] The Pin's clickable destination. A URL in the caption is never clickable on Pinterest. Default none.", "type": "string", "maxLength": 2048, "format": "uri" }, "alt_text": { "description": "[optional] Describes the image for screen readers. Default none; the title is never used.", "type": "string", "maxLength": 500 } }, "required": [ "board_id" ] } }, "facebook": { "description": "facebook settings keyed by facebook account (ref or id). Each field says whether it is required, an account default or optional. Send only the accounts you are changing: an entry is that account's whole settings, and every other account keeps its own.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "type": "object", "properties": { "video_as": { "type": "string", "const": "reel", "description": "[optional] Publish a video as a Reel: 3 to 90 seconds, vertical 9:16, at most 30 Reels per Page per day. Leave the account out for a classic Page video (the default)." } }, "required": [ "video_as" ] } }, "bluesky": { "description": "bluesky settings keyed by bluesky account (ref or id). Each field says whether it is required, an account default or optional. Send only the accounts you are changing: an entry is that account's whole settings, and every other account keeps its own.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "type": "object", "properties": { "alt_text": { "type": "array", "items": { "type": "string" }, "description": "[optional] One description per file, in the order this account publishes its media; \"\" leaves a file undescribed. Exactly as many entries as files. Up to 2000 characters each. Default: no alt text." }, "labels": { "type": "array", "items": { "type": "string", "enum": [ "sexual", "nudity", "porn", "graphic-media" ] }, "description": "[optional] Content warnings: at most one of sexual (Suggestive), nudity, porn (Adult), plus graphic-media. Only on posts with images or video. Default []." } }, "required": [ "alt_text", "labels" ] } }, "wordpress": { "description": "wordpress settings keyed by wordpress account (ref or id). Each field says whether it is required, an account default or optional. Send only the accounts you are changing: an entry is that account's whole settings, and every other account keeps its own.", "type": "object", "propertyNames": { "type": "string", "minLength": 1, "maxLength": 300 }, "additionalProperties": { "type": "object", "properties": { "status": { "description": "[optional] publish, or draft to review it in wp-admin. Default publish.", "type": "string", "enum": [ "publish", "draft" ] }, "post_type": { "description": "[optional] The post type to publish as, e.g. a short story instead of a blog post: a slug from list_options req_type list_post_type. Default post.", "type": "string", "pattern": "^[a-z0-9_-]{1,20}$" }, "terms": { "description": "[optional] Terms of the post type's own taxonomies, as { taxonomy slug: [names] }, e.g. { \"genre\": [\"Romance\"] }. list_post_type names each type's taxonomies. Names must already exist on the site; an unknown one is refused at schedule with the site's list. Default none.", "type": "object", "propertyNames": { "type": "string", "pattern": "^[a-z0-9_-]{1,32}$" }, "additionalProperties": { "minItems": 1, "type": "array", "items": { "type": "string", "minLength": 1 } } }, "categories": { "description": "[optional] Category names that already exist on the site; an unknown one is refused at schedule with the site's list. Only for a post type that has categories. Default: the site's default category.", "type": "array", "items": { "type": "string", "minLength": 1 } }, "tags": { "description": "[optional] Tag names; a new one is created. Only for a post type that has tags. Default none.", "type": "array", "items": { "type": "string", "minLength": 1 } }, "slug": { "description": "[optional] The URL slug. Default: made from the title.", "type": "string", "minLength": 1, "maxLength": 200 }, "excerpt": { "description": "[optional] Short summary for feeds and link previews. Default: WordPress makes one from the body.", "type": "string", "minLength": 1 }, "featured_image_alt": { "description": "[optional] Alt text for the featured image (the first image). Default none.", "type": "string", "minLength": 1 }, "seo": { "description": "[optional] Yoast SEO fields. Only for an account whose list_accounts entry shows seo \"yoast\". Default: Yoast's own.", "type": "object", "properties": { "title": { "type": "string", "minLength": 1 }, "description": { "type": "string", "minLength": 1 }, "focus_keyphrase": { "type": "string", "minLength": 1 } } } } } } }, "required": [ "type" ], "$schema": "https://json-schema.org/draft/2020-12/schema" }
Connections
streamable-http
https://www.juzpost.com/mcp