Skip to Content
GuidesPost to YouTube via MCP

Post to YouTube 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.

YouTube requires a video on every post. Images and text-only posts are not supported as standalone uploads. The YouTube Data API enforces a default limit of 6 video uploads per day, 3 per hour per channel.


The complete flow

Upload your video first

YouTube videos must be uploaded to VoxBurst before posting. Use the REST Media API to get a presigned URL and upload your file:

# Step 1: request presigned URL curl -X POST https://api.voxburst.io/v1/media/upload \ -H "Authorization: Bearer vb_live_xxxxxxxxxxxxx" \ -d '{ "filename": "demo.mp4", "contentType": "video/mp4", "sizeBytes": 52428800 }' # Step 2: PUT bytes to the returned uploadUrl # Step 3: poll GET /v1/media/:id until status = READY

Once you have a mediaId with status: READY, proceed.

Find the YouTube channel account ID

list_accounts()

Look for "platform": "youtube". The id field is what goes in accountIds.

Create the post

See post type examples below.

Check the result

get_post(postId: "post_abc123")
{ "id": "post_abc123", "status": "published", "platforms": [ { "platform": "youtube", "status": "published", "platformPostUrl": "https://www.youtube.com/watch?v=ABC123", "publishedAt": "2026-06-01T16:00:10Z", "error": null } ] }

What type of post do you want?

I want to post…contentTypeNotes
Standard videoVIDEOAny length up to 12 hours
YouTube ShortVIDEO≤60 seconds, 9:16 aspect ratio — automatically becomes a Short

Videos ≤60 seconds shot in 9:16 portrait format automatically publish as YouTube Shorts. No separate contentType is needed — VoxBurst passes through the video and YouTube classifies it.

Media: Must use mediaIds (pre-uploaded VoxBurst media). YouTube does not accept raw URLs for video upload — the file must be uploaded to VoxBurst storage first.


Post type examples

Standard video

create_post( content: "How we built our content calendar from scratch — full walkthrough", accountIds: ["acc_youtube_abc123"], contentType: "VIDEO", mediaIds: ["media_video_abc123"] )

YouTube Short (portrait video ≤60 seconds)

create_post( content: "One tip for scheduling content in under 60 seconds ⏱️", accountIds: ["acc_youtube_abc123"], contentType: "VIDEO", mediaIds: ["media_short_abc123"] )

Scheduled video upload

create_post( content: "Our founder explains the product vision in 3 minutes. Dropping Tuesday at 4 PM.", accountIds: ["acc_youtube_abc123"], contentType: "VIDEO", mediaIds: ["media_founder_abc123"], scheduledFor: "2026-06-03T16:00:00Z" )

With first comment

create_post( content: "Complete setup guide for VoxBurst — everything you need to know", accountIds: ["acc_youtube_abc123"], contentType: "VIDEO", mediaIds: ["media_guide_abc123"], firstComment: "Timestamps:\n0:00 Intro\n1:30 Account setup\n3:00 Scheduling\n5:45 Analytics" )

Tell your AI agent this

Upload and post now:

Post a video to YouTube channel [acc_id]. Title/caption: [text]. Use VoxBurst media ID [media_id]. Post now.

Scheduled:

Schedule a YouTube video on channel [acc_id]. Caption: [text]. Media ID: [media_id]. Schedule for [ISO timestamp].

With chapter timestamps in first comment:

Post video [media_id] to YouTube account [acc_id]. Caption: [text]. Add a first comment with these timestamps: [0:00 Intro, 1:30 Section 1, ...].


Failure cookbook

ErrorCauseFix
QUOTA_EXCEEDEDOver 6 uploads/day or 3/hour per channelWait for quota to reset (midnight Pacific) or request a quota increase from Google Cloud Console
VIDEO_REQUIREDNo mediaIds providedYouTube requires a video — upload via Media API first, then pass the mediaId
MEDIA_NOT_READYMedia record still processingPoll GET /v1/media/:id until status: READY before posting
DESCRIPTION_TOO_LONGOver 5,000 charactersShorten the video description
INVALID_VIDEO_FORMATUnsupported codec or containerRe-encode to H.264 video with AAC audio, MP4 container
OAUTH_TOKEN_EXPIREDGoogle OAuth token expiredRe-connect the YouTube account in VoxBurst
CHANNEL_SUSPENDEDChannel has policy violationsCheck YouTube Studio for channel status and policy notices
DUPLICATE_VIDEOYouTube detected duplicate contentYouTube may hold or reject identical video uploads
Post status failedYouTube Data API errorRead platforms[].error; for quota errors, wait before retrying

Account requirements

RequirementDetail
Account typeYouTube channel with upload permissions
Auth methodOAuth 2.0 via Google
Key preconditionChannel must have upload permissions enabled; quota defaults to 6 uploads/day
Re-connect triggerToken expires; re-connect from VoxBurst Settings → Connected Accounts

When YouTube is a poor fit

  • Image posts — YouTube is video-only; standalone image posts are not supported
  • Text-only announcements — no native text post format; use Community posts (not available via API)
  • High-volume publishing — YouTube enforces a strict 6 uploads/day quota per channel; not suitable for bulk scheduling
  • Short-notice publishing — YouTube video processing takes time; plan ahead for time-sensitive content
  • Cross-platform campaigns where video is optional — if your campaign is image or text-based, skip YouTube or prepare a separate video asset

Cross-platform override example

YouTube takes a video while Instagram takes an image from the same campaign. Handle as two separate posts, or if both are in a multi-platform post, YouTube needs its own mediaIds:

# Post the image to Instagram, Twitter, LinkedIn create_post( content: "Watch the full breakdown on YouTube — link in bio.", accountIds: ["acc_instagram_abc", "acc_twitter_def", "acc_linkedin_ghi"], contentType: "IMAGE", mediaUrls: ["https://cdn.example.com/thumbnail.jpg"], platformOverrides: { "TWITTER": { "content": "New video just dropped on YouTube 🎬 Link in profile. #tutorial" } } ) # Post the video to YouTube separately create_post( content: "Complete guide to cross-platform content scheduling — everything you need to know in 8 minutes.", accountIds: ["acc_youtube_uvw"], contentType: "VIDEO", mediaIds: ["media_video_abc123"], firstComment: "Chapters: 0:00 Intro 1:30 Setup 4:00 Scheduling 6:30 Analytics" )

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 typesVIDEO only (≤60s 9:16 = YouTube Short automatically)
Unsupported content typesTEXT, IMAGE, CAROUSEL, REEL, STORY
Validation gotcha6 uploads/day, 3/hour per channel (YouTube Data API quota)
Media gotchaVideo must be uploaded to VoxBurst first — no raw mediaUrls; H.264 recommended
Account gotchaYouTube channel must have upload permissions; quota resets midnight Pacific
Example prompt”Post video media_id to YouTube account acc_id. Caption: text.”
Example tool callcreate_post(content: "...", accountIds: ["acc_youtube_abc"], contentType: "VIDEO", mediaIds: ["media_abc"])
Example response{ "status": "published", "platforms": [{ "platform": "youtube", "platformPostUrl": "https://www.youtube.com/watch?v=..." }] }
Recovery pathWait for quota reset for QUOTA_EXCEEDED; re-encode for INVALID_VIDEO_FORMAT
Last updated on