mini_whisper_mcp
by rhuanca
README.md
# mini-whisper-mcp
MCP server for audio transcription using [OpenAI Whisper](https://github.com/openai/whisper).
## Requirements
- Python 3.11+
- [uv](https://docs.astral.sh/uv/)
- `ffmpeg` (`apt install ffmpeg` / `brew install ffmpeg`)
## Install
```bash
uv sync
```
## Run
### stdio (for local agents)
```bash
uv run python -m mini_whisper_mcp --transport stdio
```
### HTTP
```bash
uv run python -m mini_whisper_mcp --transport streamable-http --host 0.0.0.0 --port 8000
```
## Docker
```bash
docker build -t mini-whisper-mcp .
docker run -p 8000:8000 mini-whisper-mcp
```
### Docker Compose
Create a `docker-compose.yml` alongside your calling agent:
```yaml
services:
mini-whisper-mcp:
image: mini-whisper-mcp
build: ./mini-whisper-mcp # path to this repo
ports:
- "8000:8000"
environment:
MCP_TRANSPORT: streamable-http
MCP_HOST: 0.0.0.0
MCP_PORT: "8000"
restart: unless-stopped
your-agent:
build: ./your-agent
environment:
WHISPER_MCP_URL: http://mini-whisper-mcp:8000/mcp
depends_on:
- mini-whisper-mcp
```
```bash
docker compose up
```
The agent connects to the MCP server at `http://mini-whisper-mcp:8000/mcp` using the service name as hostname.
## Configuration
| Env var | Default | Description |
|---|---|---|
| `MCP_TRANSPORT` | `streamable-http` | `stdio` or `streamable-http` (Docker default) |
| `MCP_HOST` | `0.0.0.0` | Host for HTTP mode |
| `MCP_PORT` | `8000` | Port for HTTP mode |
## MCP Tools
### `health_check`
Basic server health check. Returns `"ok"`.
### `transcribe`
| Param | Type | Default | Description |
|---|---|---|---|
| `audio_b64` | string | — | Base64-encoded audio file content |
| `model` | string | `base` | `tiny`, `base`, `small`, `medium`, `large` |
| `suffix` | string | `.mp3` | File extension hint: `.mp3`, `.wav`, `.m4a`, etc. |
Models are cached in memory after first load. Larger models are more accurate but slower.
### Usage example (calling agent)
```python
import base64
with open("audio.mp3", "rb") as f:
audio_b64 = base64.b64encode(f.read()).decode()
result = await mcp_client.call_tool("transcribe", {
"audio_b64": audio_b64,
"model": "base",
"suffix": ".mp3",
})
```
## Testing with MCP Inspector
```bash
npx @modelcontextprotocol/inspector uv run python -m mini_whisper_mcp --transport stdio
```
For HTTP, start the server first then connect Inspector to `http://localhost:8000/mcp`.
## Claude Desktop config (stdio)
```json
{
"mcpServers": {
"whisper": {
"command": "uv",
"args": ["--directory", "/path/to/mini-whisper-mcp", "run", "python", "-m", "mini_whisper_mcp", "--transport", "stdio"]
}
}
}
```
## Project structure
```
mini_whisper_mcp/
├── __main__.py # CLI entrypoint (--transport, --host, --port)
├── server.py # MCP tools
└── models.py # Whisper model loader with CUDA fallback
```
TDQS
A4.4/5.0
Scored across 1 tool
Disambiguation5/5
With only one tool, there is no possibility of ambiguity. The 'transcribe' tool has a clear and specific purpose for audio transcription.
Naming Consistency5/5
The single tool name 'transcribe' uses a simple verb form, and with no other tools to compare against, naming is consistent by default.
Tool Count3/5
A single tool feels thin for many servers, but for a dedicated 'mini Whisper' transcription service, it is a reasonable scope. It borders on minimal but is not excessive.
Completeness5/5
The tool covers the essential transcription functionality completely, accepting audio input and optional model parameters. There are no obvious missing operations for this narrow domain.
Maintenance
ActivityInactive
ResponsivenessNo issues