gpu-transcription-mcp
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., "@gpu-transcription-mcpTranscribe /home/user/meeting.mp3 and show the result"
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.
GPU Queue
A faster-whisper transcription service with a built-in job queue, so multiple agents can share a single GPU without conflicts. The queue/worker/engine core is transport-agnostic and is exposed through two interchangeable servers — pick the one your clients speak:
Server | Entry point | Default port | Clients |
MCP |
| 8000 | MCP-aware agents (FastMCP) |
Flask |
| 8001 | Any HTTP/JSON client |
Both wrap the same QueueManager, so jobs are still processed one at a time and
the response payloads are identical (shared app/service.py).
How it works
submit ─► ┌──────────────┐ one worker, one GPU ┌───────────────┐
│ job queue │ ──────────────────────► │ WhisperEngine │
poll ◄─ └──────────────┘ processed serially └───────────────┘A job is enqueued and returns a job_id immediately; you then poll its status
until it is done (or error). The single worker drains the queue one job at a
time, so a shared GPU never runs two transcriptions at once.
Related MCP server: faster-whisper-mcp
Install
pip install -e . # or: uv syncThis pulls in fastmcp (MCP transport), flask + waitress (HTTP transport),
and faster-whisper (the engine).
Running the server
Choose one server (they're independent — neither imports the other):
# MCP transport (streamable-http on :8000)
python server.py
python server.py --port 9000
python server.py --transport stdio # for stdio MCP clients
# Flask transport (HTTP/JSON on :8001)
python flask_server.py
python flask_server.py --port 9001
python flask_server.py --debug # Flask dev server with auto-reloadRun a single process only — the queue and job registry live in memory. Multiple threads are fine (waitress uses a thread pool); multiple worker processes are not, as they would each hold a separate, unshared queue.
The Flask server (production waitress path included) prints a startup banner
and logs one line per request to stdout, e.g. GET /queue -> 200 (1.2ms).
Engine configuration (both servers)
Read from environment variables:
WHISPER_MODEL(defaultdistil-large-v3.5)WHISPER_DEVICE(defaultauto)WHISPER_COMPUTE_TYPE(defaultauto)WHISPER_MODEL_DIR
HTTP API (Flask transport)
Method & path | Description |
| Healthcheck → |
| Liveness check → |
| Submit a job: |
| Poll status; |
| Cancel a queued/running job |
| Running job, queued jobs, completed count |
Example session:
curl localhost:8001/ping
# submit
curl -X POST localhost:8001/transcriptions \
-H 'Content-Type: application/json' \
-d '{"audio_path":"/abs/path/audio.mp3","args":"--format text"}'
# → {"job_id":"j_ab12cd34","position":1, ...}
# poll until "status":"done"
curl localhost:8001/transcriptions/j_ab12cd34
# inspect the queue / cancel
curl localhost:8001/queue
curl -X POST localhost:8001/transcriptions/j_ab12cd34/cancelMCP API (MCP transport)
Exposes the same operations as five FastMCP tools:
Tool | Description |
| Liveness check |
| Enqueue a job, returns |
| Poll a job; |
| Cancel a queued/running job |
| Running job, queued jobs, completed count |
Quick checks against a running MCP server (uses the fastmcp client):
python test_ping.py # ping the server
python test_live.py --audio /path/audio.mp3 # full submit → poll → print transcriptargs flags (both transports)
The args string accepts the same faster-whisper CLI flags on either transport,
e.g. --format srt, --model large-v3, --language en, --diarize,
--word-timestamps, --beam-size 5. See _ARG_MAP in
app/queue_manager.py for the full list.
📖 Full HTTP reference: see docs/HTTP_API.md for request/
response schemas, status codes, the job lifecycle, and args flags.
Project layout
app/
queue_manager.py queue, worker, engine lifecycle, CLI-arg → kwargs bridge
whisper/engine.py faster-whisper wrapper (model stays loaded between jobs)
models.py JobRecord dataclass
service.py payload-shaping shared by both transports
main.py / tools.py MCP transport (create_mcp_app + tool definitions)
flask_app.py Flask transport (create_flask_app + routes)
server.py run the MCP server (:8000)
flask_server.py run the Flask server (:8001)Docker
The bundled Dockerfile / docker-compose.yml run the MCP server
(CMD ["python", "server.py"], port 8000) with an NVIDIA GPU reservation. To
serve the Flask transport in a container instead, override the command, e.g.:
command: python flask_server.py --port 8000Tests
pytest -m "not integration" # unit tests (engine mocked) — covers core, MCP, and Flask
pytest -m integration # requires faster-whisper + a real model/audio filetests/test_queue_manager.py— queue/worker/cancellation logictests/test_service.py— shared payload-shapingtests/test_tools.py— MCP transport end-to-end (mocked engine)tests/test_flask_app.py— Flask routes end-to-end via the test client
This server cannot be deployed
Maintenance
Related MCP Connectors
OCR, transcription, file extraction, and image generation for AI agents via MCP.
MCP-first toolbox for agents: KV storage, auth, queue, and utility tools. Free in early access.
YouTube transcripts, search, channel browsing, and playlists for AI agents via MCP.
Transcribe audio & video to text for AI agents: 100+ languages, speaker labels, webhooks.
Related MCP Servers
- AlicenseAqualityFmaintenanceEnables AI assistants to transcribe audio files from URLs or local paths using AssemblyAI's services, with support for speaker diarization, language detection, and asynchronous job management through a standardized MCP interface.413 npm2MIT
- FlicenseAqualityDmaintenanceEnables high-quality transcription and subtitle generation from local media files or URLs using Faster Whisper on local hardware. It supports automatic language detection and integration with MCP clients for seamless speech-to-text workflows.3-
- AlicenseAqualityFmaintenanceProvides local audio transcription using whisper.cpp, supporting multiple models and audio formats. Enables transcription of audio files via MCP tools with optional timestamps.385 npm3MIT
- AlicenseAqualityCmaintenanceProvides voice transcription control and polling for MCP-compatible agents, enabling start/stop/pause/resume and retrieval of new text via tools.8MIT