yutu CLI
yutu runs a YouTube channel from the terminal: videos, playlists, comments. Has an MCP server, a built-in agent and a skill for Claude Code and Codex
- 703 ★ on the repository
- Last commit
- Apache-2.0
Broad access
Why this level
- Publishes, changes and deletes videos, playlists, comments and subscriptions on the channel on behalf of the account owner
- Keeps the channel's OAuth token in `youtube.token.json` and the app key in `client_secret.json`
- The built-in agent sends the texts it reads to the model provider, and the HTTP mode opens port 8216
Install
- Works in
In your terminal, with SkillFoxx CLI
npx skillfoxx add cli/yutuDetects the agents on your machine, shows the access level and pins the version.
Other ways to install
Access and checks
How we reviewBroad accessThe tool can change data, run commands or handle secrets.
- Publishes, changes and deletes videos, playlists, comments and subscriptions on the channel on behalf of the account owner
- Keeps the channel's OAuth token in `youtube.token.json` and the app key in `client_secret.json`
- The built-in agent sends the texts it reads to the model provider, and the HTTP mode opens port 8216
This is third-party code. Review the repository files before installing.
What it does
yutu is a Go program with a command-line interface to the YouTube Data API v3. Each channel resource gets its own command: `video`, `playlist`, `comment`, `caption`, `channel`, `subscription`, `liveBroadcast`, `thumbnail` and others. Subcommands insert, list, update and delete, for example `yutu video insert --file video.mp4 --title ... --privacy unlisted`. Output can be JSON, passed to `jq` or other programs. It needs a Google Cloud project with YouTube Data API v3 enabled and an OAuth client of the Desktop app type. The command `yutu auth --credential client_secret.json` opens a browser, the user grants access and a token is saved to `youtube.token.json`. The paths of both files can be overridden with the `YUTU_CREDENTIAL` and `YUTU_CACHE_TOKEN` variables. There are three modes on top of the same operations. `yutu mcp` starts an MCP server over stdio, and with the `--mode http` flag it listens on port 8216 and accepts OAuth. `yutu agent` starts the built-in Miffy agent, which needs a model provider (`google` or `openai`-compatible), a model name and your own key. The `youtube` skill from the `skills/youtube` folder is installed with `npx skills add eat-pray-ai/yutu --skill youtube`: it teaches the agent the working order, safe steps before deletion and YouTube SEO principles.
Who it is for. For YouTube channel owners and editors and developers who want to hand Claude Code, Codex or Cursor video uploads, comment and playlist work and the preparation of titles and descriptions.
Good fit when
- You need to upload a video with `yutu video insert` and put it straight into a queue playlist as unlisted so the title and description can be finished later
- You need to process comments in bulk: export them with the `commentThread-list` tool, mark spam or hide with `comment-setModerationStatus`
- The agent must upload or update captions and thumbnails of videos through `caption` and `thumbnail`
- You need an MCP server through which Claude Code or Cursor see YouTube channels, playlists and analytics
- You want a built-in agent for the channel with your own model key and no separate client, using `yutu agent`
Not a fit when
- You have no Google Cloud account or cannot create an OAuth client: yutu cannot authorize without it
- You only need transcripts of other people's videos with no channel sign-in: a server that reads transcripts by link fits better
- The YouTube Data API daily limit of 10,000 units for shared requests is too tight: `search.list` and `videos.insert` have separate buckets, other operations share the common limit
- Your channel cannot be trusted to an agent: yutu has commands that delete videos, comments and playlists
Example request
Upload the clip from interview.mp4 to my channel as unlisted, write a title under 60 characters and add it to the playlist DraftsLimitations
- The GitHub license is Apache-2.0. The header of the `SKILL.md` file states MIT, so check with the author which applies to the skill. The latest release is v0.11.0, a pre-1.0 version.
- A Google Cloud project is required: enable YouTube Data API v3 (mandatory), YouTube Analytics API and YouTube Reporting API (optional), create a consent screen with yourself as a test user and an OAuth client of the Desktop type.
- According to `docs/FEATURES.md` the YouTube quota is 10,000 units a day for most operations, with `search.list` and `videos.insert` in separate buckets. Operation costs in units: caption upload 400, update 450, list 50.
- The token `youtube.token.json` lies on disk in the current folder by default. Whoever gets the file together with `client_secret.json` controls the channel.
- The built-in agent calls your chosen model provider with your key, so the descriptions and comments it reads go to that provider.
How to disable. Remove the `yutu` entry from the client's MCP settings and drop the skill. It is best to revoke the token on the Google account access page and then delete `youtube.token.json` and `client_secret.json`. Remove the program itself with the package manager you installed it with.
FAQ
Which install methods does yutu have?
`npm i -g @eat-pray-ai/yutu`, `brew install yutu` on macOS, `winget install yutu` on Windows, the image `ghcr.io/eat-pray-ai/yutu:latest` for Docker, `go install github.com/eat-pray-ai/yutu@latest` and the `scripts/install.sh` script for Linux and macOS. Authenticity is checked with `gh attestation verify`.
How does yutu's MCP mode differ from the agent mode?
In `yutu mcp` mode your own agent (Claude Code, Codex, Cursor) gets the YouTube tools and brings its own model. In `yutu agent` mode the built-in Miffy agent works and needs a provider, a model and an API key. The YouTube operations are the same in both.
What does the http mode of the MCP server mean?
The command `yutu mcp --mode http` listens on port 8216 at `/mcp` and accepts a client through OAuth. The Claude Code example uses the `--client-id` flag and Codex uses `--oauth-client-id`. The stdio mode is simpler and opens no port.
Which operations does the skill treat as dangerous?
The skill divides tools into three groups: read, write and irreversible deletion. The deleting ones, fifteen of them, such as `video-delete`, `playlist-delete`, `comment-delete` and `subscription-delete`, require listing the objects and getting explicit user confirmation.
How is the video publishing workflow arranged?
In `skills/youtube/references/workflows.md` a video is first uploaded as unlisted and placed in a queue playlist, with a short content summary for the AI in the description. The agent then reads the description and prepares a title, description, tags and thumbnail guidance, and only after that is the video published.
What about the YouTube request quota?
The shared YouTube Data API quota is 10,000 units a day, with search and video upload in separate buckets. `docs/FEATURES.md` gives the price of every operation. For example, a channel list request costs 1 unit and a caption upload 400.
Discussion
No questions or reviews yet.
Related
CLI toolsYouTube MCP (Zubeid)
Zubeid YouTube MCP Server
YouTube MCP on a Data API key: an agent searches videos and channels with a subscriber-count filter and reads playlists, statistics and transcripts
YouTube Data MCP (kirbah)
YouTube Data MCP Server (kirbah)
YouTube MCP with trimmed replies: transcripts without a key, video and channel statistics, trends, comments, a MongoDB cache and growing-channel search
yt-fts downloads subtitles of YouTube channels and playlists into SQLite and finds phrases with links to the exact second, plus semantic search and chat
YouTube Skills
YouTube Skills for AI Agents
A set of skills that gives an agent YouTube transcripts, video and channel search, and playlist extraction over one API
The /watch skill turns a link or file into frames and captions, or with a Gemini key hands the whole video to Google for the agent to answer from
MCP server for YouTube transcripts: an agent gets a video transcript by URL, with timestamps and metadata
Comparison with similar tools
Entries that share the main search query, and how they differ.
| Entry | Official | Authentication | Repository stars | Main difference |
|---|---|---|---|---|
| yutu (this entry) | no | 703 | ||
| YouTube Transcript MCP Server | no | not required | 492 | only reads video transcripts by link and does not manage a channel |
| MCP publishing connectors without manual OAuth | no | OAuth | 0 | publishes to YouTube, Instagram, VK and Dzen through a self-hosted Nango, which holds the tokens |
| YouTube MCP (Zubeid) | no | API key | 588 | YouTube MCP on a Data API key |
README in short
The front page begins with prerequisites (Google Cloud, OAuth, authorization) and a table of environment variables. Next come install methods with authenticity checks through attestations, the agent mode with its flags, MCP setup for Claude Code, Codex and a manual variant for VS Code, Cursor and OpenCode, and a section on the skill. It ends with a command reference. The repository holds a table of supported operations with quota prices, a contributor guide, agent instructions in `AGENTS.md`, test generators and a Chinese translation.