Skip to main content
Glama

Speechmatics MCP Server for Claude Code

Folder of media files transforming through waveforms into text transcripts

An MCP (Model Context Protocol) server that gives Claude Code the ability to transcribe audio and video files using the Speechmatics Batch API.

What This Does

Once installed, Claude Code gains access to transcription tools that allow you to:

  • Transcribe single files - Convert any audio/video file to text

  • Batch transcribe directories - Process entire folders of media files in parallel

  • Speaker diarization - Identify different speakers (S1, S2, etc.) in conversations

  • Search transcripts - Use Claude's native Grep tool to search across all your transcripts

Example usage in Claude Code:

"Transcribe the meeting recording at ~/Downloads/meeting.mp4"
"Transcribe all the podcasts in ~/Podcasts with speaker identification"
"Search my transcripts for mentions of 'quarterly budget'"

Related MCP server: mocoVoice MCP Server

Requirements

Installation

1. Install ffmpeg

# macOS
brew install ffmpeg

# Ubuntu/Debian
sudo apt install ffmpeg

# Windows
winget install ffmpeg

2. Clone and install dependencies

git clone https://github.com/ArchieMcM234/speechmatics_claude_code_mcp.git
cd speechmatics_claude_code_mcp
uv sync

3. Register the MCP server

Add to your Claude Code config file (~/.claude.json):

{
  "mcpServers": {
    "transcription": {
      "command": "uv",
      "args": [
        "--directory",
        "/path/to/speechmatics_claude_code_mcp",
        "run",
        "python",
        "server.py"
      ],
      "env": {
        "SPEECHMATICS_API_KEY": "your-api-key-here"
      }
    }
  }
}

Replace /path/to/speechmatics_claude_code_mcp with the actual path where you cloned the repo.

Note: Setting the API key in the env block is all you need. You don't need to export it separately or create a .env file.

4. Restart Claude Code

The transcription tools will now be available.

Available Tools

transcribe_file

Transcribe a single audio/video file.

Parameter

Type

Default

Description

file_path

string

required

Absolute path to the media file

accuracy

string

"standard"

"standard" or "enhanced" (enhanced costs more but is more accurate)

diarize

boolean

false

Enable speaker diarization to identify different speakers

with_timestamps

boolean

false

Include word-level timestamps (outputs JSON instead of TXT)

force

boolean

false

Re-transcribe even if a transcript already exists

transcribe_directory

Transcribe all media files in a directory with parallel processing.

Parameter

Type

Default

Description

directory

string

required

Path to directory containing media files

file_types

array

["mp3", "mp4", "wav", ...]

File extensions to include

accuracy

string

"standard"

"standard" or "enhanced"

diarize

boolean

false

Enable speaker diarization

with_timestamps

boolean

false

Include word-level timestamps

force

boolean

false

Re-transcribe even if transcripts exist

recursive

boolean

false

Search subdirectories

max_concurrent

integer

10

Maximum parallel transcription jobs (1-50)

get_transcript

Read an existing transcript file.

Parameter

Type

Description

file_path

string

Path to media file OR transcript file

get_usage

Get Speechmatics API usage statistics for the current month. No parameters required.

Output Formats

Transcripts are saved alongside the original media file.

Plain text (default): filename.transcript.txt

# Transcribed: 2024-01-30T14:32:00Z
# Source: meeting.mp4
# Duration: 12:34
# Accuracy: standard
# Diarization: true

S1: Hello everyone, welcome to the meeting.
S2: Thanks for having me.
...

JSON with timestamps: filename.transcript.json

{
  "metadata": {
    "source": "meeting.mp4",
    "transcribed_at": "2024-01-30T14:32:00Z",
    "duration_seconds": 754,
    "accuracy": "standard",
    "diarization": true
  },
  "transcript": "S1: Hello everyone...",
  "words": [
    {"word": "Hello", "start": 0.0, "end": 0.5, "confidence": 0.98}
  ]
}

Searching Transcripts

After transcribing, Claude can use its native Grep tool to search across all transcripts:

"Search all transcripts in ~/meetings for mentions of 'project deadline'"
"Find where we discussed the budget in the Q4 recordings"

License

MIT

Available Tools

4 tools
get_transcriptC

Read an existing transcript file

ParametersJSON Schema
NameRequiredDescriptionDefault
file_pathYesPath to media file OR transcript file

TDQS

C2.9/5.0
Behavior2/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 only states 'Read', implying non-destructive operation, but fails to clarify behavior for edge cases (e.g., missing file, media file input handling) or return format. The discrepancy between 'transcript file' and 'media file OR transcript file' remains unaddressed.

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, front-loaded sentence with zero wasted words. It efficiently states the tool's core action and target resource.

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 simplicity (one parameter, no output schema, no annotations), the description is overly sparse. It fails to resolve the media-file/transcript-file ambiguity, explain what reading entails, or describe likely outputs or errors. This leaves the agent with insufficient context for reliable invocation.

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%: the file_path parameter is described as 'Path to media file OR transcript file'. The tool description adds no additional parameter guidance, but the schema already provides adequate meaning, so the baseline of 3 applies.

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 a specific verb ('Read') and resource ('existing transcript file'), distinguishing it from sibling tools like transcribe_file which creates transcripts. However, the parameter description introduces ambiguity by allowing 'media file OR transcript file', which slightly muddies the purpose.

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 usage guidance is provided. There is no mention of when to use this tool versus alternatives, nor any exclusions or prerequisites. The sibling names imply context, but the description itself offers no explicit direction.

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

get_usageA

Get Speechmatics API usage statistics for the current month

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/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 of behavioral disclosure. It states the action ('get') but does not disclose any side effects, authentication requirements, rate limits, or response format. For a read-only operation, this is a notably thin description that leaves the agent guessing about what will actually happen.

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, concise sentence that conveys all essential information. There is no wasted text, making it highly efficient and easy to parse.

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?

Given that there are no parameters and no output schema, the description is minimal. However, it lacks detail about what the usage statistics contain or how they are returned. This is a simple tool, but the agent might need to know if it receives a summary count, breakdown, or raw data. The description is adequate for basic understanding but not fully complete.

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, making parameter semantics a non-issue. The baseline for zero parameters is 4, and the description appropriately adds no irrelevant parameter 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 states the tool's function: retrieving Speechmatics API usage statistics for the current month. The verb 'Get' is specific, the resource is 'API usage statistics', and the scope 'current month' adds precision. This clearly distinguishes it from sibling tools focused on transcription and transcript retrieval.

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 usage context is implied by the description: this tool is for checking usage statistics, not for transcription tasks. While it does not explicitly mention when not to use it or alternatives, the distinction from sibling tools is evident from the resource focus. A clear when-to-use scenario is provided by specifying 'current month'.

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

transcribe_directoryB

Transcribe all media files in a directory (parallel processing)

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce re-transcription even if transcripts already exist
diarizeNoEnable speaker diarization to identify different speakers (S1, S2, etc.)
accuracyNoTranscription accuracy levelstandard
languageNoLanguage code (e.g. 'en', 'es', 'fr', 'de')en
directoryYesPath to directory containing media files
recursiveNoSearch subdirectories
file_typesNoFile extensions to include (without dots)
max_concurrentNoMaximum parallel transcription jobs
with_timestampsNoInclude word-level timestamps

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 carries the full burden. It discloses 'parallel processing' but not side effects like handling existing transcripts, output format, or error conditions.

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 front-loaded sentence with no filler, earning high marks for conciseness. However, it could be slightly richer without losing clarity.

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 9 parameters, no output schema, and no annotations, the one-sentence description is insufficient to understand the tool's behavior, prerequisites, or outcomes.

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 coverage is 100%, so the schema already documents all parameters. The description adds no parameter-specific meaning, making a baseline 3 appropriate.

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 verb 'transcribe' and resource 'all media files in a directory,' which distinguishes it from sibling transcribe_file for single files.

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 batch usage via 'in a directory' but provides no explicit when-to-use guidance or alternatives. It does not mention sibling tools or exclusions.

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

transcribe_fileB

Transcribe a single audio/video file using Speechmatics API

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce re-transcription even if transcript already exists
diarizeNoEnable speaker diarization to identify different speakers (S1, S2, etc.)
accuracyNoTranscription accuracy levelstandard
languageNoLanguage code (e.g. 'en', 'es', 'fr', 'de')en
file_pathYesAbsolute path to the media file
with_timestampsNoInclude word-level timestamps (outputs JSON instead of TXT)

TDQS

B3.1/5.0
Behavior1/5

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 only states that the tool transcribes using the Speechmatics API, but omits any details about side effects (e.g., writing output files), whether transcription is synchronous or asynchronous, cost implications, or required credentials. It does not describe what happens after transcription or how results are obtained. This is a significant gap for a tool with no annotation support.

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 with no filler or redundant phrasing. It efficiently communicates the core function and scope. Every word earns its place, making it maximally concise without sacrificing clarity.

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

Completeness1/5

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

Given the tool's moderate complexity (6 parameters, no annotations, no output schema), the description is woefully incomplete. It does not mention prerequisites (e.g., API key configuration), output format or location, whether it returns anything, or how to retrieve results (e.g., via get_transcript). The user is left guessing about the full workflow, so the description fails to provide adequate context.

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?

The input schema already provides detailed descriptions for all 6 parameters with 100% coverage. The tool description adds no parameter-level explanation beyond what the schema offers. According to the rubric, a high schema coverage (>80%) yields a baseline score of 3, and there is no additional semantic value from the description.

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: transcribing a single audio/video file. The word 'single' differentiates it from the sibling tool 'transcribe_directory', and the other siblings (get_transcript, get_usage) are clearly distinct. The verb 'transcribe' and resource 'file' are 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 use for individual files by saying 'single audio/video file', but it does not explicitly mention when to use this tool versus alternatives like transcribe_directory. No exclusions or conditions are given. The guidance is implied rather than explicit, so it falls at the baseline of 'implied usage'.

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

TDQS

A3.7/5.0
Disambiguation5/5

Each tool has a distinct purpose: single-file transcription, batch transcription, reading a transcript, and viewing usage statistics. There is no overlap or ambiguity between the tools, even between transcribe_file and transcribe_directory, as their names clearly indicate the scope of operation.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: transcribe_file, transcribe_directory, get_transcript, get_usage. The verbs (transcribe, get) match the action performed, and the nouns clearly indicate the target. This makes the API predictable and easy to learn.

Tool Count5/5

With just four tools, the server is tightly scoped to its purpose of transcription and transcript retrieval. Each tool is necessary and covers a distinct workflow step, leaving no feeling of bloat or missing essential functionality.

Completeness5/5

The core transcription workflow is fully covered: transcribing files (individually or in bulk), retrieving the resulting transcript, and checking account usage. There are no obvious gaps for the stated domain; optional operations like deleting or listing transcripts are not essential for the main use case.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/ArchieMcM234/speechmatics_claude_code_mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server