Connect Claude or ChatGPT to YouTube: upload videos and Shorts through MCP
Connect Claude, ChatGPT or Cursor to YouTube through Mellow Hub’s MCP server: the channel you need, upload rules, prompts and fixes for videos and Shorts.
By Mellow · UpdatedCan Claude or ChatGPT upload a video to YouTube?
Yes, through Mellow Hub’s remote MCP server at https://www.mellow.world/mcp. It uses Streamable HTTP, and a client signs in with OAuth 2.1 (dynamic client registration and PKCE) or sends an owner-created Hub API key as a Bearer token. After you connect a YouTube channel and approve the access, the assistant can register a public video URL or request a signed upload URL, check a post of one video and a title with validate_post, publish or schedule it with create_post, and read the YouTube result and link with get_post. You need a YouTube channel, and you connect it yourself: an assistant cannot sign in to Google for you.
Status: on September 21, 2026, Mellow’s MCP workflow uploaded, validated and published a private horizontal YouTube test video with a custom cover. Shorts, public videos and connecting through ChatGPT’s or claude.ai’s own connector screens have not been tested with YouTube. What was tested.
What YouTube account do I need?
A Google account with a YouTube channel. Uploads count against the channel's daily API quota. Hub connects the channel through Google’s own sign-in, so the person who manages the channel completes that step.
- Open Accounts in Hub and choose YouTube, or ask the assistant to call
connect_channelwithplatformset toyoutube. That tool only returns a link and an instruction for a person. It needs thechannels:connectpermission, which is not selected by default on Hub’s consent screen. - Open the link and sign in to Google yourself.
- Tell the assistant you are done. It calls
list_channelswithrefresh: trueand uses the returned channel ID, which begins withspc_. A channel name or handle is not a substitute for that ID.
Custom covers depend on the channel’s eligibility on YouTube; see YouTube’s thumbnail requirements. A cover never replaces the video: it is attached to the video item.
Connect Claude, ChatGPT, Cursor or another MCP client
Every client uses the same server URL, https://www.mellow.world/mcp. Menus change between client versions, so the official guides linked below describe the current screens. The last column says only what Mellow itself has tested.
| Client | How to add Hub | Tested by Mellow |
|---|---|---|
| Claude | Where custom connectors are available on your plan: Customize → Connectors → Add custom connector, the path we saw on September 9, 2026. Name it Mellow Hub and paste the URL. Claude registers itself, so there is no client secret to copy. Anthropic’s guide. | Hub’s consent and read-only tool calls completed on September 9, 2026, with an Instagram channel. Not yet with a YouTube channel or with publishing permissions. |
| ChatGPT | On the web, where your plan or workspace admin allows custom MCP apps: turn on developer mode, then add an app with the URL and OAuth sign-in. OpenAI’s guide. | Not tested. |
| Claude Code | claude mcp add --transport http mellow https://www.mellow.world/mcp, then sign in when Claude Code asks. | Connected to production on September 20, 2026 with the token of an owner-approved grant for Instagram and Threads, and read the profile and channels. Its own sign-in flow was not part of that test. |
| Cursor | Add Mellow Hub as a remote HTTP MCP server with the URL, then complete sign-in. Cursor’s MCP documentation. | Not tested. |
| Your own client | Streamable HTTP. Start OAuth discovery from the first 401 response, or send a Hub key in the Authorization: Bearer header. | The official MCP Python SDK completed registration, PKCE consent and tool calls in production on September 20, 2026. |
- Add the server in your client and select Connect. Sign in to Mellow if asked. Hub’s consent screen names the app that is asking.
- Choose the permissions the task needs (below), select your YouTube channel, choose review or autopilot, a daily ceiling and an expiry, then approve.
- Back in the client, run the read-only check from the prompts below. Confirm the profile, the mode and the YouTube channel ID. Agents shows the grant’s permissions, channels and expiry, which a client’s summary may leave out.
- If a client cannot complete OAuth, create a key in Agents and set it as the client’s
Authorization: Bearerheader, from its secret settings or an environment variable. Never paste a key into a chat.
Which permissions to approve
| Permission | What it allows |
|---|---|
channels:read | Read the profile, the mode and the channels the grant covers: whoami, list_channels. Selected by default. |
posts:read | Check and preview a post and read results: validate_post, preview_post, get_post, list_posts. Selected by default. |
media:write | Register a public media URL or request a signed upload URL. |
posts:write and posts:publish | Create, schedule or publish a post; both are needed, even in review mode. posts:write also covers cancelling and rescheduling. |
channels:connect | Start a channel connection and return its link for a person. |
metrics:read | Read network-reported metrics for published posts. |
For a first check, approve only the two default permissions. When the assistant needs to upload and publish, approve a new delegation that includes them.
What you delegate, and how to take it back
Hub treats an assistant’s access as a delegation you give once, with limits. On the OAuth consent screen you choose the permissions, the channels (the ones you select, or explicitly all), review or autopilot, a daily ceiling of 1 to 1,000 posts (50 by default) and an expiry of 1, 7 or 30 days (7 by default). Review is the default mode: the assistant prepares a post and it waits for you. A key or a connected app cannot approve its own post.
An API key is created by you, signed in, in Agents. It belongs to one profile and carries its own mode and daily limit; through the REST key route it can also be limited to channels and given an expiry. A key cannot create another key. Hub records the posts an assistant creates or has refused, approvals, reschedules, cancellations and connection attempts in a journal you read in Agents. Revoking a key or a connected app takes effect on its next request. Publishing always needs an idempotency key, so a retried request cannot publish twice.
YouTube rules Hub checks before anything is sent
This table is generated from the registry that validate_post enforces, the same one behind the rules for every network. These are Hub’s input rules. YouTube still judges the file itself: Hub does not download the video, so duration, size, aspect ratio and processing are YouTube’s to decide.
| Rule | YouTube in Hub |
|---|---|
| Title | Required, up to 100 characters, in options.youtube.title. YouTube refuses an upload without a title. |
| Caption | Up to 5,000 characters. Becomes the video description when no explicit description is given. |
| Media | Exactly 1 video. |
| Placement | None: YouTube has one surface in Hub. |
| Also supported | Scheduling with scheduledAt, a custom cover (thumbnailUrl on the video item), metrics for published posts (get_metrics). |
Shorts and horizontal videos
Exactly one video, including landscape. YouTube classifies eligible square or vertical videos up to three minutes as Shorts; there is no separate Shorts endpoint. Hub has no Shorts setting either. The classification is YouTube’s, under its current Shorts rules, and a 16:9 video stays a regular video. Mellow’s live test used a horizontal video, so how YouTube classifies a vertical upload made through Hub has not been observed yet.
Other YouTube fields are passed on when you set them in options.youtube, among them description, privacyStatus (public, private or unlisted), madeForKids and tags. A field you leave out is not sent, so the publishing provider’s or YouTube’s default applies. Set privacyStatus yourself rather than relying on a default.
Hub recognizes a video by the file extension in its URL. A URL without one is not type-checked, and YouTube decides when it fetches the file.
When validate_post refuses the post
Read ok, issues and notes in the result. The check publishes nothing and reports every problem at once, each with its field and, for a network rule, its channel. Fix them together and validate again.
| Issue code | What it means | What to change |
|---|---|---|
title_required and option_required | No title. Hub reports both codes for the same field, options.youtube.title. | Set the title in options.youtube, or for one channel in perChannel. |
too_long | The title is longer than 100 characters. | Shorten it and move the detail into the description. |
media_kind_unsupported | An image URL was sent to YouTube. | Send a video. Put a cover image in thumbnailUrl on the video item, not in the media list. |
media_required or media_too_many | No video, or more than 1. | Send one video per YouTube post; make separate posts for several videos. |
caption_too_long | The caption, which becomes the description, is over 5,000 characters. | Shorten it, or give the YouTube channel its own caption in perChannel. |
Other refusals concern the request or the grant: schedule_in_past (use a future time with a UTC offset), insufficient_scope (approve a delegation with the missing permission), channel_out_of_scope (the channel is not in the grant), and at creation daily_limit_reached and idempotency_key_reused. A passing check is not proof of publication: YouTube can still refuse the file or the account. The free post checker runs the same input rules on a draft before you connect anything.
Prompts you can paste
Replace the bracketed parts. Each prompt names the tools to call, so the assistant does not have to guess the order.
Check the connection, read-only
Use only Mellow Hub. Call whoami, then list_channels, then list_platforms.
Tell me my YouTube channel ID, whether this connection is in review or
autopilot mode, how many posts it may still create today, and YouTube's
rules. Do not upload, create, schedule or publish anything.Validate a Short, then schedule it for 18:00
Use Mellow Hub. List my YouTube channel and validate this Short before
scheduling it for 18:00 on [date] in [your timezone].
Video: [public https URL ending in .mp4, vertical, up to three minutes]
Title: [title]
Caption (becomes the description): [text]
1. Call register_media on the video URL.
2. Call validate_post for my YouTube channel with options.youtube.title,
options.youtube.privacyStatus "public" and scheduledAt written with an
explicit UTC offset. Fix every issue it reports, then validate again.
3. When ok is true, call create_post once with idempotencyKey
"yt-short-[date]-1800". If it times out, retry with the same key.
4. Call get_post and report the YouTube target's status and link.A horizontal video, private first, with your own cover
Use Mellow Hub. Publish my horizontal video to my YouTube channel as a
private video first, with a custom cover.
Video: [public https URL of the .mp4]
Cover: [public https URL of a 16:9 JPEG]
Title: [title]
Put the cover in thumbnailUrl on the video's media item; do not add it as
a second media item. Set options.youtube.privacyStatus to "private".
Validate first and fix every issue. Then call create_post once with
idempotencyKey "yt-[short-name]-private-1". Call get_post until the
YouTube target is published or failed, and report the link or the error.For a file on your computer, an agent that can make HTTP requests, such as Claude Code or a script of your own, can call request_upload_url, send the bytes with PUT to the returned uploadUrl and use the returned mediaUrl. An assistant that only has Hub’s tools cannot send file bytes itself, so give it a public https URL. Keep that URL reachable until YouTube has the video.
To design the cover, see YouTube videos and custom covers. Generating a cover through MCP spends AI credits and needs the separate ai:generate permission, which is not part of the default request.
Publish once, then read the YouTube result
create_post is the step that publishes or schedules. It needs an idempotencyKey of 8 to 120 letters, digits or the characters . _ : -, stable for this post, such as yt-short-2026-10-02-1800. If the response is lost or times out, send the same request with the same key: Hub returns the original post instead of making a second one. Reusing a key for different content is refused.
Under a review-mode grant the post comes back as pending_review and waits until you approve it, signed in, in Hub’s Posts or Queue screen. Under autopilot it goes out at scheduledAt, or immediately without it. Always write scheduledAt with Z or an explicit UTC offset.
Then call get_post and read the YouTube entry in targets, not only the post’s status. publishing means YouTube has not reported a result yet; published comes with the video link; failed comes with the network’s message. A post sent to several networks can end partial: republish only the failed channel, with a new key. Once YouTube has published a video, Hub cannot edit or remove it; cancel_post works only before it goes out.
Each destination counts once against your plan’s monthly publications. Validating, drafting and connecting work without a plan; publishing needs an active one. See plans.
What Mellow has tested with YouTube
On September 21, 2026, Mellow’s own test of the MCP workflow on the production service uploaded a 1280×720 test video, validated the post and published it to a YouTube channel as a private video, with a cover generated in Creative Studio attached as its thumbnail. The YouTube destination reached published.
That test does not cover everything on this page. Not tested yet: a vertical upload that YouTube classifies as a Short, a public or unlisted video, and granting a YouTube channel through ChatGPT’s or claude.ai’s own connector screens. Claude’s web connector completed Hub’s consent once, on September 9, 2026, with read-only access to an Instagram channel. Cursor has not been tested.
Questions
Can Claude upload YouTube Shorts?
Yes, once Claude is connected to Mellow Hub and you have approved access to your YouTube channel. Hub has no separate Shorts setting: you send one video and a title of up to 100 characters, and YouTube decides whether the upload is a Short. Under YouTube’s current rules, eligible square or vertical videos up to three minutes are classified as Shorts. Mellow’s own live test published a horizontal video, not a Short.
Can ChatGPT upload videos to YouTube?
Through a remote MCP server, yes. Where your plan or workspace allows custom MCP apps, ChatGPT can add Mellow Hub in developer mode and use the same tools as any other client. Mellow has not tested ChatGPT’s connector yet, so follow OpenAI’s current instructions and start with read-only access.
Does the assistant get my Google password?
No. You sign in to Google yourself on the page Hub’s connection link opens. The assistant works with Hub channel IDs and only with the permissions you approved on Hub’s consent screen.
Will it publish without asking me?
Only if you choose autopilot. Review is the default: the assistant prepares the post and it waits until you approve it in Hub. In both modes it is limited to the channels and daily ceiling you set, and you can revoke it in Agents at any time.
Can it edit or delete a video after YouTube publishes it?
No. Hub can cancel or reschedule a post only before it goes out. After YouTube has published a video, change or delete it in YouTube itself.
Related
- Publish to social media with an MCP server: the workflow for every network.
- Threads MCP guide and Instagram MCP guide.
- YouTube videos and custom covers, including Creative Studio.
- API and MCP reference and rules for every network.
- Plans: each destination counts once against the monthly publications.