The full upstream README, mirrored here for reference. Install config, tool schemas, adoption signals, and an original overview live on the YouTube Shorts Agent listing page.
⭐ If this agent-first tool helps your workflow, please star the repo. Stars make this tooling easier for other builders to discover and help Delx keep shipping open infrastructure.
🧱 Part of the Delx agent stack — 15 open-source MCP servers across body, reach and coordination.
Agent-first YouTube Shorts uploader for the YouTube Data API. It is designed for Codex, Claude, Cursor, Hermes, OpenClaw and any MCP client that needs a predictable upload workflow with dry-run safety, OAuth readiness checks and structured output.
Use it when an agent needs to prepare, validate or upload Shorts through the official API without touching YouTube Studio UI.
youtube_agent_manifest for install/runtime guidanceyoutube_connection_status before upload attemptsyoutube_privacy_audit for local token and media boundariesyoutube_oauth_authorize_url with local PKCE session storageyoutube_upload_short with containsSyntheticMedia supportyoutube_list_recent_videos for lightweight post-upload checksOr run directly:
Dry-run is enabled by default. Set YOUTUBE_DRY_RUN=false only when doctor reports a complete OAuth setup and you intend to call the live API.
This is the full first-run path. Every step here is dry-run safe — no credentials are required and nothing is sent to YouTube. The output below is captured verbatim from a real run.
1. Check readiness. With no OAuth configured, doctor confirms you are in dry-run mode:
2. Prepare a Short and its caption.
3. Run the upload in dry-run. No network call is made; the tool returns the exact job and result it would publish, so an agent can validate metadata before going live:
platformPostId is prefixed with dryrun_ and releaseUrl is the YouTube root — both signal that nothing was uploaded. The id, createdAt and dryrun_* values vary per run.
4. Confirm the channel listing path (returns an empty list in dry-run):
Going live. Configure OAuth (youtube-shorts-agent auth-url --redirect-uri http://localhost:8787/callback, then exchange the callback code for tokens), set YOUTUBE_CLIENT_ID / YOUTUBE_CLIENT_SECRET / YOUTUBE_ACCESS_TOKEN / YOUTUBE_REFRESH_TOKEN in .env, re-run doctor until ready_for_live_upload is true, then set YOUTUBE_DRY_RUN=false and re-run the same upload-short command.
Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:
Env: YOUTUBE_MCP_HOST, YOUTUBE_MCP_PORT, YOUTUBE_MCP_TRANSPORT=http.
Hermes-style config:
Recommended first calls:
youtube_connection_statusyoutube_privacy_audityoutube_upload_short| Tool | Purpose |
|---|---|
youtube_agent_manifest | Install/runtime guidance for Codex, Claude, Cursor, Hermes and OpenClaw |
youtube_connection_status | OAuth and dry-run readiness without token values |
youtube_privacy_audit | Upload scope, synthetic media and local file boundaries |
youtube_oauth_authorize_url | PKCE authorization URL with local session storage |
youtube_upload_short | Dry-run or live Shorts upload |
youtube_list_recent_videos | Lightweight channel verification |
Copy .env.example to .env. Keep .env and .agent-data/ out of Git.
The upload tool sets containsSyntheticMedia=true by default for AI-generated or AI-edited videos. Override only when that is not true for the asset.
.agent-data/.YOUTUBE_DRY_RUN=false.