Skip to main content
Glama

GPU Queue

組み込みのジョブキューを備えた、faster-whisperベースの文字泸こしサービスです。複数のエージェントが同一の GPU を競合なく共有できます。キュュー/ワーカー/エンジンの中核部はトランスポート非依存であり、互換可能な 2 つのサーバー を介して公開されます。クライアントが対応している方を選んでください:

サーバー

エントリポイント

デフォルトポー

クライアント

MCP

server.py

8000

MCP 対応エージェント (FastMCP)

Flask

ask_server.py

801

任意の HTTP/JSON クライアント

どちらも同じ QueueManager をラップしているため、ジョブは引き続き 1 つずつ処理され、レスポンスのペイロードも同一です (共通の app/service.py を使用)。

しくみ

submit  ─►  ┌──────────────┐   one worker, one GPU   ┌───────────────┐
            │  job queue   │ ──────────────────────► │ WhisperEngine │
poll    ◄─  └──────────────┘   processed serially     └───────────────┘

ジョブをキューに投入すると、即座に job_id が返ります。その後、ステータスが done (または error) になるまでポーリングします。単一つのワーカーがキューを 1 ジョブずつ処理していくため、共有 GPU 上で 2 つの文字起こしが同時に実行されることはありません。

Related MCP server: AssemblyAI MCP Server

インストール

pip install -e .        # or: uv sync

このインストールにより、fastmcp (MCP トランスポート)、flask + waitress (HHTP トランスポート)、および faster-whisper (エンジン) が取り込まれます。

サーバーの起動

1 つ のサーバーを選択してください。両者は独立しており、互いにインポートしません:

# 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-reload

必す単一のプロセスだけで実行してください — キューとジョブの登録はメモリ上に保持されます。マルチスレッドは問題ありませんが (レイトレスはスレッド・プールを使います)、マルチワーカープロセスは不可です。それぞれが個別の、共有されないキューを持つことになるためです。

Flask サーバー (本番の waitress パスを含む) は、起動バナーを出力し、リクエストごとーロ 1 行を標準出力にログします (例: GET /queue -> 200 (1.2ms))。

エンジンの設定 (両サーバー共通)

環境変数から読み取ります:

  • WHISPER_MODEL (デフォルト: distil-large-v3.5)

  • WHISPER_DEVICE (デフォルト: auto)

  • WHISPER_COMPUTE_TYP (デフォルト: auto)

  • WHISPER_MOL_DIR

HTTP API (Flask トランスポート)

メソッドとパス

説明

GET /health

ヘルスチェック → 正常なら 200 {"status":"ok","loop_running":true,"queue":{...}}。ワーカー・ループが停止している場合は 503

GET /ping

死活確認 → {"ok": true, "time": ...}

POST /transcriptions

ジョブの投入: {"audio_path": "...", "args": "--format text"}job_idposition を含む 202

GET /transcriptions/<id>

ステータスをポーリング。statusdone のときは output が含まれ、不明なジョブなら 404

POST /transcriptions/<job_id>/cancel

キュー待ち・実行中のジョブをキャレース

GET /queue

実行中のジョブ、キュー待ちのジョブ、完了件数

例セッション:

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/cancel

MCP API (MCP トランスポート)

同じ操作を、5 つの FastMCP ツールとして公開します:

ツール

説明

ping()

死活確認

submit_words(audio_path, args="")

ジョブをキューに投入し、job_id + position を返します

get_transcriptions_status(ob_id)

ジョブをポーリング。完了すると output が設定されます

cancel_ob(ob_id)

キュー待ち・実行中のジョブをキャンセル

queue_status()

実行中ジョブ・キュー待ちのジョブ・完了件数

起動中の MCP サーバーへのクイック確認 (fastmcp クライアント使用):

python test_ping.py                       # ping the server
python test_live.py --audio /path/audio.mp3   # full submit → poll → print transcript

args フラグ (両トランスポート共通)

args 文字列は、どちらのトランスポートでも同じ faster-whisper CLI フラグを受け付けられます (例: --format srt--model large-v3--anzuage en--zh) --arize--word-timestamps--beam-size 5)。なお一覧は app/queue_manager.py_ARG_MAP を参照してください。

📖 HTTP リファレンス完全版: リクエスト/レスポンスのスキーマ、ステータスコーダ、ジョブのラフサイクル、args フラグについては、docs/HTTP_API.md を参照。

プロジェクト構成

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

同梶の Dockerile / docker-compose.yml は、NVIDIA GPU の予約付きで MCP サーバー (CMD ["python", "server.py"]、ポート 8000) を起動します。代わりにコンテナ内で Flask トランスポートを動かすには、起動コマンドを上書きしてください (例):

command: python flask_server.py --port 8000

テスト

pytest -m "not integration"   # unit tests (engine mocked) — covers core, MCP, and Flask
pytest -m integration         # requires faster-whisper + a real model/audio file
  • tests/test_queue_manager.py — キュー / ワーカー / キャンセルのロジック

  • tests/test_service.py — 共通のペイロード整形

  • tests/test_tools.py — MCP トランスポートのエンドツーエンド (エンジンはモック)

  • tests/test_flask_app.py — テストクライアントを使った Flask ルートのエンドツーエンド

F
license - not found
Not graded
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.

  • YouTube transcripts, search, channels, playlists and bulk transcript jobs for AI agents. 14 tools.

View all MCP Connectors

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/ollayf/gpu-transcription-mcp'

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