Skip to main content
Glama

Audio Transcription MCP Server

Real-time audio transcription using OpenAI Whisper. Capture and transcribe system audio (meetings, videos, music) automatically with AI assistance through Cursor or Claude Desktop.

✨ Features

  • 🎀 Real-time transcription - Captures and transcribes audio as it plays

  • πŸ”„ Zero installation - Use with npx, no global install needed

  • πŸ€– AI-powered - Uses OpenAI's Whisper API for accurate transcription

  • πŸ“ Timestamped transcripts - Every entry is timestamped in markdown format

  • πŸ”’ Session isolation - Each session gets its own unique transcript file

  • ⚑ Smart silence detection - Automatically pauses when no audio detected

  • 🎯 Automated setup - One command sets up audio routing

  • πŸ§ͺ Built-in testing - Verify your setup before starting

Related MCP server: livechat-mcp

πŸš€ Quick Start (5 Minutes)

Step 1: Run Automated Setup

The setup script installs everything you need and guides you through configuration:

npx audio-transcription-mcp setup

What this does:

  • βœ… Installs Homebrew (if needed)

  • βœ… Installs ffmpeg for audio processing

  • βœ… Installs BlackHole virtual audio driver

  • βœ… Guides you through creating a Multi-Output Device (or does it automatically!)

  • βœ… Takes 5 minutes, mostly automated

First time? The script will walk you through everything with clear instructions. Don't worry if it asks for your Mac password - that's normal for installing software!

Step 2: Test Your Setup

Verify everything works before using it:

npx audio-transcription-mcp test

This captures 5 seconds of audio and shows you if it's working correctly.

Step 3: Configure Your AI Assistant

Add to your Cursor or Claude Desktop config:

Edit ~/.cursor/config.json:

{
  "mcpServers": {
    "audio-transcription": {
      "command": "npx",
      "args": ["-y", "audio-transcription-mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-your-key-here",
        "INPUT_DEVICE_NAME": "BlackHole"
      }
    }
  }
}

Then restart Cursor and ask:

"Start transcribing audio"

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "audio-transcription": {
      "command": "npx",
      "args": ["-y", "audio-transcription-mcp"],
      "env": {
        "OPENAI_API_KEY": "sk-your-key-here",
        "INPUT_DEVICE_NAME": "BlackHole",
        "OUTFILE_DIR": "/Users/yourname/Documents/Transcripts"
      },
      "allowedDirectories": [
        "/Users/yourname/Documents/Transcripts"
      ]
    }
  }
}

Important:

  1. Create the directory: mkdir -p ~/Documents/Transcripts

  2. Replace yourname with your actual username

  3. Restart Claude Desktop

Then ask:

"Start transcribing audio"

Step 4: Set System Output

Go to System Settings > Sound > Output and select "Multi-Output Device"

This routes audio to both your speakers (so you can hear) and BlackHole (for transcription).

Step 5: Start Transcribing!

In Cursor or Claude Desktop, just ask:

"Start transcribing audio"

Your AI assistant will start capturing and transcribing audio in real-time!


πŸ“– What You Need

🎯 Use Cases

  • Meeting transcription - Zoom, Google Meet, Teams calls

  • Content creation - Transcribe videos, podcasts, or music

  • Accessibility - Real-time captions for any audio

  • Note-taking - Automatic transcripts of lectures or presentations

  • Research - Transcribe interviews or focus groups

πŸ”§ Troubleshooting

Audio Not Being Captured

Problem: Test shows silent or very low audio levels

Solution:

  1. Check System Settings > Sound > Output is set to "Multi-Output Device"

  2. Open Audio MIDI Setup and verify both outputs are checked:

    • β˜‘ Built-in Output

    • β˜‘ BlackHole 2ch

  3. Play some audio and run npx audio-transcription-mcp test again

BlackHole Not Showing Up

Problem: BlackHole doesn't appear in device list

Solution: Restart your Mac. Audio drivers require a restart to be recognized by the system.

Setup Script Fails

Problem: Automated setup doesn't work

Solution: The script will fall back to manual mode with clear instructions. This is normal on first run if accessibility permissions aren't granted. Just follow the 4-step guide shown.

Want to Start Over?

If you need to remove everything and start fresh:

# Uninstall BlackHole and ffmpeg
brew uninstall blackhole-2ch ffmpeg

# Delete Multi-Output Device
# 1. Open Audio MIDI Setup
# 2. Select "Multi-Output Device" in left sidebar
# 3. Press Delete key

# Then run setup again
npx audio-transcription-mcp setup

Need More Help?


πŸ“š Additional Documentation

πŸ› οΈ Advanced Usage

Standalone CLI Mode

You can use this as a standalone CLI without MCP:

# Start transcription (saves to meeting_transcript.md)
npx audio-transcription-mcp start

# Press Ctrl+C to stop

Configure via .env file:

OPENAI_API_KEY=sk-your-key-here
INPUT_DEVICE_NAME=BlackHole
CHUNK_SECONDS=8
OUTFILE=meeting_transcript.md

MCP Server Tools

When used with Cursor or Claude Desktop, these tools are available:

  • start_transcription - Start capturing and transcribing audio

  • pause_transcription - Pause transcription temporarily

  • resume_transcription - Resume after pause

  • stop_transcription - Stop and get session stats

  • get_status - Check if transcription is running

  • get_transcript - Retrieve current transcript content

  • clear_transcript - Clear and start fresh

  • cleanup_transcript - Delete transcript file

Configuration Options

Environment variables you can customize:

Variable

Default

Description

OPENAI_API_KEY

(required)

Your OpenAI API key

INPUT_DEVICE_NAME

BlackHole

Audio input device name

CHUNK_SECONDS

8

Seconds of audio per chunk

MODEL

whisper-1

OpenAI Whisper model

OUTFILE_DIR

process.cwd()

Output directory for transcripts

SAMPLE_RATE

16000

Audio sample rate (Hz)

CHANNELS

1

Number of audio channels

πŸ—οΈ How It Works

  1. Audio Routing: Multi-Output Device sends system audio to both your speakers and BlackHole

  2. Capture: ffmpeg captures audio from BlackHole in 8-second chunks

  3. Processing: Audio is converted to WAV format suitable for Whisper API

  4. Transcription: Each chunk is sent to OpenAI Whisper for transcription

  5. Output: Timestamped text is appended to a markdown file in real-time

  6. Silence Detection: Automatically pauses after 32 seconds of silence to save API costs

πŸ’° Costs & Performance

What You're Paying For

You ONLY pay for OpenAI Whisper API calls - everything else runs locally for free!

βœ… FREE (runs locally on your machine):

  • Audio capture with ffmpeg

  • Audio processing and buffer management

  • Silence detection and level analysis

  • File operations (writing/reading transcripts)

  • All MCP server operations

πŸ’° PAID (OpenAI API):

  • Only the transcription API calls to OpenAI Whisper

  • $0.006 per minute of audio transcribed

  • Silent chunks are automatically skipped to save money

Actual Costs

With default 8-second chunks:

Duration

API Calls

Approximate Cost

1 minute

~7.5 chunks

$0.006

1 hour

~450 chunks

$0.36

8-hour workday

~3,600 chunks

$2.88

Cost per chunk: ~$0.0008 (less than a tenth of a cent!)

Built-in Cost Savings

The tool includes smart silence detection that saves you money:

  • πŸ”‡ Silent audio chunks are NEVER sent to OpenAI

  • πŸ’° Automatically tracks cost savings in the debug log

  • ⏸️ Auto-pauses after 32 seconds of silence

  • πŸ“Š View statistics with get_status to see chunks skipped

Example: In a 1-hour meeting with 15 minutes of silence, you save ~$0.09 automatically!

Performance

  • Memory usage: 50-100 MB per session

  • CPU usage: Minimal (ffmpeg handles audio processing)

  • API latency: 1-3 seconds per chunk

  • Accuracy: 90-95% for clear speech

  • Network: Only during transcription API calls

Cost Optimization Tips

  1. Increase chunk size - Fewer API calls (set CHUNK_SECONDS=15)

  2. Use silence detection - Enabled by default, saves money automatically

  3. Pause when not needed - Use pause_transcription during breaks

  4. Monitor usage - Check OpenAI dashboard for actual costs

Bottom line: Transcription is cheap (~36Β’/hour), runs mostly locally, and automatically saves money by skipping silence. You're only charged when actual speech is being transcribed.

πŸ§ͺ Development & Testing

For contributors and developers:

πŸ“– See MCP_SETUP.md for complete setup instructions

Just add to your config and restart - that's it!

See the npx configuration at the top of this README for Cursor and Claude Desktop.

For Standalone CLI (Local Development)

πŸ“– See GETTING_STARTED.md for complete setup instructions

# Install dependencies
npm install
npm run build

# Configure environment
cp env.example .env  # Then add your OpenAI API key

# Run standalone CLI
npm start

πŸ“„ License & Contributing

This project is licensed under the MIT License - see the LICENSE file for details.

Contributions are welcome! Please feel free to submit a Pull Request.

Development Resources


Made with ❀️ for transcribing meetings, content, and conversations.

Star ⭐ this repo if you find it useful!

Available Tools

8 tools
cleanup_transcriptA

Delete the transcript file completely. Use this to remove the transcript file when you're done.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description carries the burden of revealing destructive behavior. It states 'Delete the transcript file completely,' implying irreversibility. However, it doesn't mention any additional behavioral details like permissions, side effects on active transcription, or what happens to the file handle.

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 two short sentences, with the action front-loaded. Every word is functional; no filler.

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 parameterless deletion tool, the description is largely complete: it states the action, the object, and when to use it. The only notable gap is not addressing the potential confusion with clear_transcript, but given the explicit 'completely' and 'delete,' it may be sufficient.

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

Parameters4/5

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

The tool has zero parameters, so the input schema provides no information. The description adds value by clarifying that the operation is a complete deletion rather than a reset, making the semantics clear. Baseline for 0 params is 4.

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 uses the specific verb 'Delete' with the resource 'transcript file' and adds 'completely' to indicate permanence. It clearly states the action, though it doesn't explicitly distinguish from the sibling clear_transcript.

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 provides a clear usage context ('when you're done'), but it doesn't explicitly contrast this with clear_transcript or mention scenarios where this should not be used (e.g., if you only need to clear content without deleting the file).

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

clear_transcriptA

Clear the transcript file and reinitialize it with a fresh header.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/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 a destructive action (clearing the file) and the reinitialization behavior, adding value beyond the tool name. It could be more explicit about irreversibility, but the intent is clear.

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 one sentence, front-loaded with the verb, and includes no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless tool with no annotations, the description sufficiently explains what happens and the resulting state. It is complete for the tool's simple functionality.

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

Parameters4/5

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

The tool has no parameters, so the description need not explain them. The baseline 4 applies, and the description does not detract from this.

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 'Clear' and resource 'transcript file', and adds detail about reinitializing with a fresh header, which distinguishes it from siblings like cleanup_transcript.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for resetting the transcript file but does not explicitly compare with alternatives like cleanup_transcript. It provides clear context (to clear and reinitialize) without exclusions or when-not guidance.

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

get_statusA

Get the current status of the transcription session including whether it's running, number of chunks processed, errors, and session duration. CRITICAL: AI assistants should check this regularly (every 30-60 seconds) during active transcription to: 1) Catch audio routing issues or silence detection, 2) Monitor session duration and alert user if running 30+ minutes (prevents forgotten recordings and excessive API costs), 3) Detect paused states and warnings. The status.warning field will contain important alerts that should be shown to the user immediately.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.8/5.0
Behavior5/5

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

With no annotations, the description carries full behavioral burden. It discloses the tool's purpose as a monitoring/read operation, explains the frequency of use, and details the status.warning field's importance. It does not contradict any annotations (none provided) and provides rich context beyond the basic tool name.

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 front-loaded with the core purpose and includes a clearly structured critical usage section with numbered points. Each sentence adds value, but the CRITICAL section is somewhat lengthy for a no-parameter status tool. Still, it is well-organized and not wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite having no parameters, annotations, or output schema, the description is complete enough to use the tool correctly. It explains what data will be returned, how often to poll, and what actions to take based on the status. The sibling tool names provide further context on its role in the transcription workflow.

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

Parameters4/5

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

The tool has zero parameters, so schema coverage is 100% by default. The baseline for 0 params is 4. The description does not add parameter-specific details (none needed), but it does describe the output fields (running, chunks, errors, duration), which is relevant context even though not strictly about parameters.

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 gets the current status of a transcription session, listing specific components (running state, chunks processed, errors, duration). This specific verb+resource combination distinguishes it from sibling lifecycle tools like start, pause, and stop.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: check every 30-60 seconds during active transcription, with concrete scenarios like catching audio routing issues, monitoring long sessions, and detecting paused states. It also instructs on what to do (show alerts to user), which is actionable and clear.

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

get_transcriptA

Retrieve the current transcript content. Optionally get only the last N lines.

ParametersJSON Schema
NameRequiredDescriptionDefault
linesNoOptional: Return only the last N lines

TDQS

A3.7/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 burden. It does disclose the default behavior (full content) and optional behavior (last N lines), but it does not state explicitly that the operation is read-only/non-destructive, what happens when no transcript exists, or whether the transcript is available before/during/after transcription.

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 front-loads the core purpose and adds the optional parameter. Every word earns its place, with no redundancy or fluff.

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?

For a simple getter with one optional parameter, the description is adequate but has gaps: it does not describe the return format (e.g., string, array of lines), behavior on empty transcript, or prerequisites (e.g., must be after start_transcription). The lack of an output schema increases the need for such detail.

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 100%, with the 'lines' parameter already described as 'Optional: Return only the last N lines'. The description essentially repeats this without adding constraints (e.g., positive integer, maximum value) or clarifying whether it's inclusive/exclusive.

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 'Retrieve the current transcript content' uses a specific verb ('retrieve') and resource ('transcript'), clearly distinguishing it from sibling tools like start_transcription, clear_transcript, or get_status. The optional lines parameter adds a clear secondary behavior.

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 as a getter but provides no explicit guidance on when to use it versus alternatives, such as referencing get_status for status or noting whether an active transcription session is required. There are no exclusions or alternative tool names mentioned.

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

pause_transcriptionA

Pause the current transcription session. Audio capture continues but transcription is paused. Use resume_transcription to continue.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 burden. It discloses the key behavioral nuance that audio capture continues while transcription pauses, which is essential for understanding the tool's effect. It lacks details about prerequisites or return values, but the core behavior is 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 two short sentences with no wasted words. The first sentence states the action, the second clarifies a critical nuance and points to the next step. Very efficient and well-structured.

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 tool with no parameters and no output schema, the description covers the essential context: what it does, how it behaves, and what to do next. It could mention prerequisites (e.g., an active session), but the sibling list and clarity make this adequate.

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

Parameters4/5

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

The tool has zero parameters, so the schema already provides complete information. The description adds no parameter-specific details, but none are needed. Baseline of 4 applies due to absence of parameters.

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 ('Pause the current transcription session') and distinguishes it from related tools by noting that audio capture continues. It also directly references resume_transcription as the counterpart, effectively differentiating it from siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says to use resume_transcription to continue, providing clear guidance on the follow-up action. It implies when to use this tool (when you want to temporarily pause transcription but keep audio capture), though it does not explicitly contrast with stop or other alternatives.

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

resume_transcriptionA

Resume transcription after it has been paused (either manually or due to silence detection).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It explains the cause of the pause (manual or silence) and the action (resume), but it does not mention what happens if called when not paused, whether it returns any confirmation, or any side effects. This is minimal but acceptable for a simple tool.

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 one concise sentence that front-loads the main action and condition. Every word contributes to understanding, with no fluff or repetition.

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?

Given the tool's simplicity (no parameters, no output schema), the description is complete enough to convey when and what. It could mention the behavior if invoked without a paused state, but that is an edge case; the core context is well covered.

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

Parameters4/5

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

The tool has zero parameters, so the description does not need to explain parameter semantics. The baseline for 0 params is 4, and the description adds no unnecessary details.

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 identifies the tool's purpose: resuming transcription after a pause. It specifies the action with a verb ('resume') and resource ('transcription'), and the phrase 'after it has been paused' distinguishes it from starting a new session (start_transcription) or pausing (pause_transcription).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description tells when to use the tool: when transcription has been paused, either manually or due to silence detection. It does not explicitly list exclusions or alternatives, but the 'after it has been paused' condition is clear enough to guide selection among siblings.

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

start_transcriptionA

Start capturing and transcribing system audio in real-time using OpenAI Whisper. Audio is captured in chunks and transcribed continuously. IMPORTANT: After starting, periodically check get_status (every 30-60 seconds) to monitor for issues. SAFETY FEATURES: The system will auto-pause in two scenarios: 1) After 32 seconds of silence, 2) After 30 minutes of NO user interaction (prevents forgotten recordings). User interaction = calling get_status, pause_transcription, resume_transcription, get_transcript, or clear_transcript. When paused, you'll see isPaused: true in status. User must explicitly call resume_transcription to continue.

ParametersJSON Schema
NameRequiredDescriptionDefault
outputFileNoOutput transcript filename (default: auto-generated timestamped filename for privacy/isolation)
inputDeviceNoAudio input device name (default: BlackHole)
chunkSecondsNoSeconds of audio per transcription chunk (default: 8)

TDQS

A4.1/5.0
Behavior5/5

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

With no annotations provided, the description carries full behavioral burden and excels. It discloses real-time chunked transcription, auto-pause conditions (32s silence, 30 min no interaction), defines which actions count as interaction, and instructs on detecting pause via isPaused: true and resuming. This gives the agent critical operational knowledge beyond the schema.

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 moderately long but well-structured with 'IMPORTANT' and 'SAFETY FEATURES' sections. Every sentence provides actionable information, though it could be tightened without losing meaning. It's not overly verbose for the complexity it covers.

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?

Given the complexity (long-running live transcription) and lack of output schema, the description is largely complete: it covers monitoring, safety, and follow-up actions. However, it omits explicit instruction on how to fully end the session (e.g., using stop_transcription), which is only inferable from sibling tool names.

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 100%, so the baseline is 3. The tool description does not add any new parameter semantics; it omits mention of outputFile, inputDevice, or chunkSeconds. However, the schema's own descriptions are complete, so no compensation is needed.

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's function: 'Start capturing and transcribing system audio in real-time using OpenAI Whisper.' It specifies the verb (start), resource (system audio), and method (OpenAI Whisper), and distinguishes it from sibling tools like pause_transcription and stop_transcription by positioning it as the entry point for the transcription workflow.

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 as the initial step in a transcription session but does not explicitly contrast it with alternatives. It provides clear post-start guidance ('periodically check get_status every 30-60 seconds') and explains safety features, but it does not state when to use this tool vs. stopping or cleaning up, leaving that to inference from sibling tool names.

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

stop_transcriptionA

Stop the current transcription session completely and return statistics. This ends the session and stops audio capture.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.4/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 burden of behavioral disclosure. It states that the tool ends the session, stops audio capture, and returns statistics, which are important side effects. It does not mention data retention/clearance or error behavior, but the core state-changing behavior is transparently described.

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?

Two short sentences, front-loaded with the main action, and no filler or redundant information. Every clause adds meaning: the action, completeness, return value, and side effect on audio capture.

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?

The tool is simple (no params, no output schema), and the description sufficiently covers the purpose and side effects for invocation. It could mention what the returned statistics include, but this is not essential for selecting and calling the tool correctly, especially given the clear sibling context.

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

Parameters4/5

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

The input schema has zero parameters and the schema description coverage is 100%, so there are no parameter semantics to clarify. Baseline for zero-parameter tools is 4, and the description correctly focuses on behavior rather than parameters.

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 ('Stop') and clearly identifies the resource ('the current transcription session'), while adding key scope ('completely' and 'return statistics'). It differentiates itself from sibling tools like pause_transcription by emphasizing that this is a full termination, not a temporary pause.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: when you want to end the session entirely rather than pause it. However, it does not explicitly mention alternatives or state when not to use it. The context is clear enough for an agent to distinguish from pause/resume, but explicit exclusion of alternatives is missing.

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. 8 tool updatesv0.7.1
    • First observedcleanup_transcript
    • First observedclear_transcript
    • First observedget_status
    • First observedget_transcript
    • First observedpause_transcription
    • First observedresume_transcription
    • First observedstart_transcription
    • First observedstop_transcription

TDQS

A4.3/5.0

Scored across 8 tools

Disambiguation5/5

Each tool targets a distinct action in the transcription lifecycle: start, pause, resume, stop, status check, transcript retrieval, clearing, and deleting. No two tools overlap in purpose, even pause vs. stop and clear vs. cleanup are clearly differentiated by their descriptions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern using snake_case: start_transcription, pause_transcription, get_status, etc. The naming is uniform and predictable, making it easy to infer the function of each tool.

Tool Count5/5

With 8 tools, the set is well-scoped for an audio transcription server. Each tool covers a necessary part of the session lifecycle without redundancy or bloat, fitting comfortably within the ideal range.

Completeness5/5

The tool set provides full lifecycle coverage: start, manage (pause/resume), monitor (status), retrieve output, and clean up (clear/delete). There are no obvious dead ends or missing operations for the stated purpose.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables continuous voice conversation with AI coding assistants by locally transcribing speech with Whisper and delivering utterances as text prompts.
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Local MCP server for macOS that captures microphone input and/or system audio output into explicit, user-defined sessions and exposes the raw WAV audio to AI agents through MCP tools.
    8 npm
    6
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Local-first meeting capture and transcription for Claude Code. Records audio from meeting apps, transcribes locally with whisper.cpp, and produces structured notes via Claude.
    1
    Apache 2.0