youtube-kit

io.github.eukosh由 GitHub 帳號 eukosh 發布v0.7.3更新於 Nov 2, 2026

YouTube CLI and MCP server: search and read public YouTube, and manage your own channels.

概覽

AI 產生的概覽

本機 MCP 伺服器兼命令列工具,讓助理搜尋與讀取公開 YouTube 內容,並管理自己的頻道:分析資料、影片、字幕、留言和播放清單。

可以做什麼
  • 搜尋並讀取公開的 YouTube 影片、頻道、播放清單和留言
  • 取得頻道分析資料與曝光次數,可依日期、影片、國家、裝置或流量來源細分
  • 讀取、上傳、取代、隱藏或刪除字幕軌,包括轉錄文字和機器翻譯
  • 列出、發布、回覆、編輯、審核、核准、擱置、拒絕或刪除留言,並可封鎖作者
  • 上傳、更新、設定縮圖、評分或刪除影片,並管理播放清單和頻道品牌設定
  • 查看並切換多個已登入頻道,以及訂閱或取消訂閱
適用情境
適合讓助理處理自己的 YouTube 頻道:查看成效數據、擷取轉錄文字、審核留言,或上傳與編輯影片;也適合在對話中直接查詢公開的 YouTube 內容。
執行需求
透過 uvx 在本機執行(Python/uv)。需要一個有 YouTube 頻道的 Google 帳號,並完成一次性的 Google Cloud 設定:透過 ytk auth login 建立自己的 OAuth 桌面用戶端 JSON,並啟用 YouTube Data、Analytics 和 Reporting API。公開讀取也可改用 YOUTUBE_API_KEY。可選 YOUTUBE_CHANNEL 設定預設頻道。每個 Cloud 專案每天有 10,000 單位配額。
安裝前請注意
伺服器以你的 Google OAuth 憑證運作,可在頻道上寫入、上傳和刪除;刪除為兩步確認,並對熱門或較舊的公開影片設限,但任何持有權杖者都能直接呼叫 API。憑證和設定存放在使用者設定目錄中。YOUTUBE_API_KEY 和 OAuth 用戶端 JSON 屬於機密。每日 API 配額有限,且除非關閉,工具每天會檢查一次 PyPI 更新。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 youtube-kit,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

youtube-kit

[CI] [PyPI] [Python] [License: MIT] [Listed on mcpservers.org]

YouTube CLI (ytk) and MCP server, built for agents and humans. Let Claude Code, Codex, Cursor, Claude Desktop or ChatGPT work on your channel: analytics, transcripts, uploads, metadata, playlists and comment moderation. It handles several channels, and you can run the same commands in your own terminal.

[Claude Code answering "what were my top 3 videos in the last 28 days?" with ytk]

Quick start

sh
uv tool install youtube-kitytk auth login      # one-time Google Cloud setup, then pick your channel

You need a Google account with a YouTube channel, and uv (brew install uv on macOS). The first ytk auth login takes about 5 minutes: it opens each Google Cloud page, says what to click and picks up the file you download.

sh
ytk analytics --by video --since 90d --limit 5     # your top videos of the last 90 daysytk comment list --status held                     # comments waiting for reviewytk caption transcript VIDEO | jq -r .text         # what you say in one of your videosytk channel get @mkbhd | jq .stats                 # any public channel

[ytk commands piping JSON into jq]

Or ask your agent: "Which of my videos got the most views this month, and are any comments waiting for review?"

Use it from your agent

Skill: Claude Code, Codex, Cursor and other shell agents

A short skill teaches the agent the CLI. It loads only when a YouTube task comes up.

sh
claude plugin install youtube-kit --marketplace eukosh/youtube-kit   # Claude Codecodex plugin marketplace add eukosh/youtube-kit                      # Codex, then:codex plugin add youtube-kit@youtube-kitnpx skills add eukosh/youtube-kit -g                                 # Cursor and others

The plugins follow ytk releases. Codex updates them at startup; Claude Code does once you turn on auto-update under /plugin → Marketplaces. With npx skills, run npx skills update.

MCP: Claude Desktop, ChatGPT and other MCP clients

ytk mcp serves the same operations as tools. In Claude Code:

sh
claude mcp add youtube -- uvx youtube-kit mcp

In clients configured with JSON (Claude Desktop, Cursor and others):

json
{  "mcpServers": {    "youtube": { "command": "uvx", "args": ["youtube-kit", "mcp"] }  }}

In the ChatGPT desktop app: Settings → MCP servers → Add server → STDIO, with the command uvx youtube-kit mcp. Codex shares that setting (codex mcp add youtube -- uvx youtube-kit mcp).

The server uses your ytk auth login logins. If you also installed ytk with uv tool install, uvx runs that installed version: ytk upgrade updates both. Restart the MCP client afterwards. Not set up yet? The model can walk you through it with the setup_guide tool.

What it covers

AreaOperations
Analyticstotals, or breakdowns by day, month, video, country, device, OS, traffic source and what's behind it (search terms, suggesting videos, sites), playback location, age, gender, subscribed status, content type (long-form, Shorts, live) or sharing service; audience retention of a video; filters by video, content type, country or traffic source
Impressionsthumbnail impressions and click-through rate, in total, by day or by video
Videosget, categories, upload (resumable, with progress), update metadata, set thumbnail, wait for processing, like or dislike, check your rating, delete
Captionstranscripts of your videos, from your captions or YouTube's automatic ones, optionally machine-translated; list tracks on any video; upload, replace, hide, delete
Commentslist (published, held for review, likely spam), replies, post, reply, edit, delete, approve, hold, reject, ban the author
Playlistslist, get, items, create, update, set image, add, remove, move, delete
Channelget, recent activity, your logged-in channels, about info (description, keywords, country, language, trailer), banner, watermark, home page sections
Searchvideos, channels and playlists, filtered by channel or date
Subscriptionslist, subscribe, unsubscribe

Not covered: localizations, live streaming and channel memberships. ytk --help lists every command, and the skill fits them on one page with jq recipes.

Channels and login

ytk auth login connects one channel. Run it again for each of your other channels, including brand channels: pick the one you want when Google asks.

sh
ytk channel mine                                           # your channels; one is the defaultytk auth switch @second                                    # change the defaultytk video upload clip.mp4 --title Hi --my-channel @third   # use another channel for one commandytk auth logout @third

Commands work on the default channel unless --my-channel names another, by UC… ID, @handle or exact title. MCP tools take my_channel the same way, so you can say "upload this to my gaming channel". YOUTUBE_CHANNEL sets the default for one shell or one MCP server.

Why your own Google Cloud client. YouTube's daily quota of 10,000 units belongs to a Cloud project. A client shipped inside ytk would split one quota among all its users. Yours is shared by your channels only.

Let an agent set it up. ytk auth guide (setup_guide over MCP) lists what's left, with links and the values to enter. With the gcloud CLI signed in, the agent can create the project and enable the APIs for you. The rest needs your browser. Already have the client JSON? Run ytk auth login --client-secrets FILE.

[The guided ytk auth login setup]

Manual setup, files and environment variables

The guided setup does this:

  1. In the Google Cloud Console, create a project and enable YouTube Data API v3, YouTube Analytics API and YouTube Reporting API (for impressions and click-through rate).
  2. In Google Auth Platform, click Get started (audience External). On Branding, fill in the home page (https://github.com/eukosh/youtube-kit), the privacy policy link (https://github.com/eukosh/youtube-kit/blob/main/PRIVACY.md) and the authorized domain github.com; Google won't publish without them. Then on Audience click Publish app. While the app is in Testing, only listed test users can sign in and Google logs them out after 7 days.
  3. Under Clients, create a client of type Desktop app and download its JSON.
  4. ytk auth login --client-secrets path/to/client_secret.json. Google warns that it hasn't verified the app: it's your own, so click Advanced, then Go to ytk (unsafe).

Public data (search, videos, channels, playlists, comments) also works with just an API key: create one in the same project and export YOUTUBE_API_KEY=..., or put it in the MCP server's env. Without a key, ytk reads public data through your login.

ytk remembers each channel's handle from when you logged in. After renaming a channel on YouTube, name it by its UC… ID or run ytk auth login for it again.

Credentials and config.toml live in the user config directory (~/Library/Application Support/youtube-kit/ on macOS, ~/.config/youtube-kit/ on Linux). ytk auth status prints the exact paths. These environment variables override them:

VariablePurpose
YOUTUBE_API_KEYAPI key for public data
YOUTUBE_CLIENT_SECRETSPath to the OAuth client JSON
YOUTUBE_TOKEN_DIRDirectory of stored logins, one file per channel
YOUTUBE_CHANNELChannel to work on by default (UC… ID, @handle or exact title), overriding ytk auth switch
YOUTUBE_CONFIG_FILEPath to config.toml (delete limits, update check)
YTK_NO_UPDATE_CHECKSet (even empty): no daily check for a newer release

Built for agents

  • JSON out, exit codes for failures. Every command prints one JSON document on stdout. On failure, stdout stays empty, the last line of stderr is {"error": {"type": "not_found", "message": "..."}}, and the exit code names the type: 2 bad input, 3 not found, 4 not authorized, 5 quota exceeded, 6 forbidden, 7 network, 8 confirmation required, 9 protected, 10 timeout, 1 anything else. The skill tells agents what to do about each. At a terminal you get colored JSON and plain-sentence errors.
  • Forgiving inputs. Pass IDs or pasted YouTube URLs, @handles for channels, and dates or spans like 90d.
  • Quota costs up front. Each command's --help and each MCP tool description states what it spends.
  • One core. The CLI and the MCP server are thin layers over the same code, and a test fails if either misses an operation.
  • Guarded deletes. See below.
  • Update notices. ytk checks PyPI once a day in the background and tells you when a newer release is out: after the output at a terminal, as an {"update": ...} stderr line for agents, and in the MCP server's instructions at startup. ytk upgrade installs it. Turn the check off with check = false under [updates] in config.toml or YTK_NO_UPDATE_CHECK=1; it's also off when CI or NO_UPDATE_NOTIFIER is set.

Deleting

YouTube has no trash, and agents make mistakes. So deleting videos, playlists, comments and caption tracks is guarded:

  • Two steps. The first call deletes nothing. At a terminal you get a [y/N] prompt. An agent gets exit 8 with a description of the target and must run the command again with --confirm <id>, so the approval always names the exact thing being deleted.

  • Damage limit. A video with more than 100 views, or one that is public and was uploaded more than 7 days ago, can't be deleted here at all (exit 9). Delete those in YouTube Studio. The limits live in config.toml (ytk auth status shows where):

    toml
    [delete_protection]max_views = 100max_public_age_days = 7
  • Harness approval. Have your agent ask you before every delete. In Claude Code, add this to .claude/settings.json:

    json
    {"permissions": {"ask": ["Bash(ytk video delete:*)", "Bash(ytk playlist delete:*)", "Bash(ytk comment delete:*)", "Bash(ytk caption delete:*)"]}}
  • Idempotent. Deleting something that is already gone succeeds with "already_gone": true.

This stops mistakes, not a determined agent. Anything holding your OAuth token can call the API directly.

Quota

Google gives each Cloud project 10,000 units a day, resetting at midnight Pacific time. Reads cost 1 unit per request, most writes 50, and guarded deletes 52, or 102 for a caption track (they look up the target and check ownership first). search and uploads don't use those units: each gets its own 100 calls a day, one per page of 50 search results or per upload. ytk analytics and ytk impressions use the separate YouTube Analytics and Reporting API quotas.

Contributing

See CONTRIBUTING.md for the development setup and CHANGELOG.md for what changed. Report security issues privately, as SECURITY.md describes.

License

MIT. youtube-kit is not affiliated with or endorsed by Google or YouTube. YouTube is a trademark of Google LLC.

來源:README.md,提交 52c8e49

工具

0
SourceWeft 曾在隔離沙箱中以無憑證方式啟動該軟體包一次,以列出其工具,但未能完成:軟體包安裝失敗。

版本歷史

5
  1. v0.7.3最新Oct 26, 2026
  2. v0.7.2Oct 25, 2026
  3. v0.7.1Oct 21, 2026
  4. v0.7.0Oct 20, 2026
  5. v0.6.0Oct 18, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分