insodimension/youtube
v0.1.3MIT
Search YouTube, inspect videos and channels, manage playlists, and read/post comments
What this package declares
The file a client reads when it loads this plugin, exactly as this revision carries it.
plugin.json
{
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
"name": "youtube",
"version": "0.1.3",
"description": "Search YouTube, inspect videos and channels, manage playlists, and read/post comments",
"author": {
"name": "Dimension"
},
"license": "MIT",
"keywords": [
"youtube",
"video",
"channel",
"playlist",
"comments",
"media"
],
"extensions": {
"ai.insodimension.dimension": {
"contractVersion": 1,
"title": "YouTube",
"icon": "assets/icon.svg",
"category": "connector",
"defaultEnabled": false,
"examples": [
"Search YouTube for the three most-viewed talks about Rust async and summarize each",
"Pull the stats and description for this video id and tell me its like-to-view ratio",
"Add this video to my \"Watch later on desktop\" playlist"
],
"connect": {
"kind": [
"oauth"
],
"setup": [
{
"title": "Reuse (or create) your Google Cloud OAuth client",
"detail": "If you set up Google Drive or Google Calendar you already have one — the same Desktop-app OAuth client works here. If not, create a free Google Cloud project and a Desktop-app OAuth client (no billing, no redirect URI to register).",
"url": "https://console.cloud.google.com/apis/credentials",
"urlLabel": "Open Credentials"
},
{
"title": "Enable the YouTube Data API v3",
"detail": "APIs & Services → Library → \"YouTube Data API v3\" → Enable. Creating the client is NOT enough — without this step the connection succeeds but every YouTube call fails.",
"url": "https://console.cloud.google.com/apis/library/youtube.googleapis.com",
"urlLabel": "Open the API Library"
},
{
"title": "Copy the Client ID and Client Secret into the form below",
"detail": "Same values as your Drive or Calendar connector — they stay on this machine."
}
],
"form": [
{
"id": "clientId",
"label": "OAuth Client ID",
"help": "Reuse the SAME OAuth client you created for Google Drive/Calendar — no new Cloud project needed; just also enable the YouTube Data API v3. If you don't have one yet, follow the steps above.",
"helpUrl": "https://console.cloud.google.com/apis/credentials",
"helpUrlLabel": "Open Google Cloud Console"
},
{
"id": "clientSecret",
"label": "OAuth Client Secret",
"secret": true,
"help": "The same Client Secret as your Drive/Calendar connector. Google issues one for Desktop app clients even though it isn't treated as secret for installed apps (RFC 8252). Copy it from the same credential page."
}
],
"oauth": {
"provider": "google",
"authUrl": "https://accounts.google.com/o/oauth2/v2/auth",
"tokenUrl": "https://oauth2.googleapis.com/token",
"scopes": [
"https://www.googleapis.com/auth/youtube",
"https://www.googleapis.com/auth/youtube.force-ssl"
],
"usePkce": true,
"extraAuthParams": {
"access_type": "offline",
"prompt": "consent"
}
},
"configTarget": "~/.config/dimension-youtube/token.json",
"verify": {
"http": "https://www.googleapis.com/youtube/v3/channels?part=id&mine=true",
"failures": [
{
"match": "quotaExceeded|dailyLimitExceeded|quota",
"title": "YouTube API quota exhausted for today",
"detail": "Your Google Cloud project has used its daily YouTube Data API quota. It resets at midnight Pacific — try again then, or request a higher quota in the Cloud console.",
"url": "https://console.cloud.google.com/apis/api/youtube.googleapis.com/quotas",
"urlLabel": "Open YouTube API quotas"
},
{
"match": "has not been used in project|is disabled|SERVICE_DISABLED|accessNotConfigured",
"title": "Enable the YouTube Data API v3",
"detail": "Your account connected, but the Google Cloud project has the YouTube Data API turned off. Enable it, wait a minute, then connect again.",
"url": "https://console.cloud.google.com/apis/library/youtube.googleapis.com",
"urlLabel": "Open the API Library"
},
{
"match": "invalid_grant|UNAUTHENTICATED|Invalid Credentials|invalid_token",
"title": "Reconnect your Google account",
"detail": "The stored token is no longer valid — run Connect again to re-authorize."
}
]
}
},
"toolRenderer": [
{
"match": "youtube_search",
"use": "summary",
"icon": "youtube",
"title": "Search"
},
{
"match": "youtube_get_video",
"use": "summary",
"icon": "youtube",
"title": "Video"
},
{
"match": "youtube_list_playlists",
"use": "summary",
"icon": "youtube",
"title": "Playlists"
},
{
"match": "youtube_list_playlist_items",
"use": "summary",
"icon": "youtube",
"title": "Playlist items"
},
{
"match": "youtube_playlist_add",
"use": "summary",
"icon": "youtube",
"title": "Add to playlist"
},
{
"match": "youtube_list_comments",
"use": "summary",
"icon": "youtube",
"title": "Comments"
},
{
"match": "youtube_post_comment",
"use": "summary",
"icon": "youtube",
"title": "Post comment"
},
{
"match": "youtube_get_captions",
"use": "summary",
"icon": "youtube",
"title": "Captions"
},
{
"match": "youtube_channel_stats",
"use": "summary",
"icon": "youtube",
"title": "Channel stats"
}
],
"skillCard": {
"skill": "youtube",
"use": "summary",
"icon": "youtube",
"title": "YouTube"
},
"tools": [
{
"name": "youtube_search",
"description": "Search YouTube for videos, channels, or playlists by keyword. Returns each result's id, title, kind, channel, and published date."
},
{
"name": "youtube_get_video",
"description": "Read one video's full detail by id — title, channel, description, duration, and statistics (views, likes, comments)."
},
{
"name": "youtube_list_playlists",
"description": "List the connected account's own playlists — id, title, item count, and privacy status."
},
{
"name": "youtube_list_playlist_items",
"description": "List the videos inside a playlist — position, video id, title, and channel."
},
{
"name": "youtube_playlist_add",
"description": "Add a video to one of your playlists. Mutating — confirm the playlist and video first."
},
{
"name": "youtube_list_comments",
"description": "Read the top-level comment threads on a video (plain text, most-relevant first) — comment id, author, like count, and reply count."
},
{
"name": "youtube_post_comment",
"description": "Post a public comment on a video or a public reply to an existing comment. Mutating and PUBLIC — confirm the exact target and text first; it cannot be silently undone."
},
{
"name": "youtube_get_captions",
"description": "List the caption tracks available for a video (language, name, kind). Note: the official API only lets you DOWNLOAD caption text for videos you own."
},
{
"name": "youtube_channel_stats",
"description": "Read a channel's public statistics — subscribers, total views, video count — for your own channel (mine) or any channel by id."
}
]
}
}
}
Client extensions
Data this package carries for particular clients. The directory lists the clients named and never reads what is addressed to them.
- ai.insodimension.dimension