PluginBench
MCP Server
Active
Apache-2.0

yutu MCP Server

io.github.eat-pray-ai/yutu

CLI, MCP server, and AI agent that automates YouTube video, playlist, comment, and channel management.

What is the yutu MCP server?

yutu is an MCP server (also usable as a CLI and AI agent) that gives AI assistants like Claude and Cursor programmatic control over YouTube via the YouTube Data API. It exposes tools to upload and manage videos, playlists, comments, captions, subscriptions, and channel branding, enabling automated YouTube channel growth workflows. It uses OAuth credentials from Google Cloud to authenticate and act on a user's YouTube account.

yutu is an AI-powered toolkit for automating YouTube workflows, available as a command-line tool, an MCP server, and a multi-agent AI system. As an MCP server, it lets AI agents like Claude and Cursor interact directly with a YouTube channel — uploading videos, editing metadata, managing playlists and comments, handling captions and watermarks, and more — reducing manual effort in channel management and SEO optimization. It requires a Google Cloud Platform project with the YouTube Data API enabled and OAuth credentials for authentication, and can run in stdio or HTTP mode.

How to install yutu

Copy-paste configuration for popular MCP clients.

transport: stdio
Config generated by PluginBench — verify against the source before use.
Environment / auth
  • YUTU_CREDENTIAL
    required
    secret

    GCP project credential for yutu, Base64 encoded JSON or path to JSON file

  • YUTU_CACHE_TOKEN
    required
    secret

    YouTube authentication token, Base64 encoded JSON or path to JSON file

  • YUTU_LOG_LEVEL

    Log level

Claude Desktop
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "yutu": {
      "command": "npx",
      "args": [
        "-y",
        "@eat-pray-ai/yutu",
        "mcp",
        "--mode",
        "stdio"
      ],
      "env": {
        "YUTU_CREDENTIAL": "<YOUR_YUTU_CREDENTIAL>",
        "YUTU_CACHE_TOKEN": "<YOUR_YUTU_CACHE_TOKEN>",
        "YUTU_LOG_LEVEL": "<YOUR_YUTU_LOG_LEVEL>"
      }
    }
  }
}
Cursor
~/.cursor/mcp.json
{
  "mcpServers": {
    "yutu": {
      "command": "npx",
      "args": [
        "-y",
        "@eat-pray-ai/yutu",
        "mcp",
        "--mode",
        "stdio"
      ],
      "env": {
        "YUTU_CREDENTIAL": "<YOUR_YUTU_CREDENTIAL>",
        "YUTU_CACHE_TOKEN": "<YOUR_YUTU_CACHE_TOKEN>",
        "YUTU_LOG_LEVEL": "<YOUR_YUTU_LOG_LEVEL>"
      }
    }
  }
}
Windsurf
~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "yutu": {
      "command": "npx",
      "args": [
        "-y",
        "@eat-pray-ai/yutu",
        "mcp",
        "--mode",
        "stdio"
      ],
      "env": {
        "YUTU_CREDENTIAL": "<YOUR_YUTU_CREDENTIAL>",
        "YUTU_CACHE_TOKEN": "<YOUR_YUTU_CACHE_TOKEN>",
        "YUTU_LOG_LEVEL": "<YOUR_YUTU_LOG_LEVEL>"
      }
    }
  }
}
VS Code
.vscode/mcp.json
{
  "servers": {
    "yutu": {
      "type": "stdio",
      "command": "npx",
      "args": [
        "-y",
        "@eat-pray-ai/yutu",
        "mcp",
        "--mode",
        "stdio"
      ],
      "env": {
        "YUTU_CREDENTIAL": "<YOUR_YUTU_CREDENTIAL>",
        "YUTU_CACHE_TOKEN": "<YOUR_YUTU_CACHE_TOKEN>",
        "YUTU_LOG_LEVEL": "<YOUR_YUTU_LOG_LEVEL>"
      }
    }
  }
}
Claude Code
claude mcp add yutu --env YUTU_CREDENTIAL=<YOUR_YUTU_CREDENTIAL> --env YUTU_CACHE_TOKEN=<YOUR_YUTU_CACHE_TOKEN> --env YUTU_LOG_LEVEL=<YOUR_YUTU_LOG_LEVEL> -- npx -y @eat-pray-ai/yutu mcp --mode stdio

Tools & capabilities

Tools this server exposes to the agent.

  • authAuthenticate with Google/YouTube via OAuth, generating and caching a token file.
  • mcpStart yutu as an MCP server (stdio or HTTP mode) so AI agents can call YouTube operations as tools.
  • agentRun yutu in multi-agent mode (orchestrator, retrieval, modifier, destroyer) to automate YouTube growth workflows using Gemini models.

Use cases

  • Upload and optimize new YouTube videos (titles, descriptions, tags, thumbnails) directly from an AI agent
  • Manage playlists: create, update, and organize videos into playlists
  • Moderate and respond to comments on videos at scale
  • Retrieve channel, video, playlist, comment, caption, and subscription data for analysis or reporting
  • Delete videos, playlists, comments, captions, subscriptions, or channel sections via the 'Destroyer' agent workflow

yutu MCP server FAQ

What does the yutu MCP server do?

It exposes YouTube channel management operations as MCP tools, letting AI agents list/search videos, channels, playlists, and comments (retrieval), upload videos, update metadata, post comments, set thumbnails, and manage captions/watermarks (modification), and delete videos, playlists, comments, captions, subscriptions, or channel sections (destructive operations).

Is yutu free to use?

Yes, yutu is open source (Apache-2.0 licensed) and free to install, but it relies on the YouTube Data API which is subject to Google Cloud Platform's own quota and usage terms.

How do I install yutu as an MCP server in Cursor or VS Code?

Install yutu via npm (@eat-pray-ai/yutu), Homebrew, winget, Go, Docker, or the release binaries, then add an MCP config pointing 'command' to 'yutu' with args ['mcp'] and env vars YUTU_CREDENTIAL and YUTU_CACHE_TOKEN set to your OAuth credential and token file paths. One-click install badges are also provided for VS Code and Cursor.

What authentication does yutu require?

It requires a Google Cloud Platform project with the YouTube Data API v3 enabled, an OAuth Client ID (Desktop app type) saved as client_secret.json, and running 'yutu auth --credential client_secret.json' once to generate a cached youtube.token.json used for subsequent API calls.

Can yutu run over HTTP instead of stdio?

Yes, running 'yutu mcp --mode http --auth' starts an HTTP-based MCP server (default port 8216) that supports OAuth-based client connections, in addition to the default stdio transport.

Does yutu include an AI agent mode beyond the MCP server?

Yes, yutu has a multi-agent mode with Orchestrator, Retrieval, Modifier, and Destroyer agents that automate YouTube growth strategy end-to-end, currently supporting only Google's Gemini models configured via environment variables.

README (reference)

Source of truth, from the repository.

Yutu

yutu

Static Badge Go Report Card GitHub License Go Reference Go Coverage

GitHub Repo stars GitHub Downloads GitHub Actions build Status GitHub Actions CodeQL Status GitHub Actions test Status LINUX DO

GitHub Release Homebrew Formula Version WinGet Package Version npm Version

YouTube CLI, MCP server, Skill and Agent - AI-powered toolkit that grows YouTube channel on autopilot | Product
Hunt

yutu is a CLI, MCP server, and AI agent for YouTube that automates your entire YouTube workflow — from uploading and optimizing videos to managing comments, playlists, and channel branding — so you can get more views, higher click-through rates, and stronger audience engagement with less manual effort. 中文文档

mcp demo

Table of Contents

Prerequisites

An account on Google Cloud Platform is required. Set up the following:

  1. Create a GCP Project and enable these APIs under APIs & Services -> Enable APIs and services:

  2. Create OAuth credentials:

    • Go to APIs & Services -> OAuth consent screen, create a consent screen with yourself as a test user
    • Go to Credentials -> Create Credentials -> OAuth Client ID, select Desktop app
    • Download the credential file and save it as client_secret.json, it should look like
    {
      "installed": {
        "client_id": "11181119.apps.googleusercontent.com",
        "project_id": "yutu-11181119",
        "auth_uri": "https://accounts.google.com/o/oauth2/auth",
        "token_uri": "https://oauth2.googleapis.com/token",
        "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs",
        "client_secret": "XXXXXXXXXXXXXXXX",
        "redirect_uris": [
          "http://localhost"
        ]
      }
    }
    
  3. Authenticate:

    yutu auth --credential client_secret.json
    

    A browser window will open for you to grant YouTube access. After granting permission, a token is saved to youtube.token.json.

    {
      "access_token": "ya29.XXXXXXXXX",
      "token_type": "Bearer",
      "refresh_token": "1//XXXXXXXXXX",
      "expiry": "2024-05-26T18:49:56.1911165+08:00",
      "expires_in": 3599
    }
    

By default, yutu will read client_secret.json and youtube.token.json from the current directory, --credential/-c and --cacheToken/-t flags are available only in auth subcommand. To modify the default path in all subcommands, set these environment variables.

Global Environment Variables

VariableDescriptionDefault
YUTU_CREDENTIALPath, Base64, or JSON of OAuth client secretclient_secret.json
YUTU_CACHE_TOKENPath, Base64, or JSON of cached OAuth tokenyoutube.token.json
YUTU_ROOTRoot directory for file resolutionCurrent working directory
YUTU_LOG_LEVELLog level: DEBUG, INFO, WARN, ERRORINFO

Installation

You can download yutu from releases page directly, or use the following methods as you prefer.

<details> <summary>GitHub Actions</summary>

There are two actions available for yutu, one is for general purpose and the other is for uploading video to YouTube. Refer to youtube-action and youtube-uploader for more information.

</details> <details> <summary>Node.js</summary>
❯ npm i -g @eat-pray-ai/yutu
</details> <details> <summary>Docker</summary>
❯ docker pull ghcr.io/eat-pray-ai/yutu:latest
❯ docker run --rm ghcr.io/eat-pray-ai/yutu:latest
# make sure client_secret.json is in the current directory
❯ docker run --rm -it -u $(id -u):$(id -g) -v $(pwd):/app -p 8216:8216 ghcr.io/eat-pray-ai/yutu:latest
</details> <details> <summary>Gopher</summary>
❯ go install github.com/eat-pray-ai/yutu@latest
</details> <details> <summary>Linux</summary>
❯ curl -sSfL https://raw.githubusercontent.com/eat-pray-ai/yutu/main/scripts/install.sh | bash
</details> <details> <summary>macOS</summary>

Install yutu using Homebrew🍺(recommended), or run the shell script.

❯ brew install yutu

# or
❯ curl -sSfL https://raw.githubusercontent.com/eat-pray-ai/yutu/main/scripts/install.sh | bash
</details> <details> <summary>Windows</summary>
❯ winget install yutu
</details> <details> <summary>Verifying Installation</summary>

Verify the integrity and provenance of yutu using its associated cryptographically signed attestations.

# Docker
❯ gh attestation verify oci://ghcr.io/eat-pray-ai/yutu:latest --repo eat-pray-ai/yutu

# Linux and macOS(if installed using shell script)
❯ gh attestation verify $(which yutu) --repo eat-pray-ai/yutu

# Windows
❯ gh attestation verify $(where.exe yutu.exe) --repo eat-pray-ai/yutu
</details>

Agent

yutu provides an agent mode to automate YouTube workflows. The system uses a multi-agent architecture where a central orchestrator delegates tasks to specialized agents:

AgentRoleCapabilities
OrchestratorCoordinates the entire workflow, plans strategy, and delegates to sub-agentsYouTube growth strategy, SEO optimization, task routing
RetrievalGathers data from YouTube and the web (read-only)List/search videos, channels, playlists, comments, captions, subscriptions, members, and more; Google Search
ModifierCreates and updates YouTube contentUpload videos, create playlists, update metadata, post comments, set thumbnails, manage captions and watermarks
DestroyerHandles destructive operations with extra cautionDelete videos, playlists, comments, captions, subscriptions, channel sections, and watermarks

Currently, the agent mode is under active development, only supports Google's Gemini models with the following environment variables set:

❯ export YUTU_ADVANCED_MODEL=google:gemini-3.1-pro-preview
❯ export YUTU_LITE_MODEL=google:gemini-3-flash-preview
❯ export YUTU_LLM_API_KEY=your_gemini_api_key
// Optional settings
❯ export GOOGLE_GEMINI_BASE_URL=https://generativelanguage.googleapis.com/
❯ export YUTU_AGENT_INSTRUCTION=Your custom instruction here

YUTU_ADVANCED_MODEL is used by the orchestrator agent, while YUTU_LITE_MODEL is used by all other agents. Both use the provider:modelName format (only google is supported). If only one is set, the other defaults to the same value.

Agent Environment Variables

VariableDescriptionRequired
YUTU_ADVANCED_MODELModel for orchestrator agent (format: provider:modelName)At least one of YUTU_ADVANCED_MODEL or YUTU_LITE_MODEL
YUTU_LITE_MODELModel for sub-agents (format: provider:modelName)At least one of YUTU_ADVANCED_MODEL or YUTU_LITE_MODEL
YUTU_LLM_API_KEYAPI key for the model providerYes
GOOGLE_GEMINI_BASE_URLBase URL for Gemini APINo
YUTU_AGENT_INSTRUCTIONCustom instruction for orchestrator agentNo
YUTU_RETRIEVAL_INSTRUCTIONCustom instruction for retrieval agentNo
YUTU_MODIFIER_INSTRUCTIONCustom instruction for modifier agentNo
YUTU_DESTROYER_INSTRUCTIONCustom instruction for destroyer agentNo

Then run the following command for detail usage:

❯ yutu agent --help
❯ yutu agent --args "help"
# console mode
❯ yutu agent --args "console"
# web mode with three sub-launchers: api, a2a and webui
❯ yutu agent --args "web api a2a webui"

MCP Server

Before using yutu as an MCP server, make sure yutu is installed(see Installation section), and you have a valid client_secret.json and youtube.token.json files(refer to Prerequisites section).

You can add yutu as an MCP server in VS Code or Cursor by clicking corresponding badge, or use the CLI commands below for your preferred tool.

Install in VS Code Install in Cursor

<details> <summary>Claude Code</summary>
# Stdio mode
❯ claude mcp add -e YUTU_CREDENTIAL=/absolute/path/to/client_secret.json \
  -e YUTU_CACHE_TOKEN=/absolute/path/to/youtube.token.json \
  yutu -- yutu mcp

# HTTP mode (start the server first: yutu mcp --mode http --auth)
❯ claude mcp add --transport http \
  --client-id YOUR_CLIENT_ID.apps.googleusercontent.com \
  --client-secret \
  yutu http://localhost:8216/mcp
</details> <details> <summary>Codex</summary>
# Stdio mode
❯ codex mcp add --env YUTU_CREDENTIAL=/absolute/path/to/client_secret.json \
  --env YUTU_CACHE_TOKEN=/absolute/path/to/youtube.token.json \
  yutu -- yutu mcp

# HTTP mode (start the server first: yutu mcp --mode http --auth)
❯ codex mcp add --url http://localhost:8216/mcp \
  --oauth-client-id YOUR_CLIENT_ID.apps.googleusercontent.com \
  yutu
</details> <details> <summary>Manual Configuration (VS Code, Cursor, OpenCode, etc.)</summary>

Add the following to your MCP settings. Remember to replace the values of YUTU_CREDENTIAL and YUTU_CACHE_TOKEN with correct paths on your local machine.

{
  "yutu": {
    "type": "stdio",
    "command": "yutu",
    "args": [
      "mcp"
    ],
    "env": {
      "YUTU_CREDENTIAL": "/absolute/path/to/client_secret.json",
      "YUTU_CACHE_TOKEN": "/absolute/path/to/youtube.token.json"
    }
  }
}
</details>

Skills

yutu provides a unified skill that extends AI agents with YouTube domain knowledge, common workflows, and SEO best practices — covering videos, playlists, comments, channels, captions, subscriptions, and more.

❯ npx skills add https://github.com/eat-pray-ai/yutu/tree/main/skills/youtube

See skills/youtube/SKILL.md for the full list of supported operations.

Usage

❯ yutu        
yutu is a CLI, MCP server, and AI agent for YouTube that can automate almost all YouTube workflows.

Environment variables:
  YUTU_CREDENTIAL    Path/Base64/JSON of OAuth client secret (default: client_secret.json)
  YUTU_CACHE_TOKEN   Path/Base64/JSON of cached OAuth token (default: youtube.token.json)
  YUTU_ROOT          Root directory for file resolution (default: current working directory)
  YUTU_LOG_LEVEL     Log level: DEBUG, INFO, WARN, ERROR (default: INFO)

Usage:
  yutu [flags]
  yutu [command]

Available Commands:
  activity               Manage activities on YouTube
  agent                  Start an agent to automate YouTube workflows
  auth                   Authenticate with YouTube APIs
  caption                Manage YouTube video captions
  channel                Manage YouTube channels
  channelBanner          Manage YouTube channel banners
  channelSection         Manage YouTube channel sections
  comment                Manage YouTube comments
  commentThread          Manage YouTube comment threads
  completion             Generate the autocompletion script for the specified shell
  help                   Help about any command
  i18nLanguage           Manage YouTube i18n languages
  i18nRegion             Manage YouTube i18n regions
  mcp                    Start MCP server
  member                 Manage YouTube channel members
  membershipsLevel       Manage YouTube memberships levels
  playlist               Manage YouTube playlists
  playlistImage          Manage YouTube playlist images
  playlistItem           Manage YouTube playlist items
  search                 Manage YouTube search
  subscription           Manage YouTube subscriptions
  superChatEvent         Manage YouTube Super Chat events
  thirdPartyLink         Manage YouTube third-party links
  thumbnail              Manage YouTube video thumbnails
  version                Show the version of yutu
  video                  Manage YouTube videos
  videoAbuseReportReason Manage YouTube video abuse report reasons
  videoCategory          Manage YouTube video categories
  watermark              Manage YouTube watermarks

Flags:
  -h, --help   help for yutu

Use "yutu [command] --help" for more information about a command.

Features

Please refer to FEATURES.md for more information.

Contributing

Please refer to CONTRIBUTING.md for more information.

Star History

Star History Chart

Related MCP servers

Give your AI agent stealth web scraping with Cloudflare bypass and CSS selection, powered by Scrapling.

67k
Python
BSD-3-Clause
View repository →

Give your AI coding agent full control of a live Chrome browser for automation, debugging, and performance analysis.

45k
TypeScript
Apache-2.0
View repository →

Let AI agents manage your Puter files, websites, and serverless workers over MCP.

43k
TypeScript
AGPL-3.0
View repository →

Browser automation for AI agents via MCP, powering ByteDance's Agent TARS hybrid GUI/DOM browser control.

37k
TypeScript
Apache-2.0
View repository →

Run arbitrary shell commands from an MCP-connected AI agent.

37k
TypeScript
Apache-2.0
View repository →

Filesystem access MCP server from ByteDance's UI-TARS/Agent TARS ecosystem.

37k
TypeScript
Apache-2.0
View repository →