io.github.miller-joe/youtube-mcp

Registre officiel Marketing et ventes

MCP server for YouTube creator-ops with a ComfyUI bridge for AI thumbnail generation.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

NPM package @miller-joe/youtube-mcp
Claude Code
claude mcp add youtube-mcp -e 'YOUTUBE_CLIENT_ID=<YOUTUBE_CLIENT_ID>' -e 'YOUTUBE_CLIENT_SECRET=<your youtube_client_secret>' -e 'YOUTUBE_CLIENT_SECRET_FILE=<YOUTUBE_CLIENT_SECRET_FILE>' -e 'YOUTUBE_TOKEN_FILE=<YOUTUBE_TOKEN_FILE>' -e 'COMFYUI_URL=<COMFYUI_URL>' -e 'COMFYUI_DEFAULT_CKPT=<COMFYUI_DEFAULT_CKPT>' -- npx -y @miller-joe/youtube-mcp@0.1.2
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "youtube-mcp": {
            "command": "npx",
            "args": [
                "-y",
                "@miller-joe/youtube-mcp@0.1.2"
            ],
            "env": {
                "YOUTUBE_CLIENT_ID": "<YOUTUBE_CLIENT_ID>",
                "YOUTUBE_CLIENT_SECRET": "<your youtube_client_secret>",
                "YOUTUBE_CLIENT_SECRET_FILE": "<YOUTUBE_CLIENT_SECRET_FILE>",
                "YOUTUBE_TOKEN_FILE": "<YOUTUBE_TOKEN_FILE>",
                "COMFYUI_URL": "<COMFYUI_URL>",
                "COMFYUI_DEFAULT_CKPT": "<COMFYUI_DEFAULT_CKPT>"
            }
        }
    }
}

Variables d'environnement

  • YOUTUBE_CLIENT_ID obligatoire Google OAuth 2.0 Client ID (from Google Cloud Console, Desktop app type). See README for setup.
  • YOUTUBE_CLIENT_SECRET obligatoire secret Google OAuth 2.0 Client Secret. Pair with YOUTUBE_CLIENT_ID.
  • YOUTUBE_CLIENT_SECRET_FILE Alternative to CLIENT_ID/CLIENT_SECRET: path to the JSON credentials file downloaded from Google Cloud.
  • YOUTUBE_TOKEN_FILE Refresh token storage path. Default: ~/.config/youtube-mcp/token.json
  • COMFYUI_URL ComfyUI HTTP URL for the generate_and_set_thumbnail bridge tool. When unset, that tool is disabled.
  • COMFYUI_DEFAULT_CKPT Default ComfyUI checkpoint filename for bridge tool (default: sd_xl_base_1.0.safetensors)

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. youtube-mcp
  2. The pitch
  3. Install
  4. Setup: Google Cloud one-time (~10 min)
  5. Connect an MCP client
  6. Configuration
  7. Tools
  8. Quota notes
  9. Architecture
  10. Development
  11. Roadmap
  12. License
  13. Support

youtube-mcp

OAuth-authenticated YouTube MCP for channel owners. Edit video metadata, reply to and moderate comments, manage playlists, query channel analytics, and generate or set AI thumbnails via a ComfyUI bridge. Goes beyond the read-only Data API v3 wrappers that dominate this space.

The pitch

Most existing YouTube MCPs use an API key against Data API v3. Search videos, fetch public metadata, read-only. This one uses OAuth 2.0 (Authorization Code + PKCE) so it can actually write to your channel: update video titles, descriptions and tags, reply to comments, moderate spam, manage playlists. It also hits the separate YouTube Analytics API for channel stats, and generates a thumbnail via ComfyUI and pushes it to YouTube in a single MCP call.

Claude, use generate_and_set_thumbnail on video abc123:
  prompt: "cyberpunk hacker at keyboard, neon blue and pink, high contrast"

ComfyUI renders 1280×720, youtube-mcp fetches the bytes, and POSTs to thumbnails.set. Done.

Install

# npx, no install
npx @miller-joe/youtube-mcp --help

# Docker
docker run -p 9120:9120 \
  -e YOUTUBE_CLIENT_ID=... \
  -e YOUTUBE_CLIENT_SECRET=... \
  -e YOUTUBE_TOKEN_FILE=/token/token.json \
  -v $PWD/token:/token \
  ghcr.io/miller-joe/youtube-mcp:latest

Setup: Google Cloud one-time (~10 min)

  1. Google account plus YouTube channel. Use a personal account, not a workspace one you might lose.
  2. Google Cloud project at https://console.cloud.google.com. Call it whatever you want (e.g. youtube-mcp).
  3. Enable APIs:
    • YouTube Data API v3
    • YouTube Analytics API
  4. OAuth consent screen: External, App name, support email. In Scopes, add:
    • youtube.upload
    • youtube.force-ssl
    • yt-analytics.readonly
  5. Stay in Testing mode. Add yourself as a test user (required). As the project owner, your refresh token won't expire.
  6. Create OAuth Client ID: Application type = Desktop app. Download the JSON.
  7. Run the interactive auth flow:

     npx @miller-joe/youtube-mcp --auth --client-secret-file ./client_secret.json

    A browser opens, you log in to the Google account tied to your YouTube channel, and grant the requested scopes. On success, a refresh token is saved to ~/.config/youtube-mcp/token.json.

  8. Start the server:

     npx @miller-joe/youtube-mcp --client-secret-file ./client_secret.json

    Or provide the client credentials via env: YOUTUBE_CLIENT_SECRET_FILE, or YOUTUBE_CLIENT_ID + YOUTUBE_CLIENT_SECRET.

Connect an MCP client

claude mcp add --transport http youtube http://localhost:9120/mcp

Or point your MCP gateway at the Streamable HTTP endpoint.

Configuration

CLI flagEnv varDefaultNotes
--client-secret-fileYOUTUBE_CLIENT_SECRET_FILE(none)Path to Google OAuth JSON
--client-idYOUTUBE_CLIENT_ID(none)Alternative to the secret file
--client-secretYOUTUBE_CLIENT_SECRET(none)Alternative to the secret file
--token-fileYOUTUBE_TOKEN_FILE~/.config/youtube-mcp/token.jsonRefresh token storage
--hostMCP_HOST0.0.0.0Bind host (HTTP mode only)
--portMCP_PORT9120Bind port (HTTP mode only)
--stdioMCP_TRANSPORT=stdio(unset)Speak MCP over stdio instead of HTTP. Use when launched as a subprocess by a stdio-first MCP client (Claude Desktop, mcp-inspector).
--comfyui-urlCOMFYUI_URL(unset, bridge disabled)ComfyUI HTTP URL for bridge tools
(no flag)COMFYUI_DEFAULT_CKPTsd_xl_base_1.0.safetensorsDefault checkpoint for bridge tool
Transports

The server speaks streamable HTTP by default (great for Claude Code, MetaMCP, raw fetch). Pass --stdio (or set MCP_TRANSPORT=stdio) to switch into stdio mode, which is what stdio-first clients like Claude Desktop and the MCP Inspector expect:

// claude_desktop_config.json
{
  "mcpServers": {
    "youtube": {
      "command": "npx",
      "args": ["-y", "@miller-joe/youtube-mcp", "--stdio"],
      "env": {
        "YOUTUBE_CLIENT_SECRET_FILE": "/path/to/client_secret.json",
        "YOUTUBE_TOKEN_FILE": "/path/to/token.json"
      }
    }
  }
}

Stdio mode skips the OAuth-token preflight check — the server boots even without a stored token and surfaces auth errors at tool-call time. Run youtube-mcp --auth --client-secret-file <path> once in HTTP mode to seed the refresh token before pointing Claude Desktop at it.

Tools

Videos
  • list_my_videos: paginated list of the authenticated channel's uploads.
  • get_video: full detail for one video.
  • update_video_metadata: title, description, tags, category, privacy.
  • delete_video: permanently delete a video. Requires confirm_video_title to match the current title exactly, as a guard against deleting the wrong video.
Captions
  • list_captions: list caption tracks on a video (language, name, status, draft flag).
  • upload_caption: upload an SRT or WebVTT caption track to a video.
  • delete_caption: delete a caption track.
Shorts
  • list_my_shorts: find Shorts in recent uploads (filters by duration ≤60s).
  • get_shorts_analytics: YouTube Analytics query restricted to Shorts (creatorContentType==SHORTS).
Playlists
  • create_playlist: create a playlist (default private).
  • add_to_playlist: add a video to an existing playlist.
Comments
  • list_comments: top-level comment threads on a video.
  • reply_to_comment: reply to a top-level comment.
  • moderate_comment: hold, approve, or reject a comment.
Analytics
  • query_channel_analytics: date-ranged metrics with optional dimensions and filters.
Bridge (when COMFYUI_URL is configured)
  • generate_and_set_thumbnail: generate a thumbnail via ComfyUI and set it on a video in one call.

Quota notes

YouTube Data API free tier = 10,000 units/day. Key operation costs:

  • videos.list, commentThreads.list: 1 unit each.
  • videos.update, comments.insert, thumbnails.set: 50 units each.
  • videos.insert (upload): 1,600 units, so about 6 uploads per day on the free tier.

Most creator-ops workflows stay well under the free cap.

Architecture

┌────────────────┐     ┌──────────────────┐     ┌─────────────────┐
│  MCP client    │────▶│  youtube-mcp     │────▶│  YouTube APIs   │
│  (Claude etc.) │◀────│  (this server)   │◀────│  (Data/Analytics)│
└────────────────┘     └────────┬─────────┘     └─────────────────┘
                                │
                                │ (bridge tools only)
                                ▼
                       ┌──────────────────┐
                       │  ComfyUI         │
                       │  (txt2img)       │
                       └──────────────────┘

OAuth refresh tokens are cached locally and refreshed just-in-time before expiry. The bridge tool downloads image bytes from ComfyUI internally, so ComfyUI does not need to be publicly reachable.

Development

git clone https://github.com/miller-joe/youtube-mcp
cd youtube-mcp
npm install
npm run dev
npm run build
npm test

Requires Node 20+.

Roadmap

Shipped:

  • Videos: list, get, update metadata, delete with title-match confirm guard.
  • Captions: upload, list, delete.
  • Shorts: list_my_shorts (duration filter) and get_shorts_analytics (creatorContentType==SHORTS).
  • Playlists: create, add-to.
  • Comments: list, reply, moderate.
  • Analytics: channel analytics query.
  • ComfyUI thumbnail bridge: generate_and_set_thumbnail.

Planned:

  • Video upload (video_upload) with resumable-upload support.
  • Reporting API for bulk historical data exports.

License

MIT © Joe Miller

Support

If this saves you time, consider supporting development:

Questions fréquentes

Qu'est-ce que io.github.miller-joe/youtube-mcp ?

MCP server for YouTube creator-ops with a ComfyUI bridge for AI thumbnail generation.

Comment installer io.github.miller-joe/youtube-mcp ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add youtube-mcp -e 'YOUTUBE_CLIENT_ID=<YOUTUBE_CLIENT_ID>' -e 'YOUTUBE_CLIENT_SECRET=<your youtube_client_secret>' -e 'YOUTUBE_CLIENT_SECRET_FILE=<YOUTUBE_CLIENT_SECRET_FILE>' -e 'YOUTUBE_TOKEN_FILE=<YOUTUBE_TOKEN_FILE>' -e 'COMFYUI_URL=<COMFYUI_URL>' -e 'COMFYUI_DEFAULT_CKPT=<COMFYUI_DEFAULT_CKPT>' -- npx -y @miller-joe/youtube-mcp@0.1.2. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour io.github.miller-joe/youtube-mcp ?

Oui. Il attend YOUTUBE_CLIENT_ID, YOUTUBE_CLIENT_SECRET, à renseigner dans sa configuration.

io.github.miller-joe/youtube-mcp est-il open source ?

Oui. Son code est sur GitHub sous licence MIT.

Qui maintient io.github.miller-joe/youtube-mcp ?

Il est publié par miller-joe. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.