---
title: "YouTube MCP server for AI agents - actionlake"
description: "Give Claude 91 YouTube actions through one MCP server: videos, playlists, playlist items. Your agent never holds the credential. 100,000 calls a month free."
canonical: https://actionlake.com/connectors/youtube
updated: 2026-09-21
---

Connectors · Marketing & media

# YouTube MCP server for AI agents.

actionlake is an MCP gateway: one remote MCP server that connects Claude and other MCP clients to YouTube and the rest of your systems. It gives your agent 91 YouTube actions (38 reads, 36 writes and 17 that wait for a confirmation) and holds the YouTube credential itself, so the agent never does. It paces YouTube's limits and records every call. Connecting YouTube needs your own YouTube OAuth app and one admin sign-in.

[Connect YouTube free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

100,000 free calls a month. No card, no email, no password: press Start a free sandbox on the next screen and keep the key it shows you.

`claude mcp add --transport http actionlake https://connect.actionlake.com/mcp`

the first call

```
do {
  action: "youtube.videos.list",
  intent: "check which YouTube account is connected"
}
# List videos · read · 1 upstream call
```

- 91 actions in one signed file
- 38 read look, never change
- 36 write create and update
- 17 wait for a yes destructive, confirmed first

Set up

## Connect YouTube in three steps.

1. 01
   ### Add actionlake to Claude.
   Run the command once in Claude Code; its consent page can create a free sandbox: 100,000 calls a month, no card. In the Claude app, add a custom connector with the URL below and paste your key on the consent page. Creating a new sandbox from the Claude app is not yet tested by us.
   `https://connect.actionlake.com/mcp`
2. 02
   ### Connect YouTube.
   OAuth 2.0, authorization code with PKCE. You register your own OAuth app with YouTube, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on. actionlake stores what you paste write-only, sealed under your tenant's key.
   Before the first sign-in, YouTube needs an OAuth app of your own, registered in its developer portal. actionlake has no YouTube app to lend you.
   - `access_token` Access token from one sign-in with your own OAuth app
   - `refresh_token` Refresh token from the same sign-in; the access token is renewed from it
   - `client_id` Google OAuth client id
   - `client_secret` Google OAuth client secret
   ```
   account { op: "connections.requirements", service: "youtube" }
   # free: exactly what to paste, and what is found for you
   ```
3. 03
   ### Make the first call. Check before a write.
   Ask in plain words; Claude picks the action. Before anything changes, `check` validates the call and prices it, for free.
   ```
   do    { action: "youtube.videos.list" }
   # list videos · read · 1 upstream call
   check { action: "youtube.playlists.create", input: { … } }
   # free: inputs, permissions, cost and confirmations, nothing sent
   ```

YouTube at a glance

**Sign-in**

OAuth 2.0, authorization code with PKCE. You register your own OAuth app with YouTube, an admin signs in once, and you paste the app's client id and secret and the tokens from that sign-in; actionlake renews the access token from then on.

**You provide**

`access_token` `refresh_token` `client_id` `client_secret`

**Limits we pace to**

300 calls a minute, per connection

**API covered**

YouTube API v3`www.googleapis.com/youtube/v3`

**Built from**

YouTube's documentation, read 20 September 2026[googleapis.com](https://www.googleapis.com/discovery/v1/apis/youtube/v3/rest) [googleapis.com](https://www.googleapis.com/discovery/v1/apis/youtubeAnalytics/v2/rest) [googleapis.com](https://www.googleapis.com/discovery/v1/apis/youtubereporting/v1/rest)

**Service file**

Version 1.0.0, signed (Ed25519)

**Cached reads**

38 of 38 reads, for up to an hour; a write clears what it affects

**Ready-made plans**

8 in the store

**Shared entities**

4, so ask can line YouTube up with your other systems

**Data**

Processed and stored in Sydney, Australia. No US region yet

Capabilities

## What an AI agent can do in YouTube.

91 actions in 1 area. Every one carries its effect, so a key can allow the reads and hold the rest.

- **38** read look, never change
- **36** write create and update
- **17** destructive wait for a confirmation

1. ### Video
   91
   38 read · 36 write · 17 destructive
   List videos · List playlists · List playlist items · List comment threads

Top actions

## The YouTube API, shaped for agents.

The ids your agent types, what each does, and the one name it shares with other systems. 67 of YouTube's 69 action names are shared with at least one other connector, so an agent learns them once.

| Action | What it does | Effect | Same name in |
| --- | --- | --- | --- |
| `youtube.videos.list` List videos | List videos by id, by chart (most popular) or by the caller's rating. | read | `content.file.list` 77 connectors |
| `youtube.playlists.list` List playlists | Retrieves a list of resources, possibly filtered. | read | `content.folder.list` 62 connectors |
| `youtube.playlist_items.list` List playlist items | Retrieves a list of resources, possibly filtered. | read | `content.file.list` 77 connectors |
| `youtube.comment_threads.list` List comment threads | List top-level comment threads on a video, a channel or a post. | read | `content.file_comment.list` 12 connectors |
| `youtube.playlists.create` Create playlists | Inserts a new resource into this collection. | write | `content.folder.create` 62 connectors |
| `youtube.channels.list` List channels | List channels by id, handle, username, or the authenticated user's own channel. | read | `comm.channel.list` 27 connectors |
| `youtube.videos.delete` Delete videos | Delete a video the authenticated channel owns. | destructive | `content.file.delete` 68 connectors |
| `youtube.comments.list` List comments | List comments by id or the replies to a parent comment. | read | `content.file_comment.list` 12 connectors |
| `youtube.channels.get` Get one channel | Fetch a single channel by id with its snippet, content details and statistics. | read | `comm.channel.get` 23 connectors |
| `youtube.third_party_links.create` Create third party links | Inserts a new resource into this collection. | write | `content.file_link.create` 18 connectors |
| `youtube.third_party_links.list` List third party links | Retrieves a list of resources, possibly filtered. | read | `content.file_link.list` 12 connectors |
| `youtube.live_chat_messages.create` Create live chat messages | Inserts a new resource into this collection. | write | `comm.message.create` 25 connectors |

Try it

## Prompts to paste into Claude.

Each one names the YouTube actions it will call, so you know what it reads and what it changes before you send it.

1. Read read
   Which YouTube files changed this week, and who changed them?
   calls `youtube.videos.list`
2. Plan write
   Create and start a live broadcast in YouTube. Ask me before anything is sent or changed.
   calls `youtube.live_broadcasts.create` `youtube.live_streams.create` `youtube.live_broadcasts.bind` `youtube.live_streams.list` `youtube.live_broadcasts.transition`
3. Plan destructive
   Ban an abusive viewer from live chat in YouTube. Ask me before anything is sent or changed.
   calls `youtube.live_broadcasts.list` `youtube.live_chat_moderators.list` `youtube.live_chat_messages.list` `youtube.live_chat_messages.delete` `youtube.live_chat_bans.create`
4. Write write
   Create playlists in YouTube. Show me exactly what you will send before you save it.
   calls `youtube.playlists.create`

The plan store

## Ready-made plans for YouTube.

8 plans in the store. Install one and your agent runs it by name; the reply says which connections are still missing. A schedule can run a plan on a timetable. There are no triggers or webhooks, by design.

1. ### Weekly channel performance report
   Use it when Someone asks how the YouTube channel performed over a period and wants views, watch time and the videos behind the numbers.
   **Effect**
   read
   **Steps**
   6 · loops
   **Needs**
   start date and end date
   **Install**
   `youtube-weekly-channel-performance-report`
2. ### Build a playlist from a search
   Use it when Someone wants a playlist assembled automatically from a topic search rather than adding videos one by one.
   **Effect**
   write
   **Steps**
   4 · loops
   **Needs**
   playlist title
   **Install**
   `youtube-build-playlist-from-search`
3. ### Bulk retag recent uploads
   Use it when A batch of recently uploaded videos needs the same tags, category or description boilerplate applied in one pass.
   A person decides Overwrite tags and category on _video count_ videos from playlist _playlist id_. Existing tags on those videos will be replaced.
   **Effect**
   write
   **Steps**
   5 · loops
   **Needs**
   playlist id and tags
   **Install**
   `youtube-bulk-tag-recent-uploads`
4. ### Moderate the held comment backlog
   Use it when Held-for-review YouTube comments have piled up and someone wants them triaged in one pass with a human sign-off.
   A person decides Set moderation status '_moderation status_' on _held count_ held YouTube comments on channel _channel id_.
   **Effect**
   write
   **Steps**
   5 · loops
   **Needs**
   channel id
   **Install**
   `youtube-moderate-comment-backlog`
5. ### Create and start a live broadcast
   Use it when Someone wants to set up a YouTube live stream end to end and take it live once the encoder is pushing video.
   A person decides Transition broadcast '_title_' (_id_) to live now — viewers will see it immediately.
   **Effect**
   write
   **Steps**
   6
   **Needs**
   title and scheduled start time
   **Install**
   `youtube-go-live-broadcast`
6. ### Schedule a bulk reporting job and collect it
   Use it when Someone needs recurring bulk YouTube reporting data rather than one-off analytics queries.
   A person decides Create a recurring bulk reporting job '_job name_' for report type _report type id_ — it generates reports daily until deleted.
   **Effect**
   write
   **Steps**
   8
   **Needs**
   job name and report type id
   **Install**
   `youtube-schedule-bulk-reporting-job`
7. ### Ban an abusive viewer from live chat
   Use it when A viewer is abusing a live chat during a broadcast and a moderator wants the message removed and the account banned.
   A person decides Delete message _message id_ and permanently ban channel _offender channel id_ from the live chat of '_title_'.
   **Effect**
   destructive
   **Steps**
   7
   **Needs**
   broadcast id and offender channel id
   **Install**
   `youtube-live-chat-ban-abusive-viewer`
8. ### Retire a stale playlist
   Use it when A playlist is obsolete and someone wants it emptied and deleted with a record of what it held and a human sign-off.
   A person decides Permanently delete playlist '_title_' and its _item count_ items. This cannot be undone.
   **Effect**
   destructive
   **Steps**
   7 · loops
   **Needs**
   playlist id
   **Install**
   `youtube-retire-stale-playlist`

install a plan

```
account { op: "plans.install", slug: "youtube-weekly-channel-performance-report" }
# then ask for it by name; a schedule can run it on a timetable
```

Governance for YouTube

## Destructive actions wait for a yes.

17 YouTube actions are destructive. These are all of them:

- Delete videos `youtube.videos.delete`
- Delete playlist items `youtube.playlist_items.delete`
- Delete playlists `youtube.playlists.delete`
- Delete comments `youtube.comments.delete`
- Delete third party links `youtube.third_party_links.delete`
- Delete live chat messages `youtube.live_chat_messages.delete`
- Delete live streams `youtube.live_streams.delete`
- Delete live broadcasts `youtube.live_broadcasts.delete`
- Delete channel sections `youtube.channel_sections.delete`
- Delete live chat moderators `youtube.live_chat_moderators.delete`
- Delete live chat bans `youtube.live_chat_bans.delete`
- Delete captions `youtube.captions.delete`
- Delete playlist images `youtube.playlist_images.delete`
- Delete subscriptions `youtube.subscriptions.delete`
- Delete analytics groups `youtube.analytics_groups.delete`
- Delete reporting jobs `youtube.reporting_jobs.delete`
- Delete analytics group items `youtube.analytics_group_items.delete`

A destructive action runs only with `confirm: true`. Under the `human` policy the agent cannot confirm for itself: the run stops until a named person approves, in the console or from a signed link in an email. The cap on a key is refused before the call is sent, never after.

do youtube.videos.delete confirm_policy: **human**

Delete videos?

**intent:** the user asked me to delete videos

run suspended · waiting for a named person · key _youtube-agent_ cannot confirm itself

In the console, or from an emailed signed link.

a key for this connector

```
account {
  op: "keys.create", name: "youtube-agent",
  allowed_actions: ["youtube.*"], cap_calls: 2000,
  confirm_policy: "human_for_writes",
  approval_rules: [
    { match: "youtube.videos.delete", approver: "lead@example.com" },
    { match: "youtube.playlist_items.delete", approver: "lead@example.com" },
    { match: "youtube.playlists.delete", approver: "lead@example.com" }
  ]
}
```

Illustrative. Scoped to YouTube only, capped at 2,000 upstream calls, every write confirmed, and the destructive ones approved by a named person.

Cost

## What YouTube costs on actionlake.

Every YouTube action is one upstream call, the only thing actionlake bills. Searching, `check`, `cost`, `account` and any call YouTube refused with 401, 403, 429 or a 5xx are free. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

- 1 upstream call per action all 91 YouTube actions
- 30 actions page each page of a long list is one call
- 38 reads can be cached a cache hit costs nothing
- 100,000 calls a month, free paid plans from US$49 a month for 250,000

[See pricing](https://actionlake.com/pricing)

Action index

## Every YouTube action.

91 actions by area: the id your agent calls, what it does, and its effect.

**Video 91**

- `youtube.abuse_reports.create` Create abuse reports write
- `youtube.activities.list` List activities read
- `youtube.analytics_group_items.create` Create analytics group items write
- `youtube.analytics_group_items.delete` Delete analytics group items destructive
- `youtube.analytics_group_items.list` List analytics group items read
- `youtube.analytics_groups.create` Create analytics groups write
- `youtube.analytics_groups.delete` Delete analytics groups destructive
- `youtube.analytics_groups.list` List analytics groups read
- `youtube.analytics_groups.update` Update analytics groups write
- `youtube.analytics_reports.query` Query analytics reports read
- `youtube.captions.delete` Delete captions destructive
- `youtube.captions.list` List captions read
- `youtube.captions.update` Update captions write
- `youtube.channel_sections.create` Create channel sections write
- `youtube.channel_sections.delete` Delete channel sections destructive
- `youtube.channel_sections.list` List channel sections read
- `youtube.channel_sections.update` Update channel sections write
- `youtube.channels.get` Get one channel read
- `youtube.channels.list` List channels read
- `youtube.channels.update` Update channels write
- `youtube.comment_threads.create` Create comment threads write
- `youtube.comment_threads.list` List comment threads read
- `youtube.comments.create` Create comments write
- `youtube.comments.delete` Delete comments destructive
- `youtube.comments.list` List comments read
- `youtube.comments.mark_as_spam` Mark as spam comments write
- `youtube.comments.set_moderation_status` Set moderation status comments write
- `youtube.comments.update` Update comments write
- `youtube.i18n_languages.list` List i18n languages read
- `youtube.i18n_regions.list` List i18n regions read
- `youtube.live_broadcasts.bind` Bind live broadcasts write
- `youtube.live_broadcasts.create` Create live broadcasts write
- `youtube.live_broadcasts.delete` Delete live broadcasts destructive
- `youtube.live_broadcasts.insert_cuepoint` Insert cuepoint live broadcasts write
- `youtube.live_broadcasts.list` List live broadcasts read
- `youtube.live_broadcasts.transition` Transition live broadcasts write
- `youtube.live_broadcasts.update` Update live broadcasts write
- `youtube.live_chat_bans.create` Create live chat bans write
- `youtube.live_chat_bans.delete` Delete live chat bans destructive
- `youtube.live_chat_messages.create` Create live chat messages write
- `youtube.live_chat_messages.delete` Delete live chat messages destructive
- `youtube.live_chat_messages.list` List live chat messages read
- `youtube.live_chat_messages.transition` Transition live chat messages write
- `youtube.live_chat_moderators.create` Create live chat moderators write
- `youtube.live_chat_moderators.delete` Delete live chat moderators destructive
- `youtube.live_chat_moderators.list` List live chat moderators read
- `youtube.live_streams.create` Create live streams write
- `youtube.live_streams.delete` Delete live streams destructive
- `youtube.live_streams.list` List live streams read
- `youtube.live_streams.update` Update live streams write
- `youtube.members.list` List members read
- `youtube.memberships_levels.list` List memberships levels read
- `youtube.playlist_images.delete` Delete playlist images destructive
- `youtube.playlist_images.list` List playlist images read
- `youtube.playlist_items.create` Create playlist items write
- `youtube.playlist_items.delete` Delete playlist items destructive
- `youtube.playlist_items.list` List playlist items read
- `youtube.playlist_items.update` Update playlist items write
- `youtube.playlists.create` Create playlists write
- `youtube.playlists.delete` Delete playlists destructive
- `youtube.playlists.get` Get one playlist read
- `youtube.playlists.list` List playlists read
- `youtube.playlists.update` Update playlists write
- `youtube.reporting_job_reports.get` Get reporting job reports read
- `youtube.reporting_job_reports.list` List reporting job reports read
- `youtube.reporting_jobs.create` Create reporting jobs write
- `youtube.reporting_jobs.delete` Delete reporting jobs destructive
- `youtube.reporting_jobs.get` Get reporting jobs read
- `youtube.reporting_jobs.list` List reporting jobs read
- `youtube.reporting_report_types.list` List reporting report types read
- `youtube.search.list` List search read
- `youtube.subscriptions.create` Create subscriptions write
- `youtube.subscriptions.delete` Delete subscriptions destructive
- `youtube.subscriptions.list` List subscriptions read
- `youtube.super_chat_events.list` List super chat events read
- `youtube.third_party_links.create` Create third party links write
- `youtube.third_party_links.delete` Delete third party links destructive
- `youtube.third_party_links.list` List third party links read
- `youtube.third_party_links.update` Update third party links write
- `youtube.video_abuse_report_reasons.list` List video abuse report reasons read
- `youtube.video_categories.list` List video categories read
- `youtube.video_trainability.get` Get video trainability read
- `youtube.videos.batch_get_stats` Batch get stats videos read
- `youtube.videos.delete` Delete videos destructive
- `youtube.videos.get` Get one video read
- `youtube.videos.get_rating` Get rating videos read
- `youtube.videos.list` List videos read
- `youtube.videos.rate` Rate videos write
- `youtube.videos.report_abuse` Report abuse videos write
- `youtube.videos.update` Update videos write
- `youtube.watermarks.unset` Unset watermarks write

Questions

## The YouTube MCP server, answered.

**Is there a YouTube MCP server for Claude?**

Yes. actionlake is an MCP gateway: a remote MCP server that gives Claude, or another MCP client, 91 YouTube actions, through the same eight tools it uses for every other connector. actionlake is independent; it is not made or endorsed by YouTube.

**What do I need to connect YouTube?**

Your own YouTube OAuth app, registered with YouTube (its client id and client secret), and the access and refresh tokens from one admin sign-in. actionlake has no YouTube app of its own, so this is not a one-step consent. actionlake renews the access token as it expires. The free call account { op: "connections.requirements", service: "youtube" } lists exactly what to paste.

**Can an AI agent delete or change things in YouTube?**

Only if its key allows it, and only with an explicit confirmation. 17 YouTube actions are destructive, including delete videos, delete playlist items and delete playlists. Each runs only with confirm: true. Under the human confirm policy, or an approval rule on the key, the run waits until a named person approves it.

**Will an AI agent use up my YouTube API limit?**

actionlake paces every call to the limits in the YouTube service file: 300 calls a minute per connection. Repeated reads are answered from cache (38 YouTube actions can be), which never reaches YouTube.

**What does a YouTube action cost?**

One upstream call, the only unit actionlake bills. A list that pages bills one call per page (30 YouTube actions page). Cache hits, searches, dry runs and calls YouTube refused with 401, 403, 429 or a 5xx are free. The Free plan includes 100,000 calls a month with no card. Paid plans start at US$49 a month for 250,000 calls, with overage from US$0.30 down to US$0.18 per 1,000.

**Which YouTube API does it cover?**

The YouTube API v3 at www.googleapis.com/youtube/v3. It is built from YouTube's documentation as read on 20 September 2026. 91 actions in 1 area, each one in the signed service file (version 1.0.0).

**Does actionlake keep my YouTube data, and where?**

actionlake processes and stores data in Sydney, Australia; there is no US region yet. Reads may be cached for up to an hour, and a write clears the reads it affects. Each run's request and response is kept, sealed, for your plan's trace window: 1 day on Free, 3 days on Starter, 7 days on Pro, 14 days on Team, 30 days on Business and 30 days on Enterprise. Your YouTube credential is sealed under your tenant's key, never logged and never returned. Your traffic is not used to train models.

**Which AI clients can use it?**

Claude Code, tested by us end to end, and the Claude app as a custom connector, tested by us with an existing key. Other MCP clients that support remote servers over Streamable HTTP (MCP revisions 2025-06-18 and 2025-11-25) and OAuth dynamic client registration, or a bearer header, should connect the same way; we have not tested them. Or plain REST, under the same action names.

## More connectors like YouTube

Shares the most action names with

- [Adobe Frame.io (V4) 14](https://actionlake.com/connectors/adobe-frame-io-v4)
- [Frontify 10](https://actionlake.com/connectors/frontify)
- [Figma 10](https://actionlake.com/connectors/figma)
- [Jotform 5](https://actionlake.com/connectors/jotform)
- [Vimeo 5](https://actionlake.com/connectors/vimeo)
- [GoTo Webinar 4](https://actionlake.com/connectors/goto-webinar)

Joins with, on shared entities

- [Box 3](https://actionlake.com/connectors/box)
- [Zoho WorkDrive 3](https://actionlake.com/connectors/zoho-workdrive)
- [Slack 2](https://actionlake.com/connectors/slack)
- [Canvas LMS 2](https://actionlake.com/connectors/canvas-lms)
- [Mailchimp 2](https://actionlake.com/connectors/mailchimp)
- [Salesforce Marketing Cloud Engagement 2](https://actionlake.com/connectors/salesforce-marketing-cloud-engagement)

Browse

- [All Marketing & media connectors](https://actionlake.com/connectors/category/marketing-and-media)
- [All connectors](https://actionlake.com/connectors)
- [How actionlake compares](https://actionlake.com/compare)

actionlake is independent. It is not made or endorsed by YouTube; the name is the vendor's own. Counts are from the YouTube service file, version 1.0.0.

## Give your agent YouTube today.

[Connect YouTube free](https://actionlake.com/console?start=sandbox) [See pricing](https://actionlake.com/pricing)

Start free - 100,000 calls/month, no card. No signup. Hard caps on every key. Cached answers are free.

---

Source: https://actionlake.com/connectors/youtube
More: https://actionlake.com/llms.txt
