Skip to main content
Glama
toniher

youtube-personal-feed

by toniher

youtube-personal-feed

npm version

An MCP (Model Context Protocol) server and CLI that connects to your personal YouTube account and exposes your subscription feed to AI assistants.

Fetch subscribed channels, list recent uploads across your feed, query specific channel uploads, access playlists (including Liked Videos), and get https://www.youtube.com/watch?v= links ready for transcript tools.


Quick Start

1. Prerequisites

  • Node.js 18+

  • A Google Account with YouTube Data API v3 enabled in Google Cloud Console.

2. Google Cloud Setup (One-Time)

  1. Go to Google Cloud Console.

  2. Enable YouTube Data API v3 (APIs & Services -> Library).

  3. Configure OAuth consent screen (APIs & Services -> OAuth consent screen):

    • Set User Type to External and add your Gmail address under Test users.

    • Add scope: https://www.googleapis.com/auth/youtube.readonly.

  4. Create Desktop App credentials (APIs & Services -> Credentials -> Create Credentials -> OAuth client ID).

  5. Save your credentials to ~/.config/youtube-personal-mcp/.env (or .env in the project root):

    CLIENT_ID=your-client-id.apps.googleusercontent.com
    CLIENT_SECRET=your-client-secret

3. Install & Authenticate

# Install globally
npm install -g youtube-personal-feed

# Authenticate once (opens browser to log in)
youtube-personal-feed-auth

Tokens are stored securely at ~/.config/youtube-personal-mcp/token.json.


Related MCP server: YouTube MCP Server

MCP Setup

Add the MCP server to your assistant configuration:

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "youtube-personal-feed": {
      "command": "youtube-personal-feed-mcp"
    }
  }
}

OpenCode

Add to your OpenCode MCP settings:

{
  "mcpServers": {
    "youtube-personal-feed": {
      "command": "youtube-personal-feed-mcp"
    }
  }
}

For local source development, use npx tsx src/index.ts with cwd set to the repository.


Available MCP Tools

Tool

Description

Key Options

list_subscriptions

List channels you are subscribed to

query?, maxResults? (default 50)

list_feed

Latest uploads across all subscriptions

limit? (default 20), sinceDays?, channelId?

list_channel_uploads

Recent uploads for any channel

channelId, maxResults? (default 15)

list_playlist

Videos from any playlist ID (LL, PL...)

playlistId, maxResults? (default 15)

list_liked_videos

List items from your Liked Videos playlist (LL)

maxResults? (default 15)

get_video

Detailed video metadata & statistics

videoId

Feed items include standard videoUrl (https://www.youtube.com/watch?v=...) for easy integration with transcript MCP servers.


CLI Usage

You can also run commands directly from the terminal (outputs JSON):

# List subscriptions
youtube-personal-feed subscriptions --query tech --limit 20

# Get recent feed (past 7 days)
youtube-personal-feed feed --limit 10 --since-days 7

# Get uploads for a specific channel
youtube-personal-feed uploads UCJaGVXG4KgOUXUtcmAHAOdA --limit 15

# Get liked videos
youtube-personal-feed liked --limit 10

# Get items from any playlist ID
youtube-personal-feed playlist PL1AA5273CEB50EB18 --limit 10

# View video details
youtube-personal-feed video 64wtzsSQx84

For local development from source, use npm run cli -- <command>.


Quota & Caching

  • YouTube Data API daily limit: 10,000 units/day.

  • Subscriptions are cached for 30 minutes; channel uploads are cached for 10 minutes.

  • Uploads are fetched efficiently via channel upload playlists (1 unit/request).


Development

npm run typecheck   # Type check TypeScript
npm run lint        # Lint and check formatting
npm run format      # Format code with Biome
npm run build       # Build dist/
npm run smoke       # Smoke test API operations

Available Tools

6 tools
get_videoA

Get details for a single YouTube video by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
videoIdYesThe YouTube video ID (from the watch?v= URL).

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the burden of behavioral disclosure. It only says 'Get details' without specifying rate limits, authentication needs, quota costs, or the exact fields returned. The operation appears clearly read-only, but the minimal description does not enrich beyond the tool name.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that directly states the tool's purpose. Every word is meaningful, with no filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

As a simple single-video fetch tool with no output schema, the description is mostly adequate. It could specify what 'details' includes (e.g., metadata, statistics), but given the simplicity and the clear contrast with list tools, it is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides a full description of the videoId parameter, including its source ('from the watch?v= URL'). The tool description adds no extra parameter context beyond what the schema offers, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get details' and the resource 'single YouTube video by ID', which distinguishes it from sibling list tools like list_subscriptions and list_feed. It precisely identifies what the tool does and its scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when a specific video ID is known and details are needed, contrasting naturally with the sibling list tools. However, it does not explicitly state when NOT to use it or mention alternatives, so it lacks full explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_channel_uploadsA

List the most recent uploads of a specific channel (not required to be subscribed).

ParametersJSON Schema
NameRequiredDescriptionDefault
channelIdYesThe YouTube channel ID (UC...).
maxResultsNoMax videos to return.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. The verb 'List' implies a read-only operation, and 'most recent' conveys ordering. However, it does not disclose any details about authentication, error behavior, or response structure, which is a moderate gap given the lack of annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, informative sentence that is front-loaded with the action and resource. No unnecessary words or repetition, making it highly concise and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is a simple list operation with only two parameters, and the description covers its core purpose and key constraint (subscription not required). While there is no output schema to explain return values, the lack of that information is acceptable for a straightforward list tool. The description is sufficient, though slightly more detail about result contents would be ideal.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for both parameters (channelId and maxResults), so the schema already documents semantics fully. The description adds no additional parameter-level meaning beyond what the schema provides, which aligns with the baseline score of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: listing the most recent uploads of a specific channel. It includes a scope qualifier ('not required to be subscribed') that distinguishes it from sibling tools like list_subscriptions and list_feed, which focus on subscriptions or the user's feed.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: for any channel's uploads, regardless of subscription status. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a full 'when/when-not' guideline.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_feedA

List the most recent uploads across all subscribed channels (the subscription feed). Returns standard https://www.youtube.com/watch?v= URLs that can be fed into a transcript-extraction MCP.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax videos to return.
channelIdNoRestrict the feed to a single subscribed channel by its channel ID.
sinceDaysNoOnly return videos published within the last N days.

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the burden of behavioral disclosure. It discloses the output format (standard YouTube watch URLs) and the default scope (all subscribed channels), which is useful. However, it doesn't mention auth requirements, ordering guarantees, pagination, or potential errors, leaving a moderate transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with purpose, then output format. Every phrase earns its place, and there is no redundant content or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple optional-parameter list tool with no output schema, the description provides the essential return format and scope, plus a hint about downstream use. It could mention ordering/pagination, but 'most recent' implies ordering and the URL output is the key return detail. This is slightly above minimum viable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all three parameters (limit, channelId, sinceDays) with descriptions at 100% coverage. The description adds no additional parameter semantics beyond saying the feed is 'across all subscribed channels,' which overlaps with the schema. Baseline 3 is appropriate since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') with a clear resource scope ('most recent uploads across all subscribed channels') and clarifies it's the subscription feed. This strongly distinguishes it from sibling tools like list_channel_uploads (single channel) and list_subscriptions (list of channels).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'across all subscribed channels' and 'subscription feed' establishes when this tool is appropriate versus a single-channel listing tool. It doesn't explicitly name alternatives or state exclusions, but the context is clear enough for an agent to decide between list_feed and list_channel_uploads.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_liked_videosA

List the user's Liked Videos playlist ('LL'). Returns standard https://www.youtube.com/watch?v= URLs.

ParametersJSON Schema
NameRequiredDescriptionDefault
maxResultsNoMax videos to return.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It usefully states that returns are standard watch URLs and references the playlist ID 'LL'. However, it does not clarify authentication expectations, pagination behavior, or explicitly frame the operation as read-only, leaving a moderate transparency gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, using two short sentences. The core action is front-loaded, and the return format is stated without excessive detail or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter list tool with no output schema, the description gives the essential operating context: the exact playlist and the URL format of the returned items. Minor missing context like auth requirements is not enough to make the definition incomplete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so maxResults is fully documented in the schema, including its default and bounds. The description adds nothing about the parameter, but this is acceptable since the structured schema carries the information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the verb (List), the specific resource (the user's Liked Videos playlist with the 'LL' playlist ID), and the return type (watch URLs). It does not explicitly contrast with sibling tools, but the purpose itself is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it: when the user wants to retrieve their own liked videos. It does not mention when not to use it or point to alternatives like list_playlist or list_subscriptions, leaving some selection reasoning to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_playlistB

List videos from any YouTube playlist ID (e.g. LL for Liked Videos or custom PL...).

ParametersJSON Schema
NameRequiredDescriptionDefault
maxResultsNoMax videos to return.
playlistIdYesThe YouTube playlist ID (e.g. 'LL' for Liked Videos or 'PL...').

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the full behavioral disclosure burden. It only states 'List videos' and reveals nothing about authentication for private playlists like 'LL', rate limits, pagination, or what the response shape looks like. This is minimal for a tool with zero annotation support.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The definition is one concise sentence with no filler; the main action ('List videos') is front-loaded and followed immediately by the relevant scope. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with only two parameters and no output schema, and the description plus schema are enough for a basic call. However, it omits details about return shape, special playlist access requirements, or edge-case behavior, so it remains minimally viable rather than complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the description adds no meaningful parameter semantics beyond what the input schema already provides. The schema itself includes the same 'LL' and 'PL...' examples for playlistId and documents maxResults, so the description is not needed for parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and resource ('videos from any YouTube playlist ID'), with concrete examples like 'LL' and 'PL...' that clarify scope. It does not explicitly differentiate from sibling tools like list_liked_videos or list_feed, so it stops short of full sibling discrimination.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool should be used when the agent has a YouTube playlist ID and wants the videos in it. It gives useful ID examples but provides no explicit when-to-use, when-not-to-use, or alternative tool guidance, leaving selection partially to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_subscriptionsA

List YouTube channels the authenticated user is subscribed to.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryNoOptional case-insensitive substring to filter channels by title.
maxResultsNoMax channels to return.

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden. It discloses that the operation requires an authenticated user and returns subscription channels, but it does not describe response format, pagination behavior, or any side effects. For a simple read-only list operation, the core behavior is transparent, but additional context would be helpful.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no unnecessary words. Every element contributes directly to conveying the tool's purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with two optional parameters and no output schema, the description adequately conveys the core functionality. However, it lacks details about the return value structure and any authentication scope nuances, but the complexity is low enough that the single-sentence description is nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% coverage for both parameters (query and maxResults) with clear descriptions. The tool description does not add any meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: listing YouTube channels the authenticated user is subscribed to. The verb 'list' and specific resource 'YouTube channels the authenticated user is subscribed to' distinguish it from sibling tools like list_feed and list_channel_uploads.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives or any exclusions. It only states the functional purpose without mentioning scenarios, prerequisites, or comparisons to sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 2 tool updatesv0.1.3
    • Addedlist_liked_videos
    • Addedlist_playlist
  2. 4 tool updatesv0.1.0
    • First observedget_video
    • First observedlist_channel_uploads
    • First observedlist_feed
    • First observedlist_subscriptions

TDQS

A3.8/5.0

Scored across 6 tools

Disambiguation4/5

Each tool targets a distinct resource (subscriptions, global feed, channel uploads, playlists, liked videos, individual video), so selection is generally clear. One minor overlap is that list_liked_videos is essentially a special case of list_playlist since Liked Videos is a playlist, but the explicit dedicated tool reduces real-world confusion.

Naming Consistency4/5

Most tools follow the list_ prefix pattern and get_video is the natural singular counterpart, so the suite is predictable and readable. The mixed object types (list_feed, list_playlist, list_liked_videos) are reasonable but list_playlist doesn't explicitly state it lists videos, creating a small naming inconsistency relative to list_channel_uploads.

Tool Count5/5

Six tools is a well-scoped size for a personal YouTube feed server. Each tool serves a clear purpose without unnecessary fragmentation or bloat, covering the most common read-only data access patterns.

Completeness4/5

The server provides strong coverage of the personal feed domain: subscriptions, the main feed, channel uploads, playlists, liked videos, and single video metadata. It lacks user profile/channel info and search, but those are outside its stated purpose; the included tools form a coherent read-only extraction workflow.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers