Skip to main content
Glama
alibabagini-cyber

youtube-signal-mcp

youtube-signal-mcp

유튜브 영상의 자막과 채널 최신 영상 목록을 AI 에이전트(Claude Code, Codex, Cursor 등)가 도구로 꺼내 쓰게 해 주는 MCP 서버입니다. CLI로도 쓸 수 있습니다.

  • API 키, 로그인, 영상 다운로드가 전부 없습니다. 유튜브가 공개로 주는 자막·RSS·oembed만 씁니다.

  • 요약은 이 서버가 하지 않고, 서버가 자막을 넘기면 에이전트(모델)가 합니다. 그래서 키가 필요 없습니다.

  • 채널을 등록해 두면 "지난번 이후 새로 올라온 영상"만 자막과 함께 돌려줍니다. 산업 동향 카드나 주간 브리프를 만들 때 이 기능을 씁니다.

설치 (Claude Code 기준, 3단계)

  1. uv가 없으면 설치합니다. https://docs.astral.sh/uv/getting-started/installation/

  2. 터미널에서 한 줄:

    claude mcp add youtube-signal -e YT_LANGS=ko,en -- uvx --from git+https://github.com/alibabagini-cyber/youtube-signal-mcp youtube-signal-mcp
  3. Claude Code를 다시 열고 이렇게 물어봅니다.

    https://www.youtube.com/watch?v=XXXXXXXXXXX 이 영상 요약해줘
    @TechTechPotato 채널 최근 영상 5개 한 줄씩 정리해줘

claude mcp listyoutube-signal이 보이면 연결된 것입니다.

다른 클라이언트(Codex, Cursor, Claude Desktop)는 examples/mcp-config.json을 그 프로그램의 MCP 설정 파일에 붙여 넣으면 됩니다. 형식은 전부 같습니다.

Related MCP server: youtube-mcp

에이전트가 쓰는 도구

도구

하는 일

입력

get_transcript

영상 자막을 글로

URL 또는 11자 영상 ID, 언어 우선순위(ko,en), 타임스탬프 여부, 글자 수 상한

get_video_info

제목·채널명·썸네일

URL 또는 ID

list_channel_videos

채널 최신 영상 약 15개

@핸들, UC… 채널 ID, 채널 URL

watch_channels

지난 호출 이후 새 영상만 + 자막

채널 목록(비우면 channels.json)

프롬프트(에이전트에게 시킬 일의 틀)도 세 개 들어 있습니다. Claude Code에서는 /youtube-signal:로 시작하는 슬래시 명령으로 뜹니다.

프롬프트

결과물

summarize_video

한 줄 결론, 순서대로 요약, 챕터 목록, 숫자·고유명사와 나온 시각

industry_signals

산업 신호 카드 3~7개. 신호 한 문장, 나온 시각, 사실/주장/추측 구분, 왜 중요한지

channel_digest

채널 최신 5편을 한 줄씩, 그리고 공통 흐름

industry_signals는 기본이 반도체/메모리 쪽으로 잡혀 있는데, industry 인자로 바꾸면 됩니다.

CLI로 쓰기

uvx --from git+https://github.com/alibabagini-cyber/youtube-signal-mcp youtube-signal transcript "https://youtu.be/XXXXXXXXXXX" -l ko,en -t
uvx --from git+https://github.com/alibabagini-cyber/youtube-signal-mcp youtube-signal channel @Asianometry -n 5
uvx --from git+https://github.com/alibabagini-cyber/youtube-signal-mcp youtube-signal watch @Asianometry @TechTechPotato --max-new 2

자주 쓰면 uv tool install git+https://github.com/alibabagini-cyber/youtube-signal-mcp 한 번 하고 youtube-signal …로 부르면 됩니다.

채널 감시 세팅

  1. ~/.youtube-signal-mcp/channels.json을 만듭니다. 예시는 examples/channels.example.json.

    [
      {"channel": "@Asianometry", "languages": ["en"]},
      {"channel": "@softdragon", "languages": ["ko", "en"]}
    ]
  2. youtube-signal watch를 돌리면 새 영상만 나옵니다. 본 영상 ID는 같은 폴더 seen.json에 쌓입니다.

  3. 채널을 처음 넣은 날은 최신 --max-new개(기본 2)만 가져오고 나머지 과거분은 "본 것"으로 표시합니다. 과거 영상까지 전부 긁어오는 도구가 아닙니다.

  4. cron 예: 매일 아침 8시

    0 8 * * * youtube-signal watch > ~/yt_new_$(date +\%F).json

환경변수

이름

기본

YT_LANGS

자막 언어 우선순위

en

YT_STATE_DIR

channels.json, seen.json 위치

~/.youtube-signal-mcp

YT_PROXY_URL

자막 요청에 쓸 프록시(https://user:pass@host:port)

없음

꼭 알아두기

  • 자막이 없는 영상은 못 읽습니다. 자동 생성 자막은 오타가 있으니 숫자는 영상에서 한 번 확인하세요.

  • 클라우드 서버나 VPN에서 돌리면 유튜브가 자막 요청을 막는 경우가 있습니다. 집·사무실 PC에서는 거의 문제 없고, 막히면 YT_PROXY_URL을 씁니다.

  • 한국어 영상은 YT_LANGS=ko,en으로 두세요. 기본값 en이면 영어 자막을 먼저 찾고, 없으면 있는 언어 아무거나 가져옵니다.

  • 유튜브가 가끔 404·500을 잠깐 냅니다. 3번까지 자동으로 다시 시도합니다.

개발자용

git clone https://github.com/alibabagini-cyber/youtube-signal-mcp
cd youtube-signal-mcp
uv run youtube-signal channel @Asianometry -n 3
uv run youtube-signal-mcp   # stdio MCP 서버

youtube_signal_mcp/core.py가 전부이고 server.py(MCP)와 cli.py는 그걸 감싼 겉면입니다. 의존성은 mcp, youtube-transcript-api 둘뿐입니다.

MIT

Available Tools

4 tools
get_transcriptA

Fetch a YouTube video's captions as text.

url: any YouTube URL (watch, youtu.be, shorts, live) or an 11-char video id. languages: comma-separated preference, e.g. "ko,en". Falls back to any available. timestamps: prefix each line with mm:ss. max_chars: cut the text after this many characters (0 = no cut).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
languagesNo
max_charsNo
timestampsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the full behavioral burden. It discloses fallback behavior ('Falls back to any available'), the effect of timestamps, and the max_chars cutoff. It does not explicitly state read-only status, but 'fetch' implies a non-mutating operation.

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 compact and front-loaded with the core purpose, followed by a tight bullet-style parameter list. Every line adds distinct value and there is no redundant or filler content.

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?

With an output schema present, the tool's return shape is covered elsewhere. The description addresses parameter semantics, input variants, and behavioral fallbacks. Minor gaps include lack of explicit error behavior when captions are unavailable, but overall it is sufficient for correct invocation.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It explains each parameter with concrete formats, examples, defaults, and behavioral effects, giving the agent everything needed to provide valid inputs.

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 opens with a specific verb and resource: 'Fetch a YouTube video's captions as text.' This clearly identifies the tool's function and distinguishes it from siblings like get_video_info or list_channel_videos.

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 gives useful input-format context (URL types, language fallback) but does not explicitly state when to choose this tool over siblings or mention any exclusions. Usage is implied rather than directed.

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

get_video_infoB

Title, channel name and thumbnail of a YouTube video (oembed, no key).

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It usefully discloses that the tool uses oembed and requires no API key, which is meaningful behavioral context. However, it does not explicitly state that the operation is read-only or describe error handling, rate limits, or unsupported URL formats.

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 compact sentence that front-loads the returned data and includes a useful parenthetical about authentication. Every word earns its place and nothing is redundant.

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 single-parameter tool with an output schema, the description is largely complete: it states the resource, the returned fields, and the auth-free mechanism. It only lacks explicit usage boundaries relative to siblings and any note on URL constraints.

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 schema has 0% description coverage for the only parameter, url. The description adds that the URL should point to a YouTube video and that it yields metadata via oembed. This is helpful for a single obvious parameter, but it does not specify accepted URL variants or validation rules.

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 names a specific resource (a YouTube video) and the exact data returned (title, channel name, thumbnail), plus the implementation method (oembed, no key). It distinguishes this from sibling tools like get_transcript and list_channel_videos, though it does not use an explicit verb like 'retrieves'.

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?

There is no explicit guidance on when to use this tool versus siblings. The mention of oembed and 'no key' implies a low-friction metadata lookup, but it never states when to prefer it over get_transcript or list_channel_videos, leaving the choice to inference.

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

list_channel_videosB

Latest videos (up to ~15) of a channel. channel = @handle, UC... id, or channel URL.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
channelYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It discloses the approximate limit (~15) and accepted channel formats, but does not mention pagination, ordering, whether it's a read-only operation, or what happens with invalid channels. The '~15' caveat is a small transparency credit, but significant behavioral gaps remain.

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?

One sentence with no wasted words. The key scoping detail ('up to ~15') is front-loaded, and the channel format clarification is compact and directly useful.

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 (2 params, no nested objects) and has an output schema, so the description doesn't need to explain return values. However, with no annotations, it should disclose more about behavior: ordering, recency definition, error cases, and whether the limit is a hard cap. The channel format guidance is good, but the missing behavioral context leaves it slightly 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 0%, so the description must compensate. It explains the 'channel' parameter's accepted formats, which adds real meaning beyond the schema. However, it does not explain the 'limit' parameter's behavior beyond the default, and the schema already provides the default value. Partial compensation for a low-coverage schema.

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 states the tool lists the latest videos of a channel, with a specific resource (channel) and a scope qualifier (up to ~15). It distinguishes itself from siblings like get_transcript and get_video_info, which focus on individual videos, though it doesn't explicitly name them.

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 usage: use this when you need a channel's recent videos. It does not explicitly state when not to use it or mention alternatives like watch_channels for monitoring. The channel format guidance ('@handle, UC... id, or channel URL') is useful but doesn't address selection criteria among siblings.

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

watch_channelsA

Return videos published since the last call and mark them seen.

channels: comma-separated @handles / UC ids. Empty = read channels.json from the state dir (env YT_STATE_DIR, default ~/.youtube-signal-mcp). On a channel's first run only the newest max_new_per_channel are returned.

ParametersJSON Schema
NameRequiredDescriptionDefault
channelsNo
languagesNo
with_transcriptNo
max_new_per_channelNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/5.0
Behavior4/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 the stateful side effect ('mark them seen'), the 'since the last call' behavior, the first-run cap, and the channels.json fallback with an environment variable. It does not cover auth or rate limits, but the key behavioral traits are transparent.

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 three short sentences with the core behavior front-loaded. Every sentence adds operational value—core action, channel input syntax, and the first-run edge case—with no filler or repetition of schema defaults.

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?

An output schema exists, so describing return values is unnecessary. The state directory, environment variable, default path, and first-run behavior are covered, but languages and with_transcript have no semantic explanation anywhere, and there is no guidance about prerequisites or error cases.

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 0%, so the description must compensate. It adds real meaning for 'channels' ('@handles / UC ids', empty means read channels.json) and mentions max_new_per_channel for first-run behavior, but leaves languages and with_transcript entirely unexplained beyond their parameter titles.

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 opens with a specific verb and resource: 'Return videos published since the last call and mark them seen.' This clearly distinguishes watch_channels from list_channel_videos by emphasizing stateful filtering and a side effect, so an agent can tell them apart without opening schemas.

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 a polling/check-for-new-videos use case and explains input behavior, but it never explicitly says when to prefer this tool over siblings like list_channel_videos. The 'since the last call' wording gives context, yet no exclusions or alternatives are named.

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. 4 tool updatesv0.1.0
    • First observedget_transcript
    • First observedget_video_info
    • First observedlist_channel_videos
    • First observedwatch_channels

TDQS

A3.8/5.0

Scored across 4 tools

Disambiguation4/5

get_transcript and get_video_info are clearly distinct (content vs metadata). list_channel_videos and watch_channels both retrieve channel videos, but one is a static listing and the other is stateful incremental monitoring, so an agent could briefly confuse them despite clear descriptions.

Naming Consistency5/5

All tools follow a consistent verb_noun snake_case pattern: get_* for single-resource fetches, list_* for one-shot listing, watch_* for ongoing monitoring. No mixed conventions.

Tool Count5/5

Four tools is well-scoped for a YouTube signal server: single-video transcript/metadata and channel-level listing/monitoring. Each tool serves a distinct need without bloat.

Completeness4/5

The set covers the core signal workflow: discover new videos via watch_channels/list_channel_videos, then fetch transcript or metadata. Minor gaps exist (no pagination beyond 15, no watchlist management API), but agents can work around them via channels.json.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers