Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

JuzPost

REMOTE · WWW.JUZPOST.COM

Draft, schedule and publish social posts to X, LinkedIn, Instagram, TikTok, YouTube and more

Available components

+3 this week 86 Trust /100

Last scanned (3 hours ago)

Scores higher than 93% of remote servers

Reachable. Last reached 5 Nov 2026.

Category Marketing and SEO

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score → Why this is hard to score →

Endpoint Security92
Transport & Reachability100
Schema Quality & AI Usability74
  • 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 6928 tokens (~301/item across 23 items; 19 tools + 4 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management60
  • Stability observed for 18 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage96
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 87% of tool parameters carry a description.Partial
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.Pass
  • An AI judge read all 20 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
  • Supports UI / widget rendering.Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 4 Nov 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.

  • 3 Nov 26 0
    • Tool “create_post” rewrote its description, which is the text the model reads security
    • Tool “get_context” rewrote its description, which is the text the model reads security
    • Tool “schedule_post” rewrote its description, which is the text the model reads security
    • Tool “update_post” rewrote its description, which is the text the model reads security
    • “create_post” reworded the description of “type” cosmetic
    • “schedule_post” reworded the description of “publish_at” cosmetic
    • “schedule_post” reworded the description of “publish_at_overrides” cosmetic
    • “schedule_post” reworded the description of “type” cosmetic
    • “update_post” reworded the description of “publish_at” cosmetic
    • “update_post” reworded the description of “publish_at_overrides” cosmetic
  • 2 Nov 26 +1
    • Tool “create_post” rewrote its description, which is the text the model reads security
    • Tool “create_upload_url” rewrote its description, which is the text the model reads security
    • Tool “delete_post” rewrote its description, which is the text the model reads security
    • Tool “list_posts” rewrote its description, which is the text the model reads security
    • Tool “schedule_post” rewrote its description, which is the text the model reads security
    • Tool “update_post” rewrote its description, which is the text the model reads security
    • Tool “upload_file” rewrote its description, which is the text the model reads security
    • Tool “upload_media” rewrote its description, which is the text the model reads security
    • Schema quality: good → excellent functional
    • “schedule_post” reworded the description of “post_id” cosmetic
    • “schedule_post” reworded the description of “publish_now” cosmetic
    • “upload_media” reworded the description of “content_type” cosmetic
    • “upload_media” reworded the description of “filename” cosmetic
    • Tool “delete_post” changed its title: Delete a draft post → Delete a post cosmetic
  • 31 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.

  • 29 Oct 26 +1
    • Tool “get_platform_limits” rewrote its description, which is the text the model reads security
  • 26 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

  • 24 Oct 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 17 to 20. That category is still filling its 30-day observation window: 5 days of observed history at the previous scan, 6 at this one. The score rises as the window fills, whether or not the server changes.

  • 23 Oct 26 0
    • Tool “get_context” rewrote its description, which is the text the model reads security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Probed https://www.juzpost.com/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=juzpost.com CN=WE1,O=Google Trust Services,C=US 6 Oct 2026 4 Jan 2027 ECDSA 256 ECDSA-SHA256 5a2000f72029ef84134b3dda86e861d3
SANs: juzpost.com, *.juzpost.com
CN=WE1,O=Google Trust Services,C=US (CA) CN=GTS Root R4,O=Google Trust Services LLC,C=US 13 Dec 2023 20 Feb 2029 ECDSA 256 ECDSA-SHA384 7ff31977972c224a76155d13b6d685e3
CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE 15 Nov 2023 28 Jan 2028 ECDSA 384 SHA256-RSA 7fe530bf331343bedd821610493d8a1b

Background: What to check on a remote MCP endpoint →

DNSSEC insecure

Validation of www.juzpost.com. — Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
com. present 19718 13 Verified
juzpost.com. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="Sign in to JuzPost to use this tool.", resource_metadata="https://www.juzpost.com/.well-known/oauth-protected-resource/mcp"

Bearer error="invalid_token", error_description="Sign in to JuzPost to use this tool.", resource_metadata="https://www.juzpost.com/.well-known/oauth-protected-resource/mcp"
Header Value
content-security-policy frame-ancestors 'none'
x-content-type-options nosniff
x-frame-options DENY
referrer-policy strict-origin-when-cross-origin

Protected resource metadata

Document https://www.juzpost.com/.well-known/oauth-protected-resource/mcp
Retrieved Yes
Resource https://www.juzpost.com/mcp
Authorisation server https://www.juzpost.com

Background: How OAuth 2.1 works in the 2026 MCP spec →

Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://www.juzpost.com/mcp Verified 200
http (plaintext) http://www.juzpost.com/mcp HTTPS enforced 301 https://www.juzpost.com/mcp
MCP tools · 19 exposed · ~6,828 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
create_post ~1,250

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. Facebook text post with a link: also set platform_settings.facebook.link (see that field) so Facebook shows a preview card. 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, story or blog); if they did not say, ask them before calling this tool. A story is an Instagram or Facebook Story: one image or one video, no caption on Instagram. 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.

NameTypeReqDescription
account_idsarray–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-acc…
account_overridesobject–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…
blueskyobject–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 whol…
channel_overridesobject–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. A…
contentstring–The caption / body text.
cover_by_accountobject–One account's own video cover, keyed by account ref or id: a media_key, or null to use the post's cover.
cover_keystring–media_key of a cover image for video posts.
cover_timestamp_msinteger–The video frame, in milliseconds, used as the cover when no cover image is set.
descriptionstring––
facebookobject–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 wh…
hashtagsarray–Without the # is fine.
idempotency_keystring–Any unique string; a repeat with the same key returns the same draft.
media_by_accountobject–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.
media_keysarray–media_key values from upload_media.
media_urlsarray–Public http(s) URLs of the ORIGINAL files to download and attach, up to 100 MB each. Never a re-encoded copy.
pinterestobject–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…
tiktokobject–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…
titlestring–Title, used by platforms that have one (YouTube, Pinterest). Required for a blog post, where it becomes the WordPress page heading.
typestringyesRequired. The type the user asked for. Ask if they have not said. story is an Instagram or Facebook Story with one media. blog is a WordPress blog post.
wordpressobject–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…
NameTypeReqDescription
createdbooleanyes–
postobjectyes–
warningsarrayyes–

No examples provided.

create_upload_url ~326

Reserves storage for one file and returns a presigned upload_url (valid 1 day) plus the media_key it will be stored under. Images up to 20 MB, videos up to 1 GB. Use this in Claude Code, a terminal or a script, for a local file or any video: PUT the ORIGINAL file bytes, unmodified, to upload_url with the returned content-type header and exactly `bytes` bytes, then pass media_key to create_post or update_post. Never re-encode, resize or compress the file first. In a chat app that shows cards (Claude.ai, Claude Desktop, Claude mobile) call upload_file instead: the user picks the file and nothing has to be allowed. The PUT goes to the storage host in upload_url (<account>.r2.cloudflarestorage.com). A code sandbox that blocks it needs that host allowed: On Claude.ai a Pro or Max user allows it in Settings → Capabilities; on a Team or Enterprise plan the organization owner adds it in Admin settings → Capabilities → Additional allowed domains. Returns upload_url, media_key, headers and expires_in. Does NOT upload anything by itself, and does NOT accept a URL or base64; use upload_media for those.

NameTypeReqDescription
bytesintegeryesExact size of the file in bytes. The URL only accepts a body of this length.
content_typestringyesMIME type of the file, e.g. video/mp4 or image/png.
filenamestringyesThe file name with its extension, e.g. clip.mp4.
NameTypeReqDescription
expires_innumberyes–
headersobjectyes–
media_keystringyes–
upload_urlstringyes–

No examples provided.

delete_post ~131

Permanently deletes a post in any status (draft, scheduled, failed or published) from JuzPost, with its per-account rows. A scheduled post's timer is cancelled first, so it never publishes; a published post's analytics in JuzPost go with it. Use this only when the user explicitly asks to delete the post. Returns deleted=true, the post id and what the deleted post was (title, caption, type, media count). Does NOT remove anything already published on a platform: the post stays there and has to be deleted on the platform itself.

NameTypeReqDescription
post_idstringyes–
NameTypeReqDescription
deletedbooleanyes–
postobjectyes–
post_idstringyes–

No examples provided.

get_context ~172

Reports who this connection is, the one workspace it acts on (use switch_workspace to change it), the plan, billing state, entitlements, quotas, limits and a plain-language list of what is blocked right now. Use this to see what the connection can do, and after an error mentions a plan or quota. Returns user, credential, workspace, plan, billing, entitlements, quotas, limits and blocked[]. The plan and quotas.subscription belong to the subscription of the workspace owner (ownedBy says whether that is the user) and are counted across every workspace that owner has; quotas.workspace is this workspace alone. Say which is which when reporting numbers. workspace.timezone is null until the user picks a plan on the website. Does NOT change anything. Works on every plan, including a workspace with no plan.

Input schema present but exposes no named parameters.

NameTypeReqDescription
billing–yes–
blockedarrayyes–
credentialobjectyes–
entitlementsobjectyes–
limitsobjectyes–
planobjectyes–
quotasobjectyes–
userobjectyes–
workspaceobjectyes–

No examples provided.

get_platform_limits ~178

Returns the full publishing rules for one platform or all of them: caption and title limits and units, media counts, sizes, formats, whether media is required, hashtags, mentions, native scheduling, plus the global file rules. Use this before drafting to answer "will this fit on X / Instagram / TikTok". Returns platforms[] (one object per platform, with effectiveBodyLimit) and global. imageFormats is what the post may carry: a PNG or WebP is converted to JPEG for a platform that only takes JPEG, and a still image over maxImageBytes is compressed under it when it publishes, so neither blocks. Does NOT look at a specific account; list_accounts carries the per-account effective limits.

NameTypeReqDescription
platformstring–Platform id such as "x", "linkedin", "tiktok". Omit for every platform.
NameTypeReqDescription
globalobjectyes–
platformsarrayyes–

No examples provided.

get_post ~124

Fetches one post with its per-account rows: status, publish time, published time and any error per account. Use this after schedule_post to confirm what happened, or when the user asks why a post failed. Returns the post (content, media, metadata, socialAccountIds) and targets[] with platform and username. Refer to posts by title or caption and to accounts by platform and username when talking to the user; ids are for tool calls. Does NOT retry or change the post.

NameTypeReqDescription
post_idstringyesThe post id from list_posts or create_post.
NameTypeReqDescription
contentstring|nullyes–
coverR2Keystring|nullyes–
createdAtstring|nullyes–
idstringyes–
mediaUrlsarrayyes–
metadataobjectyes–
scheduledForstring|nullyes–
socialAccountIdsarrayyes–
statusstringyes–
targetsarrayyes–
typestringyes–
updatedAtstring|nullyes–

No examples provided.

list_accounts ~316

Lists the social accounts connected to the workspace, with health, how many posts are queued on each, and the effective limits for that account. Use this to pick the accounts for create_post and schedule_post, or to check whether an account needs reconnecting. Returns accounts[] (id, ref, platform, username, health, scheduledCount, limits, blockedByPlan, and seo for WordPress accounts), nextCursor and hasMore. seo is "yoast" when the WordPress site lets this account write Yoast SEO fields (schedule_post wordpress.seo), and "core" when it does not. health.status is the same as the dashboard: an expired access token that renews itself is still active; only needs_reconnect means the user must reconnect. ref is the account as "platform:handle" (e.g. "x:acme_studio"): pass it wherever a tool takes an account, since it is what the person reads when approving; it is null when the account has no handle, and then the id is used. Does NOT connect or disconnect accounts; that happens in the dashboard.

NameTypeReqDescription
cursorstring–Opaque cursor from the previous page. Omit for the first page.
groupIdstring–Only accounts in this channel group.
limitinteger–Page size, 1–100.
platformstring–Filter by platform id, e.g. "x", "instagram".
sortstring–createdAt (default), username or platform.
NameTypeReqDescription
accountsarrayyes–
hasMorebooleanyes–
nextCursorstring|nullyesPass as `cursor` to fetch the next page; null when there is none.

No examples provided.

list_groups ~137

Lists channel groups (named sets of accounts) with their member account ids. Use this when the user names a group ("post to my brand accounts") to resolve it to the account ids schedule_post takes. Returns groups[] (id, name, accountIds, accountCount), nextCursor and hasMore. Does NOT create or edit groups.

NameTypeReqDescription
cursorstring–Opaque cursor from the previous page. Omit for the first page.
limitinteger–Page size, 1–100.
namestring–Filter by exact group name.
sortstring–createdAt (default) or name.
NameTypeReqDescription
groupsarrayyes–
hasMorebooleanyes–
nextCursorstring|nullyesPass as `cursor` to fetch the next page; null when there is none.

No examples provided.

list_options ~209

Lists the choices one account offers for a setting the schedule needs, read live from the platform. Requests: list_board (pinterest, ids go in pinterest.board_id); list_post_type (wordpress, ids go in wordpress.post_type). Use this when the user posts to Pinterest: list the boards, ask which one, and pass its id as board_id. Use list_post_type when the user wants a WordPress post published as something other than a blog post (a short story, a page): pass the matching id as post_type; the name lists the taxonomies that type takes in terms. Returns field (where the ids go) and choices[] with id and name. Refer to a choice by its name when talking to the user. Does NOT change anything.

NameTypeReqDescription
account_idstringyesAn account id from list_accounts.
platformstringyesThat account's platform id from list_accounts, e.g. "pinterest".
req_typestringyesWhat to list.
NameTypeReqDescription
choicesarrayyes–
fieldstringyes–

No examples provided.

list_posts ~247

Lists posts in the workspace: drafts, scheduled, published and failed. Use this to find drafts to schedule, to review the queue, or to find a post id for get_post, update_post, schedule_post (publish_now on a scheduled post) or delete_post (any status). Returns posts[] (id, status, type, title, content, mediaUrls, scheduledFor), nextCursor and hasMore. Refer to posts by title or caption when talking to the user; ids are for tool calls. Does NOT include per-account results; call get_post for those.

NameTypeReqDescription
accountIdstring–Only posts targeting this account.
cursorstring–Opaque cursor from the previous page. Omit for the first page.
fromstring–ISO 8601 lower bound on the sort field.
limitinteger–Page size, 1–100.
orderstring––
sortstring–createdAt (default) or scheduledFor (only posts that have one).
statusstring–draft, scheduled, published or failed.
tostring–ISO 8601 upper bound on the sort field.
NameTypeReqDescription
hasMorebooleanyes–
nextCursorstring|nullyesPass as `cursor` to fetch the next page; null when there is none.
postsarrayyes–

No examples provided.

list_workspaces ~103

Lists every workspace the user belongs to, marks the one this connection acts on, and says what each allows through the connector: none (Free or no plan) or full (Solo, Growth, Pro). Use this when the user names another workspace or a tool reports a plan lock; then switch_workspace moves the connection. Returns workspaces[] (id, name, slug, isOwner, current, plan, access). Does NOT switch, create or change any workspace.

Input schema present but exposes no named parameters.

NameTypeReqDescription
workspacesarrayyes–

No examples provided.

schedule_post ~1,480

Schedules a post to one or more accounts at publish_at, or publishes immediately with publish_now=true. This publishes to real accounts. Times are ISO 8601 ending in Z or an offset, like 2026-11-03T09:00:00+05:30: use the user's own local time with its offset. workspace.timezone from get_context is the workspace's display zone, not necessarily where the user is; if you are unsure of their timezone, ask them. Facebook text post with a link: also set platform_settings.facebook.link (see that field) so Facebook shows a preview card. One call does it all: without post_id it creates the post from the content and settings given and schedules it; with post_id it schedules that draft, applying any fields sent first. type story is an Instagram or Facebook Story: one image or one video, no caption on Instagram. With the post_id of a post that is already scheduled and publish_now=true, it publishes that post now instead of at its time, after the same checks a post published now faces: a refused check leaves it scheduled as it was, and a post under 10 minutes from its time is refused. To change a scheduled post's content or time, use update_post. It takes everything the composer can set: caption, title, media, accounts, per-account text (account_overrides, channel_overrides), per-account media and covers, per-account times, and each platform's settings. With post_id, the per-account maps change only the accounts they name, as in update_post: every other account keeps what the draft has. account_ids is the complete list: an account left out is removed. Each platform setting says whether it is required, an account default or optional; a Pinterest account needs pinterest.board_id, from list_options. Every problem on every account is refused in one error, before anything is armed. Use this only after the user has confirmed the content, the accounts and the time. A refused call writes nothing: no draft is created and no draft is changed. Pass the same idempotency_key on a retry wit…

NameTypeReqDescription
account_idsarray–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-acc…
account_overridesobject–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…
blueskyobject–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 whol…
channel_overridesobject–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. A…
contentstring–The caption / body text.
cover_by_accountobject–One account's own video cover, keyed by account ref or id: a media_key, or null to use the post's cover.
cover_keystring–media_key of a cover image for video posts.
cover_timestamp_msinteger–The video frame, in milliseconds, used as the cover when no cover image is set.
descriptionstring––
facebookobject–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 wh…
hashtagsarray–Without the # is fine.
idempotency_keystring–Without post_id: any unique string; a retry with the same key never makes a second post.
media_by_accountobject–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.
media_keysarray–media_key values from upload_media.
media_urlsarray–Without post_id: public http(s) URLs of the ORIGINAL files to download and attach, up to 100 MB each.
pinterestobject–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…
post_idstring–A draft from create_post or list_posts, or a scheduled post to publish now with publish_now. Leave out to create the post in this call.
publish_atstring–ISO 8601 with Z or an offset, in the user's own local time, like 2026-11-03T09:00:00+05:30. At least 10 minutes ahead. Either this or publish_now.
publish_at_overridesobject–A different publish time for one account, keyed by account ref or id (ISO 8601 with Z or an offset, as publish_at).
publish_nowboolean–true to publish immediately, a scheduled post included. Either this or publish_at.
tiktokobject–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…
titlestring–Title, used by platforms that have one (YouTube, Pinterest). Required for a blog post, where it becomes the WordPress page heading.
typestring–Required without post_id: the type the user asked for. Ask if they have not said. story is an Instagram or Facebook Story with one media. blog is a WordPress blog post.
wordpressobject–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…
NameTypeReqDescription
post_idstring––
resultsarray––
successboolean––

No examples provided.

switch_workspace ~122

A connection acts on one workspace at a time. This moves it onto another workspace the user belongs to (id or slug from list_workspaces) for every later call, until switched again, and returns the new context. Use this when the user names a workspace other than the current one; confirm with them before switching. Returns switched and the full get_context shape for the new workspace, which says what that workspace's plan allows. Does NOT create workspaces and does NOT touch posts or accounts.

NameTypeReqDescription
workspacestringyesWorkspace id or slug from list_workspaces.
NameTypeReqDescription
contextobjectyes–
switchedbooleanyes–

No examples provided.

update_post ~1,234

Edits a draft or a scheduled post, the same edit the composer makes: caption, title, description, hashtags, type, media keys, cover, accounts, per-account text, media and covers, platform settings, and the time. Only the fields passed change; media_keys: null clears the media. The per-account maps (account_overrides, channel_overrides, media_by_account, cover_by_account, each platform's settings) change only the accounts they name: send just the accounts you are changing, and every other account keeps its text, media and settings. An account's entry is its whole text or settings; account_overrides: { id: null } clears that account's text. account_ids is the complete list: an account left out is removed from the post. Facebook text post with a link: also set platform_settings.facebook.link (see that field) so Facebook shows a preview card. A scheduled post is checked the way schedule_post checks one, and nothing is written when it is refused. It can no longer be edited from 10 minutes before its first account fires, or once an account has started preparing (an Instagram or Pinterest video prepares earlier). publish_at on a scheduled post moves it; on a draft it is the time the draft keeps. Times are ISO 8601 ending in Z or an offset, like 2026-11-03T09:00:00+05:30: use the user's own local time with its offset. workspace.timezone from get_context is the workspace's display zone, not necessarily where the user is; if you are unsure of their timezone, ask them. Use this when the user revises a post before it goes out. Returns the updated post and warnings[] for any platform caption limit the new content exceeds. Does NOT edit published or failed posts (returns an error), and does NOT ingest URLs; use upload_media first.

NameTypeReqDescription
account_idsarray–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-acc…
account_overridesobject–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…
blueskyobject–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 whol…
channel_overridesobject–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. A…
contentstring–The caption / body text.
cover_by_accountobject–One account's own video cover, keyed by account ref or id: a media_key, or null to use the post's cover.
cover_keystring|null–null clears the cover.
cover_timestamp_msinteger–The video frame, in milliseconds, used as the cover when no cover image is set.
descriptionstring––
facebookobject–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 wh…
hashtagsarray–Without the # is fine.
media_by_accountobject–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.
media_keys––Replaces the media; null clears it.
pinterestobject–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…
post_idstringyes–
publish_atstring–ISO 8601 with Z or an offset, in the user's own local time, like 2026-11-03T09:00:00+05:30. On a scheduled post: its new time, at least 10 minutes ahead. On a draft: the time it keeps until schedule_…
publish_at_overridesobject–Scheduled posts only: a different time for one account, keyed by account ref or id (ISO 8601 with Z or an offset, as publish_at).
tiktokobject–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…
titlestring–Title, used by platforms that have one (YouTube, Pinterest). Required for a blog post, where it becomes the WordPress page heading.
typestring–Post type. Keep the type the draft already has unless the user asked to change it.
wordpressobject–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…
NameTypeReqDescription
postobjectyes–
warningsarrayyes–

No examples provided.

upload_begin ~69

Called only by the JuzPost upload card, never by the model. Reserves storage for one file and starts a multipart upload. Returns media_key, upload_id, part_size and parts.

NameTypeReqDescription
bytesintegeryes–
content_typestringyes–
filenamestringyes–
NameTypeReqDescription
media_keystringyes–
part_sizenumberyes–
partsnumberyes–
upload_idstringyes–

No examples provided.

upload_file ~168

Shows an upload card where the user picks images or videos from their device (images up to 20 MB, videos up to 1 GB); the card stores the original files in the workspace. Use this in a chat app that shows cards (Claude.ai, Claude Desktop, Claude mobile) whenever the user attached a file in the chat or wants to add one from their device: you cannot read their attachment, so let them pick it here. When they finish, the card adds each file name and media_key to your context and asks the user to send a message; pass those media_key values to create_post or update_post. Returns nothing to attach by itself. Does NOT work in Claude Code or a terminal (use create_upload_url there) and does NOT take a link (use upload_media).

Input schema present but exposes no named parameters.

NameTypeReqDescription
shownbooleanyes–

No examples provided.

upload_finish ~58

Called only by the JuzPost upload card, never by the model. Completes an upload once every part is stored. Returns media_key, bytes and content_type.

NameTypeReqDescription
media_keystringyes–
upload_idstringyes–
NameTypeReqDescription
bytesnumberyes–
content_typestringyes–
media_keystringyes–

No examples provided.

upload_media ~411

Stores the original image or video in the workspace from a file the chat app hands over, a public URL (up to 1 GB for a video) or inline base64 (up to 3 MB), checking the real file type and the storage quota. Use this when the user gives you a link to attach to a post, or when the chat app hands you their attachment as `file` (ChatGPT does); then pass the returned media_key to create_post or update_post. `file` is filled by the chat app with an https download link, never by you: a path you see such as /mnt/user-data/uploads/… is on the user's side and cannot be read here. For a file the user attached or has on their device, call upload_file in a chat app that shows cards (Claude), or create_upload_url in Claude Code or a terminal. Use `base64` only with the original bytes of a small image you read from disk; never draw, reconstruct, re-encode or compress an image you have only seen. Returns media_key, bytes, content_type and source. Does NOT attach the file to any post by itself and does NOT accept private or local-network URLs.

NameTypeReqDescription
base64string–The original file bytes as base64, read from disk (a data: URI is fine). Either this, file or url.
content_typestring–MIME type of the base64 bytes, e.g. image/jpeg. Required with base64, used with nothing else: a file or url is typed from its own bytes.
fileobject–Filled by the chat app (ChatGPT) with the attachment's https download_url; never a local path. Either this, url or base64.
filenamestring–File name for a base64 upload; a file or url is named by its import.
urlstring–Public http(s) URL of the original file. Either this, file or base64.
NameTypeReqDescription
bytesnumberyes–
content_typestringyes–
media_keystringyes–
sourcestringyes–

No examples provided.

upload_part ~93

Called only by the JuzPost upload card, never by the model. Stores one part of a file started with upload_begin: the original bytes as base64, exactly part_size bytes except the last part. Returns part_number and bytes.

NameTypeReqDescription
datastringyesThe part bytes as base64.
media_keystringyes–
part_numberintegeryes–
upload_idstringyes–
NameTypeReqDescription
bytesnumberyes–
part_numbernumberyes–

No examples provided.

Install

How do I install the JuzPost MCP server?

JuzPost is a hosted endpoint at https://www.juzpost.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

remote · www.juzpost.com

# add to Claude Code
claude mcp add --transport http com-juzpost-mcp 'https://www.juzpost.com/mcp'
Common questions

What is the JuzPost MCP server?

JuzPost is an MCP server listed in the public MCP registry as com.juzpost/mcp. Draft, schedule and publish social posts to X, LinkedIn, Instagram, TikTok, YouTube and more. This page covers its hosted endpoint (https://www.juzpost.com/mcp).

Is the JuzPost MCP server safe to use?

JuzPost scores 86 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the JuzPost MCP server expose?

JuzPost exposes 19 tools: get_context, list_workspaces, switch_workspace, list_accounts, list_options, and 14 more. Their descriptions and schemas cost roughly 6,828 tokens of context every time the server is loaded.

Does the JuzPost MCP server require authentication?

Yes. JuzPost asked us for credentials when we connected, so you will need to authorise it in your MCP client before it can do anything.

Is the JuzPost MCP server still maintained?

JuzPost is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.