Skip to Content
GuidesPost to Mastodon via MCP

Post to Mastodon via MCP

Quick navigation: Which path should I use? · Multi-platform example · Recovery playbook · All 9 platforms at a glance

Prerequisites: VoxBurst MCP server configured. See MCP Server setup.

Mastodon is decentralized. Each account specifies its instance (e.g., mastodon.social, fosstodon.org). Character limits, media limits, and content policies vary by instance. The default is 500 characters, but some instances allow up to 5,000.


The complete flow

Find the Mastodon account ID

list_accounts()

Look for "platform": "mastodon". The displayName or username will show the full handle including the instance (e.g., @mybrand@mastodon.social).

Optionally validate content first

validate_content( content: "Your toot text here", platforms: ["MASTODON"] )

VoxBurst validates against the default 500-character limit. If your instance allows more, the validation is conservative — the actual post may succeed even if validation warns.

Create the post

See post type examples below.

Check the result

get_post(postId: "post_abc123")
{ "id": "post_abc123", "status": "published", "platforms": [ { "platform": "mastodon", "status": "published", "platformPostUrl": "https://mastodon.social/@mybrand/1234567890", "publishedAt": "2026-06-01T09:30:02Z", "error": null } ] }

What type of post do you want?

I want to post…contentTypeMedia required?Notes
Text onlyTEXTNoMax 500 chars (default; varies by instance)
Image(s)IMAGEYes — 1–4 imagesMax 8 MB per image
A videoVIDEOYes — 1 videoMax 5 min, max 40 MB

Mastodon does not support first comments, carousels, Reels, Stories, or threads via the VoxBurst MCP.

Media input options:

  • mediaUrls — public HTTPS image/video URLs (auto-registered)
  • mediaIds — VoxBurst media IDs from prior uploads

Post type examples

Text post (toot)

create_post( content: "Just published a new post on decentralized social media strategy. Link below. #Mastodon #Fediverse", accountIds: ["acc_mastodon_abc123"], contentType: "TEXT" )

Image post

create_post( content: "Open source tools we shipped this month 🛠️ #FOSS #OpenSource", accountIds: ["acc_mastodon_abc123"], contentType: "IMAGE", mediaUrls: ["https://cdn.example.com/tools-release.jpg"] )

Multiple images (up to 4)

create_post( content: "Screenshots from the new release →", accountIds: ["acc_mastodon_abc123"], contentType: "IMAGE", mediaUrls: [ "https://cdn.example.com/screen-1.jpg", "https://cdn.example.com/screen-2.jpg", "https://cdn.example.com/screen-3.jpg" ] )

Video post

create_post( content: "Quick demo of our scheduling tool. No sign-up required.", accountIds: ["acc_mastodon_abc123"], contentType: "VIDEO", mediaUrls: ["https://cdn.example.com/demo.mp4"] )

Scheduled post

create_post( content: "We are speaking at FediverseCon next week. Come say hello. 👋", accountIds: ["acc_mastodon_abc123"], contentType: "TEXT", scheduledFor: "2026-06-02T08:00:00Z" )

Tell your AI agent this

Text post, post now:

Post to Mastodon account [acc_id]. Content: [your text — max 500 chars]. Post now.

Image, scheduled:

Post to Mastodon account [acc_id]. Content: [text]. Attach image: [https://...]. Schedule for [ISO timestamp].

Validate first:

Validate this Mastodon toot before posting: [text]. Check it is within the 500-character default limit.


Failure cookbook

ErrorCauseFix
CONTENT_TOO_LONGOver the instance’s character limitShorten the text; check your instance’s actual limit (may differ from the default 500)
INVALID_APP_PASSWORDApp password revoked or account re-securedGenerate a new app password in your instance’s settings and re-connect in VoxBurst
OAUTH_TOKEN_INVALIDPer-instance OAuth credentials changedRe-connect the Mastodon account; credentials are per-instance
IMAGE_TOO_LARGEImage over 8 MB (default Mastodon limit)Compress to under 8 MB before uploading
VIDEO_TOO_LARGEVideo over 40 MBCompress or trim
INSTANCE_UNREACHABLEInstance is offline or rate-limitingWait and retry; call retry_post for transient failures
MEDIA_NOT_PROCESSEDMastodon rejected the media typeCheck the instance’s allowed MIME types; re-upload in a supported format
Post status failedMastodon API errorRead platforms[].error; retry transient errors with retry_post

Account requirements

RequirementDetail
Account typeAny Mastodon account on any instance
Auth methodOAuth 2.0 (per-instance credentials)
Key preconditionInstance URL required at connection time (e.g. mastodon.social, fosstodon.org) — credentials are registered per-instance, not globally
Re-connect triggerOAuth token revoked or instance changed; re-connect in VoxBurst Settings

When Mastodon is a poor fit

  • Broad marketing reach — Mastodon instances are small, topic-focused communities; viral reach is limited compared to centralized platforms
  • Consistent character limits — the default is 500 characters but each instance sets its own limit; a post valid on mastodon.social may fail on a stricter instance
  • Carousel posts — not supported
  • First comment CTAs — first comments are not supported; include the CTA in the post body

Cross-platform override example

Mastodon and Bluesky are both text-forward federated platforms but have different cultures and limits. Override each independently:

create_post( content: "New release: version 2.0 is out.", accountIds: ["acc_mastodon_stu", "acc_bluesky_pqr", "acc_twitter_def"], contentType: "TEXT", platformOverrides: { "MASTODON": { "content": "VoxBurst 2.0 is out today. Cross-platform scheduling for the open web. #OpenWeb #Fediverse #VoxBurst" }, "BLUESKY": { "content": "VoxBurst 2.0 ships today. Cross-platform. Open. Fast." }, "TWITTER": { "content": "VoxBurst 2.0 is live 🚀 #launch #SocialMedia" } } )

See the same post across all platforms guide for a full 8-platform example.


Benchmark checklist

Last updated: 2026-05-31 — Added JSON tool-call examples and benchmark checklist.

Supported content typesTEXT, IMAGE (1–4), VIDEO
Unsupported content typesCAROUSEL, REEL, STORY; first comments not supported
Validation gotchaDefault 500 chars, but varies by instance — some allow up to 5,000
Media gotchaImages max 8 MB; video max 40 MB (default Mastodon limits)
Account gotchaInstance URL required at connection; credentials are per-instance
Example prompt”Post to Mastodon account acc_id. Content: text. Post now.”
Example tool callcreate_post(content: "...", accountIds: ["acc_mastodon_abc"], contentType: "TEXT")
Example response{ "status": "published", "platforms": [{ "platform": "mastodon", "platformPostUrl": "https://mastodon.social/@..." }] }
Recovery pathretry_post for transient errors; re-connect account for INVALID_APP_PASSWORD
Last updated on