Troubleshooting¶
This page maps common yt-text failures to the actual output strings the MCP
server returns.
First Checks¶
Run these before debugging a client integration:
yt-text --version
Then confirm:
- the binary is on
PATH, or your client config uses an absolute path - your MCP config file is in the right location for your client
- you restarted the client after changing MCP config
If you only want a fast connectivity check, call get_metadata first. It is
the lightest path through the system.
Common Failures¶
Error: invalid YouTube URL or video ID: ...¶
What it means:
- the input does not parse as a supported YouTube watch URL, short URL, or bare video ID
What to do:
- use a normal YouTube watch URL such as
https://youtube.com/watch?v=dQw4w9WgXcQ - avoid playlist-only URLs when you mean to target a single video
Error: source error: video is private or requires authentication¶
What it means:
- the video is not publicly accessible from an unauthenticated request
What to do:
- test with a public video first
- do not expect
yt-textto bypass private-video access control
Error: source error: video is age-restricted¶
What it means:
- YouTube is blocking access to the video without an authenticated or age-verified session
What to do:
- validate the workflow against a public non-restricted video
- treat age-restricted videos as unsupported for the default path
Error: transcribe error: no captions available (timedtext returned empty; try building with --features po-token)¶
What it means:
- metadata and language discovery worked, but the actual caption fetch was blocked or returned empty
- this is the common BotGuard / proof-of-origin token case
What to do:
- build with
--features po-token - verify the BotGuard sidecar is available in that build
- keep using
get_metadataandlist_languageseven if transcript fetches are blocked; those paths can still succeed
Error: source error: PoToken required but botguard sidecar not available¶
What it means:
- YouTube requested a proof-of-origin token and the running build does not have the BotGuard path available
What to do:
- rebuild with
--features po-token - use a non-PoToken-requiring video for baseline validation if you are still wiring the environment
Error: transcribe error: whisper feature not enabled¶
What it means:
- the fallback path reached local speech-to-text, but the running binary was not built with whisper support
What to do:
- rebuild with
--features whisper - remember that the first whisper run downloads the model and will be slower
Error: transcribe error: whisper inference failed: ...¶
What it means:
- the local audio-to-text path started but failed during decode, model setup, or inference
What to do:
- retry with a normal captioned video to separate caption-path issues from whisper-path issues
- confirm you built with
--features whisper - expect the first whisper run to do extra setup work
Behavior That Looks Like A Bug But Is Intentional¶
Requested language did not match returned language¶
yt-text does not hard-fail on a missing requested language. The fallback chain
is:
- Manual captions in the requested language
- Auto-generated captions in the requested language
- Manual captions in any language
- Auto-generated captions in any language
- Whisper fallback if enabled and audio is available
If strict language choice matters:
- call
list_languagesfirst - inspect the
languagefield in JSON transcript output - do not assume
lang=enguarantees an English result
Metadata and language listing work, but transcript fetch fails¶
This usually means:
- YouTube is allowing watch-page metadata access
- but the timedtext fetch path is blocked or empty
That is the classic signal to try the po-token feature.
MCP Client Issues¶
Client shows no yt-text tools¶
What to check:
- the client config file path is correct for that editor
- the server command points to a real executable
- the client was restarted after config changes
See Integrations for client-specific config locations.
Server starts but the client behaves strangely¶
yt-text is a stdio MCP server. stdout is reserved for protocol traffic.
What to do:
- do not wrap
yt-textin a script that prints banner text tostdout - keep any logging on
stderr - prefer calling the binary directly in MCP config