Skip to content

Releases

v0.3.3

Choose a tag to compare

@pratikgh0se pratikgh0se released this 08 Nov 07:43

Added

  • youtube_reset_consumption_data can also delete local watch events: includeWatchEvents, with optional watchedFrom/watchedTo (inclusive days). It still requires confirm: true, and the confirmation names exactly what will be deleted.

Fixed

  • youtube-auth now checks a stored sign-in with Google and re-runs the browser sign-in when the token is dead, instead of reporting authorized: true. A network error leaves the stored sign-in untouched. New --force option.

Testing

  • Offline: 423/423 tests.
  • Live: 79/79 tools against a dedicated test channel.
  • Real installs from the published tarball: MCP stdio client, Claude Code plugin (inside and outside the repo), Codex CLI.
  • Not tested inside the apps: Claude Desktop, Cursor, VS Code, Zed.

v0.3.2

Choose a tag to compare

@pratikgh0se pratikgh0se released this 02 Nov 07:52

Bug fix release.

Fixed

  • Claude Code plugin: the server definition moved from the root .mcp.json into .claude-plugin/plugin.json, so opening this repo as a project no longer loads the server with unsubstituted ${user_config.*} values.
  • Environment values that are entirely an unresolved ${...} placeholder now count as unset, so status no longer reports a placeholder as a configured API key.

Testing

  • 79 of 79 tools passed the live test against a dedicated test channel, on this code before the version bump. Upload resume and cancel were only exercised on a completed upload.
  • Installed from the release files: the npm tarball (with a live API call), Codex (real session), and a Claude Code marketplace install (test values only).

Not tested in this release

  • Claude Desktop: the .mcpb was run on regular Node, not inside the app.
  • Cursor, VS Code and Zed: launch settings were checked, but the apps were not opened.
  • Gemini CLI, Antigravity CLI, Windsurf, Cline, goose, OpenCode, OpenClaw and Hermes.

v0.3.1

Choose a tag to compare

@github-actions github-actions released this 31 Oct 08:44
f28829c

What's Changed

Full Changelog: v0.3.0...v0.3.1

v0.3.0

Choose a tag to compare

@pratikgh0se pratikgh0se released this 29 Oct 07:46
2332cc5

Breaking changes. Tool count is now 79.

  • Removed tools: youtube_approve_upload, youtube_approve_playlist, youtube_approve_moderation, youtube_approve_creator_content. Use the single youtube_approve for every preflight preview.
  • youtube_download_caption now takes fileName (a plain name ending in .srt, .vtt, .sbv or .txt) instead of outputPath, writes only into <state dir>/downloads/ (created 0700) and returns the absolute path. Its readOnlyHint annotation is removed because it writes a local file.
  • youtube_download_caption no longer needs an approval step, so youtube_preflight_caption_download is no longer part of the flow.
  • youtube_create_comment now works on your own videos only.
  • Node.js 22.13 or newer is required (local storage uses node:sqlite).
  • Claude Code plugin settings that were optional are now required; see docs/SETUP.md.

Added

  • archive tools for owned videos (youtube_archive_video with preflight and approval)
  • youtube_creator_report: allowlisted YouTube Analytics report (metrics, dimensions, filters, sort, maxResults; default last 28 days) with up-front invalid_input for known-invalid combinations
  • youtube_trending (most popular chart, 1 quota unit)
  • youtube_list_channel_videos (recent uploads with statistics for any channel ID or @handle, about 3 quota units per page)
  • youtube_preflight_update_channel and youtube_update_channel: edit description, keywords, country and default language of the selected channel through preflight, youtube_approve, execute (untouched branding fields are kept)
  • youtube_preflight_unsubscribe_many and youtube_unsubscribe_many: remove up to 100 subscriptions with one approval, per-item results, partial report if quota runs out
  • youtube_search filters: order, publishedAfter, publishedBefore, videoDuration, channelId, regionCode, relevanceLanguage, safeSearch, plus pageToken and nextPageToken in results (backwards compatible)
  • youtube_list_subscriptions: pageToken and details: true (subscriberCount, videoCount, lastUploadAt; about 1 extra quota unit per channel)
  • live end-to-end test script (scripts/live-e2e.mjs) covering every tool group
  • beginner setup guide: docs/SETUP.md

Changed

  • one youtube_approve tool replaces the four per-area approve tools (breaking, see above)
  • Safety model wording: channel and content writes use preflight, youtube_approve, execute. Viewer actions (subscribe, unsubscribe, rate_video), youtube_create_comment and local curation and reset tools are single-step writes that require confirm: true.
  • youtube_unsubscribe_many reports unknown (not failed) for items whose outcome is uncertain after a server or network error, with an action pointing to youtube_list_subscriptions. Bulk unsubscribe now also verifies that the signed-in account is the selected profile's channel.
  • youtube_creator_report defaults its end date to the Pacific (America/Los_Angeles) day and fails with provider_error on an analytics response with missing column names.
  • youtube_update_channel refuses an incomplete channel read instead of building an update from it.
  • caption download needs no approval; youtube_create_comment is limited to your own videos (breaking)
  • the server launches from the release tarball; first start takes about 9 s, later starts use the npm cache
  • local storage uses Node's built-in node:sqlite instead of the native better-sqlite3 addon; Node.js 22.13+ required (breaking)
  • one universal .mcpb bundle (youtube-mcp-<version>.mcpb) for macOS, Windows and Linux, with no native binaries
  • storage open/IO failures surface as storage_unavailable (path omitted); a Node without node:sqlite is reported at startup and by youtube_auth_status
  • plugin settings that are needed to run are now required in the Claude Code plugin

Fixed

  • youtube_preflight_update_channel always failed with an incomplete-channel-result error because the real client adapter lacked channels.update
  • account mutations (youtube_create_comment, youtube_subscribe, youtube_unsubscribe, youtube_rate_video) reported provider_outcome_unknown for every error; clean 4xx rejections now surface their status and reason, and only network, 5xx and ambiguous failures stay unknown. A comment with an empty textDisplay after insert falls back to textOriginal.
  • youtube_create_comment reported provider_outcome_unknown although the comment was posted: YouTube's insert response carries no authorDisplayName, which the response check required. The comment id is now the only required field (author and text fall back).
  • live e2e channel group verifies the stored brandingSettings description (via an unapproved preview) instead of youtube_my_account, whose snippet description lags the write
  • scheduled publish: a 400 invalidPublishAt now explains that YouTube only schedules a private video that has never been public; tool descriptions say so, and the live e2e schedules before first publishing
  • caption and thumbnail uploads now send the media body correctly
  • provider errors now include the HTTP status and reason
  • read-after-write verification retries after create, so fresh resources are found
  • smoke test passes the environment through to the server

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 28 Oct 01:19
b1d48dc

What's Changed

Full Changelog: v0.1.0...v0.2.0

v0.1.0

Choose a tag to compare

@pratikgh0se pratikgh0se released this 27 Oct 02:42

First public release of YouTube MCP, a local-first MCP server written in TypeScript (Node.js 22 or newer, MIT licence).

  • 74 tools for search, video and channel lookup, comments, transcripts, playlists, captions, uploads and creator analytics.
  • Runs on your machine over stdio; OAuth tokens and working data stay on your disk.
  • Every change to your YouTube account goes through preflight, approve, execute, so nothing happens until the exact previewed change is approved.
  • Private viewing analysis from a Google Takeout import, stored in a local SQLite file.