Skip to main content
Glama
thomkozik

Hermes YouTube Transcript MCP Server

by thomkozik

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 fetcher

  • ffmpeg: normalizes audio before transcription

  • faster-whisper: high-quality local STT engine

  • MCP 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:

  • ffmpeg

  • uv

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 sync

If you prefer a one-off environment install:

uv pip install -e .

Run the MCP server

uv run python -m hermes_youtube_transcript_mcp.server

That 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: 60

After 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_audio

  • mcp_youtube_transcripts_transcribe_audio

  • mcp_youtube_transcripts_transcribe_youtube

  • mcp_youtube_transcripts_save_transcript

You can confirm discovery with:

hermes mcp list
hermes mcp test youtube_transcripts

Environment variables

Optional overrides:

  • HERMES_YT_TRANSCRIPTS_DIR: where Markdown/JSON transcript files are saved

  • HERMES_YT_DOWNLOAD_DIR: where raw downloads are cached

  • HERMES_YT_NORMALIZED_DIR: where normalized WAV files are written

  • HERMES_YT_WHISPER_MODEL: large-v3 by default

  • HERMES_YT_WHISPER_DEVICE: cpu by default

  • HERMES_YT_WHISPER_COMPUTE_TYPE: int8 by default

  • HERMES_YT_WHISPER_BEAM_SIZE: 5 by default

Output format

save_transcript() writes two files:

  1. Markdown with YAML frontmatter and a human-readable transcript body

  2. 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 -v

If 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 ffmpeg is missing, the server raises a clear error before transcription.

  • If yt-dlp or faster-whisper are 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 tools
download_youtube_audioC

Download the best available YouTube audio to a local cache path.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_video_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
metadataNo
transcriptYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.8/5.0
Behavior2/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters1/5

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.

Purpose5/5

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.

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 (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.

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.4/5.0
Behavior2/5

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.

Conciseness2/5

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.

Completeness2/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 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.

Parameters1/5

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.

Purpose4/5

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.

Usage Guidelines2/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
url_or_video_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 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.

Conciseness5/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.0
    • First observeddownload_youtube_audio
    • First observedsave_transcript
    • First observedtranscribe_audio
    • First observedtranscribe_youtube

TDQS

B3.3/5.0

Scored across 4 tools

Disambiguation5/5

Each tool has a distinct purpose: downloading audio, transcribing audio files, transcribing YouTube videos directly, and saving transcripts. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case, such as 'download_youtube_audio' and 'transcribe_audio', making them predictable.

Tool Count5/5

With 4 tools, the set is well-scoped for the goal of generating YouTube transcripts. Each tool serves a necessary step in the pipeline.

Completeness4/5

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

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers