Gemini Transcription MCP
Provides tools for audio-to-text transcription using Google's Gemini multimodal API.
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., "@Gemini Transcription MCPTranscribe the audio file at https://example.com/meeting.mp3"
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.
Gemini Transcription MCP
An MCP server for audio-to-text transcription using Google's Gemini multimodal API.
Quick Start
Claude Code (Recommended)
claude mcp add gemini-transcription -s user \
-e OPENROUTER_API_KEY=your-key \
-- npx -y gemini-transcription-mcpClaude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"gemini-transcription": {
"command": "npx",
"args": ["-y", "gemini-transcription-mcp"],
"env": {
"OPENROUTER_API_KEY": "your-key"
}
}
}
}MetaMCP
Add via the MetaMCP UI or import JSON:
{
"mcpServers": {
"gemini-transcription": {
"command": "npx",
"args": ["-y", "gemini-transcription-mcp"],
"env": {
"OPENROUTER_API_KEY": "your-key"
},
"description": "Audio transcription using Gemini models via OpenRouter"
}
}
}Or fill in the Add Server form manually:
Field | Value |
Command |
|
Arguments |
|
Environment Variables |
|
Remote Deployment (HTTP Transport)
For deployments that require HTTP transport:
# Using Docker (recommended for remote)
docker run -d \
-p 3000:3000 \
-e OPENROUTER_API_KEY=your-key \
ghcr.io/danielrosehill/gemini-transcription-mcp
# Or run directly with HTTP transport
OPENROUTER_API_KEY=your-key npx gemini-transcription-mcp --http 3000The server exposes:
http://host:3000/mcp- MCP endpoint (streamable HTTP)http://host:3000/health- Health check
Related MCP server: whisper-telegram-mcp
Tools
Tool | Description |
| Lightly edited transcript (removes filler words, applies corrections) |
| Verbatim transcript with no cleanup |
| VAD preprocessing to strip silence before transcription |
| Transcribe and format as a document type (email, to-do list, etc.) |
| Compresses oversized files to Opus before transcribing |
| Full control with your own prompt |
| Format as a development specification for AI coding agents |
Input Methods
All tools accept audio via:
file_content: Base64-encoded audiofile_url: HTTP(S) URL to fetchssh_host+ssh_path: Pull via SCP (local deployment only)
Supported Formats
Native: MP3, WAV, OGG, FLAC, AAC, AIFF
Auto-converted: Opus, M4A, WebM, WMA, and others (converted to OGG/Opus)
Note: When manually converting audio, prefer MP3 over WAV. MP3 offers good compression with broad compatibility, while WAV files are unnecessarily large.
Configuration
Environment Variable | Description |
| Required. Your OpenRouter API key |
| Optional. Model to use (default: Gemini Flash Lite) |
| Optional. Auto-save location (default: |
| Optional. Set to |
| Optional. Port for HTTP mode (default: |
Deployment Options
Local (Claude Code, Claude Desktop)
Uses stdio transport. All features available including SSH file retrieval.
# Via npx (recommended)
npx gemini-transcription-mcp
# Or install globally
npm install -g gemini-transcription-mcp
gemini-transcription-mcpRemote/Docker (MetaMCP, Aggregators)
Uses HTTP transport. Requires container or server with ffmpeg installed.
Docker Compose:
# docker-compose.yml
services:
gemini-transcription:
image: ghcr.io/danielrosehill/gemini-transcription-mcp
ports:
- "3000:3000"
environment:
- OPENROUTER_API_KEY=${OPENROUTER_API_KEY}# Create .env file with your API key
echo "OPENROUTER_API_KEY=your-key" > .env
# Start the service
docker compose up -dFeature Availability by Deployment Type
Feature | Local (stdio) | Remote (HTTP) |
Base64 audio input | Yes | Yes |
URL audio input | Yes | Yes |
SSH file retrieval | Yes | No* |
Transcript auto-save | Yes | Container volume |
VAD preprocessing | Yes | Yes |
Format conversion | Yes | Yes |
* SSH retrieval requires local access to SSH keys and network.
Requirements
Node.js 18+
ffmpeg (for format conversion and VAD preprocessing)
When using Docker, ffmpeg is included in the image.
Building from Source
git clone https://github.com/danielrosehill/Gemini-Transcription-MCP.git
cd Gemini-Transcription-MCP
npm install
npm run build
# Run locally
OPENROUTER_API_KEY=your-key npm start
# Run with HTTP transport
OPENROUTER_API_KEY=your-key MCP_TRANSPORT=http npm start
# Build Docker image
docker build -t gemini-transcription-mcp .License
MIT
Available Tools
6 toolslist_transcription_presetsA
Lists available transcription presets from the Text-Transformation-Prompt-Library. Each preset is categorized as either a "style" (modifies tone/voice without changing structure) or a "format" (restructures content into a specific document type). Use these with the transcribe_with_preset tool.
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Optional text filter to search preset names (e.g. "email", "blog", "meeting") | |
| category | No | Filter by category: "style" for tone/voice presets, "format" for document structure presets. Omit for all. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden. It signals a read-only listing action through 'Lists available' and adds useful category semantics, but it does not explicitly confirm that no side effects occur or describe the shape of the returned preset entries.
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?
Two sentences, with the core action front-loaded, followed by the category distinction and downstream usage guidance. Every sentence earns its place with no filler or redundancy.
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?
For a simple list tool with two optional parameters and no output schema, the description provides the essential context: what is listed, how presets are categorized, and how they are used with transcribe_with_preset. Explicit return-field details would be a nice addition, but the tool's straightforward nature makes the description sufficient.
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 schema already documents both parameters at 100% coverage, but the description adds richer meaning for the enum values: 'style' modifies tone/voice without changing structure, while 'format' restructures content into a specific document type. This goes beyond the schema's brief enum comments, though it adds no detail about the filter parameter's syntax.
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 opens with a specific verb ('Lists') and a defined resource ('available transcription presets from the Text-Transformation-Prompt-Library'), then clarifies the two preset categories. This clearly differentiates it from the transcribe_* sibling tools, which perform audio transcription rather than preset listing.
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 explicitly tells the agent to use the listed presets with the transcribe_with_preset tool, establishing the expected workflow. It does not enumerate when-not-to-use or compare against each transcribe_* sibling, but the list-vs-transcribe distinction is clear from the tool names.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audioA
Transcribes an audio file using Gemini via OpenRouter. Returns a lightly edited transcript with filler words removed, verbal corrections applied, punctuation added, and paragraph breaks inserted. Large files are automatically compressed. Supports MP3, WAV, OGG, FLAC, AAC, AIFF, and many more formats (auto-converted). This is the recommended default tool.
| Name | Required | Description | Default |
|---|---|---|---|
| vad | No | Enable Voice Activity Detection preprocessing. Strips silence and non-speech audio before transcription using Silero VAD. Useful for recordings with long pauses or background noise. | |
| model | No | Model to use: "lite" for Gemini 3.1 Flash Lite (default, cost-efficient), "flash" for Gemini 3 Flash (more capable). Also accepts full OpenRouter model IDs. | |
| file_url | No | HTTP(S) URL where the audio file can be fetched. PREFERRED transport for remote clients — use a presigned URL from `s3-stage <path>` on the workstation. Provide this OR file_content. | |
| ssh_host | No | SSH host (and optional port, e.g. host:2222) to pull the audio file from. Provide with ssh_path. | |
| ssh_path | No | Remote file path on the SSH host. Provide with ssh_host. | |
| ssh_port | No | Optional SSH port when pulling the file. | |
| ssh_user | No | Optional SSH username when pulling the file. | |
| file_name | No | Optional name of the audio file, including the extension. Helpful when using URLs without a filename. | |
| output_dir | No | Optional directory path where the transcript will be saved as a markdown file. If provided, saves the transcript with a descriptive filename derived from the title. | |
| file_content | No | Base64-encoded audio content. AVOID for anything beyond a few seconds of audio — base64 inlining of audio is large and unreliable. Prefer file_url with `s3-stage` for local workstation files. Provide this OR file_url. |
TDQS
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 adds useful context: large files are automatically compressed, formats are auto-converted, and the output is processed (filler removed, punctuation added). It also implies a network call via OpenRouter. This goes beyond the schema, though it omits details like cost or latency.
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 tightly written with no filler. The main purpose and output behavior are front-loaded, followed by format support and the default-tool recommendation. Every sentence contributes value.
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?
Despite having 10 parameters and no output schema, the description is reasonably complete when combined with the rich schema. It explains core behavior and the default status, while the schema documents each parameter, including transport preferences (file_url vs file_content) and output_dir behavior. Minor gaps like explicit mention of saving behavior could be added, but overall it is sufficient for a tool of this complexity.
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 description coverage is 100%, so the baseline is 3. Every parameter is well-documented in the schema itself, and the description adds little parameter-specific meaning beyond overall behavioral hints like 'large files are automatically compressed'.
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 identifies the verb 'transcribes an audio file' and specifies the resource, along with the output transformation ('lightly edited transcript with filler words removed, verbal corrections applied, punctuation added, and paragraph breaks inserted'). It also positions itself as the 'recommended default tool', distinguishing it from siblings like transcribe_audio_raw or transcribe_with_preset.
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?
Explicitly states it is the recommended default tool, giving clear context for when to choose it. However, it does not name specific alternatives or exclusions, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audio_customA
Transcribes an audio file using Gemini via OpenRouter with a user-defined custom prompt. Provides full control over how the model processes and formats the transcription. Use this when you need specific transcription instructions not covered by other tools.
| Name | Required | Description | Default |
|---|---|---|---|
| vad | No | Enable Voice Activity Detection preprocessing. Strips silence and non-speech audio before transcription using Silero VAD. Useful for recordings with long pauses or background noise. | |
| model | No | Model to use: "lite" for Gemini 3.1 Flash Lite (default, cost-efficient), "flash" for Gemini 3 Flash (more capable). Also accepts full OpenRouter model IDs. | |
| file_url | No | HTTP(S) URL where the audio file can be fetched. PREFERRED transport for remote clients — use a presigned URL from `s3-stage <path>` on the workstation. Provide this OR file_content. | |
| ssh_host | No | SSH host (and optional port, e.g. host:2222) to pull the audio file from. Provide with ssh_path. | |
| ssh_path | No | Remote file path on the SSH host. Provide with ssh_host. | |
| ssh_port | No | Optional SSH port when pulling the file. | |
| ssh_user | No | Optional SSH username when pulling the file. | |
| file_name | No | Optional name of the audio file, including the extension. Helpful when using URLs without a filename. | |
| output_dir | No | Optional directory path where the transcript will be saved as a markdown file. If provided, saves the transcript with a descriptive filename derived from the title. | |
| file_content | No | Base64-encoded audio content. AVOID for anything beyond a few seconds of audio — base64 inlining of audio is large and unreliable. Prefer file_url with `s3-stage` for local workstation files. Provide this OR file_url. | |
| custom_prompt | Yes | The custom prompt/instructions to send along with the audio. Should describe how to transcribe and format the content. The prompt should instruct the model to return JSON with at minimum a "transcript" field. |
TDQS
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. It mentions that transcription runs through Gemini via OpenRouter and uses a custom prompt, but it does not disclose side effects like saving to output_dir, how audio is supplied, return behavior, or any limitations. This is a significant gap for an 11-parameter tool.
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 two sentences with no filler. The primary purpose is front-loaded first, and the usage guidance follows immediately. Every sentence earns its place.
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 11 parameters, no annotations, and no output schema, the description is too thin to be contextually complete. It does not explain what a successful call returns, whether a transcript file is saved, or how the audio transport options relate. The rich schema helps, but the description still leaves important operational context unstated.
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 100% parameter coverage with detailed descriptions, so the description does not need to restate parameter meanings. It adds the general concept of a custom prompt, but this is already captured by the custom_prompt parameter schema. Baseline 3 is appropriate.
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 a specific action — transcribing an audio file — and the differentiator: a user-defined custom prompt. It distinguishes this tool from siblings by emphasizing full control over processing/formatting and positioning it as the option for instructions not covered by other tools.
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 explicitly says to use this tool when specific transcription instructions are needed and not covered by other tools. It provides clear context but does not name sibling alternatives or state when not to use it, so it falls just short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audio_formatA
Transcribes an audio file and formats the output as a specific document type. Accepts any freeform format description. Use this when you want a quick ad-hoc format without browsing presets. For curated, high-quality formatting, use transcribe_with_preset instead.
| Name | Required | Description | Default |
|---|---|---|---|
| vad | No | Enable Voice Activity Detection preprocessing. Strips silence and non-speech audio before transcription using Silero VAD. Useful for recordings with long pauses or background noise. | |
| model | No | Model to use: "lite" for Gemini 3.1 Flash Lite (default, cost-efficient), "flash" for Gemini 3 Flash (more capable). Also accepts full OpenRouter model IDs. | |
| format | Yes | The desired output format. Examples: "email", "to-do list", "meeting notes", "technical document", "blog post", "executive summary", "letter", "report", "outline", "development specification". Any description is accepted. | |
| file_url | No | HTTP(S) URL where the audio file can be fetched. PREFERRED transport for remote clients — use a presigned URL from `s3-stage <path>` on the workstation. Provide this OR file_content. | |
| ssh_host | No | SSH host (and optional port, e.g. host:2222) to pull the audio file from. Provide with ssh_path. | |
| ssh_path | No | Remote file path on the SSH host. Provide with ssh_host. | |
| ssh_port | No | Optional SSH port when pulling the file. | |
| ssh_user | No | Optional SSH username when pulling the file. | |
| file_name | No | Optional name of the audio file, including the extension. Helpful when using URLs without a filename. | |
| output_dir | No | Optional directory path where the transcript will be saved as a markdown file. If provided, saves the transcript with a descriptive filename derived from the title. | |
| file_content | No | Base64-encoded audio content. AVOID for anything beyond a few seconds of audio — base64 inlining of audio is large and unreliable. Prefer file_url with `s3-stage` for local workstation files. Provide this OR file_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, yet it only restates the core function and freeform nature. It does not explain return behavior, whether/when files are saved, validation of format strings, or any limitations of the ad-hoc path.
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?
Three short sentences, all informative: purpose, freeform capability, and usage routing. No fluff or redundancy; front-loaded effectively.
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?
The description handles purpose and one sibling choice, and the rich schema documents all 11 parameters. However, with no output schema and no annotations, the missing return-value/side-effect information and lack of guidance for the other sibling tools leave notable gaps.
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 100%, so the baseline is 3. The description's 'freeform format' note is already present in the format parameter's schema, so it adds no additional semantic value beyond what the input schema provides.
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 identifies the action (transcribe an audio file and format the output) and the resource (audio file), and explicitly contrasts with transcribe_with_preset. However, with several transcription siblings (transcribe_audio, transcribe_audio_raw, transcribe_audio_custom), it does not fully differentiate from all of them, leaving some ambiguity.
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?
It gives an explicit use case ('quick ad-hoc format without browsing presets') and directs agents to transcribe_with_preset for curated formatting. This is actionable, but it does not address when to use transcribe_audio, raw, or custom variants, so the routing guidance is incomplete.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_audio_rawA
Transcribes an audio file using Gemini via OpenRouter. Returns a verbatim transcript with NO cleanup - preserves filler words, false starts, and repetitions exactly as spoken. Use this when you need exact speech-to-text without any editing.
| Name | Required | Description | Default |
|---|---|---|---|
| vad | No | Enable Voice Activity Detection preprocessing. Strips silence and non-speech audio before transcription using Silero VAD. Useful for recordings with long pauses or background noise. | |
| model | No | Model to use: "lite" for Gemini 3.1 Flash Lite (default, cost-efficient), "flash" for Gemini 3 Flash (more capable). Also accepts full OpenRouter model IDs. | |
| file_url | No | HTTP(S) URL where the audio file can be fetched. PREFERRED transport for remote clients — use a presigned URL from `s3-stage <path>` on the workstation. Provide this OR file_content. | |
| ssh_host | No | SSH host (and optional port, e.g. host:2222) to pull the audio file from. Provide with ssh_path. | |
| ssh_path | No | Remote file path on the SSH host. Provide with ssh_host. | |
| ssh_port | No | Optional SSH port when pulling the file. | |
| ssh_user | No | Optional SSH username when pulling the file. | |
| file_name | No | Optional name of the audio file, including the extension. Helpful when using URLs without a filename. | |
| output_dir | No | Optional directory path where the transcript will be saved as a markdown file. If provided, saves the transcript with a descriptive filename derived from the title. | |
| file_content | No | Base64-encoded audio content. AVOID for anything beyond a few seconds of audio — base64 inlining of audio is large and unreliable. Prefer file_url with `s3-stage` for local workstation files. Provide this OR file_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose a key behavioral trait: the output is verbatim with no cleanup, preserving filler words, false starts, and repetitions. It also reveals the underlying model provider. However, it does not describe how the transcript is returned (e.g., text output vs. saved file), error behavior, or transport-related edge cases, leaving some behavioral ambiguity.
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 two sentences with zero filler. The primary function and the key 'no cleanup' differentiator are front-loaded, and the usage guidance is concise. Every sentence earns its place.
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?
This is a complex tool with 10 parameters, multiple file transport options (file_url, ssh, file_content), and five sibling tools, yet the description gives no guidance on choosing between these transports or explaining the output format/saving behavior. The schema covers parameter syntax but not how to decide among the three mutually exclusive source options. For the tool's complexity, the description is under-specified.
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 description coverage is 100%, so the baseline is 3. The description itself adds no parameter-level meaning beyond the schema; it only mentions audio file generically. With all ten parameters already well-documented in the schema, this is acceptable, and the description neither compensates nor detracts.
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 verb 'Transcribes', the resource (audio file), and the underlying provider (Gemini via OpenRouter). It also highlights the distinguishing output trait: a verbatim transcript with NO cleanup, preserving filler words and repetitions. However, it does not explicitly identify how this differs from sibling tools like transcribe_audio or transcribe_with_preset, leaving some differentiation to inference from the 'raw' name.
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 clear usage context: 'Use this when you need exact speech-to-text without any editing.' This tells the agent when to choose this tool. It does not discuss when NOT to use it or recommend alternatives, so it stops short of the full 5-level guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
transcribe_with_presetB
Transcribes audio and transforms the output using a curated preset. Presets are divided into two categories:
Styles (modify tone/voice): formal, informal, academic, business, journalistic, assertive, flamboyant, minimalist, dejargonizer, simplify, victorian, shakespearean, etc.
Formats (restructure into document type): blog_outline, business_email, meeting_minutes, note_to_self, to_do_list, tech_documentation, feature_request, bug_report, cover_letter, resume, newsletter, development_prompt, etc.
Use list_transcription_presets to browse all 200+ available presets with category filters.
| Name | Required | Description | Default |
|---|---|---|---|
| vad | No | Enable Voice Activity Detection preprocessing. Strips silence and non-speech audio before transcription using Silero VAD. Useful for recordings with long pauses or background noise. | |
| model | No | Model to use: "lite" for Gemini 3.1 Flash Lite (default, cost-efficient), "flash" for Gemini 3 Flash (more capable). Also accepts full OpenRouter model IDs. | |
| preset | Yes | Name of the preset to apply (e.g. "blog_outline", "business_email", "note_to_self", "formal_tone", "dejargonizer"). Use underscores or spaces. | |
| file_url | No | HTTP(S) URL where the audio file can be fetched. PREFERRED transport for remote clients — use a presigned URL from `s3-stage <path>` on the workstation. Provide this OR file_content. | |
| ssh_host | No | SSH host (and optional port, e.g. host:2222) to pull the audio file from. Provide with ssh_path. | |
| ssh_path | No | Remote file path on the SSH host. Provide with ssh_host. | |
| ssh_port | No | Optional SSH port when pulling the file. | |
| ssh_user | No | Optional SSH username when pulling the file. | |
| file_name | No | Optional name of the audio file, including the extension. Helpful when using URLs without a filename. | |
| output_dir | No | Optional directory path where the transcript will be saved as a markdown file. If provided, saves the transcript with a descriptive filename derived from the title. | |
| file_content | No | Base64-encoded audio content. AVOID for anything beyond a few seconds of audio — base64 inlining of audio is large and unreliable. Prefer file_url with `s3-stage` for local workstation files. Provide this OR file_url. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It reveals the core transformation behavior and preset categories, but omits important operational details like return format, what happens when no output_dir is provided, failure modes, or any side effects.
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 well-structured and densely informative, with the core action front-loaded and preset categories clearly organized. The examples and pointer to list_transcription_presets all earn their place, though the example lists are slightly longer than strictly necessary.
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 (11 parameters, no annotations, no output schema), the description plus schema provide a mostly viable picture. The main gap is the absence of explicit output/return behavior and lack of guidance for choosing this over similar sibling tools, but the extensive schema descriptions compensate for much of the missing 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 input schema already provides 100% parameter coverage with detailed descriptions, giving a baseline of 3. The description adds extra meaning for the preset parameter by explaining the style/format taxonomy and providing concrete examples, which helps an agent select an appropriate preset.
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 a specific action and resource: transcribes audio and applies a curated preset to transform the output. It adds a useful style/format taxonomy, but it does not explicitly distinguish itself from sibling tools like transcribe_audio_format or transcribe_audio_custom, so it falls just short of full differentiation.
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 this tool should be used when a preset-based transcription is desired, and it explicitly directs users to list_transcription_presets for preset discovery. However, it never states when not to use this tool or names alternatives such as transcribe_audio_raw or transcribe_audio_custom.
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.
6 tool updates
v0.8.1- First observed
list_transcription_presets - First observed
transcribe_audio - First observed
transcribe_audio_custom - First observed
transcribe_audio_format - First observed
transcribe_audio_raw - First observed
transcribe_with_preset
TDQS
Scored across 6 tools
The transcription tools are mostly distinct: transcribe_audio gives cleaned output, transcribe_audio_raw gives verbatim, transcribe_audio_custom allows arbitrary prompts, and transcribe_audio_format handles ad-hoc formatting. The main overlap is between transcribe_audio_format and transcribe_with_preset, but the descriptions clearly separate curated presets from freeform formatting.
Tool names follow a clear snake_case verb-first pattern, with strong consistency across the transcribe_audio_* variants. The only minor deviation is transcribe_with_preset, which uses a prepositional form rather than the transcribe_audio_* parallel used by the other formatting tool.
Six tools is well-scoped for a transcription MCP server. Each tool fills a meaningful niche: listing presets, preset-based transcription, default cleaned transcription, raw transcription, custom-prompt transcription, and ad-hoc formatting.
The tool surface covers the full transcription workflow: discover presets, transcribe with presets, use default cleanup, get verbatim output, provide custom prompts, and apply ad-hoc formats. There are no obvious dead ends or missing core operations for the stated domain.
Maintenance
Related MCP Connectors
MCP server for RiverScript, an AI transcription platform - fetches transcripts shared via a link.
An MCP server that gives any LLM or agent clean YouTube transcripts on demand: a single video, a whole channel, or a playlist, plus AI cleanup of auto-generated captions. API-key auth, credit-based, same backend as the public v1 API. Get a free API key with 25 free credits at youtubetranscriptdownload.com/account.
An MCP server that provides tools to discover and retrieve podcast episodes transcripts.
MCP server for Speech-to-Text
Related MCP Servers
- AlicenseBqualityDmaintenanceA MCP server that enables transcription of audio files using OpenAI's Speech-to-Text API, with support for multiple languages and file saving options.15 npm10MIT
- AlicenseAqualityDmaintenanceAn MCP server that enables transcribing local audio files and Telegram voice messages using OpenAI's Whisper via local inference or cloud API. It supports multiple audio formats, automatic language detection, and optional word-level timestamps for AI-powered audio analysis.51MIT
- AlicenseAqualityAmaintenanceMCP server for audio transcription using local faster-whisper or OpenAI Whisper API, enabling multilingual transcription with optional GPT post-processing.3MIT
- AlicenseAqualityCmaintenanceMCP server for audio transcription using OpenRouter models, supporting verbatim, cleaned, and custom transcription modes.28 npm1MIT