gpu-transcription-mcp
GPU Queue
Un servicio de transcripción basado en faster-whisper con una cola de trabajos integrada, de modo que various agentes puedan compartir una sola GPU sin conflictos. El núcleo de cola/trabajador/motor es independiente del trasporte y se expone mediante dos servidores intercambiables: elige el que usan tus clientes:
Servidor | Punto de entrada | Puert por defecto | Clientes |
MCP |
| 8000 | Agents compatibes con MCP (FastMCP) |
Flask |
| 8001 | Cualquier cliente HTTP/JSON |
Ambos encapsulan el mismo QueueManager, por lo que los trabajos se siguen procesando de uno en uno y los payloads de respuesta son idénticos (comparten app/service.py).
Cmo funcona
submit ─► ┌──────────────┐ one worker, one GPU ┌───────────────┐
│ job queue │ ──────────────────────► │ WhisperEngine │
poll ◄─ └──────────────┘ processed serially └───────────────┘Un trabajo se encola y devuelve un job_id inmediatamente; luego consultas su estado hasta que esté done (o error). El único trabajador procesa la cola un trabajo a la vez, de modo que una GPU compartida nunca ejecuta dos transprocesiones a la vez.
Related MCP server: faster-whisper-mcp
Instalación
pip install -e . # or: uv syncEsto instala fastmcp (transporte MCP), flask + waitress (transporte HTTP) y faster-whisper (el motor).
Ejecución del servidor
Elige un servidor (son independientes — no imports one al otro):
# 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-reloadEjecuta un único proces — la cola y el registro de trabajos están en memoria. Varios hilos son compatibles (waitress usa un pool de hiloss); pero los múltiples procesos de trabajador no los son, porque cada uno tendría su propio a cola, separadamente "y no compartida".
El servidor Flask (incluye la ruta de waitress de producción) imprime un banner de inicio y registra una línea por solicitud en stdout, por ejemplo, GET /queue -> 200 (1.2ms).
Configuración del motor (ambos servidores)
Se configura mediante variables de entorno:
WHISPER_MODEL(por defectodistil-large-v3.5)WHISPER_DEVICE(por defectoauto)WHISPER_COMPUTE_TYPE(por defectoauto)WHISPER_MODEL_DIR
API HTTP (transport Flask)
Método y ruta | Descripción |
| Comprobación de salud → |
| Envia un trabajo: |
| Consult a more estado; |
| Cancela un trabajo en cola o en petición |
| Trabajo en ejecución, trabajos en petición, contador completados |
*Nota.
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/cancelAPI MCP (transporte MCP)
Simplements the same operations with FastMCP tools:
Herramienta | Descripción |
| Comprobación de disponibilidad |
| Añade un trabajo a la cola; devuelve |
| Consulas el estado de un trabajo; |
| Cancela un trabajo en cola o enjecución |
| Trabajo en ejecución, cola, componentes completos |
Comprobaciones rápidas contra a MCP server en ejecución (usa el fastmcp):
python test_ping.py # ping the server
python test_live.py --audio /path/audio.mp3 # full submit → poll → print transcriptBanderas args (ambos transports)
La cadena args acepta las mismas anchors CLI de faster-whisper en cvalquiera de los dos transports, por ejemplo --format srt, --mod else large-v3, --language es, --diarize, --word-timestamps, --beam-size 5. Consulta _ARG_MAP en app/queue_manage.py para una lista completa.
📖 Referencia HTTP completa: vea docs/HTTP_API.md para los esquemas de solicitud/res puesta, status codes, ciclo de vida de los trabajos y las anchoras de args.
Actually del proyecto
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
Los Dockerfile / docker-compose.yml incluidos ejecutan el server MCP (CMD ["python", "server.py"] src, puerto 8000) with una reserva de GPU NVIDIA. Si quieres servir el transport Flask en un contenedor, in lugar altera el comando, e.g.:
command: python flask_server.py --port 8000Pruebas
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— cola/trabajador/cancelacióntests/test_service.py— modelado de payloads compartidotests/test_tools.py— transport MCP de extrem a extremo (motor simulado)tests/test_flask_app.py— rutas de Flask de extremo a extremo through el cliente de prueba
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.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
Related MCP Servers
- AlicenseAqualityDmaintenanceEnables 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.4110 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-
- AlicenseAqualityBmaintenanceProvides local audio transcription using whisper.cpp, supporting multiple models and audio formats. Enables transcription of audio files via MCP tools with optional timestamps.394 npm3MIT
- AlicenseAqualityDmaintenanceProvides voice transcription control and polling for MCP-compatible agents, enabling start/stop/pause/resume and retrieval of new text via tools.8MIT