Hermes YouTube Transcript MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Hermes YouTube Transcript MCP Servertranscribe https://youtube.com/watch?v=dQw4w9WgXcQ"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Hermes YouTube Transcript MCP Server
A Hermes-ready MCP server for STT-first YouTube transcript ingestion.
It downloads audio with yt-dlp, normalizes it with ffmpeg, transcribes it
with faster-whisper, and saves durable Markdown + JSON outputs suitable for
Obsidian and Hermes ingestion.
Exposed tools
download_youtube_audio(url_or_video_id)transcribe_audio(file_path)transcribe_youtube(url_or_video_id)save_transcript(transcript, metadata)
Related MCP server: TranscriptMCP
Why this stack
yt-dlp: reliable YouTube audio fetcherffmpeg: normalizes audio before transcriptionfaster-whisper: high-quality local STT engineMCP stdio: Hermes can discover and call the tools directly
YouTube captions are not used as the primary transcript source here. They can be added later as a fallback or comparison step, but this server is STT-first by design.
Install
1) System dependencies
Install these first:
ffmpeguv
If you want faster-whisper to use GPU acceleration, install the relevant
CUDA/metal stack for your machine. The server defaults to CPU-friendly settings
and can be tuned with environment variables.
2) Python dependencies
From this directory:
uv syncIf you prefer a one-off environment install:
uv pip install -e .Run the MCP server
uv run python -m hermes_youtube_transcript_mcp.serverThat starts the server over stdio, which is the best fit for Hermes MCP.
Hermes MCP config
Add this to ~/.hermes/config.yaml:
mcp_servers:
youtube_transcripts:
command: "uv"
args:
- "run"
- "--project"
- "/Users/thomkozik/dev/hermes-youtube-transcript-mcp"
- "python"
- "-m"
- "hermes_youtube_transcript_mcp.server"
timeout: 300
connect_timeout: 60After saving the config, restart Hermes or reload MCP so the tools are rediscovered. In Hermes, the tools should appear with the prefix:
mcp_youtube_transcripts_download_youtube_audiomcp_youtube_transcripts_transcribe_audiomcp_youtube_transcripts_transcribe_youtubemcp_youtube_transcripts_save_transcript
You can confirm discovery with:
hermes mcp list
hermes mcp test youtube_transcriptsEnvironment variables
Optional overrides:
HERMES_YT_TRANSCRIPTS_DIR: where Markdown/JSON transcript files are savedHERMES_YT_DOWNLOAD_DIR: where raw downloads are cachedHERMES_YT_NORMALIZED_DIR: where normalized WAV files are writtenHERMES_YT_WHISPER_MODEL:large-v3by defaultHERMES_YT_WHISPER_DEVICE:cpuby defaultHERMES_YT_WHISPER_COMPUTE_TYPE:int8by defaultHERMES_YT_WHISPER_BEAM_SIZE:5by default
Output format
save_transcript() writes two files:
Markdown with YAML frontmatter and a human-readable transcript body
JSON sidecar with the full metadata and segment list
This format is durable, grep-friendly, and easy to ingest into Obsidian or Thorn.
Verification
Run the unit tests:
uv run python -m unittest discover -s tests -vIf you want a manual smoke test after config is loaded, use Hermes to call
mcp_youtube_transcripts_transcribe_youtube on a known public video and check
that the Markdown and JSON files are created in the configured output directory.
Notes
If
ffmpegis missing, the server raises a clear error before transcription.If
yt-dlporfaster-whisperare missing, the server tells you how to install the project dependencies.This implementation intentionally avoids relying on YouTube captions as the primary transcript source.
Available Tools
4 toolsdownload_youtube_audioC
Download the best available YouTube audio to a local cache path.
| Name | Required | Description | Default |
|---|---|---|---|
| url_or_video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Minimal disclosure: 'best available' is vague, no info on caching behavior, file naming, error handling, or auth requirements. No annotations provided to compensate.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, no wasted words. However, the brevity comes at the cost of missing important details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given its simplicity (one param, output schema present), the description is too sparse. It omits details about the return value, cache path, and quality selection, leaving the agent with insufficient context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not elaborate on the only parameter 'url_or_video_id' (e.g., accepted formats, required protocol). With 0% schema description coverage, this is a critical gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool downloads YouTube audio to a local cache path with 'best available' quality. It is distinct from sibling tools like save_transcript and transcribe_audio, which handle transcription.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool versus alternatives. Does not specify prerequisites (e.g., URL format), limitations, or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
save_transcriptC
Persist a transcript as durable Markdown plus JSON sidecar for Obsidian/Thorn.
| Name | Required | Description | Default |
|---|---|---|---|
| metadata | No | ||
| transcript | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries full burden. It discloses the output format (Markdown + JSON sidecar) but omits critical behavioral traits: whether it creates/overwrites files, naming conventions, required permissions, sidecar details, or error handling. 'Persist' is ambiguous.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence, which is concise and free of fluff. However, it could be restructured to front-load key operational details (e.g., 'Saves transcript to disk as Markdown...'). It earns points for brevity but lacks optimal structure.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (save operation, two params, no annotations), the description is too sparse. It does not mention file location, naming, behavior on existing files, or idempotency. The output schema exists but does not compensate for missing usage and parameter details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has two parameters (transcript, metadata) with 0% description coverage. The description does not explain what the transcript parameter should contain (e.g., text, object), nor what metadata is for. This is inadequate for an agent to correctly populate the arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'persist' and identifies the resource as a transcript. It specifies the output format (durable Markdown plus JSON sidecar) and the target applications (Obsidian/Thorn). This clearly differentiates from sibling tools that focus on downloading or transcribing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
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 (e.g., after transcribing, before uploading). It does not mention prerequisites, context, or conditions for use. The agent must infer usage from sibling names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audioC
Normalize an audio file with ffmpeg and transcribe it with faster-whisper.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description lacks disclosure of important behaviors: what happens if file_path is invalid, whether the original file is modified, resource usage, or output format.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is very short (12 words) but omits necessary details, making it under-specified rather than efficiently concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, the description fails to hint at what the tool returns. Considering one parameter and sibling tools, the description is incomplete for effective use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and description adds no additional meaning to the single parameter file_path beyond its name and type.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool normalizes and transcribes audio, mentioning specific tools (ffmpeg, faster-whisper). However, it does not differentiate from sibling tool transcribe_youtube, which also transcribes audio.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs alternatives like transcribe_youtube. No context about prerequisites or file requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_youtubeB
Download a YouTube video, normalize the audio, and transcribe it STT-first.
| Name | Required | Description | Default |
|---|---|---|---|
| url_or_video_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It mentions the pipeline but lacks details on destructiveness (e.g., temporary file deletion), required permissions, supported languages, max duration, or error handling. 'STT-first' is unclear.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence that is highly concise and front-loaded with the verb and resource. Every word serves a purpose without redundant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's multi-step complexity (download, normalize, transcribe) and lack of annotations, the description is too brief. It omits critical details like output format, audio length limits, or language support, making it incomplete for agent decision-making.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, and the description does not add meaning beyond the parameter name 'url_or_video_id'. It fails to explain required format (full URL vs ID) or provide examples, leaving agents with insufficient detail.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action sequence (download, normalize, transcribe) and the resource (YouTube video). It distinguishes from sibling tools like 'download_youtube_audio' (just download) and 'transcribe_audio' (transcribe audio without YouTube step), making the purpose specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for transcribing YouTube videos but provides no explicit guidance on when to use this tool over siblings (e.g., if audio is already obtained, use 'transcribe_audio'), and does not mention prerequisites or context.
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.
4 tool updates
v0.1.0- First observed
download_youtube_audio - First observed
save_transcript - First observed
transcribe_audio - First observed
transcribe_youtube
TDQS
Scored across 4 tools
Each tool has a distinct purpose: downloading audio, transcribing audio files, transcribing YouTube videos directly, and saving transcripts. No overlap or ambiguity.
All tool names follow a consistent verb_noun pattern in snake_case, such as 'download_youtube_audio' and 'transcribe_audio', making them predictable.
With 4 tools, the set is well-scoped for the goal of generating YouTube transcripts. Each tool serves a necessary step in the pipeline.
Covers the full workflow: download, transcribe, save, plus an end-to-end shortcut. Only minor gap: no tool to retrieve or list existing transcripts.
Maintenance
Related MCP Connectors
Transcribe YouTube via Whisper. Summaries, chapters, semantic-search across your corpus.
Clean YouTube transcripts for agents: single videos, channels, playlists, plus AI caption cleanup.
Fetch the full transcript of any YouTube video as clean text. No API key, no signup.
Fetch transcripts, subtitles, chapters, metadata and frames from YouTube and 10+ video platforms
Related MCP Servers
- AlicenseBqualityDmaintenanceEnables downloading videos from platforms like YouTube and converting them to text using OpenAI Whisper and ffmpeg. It supports multiple output formats including TXT, JSON, SRT, and VTT for transcriptions.26 npmISC
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to download YouTube videos and transcribe them locally using OpenAI's Whisper speech recognition model.MIT
- AlicenseNot gradedqualityCmaintenanceTranscribes YouTube videos or audio files to Markdown, plain-text, and Word documents.MIT
- AlicenseNot gradedqualityCmaintenanceFetches YouTube transcripts and metadata (title, channel, duration) for URLs, using subtitles or on-device Whisper STT when no subtitles are available, enabling chat-based YouTube video analysis.MIT