whisper-windows-mcp 2.4.0 → 2.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,24 +1,24 @@
1
- name: CI
2
-
3
- on:
4
- push:
5
- pull_request:
6
-
7
- permissions:
8
- contents: read
9
-
10
- jobs:
11
- test:
12
- name: build + test
13
- runs-on: windows-latest
14
- strategy:
15
- matrix:
16
- node-version: [20, 22]
17
- steps:
18
- - uses: actions/checkout@v4
19
- - uses: actions/setup-node@v4
20
- with:
21
- node-version: ${{ matrix.node-version }}
22
- cache: npm
23
- - run: npm ci
24
- - run: npm test
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ test:
12
+ name: build + test
13
+ runs-on: windows-latest
14
+ strategy:
15
+ matrix:
16
+ node-version: [20, 22]
17
+ steps:
18
+ - uses: actions/checkout@v4
19
+ - uses: actions/setup-node@v4
20
+ with:
21
+ node-version: ${{ matrix.node-version }}
22
+ cache: npm
23
+ - run: npm ci
24
+ - run: npm test
@@ -2,7 +2,8 @@ name: Publish
2
2
 
3
3
  on:
4
4
  release:
5
- types: [created]
5
+ types: [published]
6
+ workflow_dispatch:
6
7
 
7
8
  permissions:
8
9
  id-token: write
@@ -15,10 +16,10 @@ jobs:
15
16
  - uses: actions/checkout@v4
16
17
  - uses: actions/setup-node@v4
17
18
  with:
18
- node-version: '20'
19
+ node-version: '22'
19
20
  registry-url: 'https://registry.npmjs.org'
20
21
  - run: npm install
21
22
  - run: npm run build
22
- - run: npm publish --provenance
23
+ - run: npm publish
23
24
  env:
24
25
  NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
package/README.es.md CHANGED
@@ -183,6 +183,7 @@ Transcribe un único archivo. Soporta modo de bloqueo (predeterminado) o en segu
183
183
  | `word_timestamps` | Una palabra por segmento con marca de tiempo. Útil para alineación de clips. |
184
184
  | `max_segment_length` | Longitud máxima de segmento en caracteres. |
185
185
  | `diarize` | Diarización de hablantes estéreo — requiere audio estéreo con hablantes en canales separados. |
186
+ | `tinydiarize` | Detección de turnos de hablante en mono — marca `[SPEAKER_TURN]` en los cambios de hablante en audio de un solo canal. Requiere un modelo tdrz: `download_model small.en-tdrz`, luego `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Ruta al archivo .bin del modelo Silero VAD. Elimina silencios antes de transcribir — reduce alucinaciones en archivos ruidosos. |
187
188
  | `offset_t` | Desplazamiento de inicio en milisegundos. |
188
189
  | `duration` | Duración a procesar desde el desplazamiento en milisegundos. |
@@ -298,6 +299,21 @@ Detecta el hardware GPU y confirma si la aceleración Vulkan está disponible. R
298
299
 
299
300
  ---
300
301
 
302
+ ### `whisper_server`
303
+ Inicia, detiene o consulta el **servidor de modelo persistente** (el `whisper-server` de whisper.cpp). Mientras está en ejecución, el modelo activo permanece residente en la VRAM y cada llamada a `transcribe_audio` / `transcribe_batch` se atiende a través de localhost **sin recarga de modelo por archivo** — una gran mejora de velocidad al transcribir muchos archivos cortos, donde de otro modo el coste único de carga del modelo domina.
304
+
305
+ | Parámetro | Descripción |
306
+ |---|---|
307
+ | `action` | `start` — arranca con el modelo activo residente; `stop` — apaga y libera la VRAM; `status` — reporta el estado de ejecución, el modelo residente, el puerto y el tiempo de actividad. |
308
+
309
+ - ⚠️ **El modelo residente retiene la VRAM de la GPU durante toda la vida del servidor.** Inícialo deliberadamente, realiza tu trabajo y luego deténlo con `stop` para devolver la GPU a otras aplicaciones que compartan la tarjeta. Detenerlo realiza un cierre completo para que la VRAM se libere realmente.
310
+ - Usar `switch_model` mientras el servidor está en ejecución intercambia en caliente el modelo residente en el sitio (sin reinicio).
311
+ - Vinculado solo a `127.0.0.1` — nunca expuesto en la red.
312
+ - Mientras el servidor está activo, las operaciones que necesitan la CLI de un solo uso — tareas en segundo plano, `start_batch`, `generate_subtitles`, salida `lrc`/`csv` y opciones avanzadas por llamada que la API HTTP no respeta (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — son **rechazadas** con un mensaje de "detén el servidor primero" en lugar de ignorarse silenciosamente, de modo que ningún segundo motor compita jamás por la GPU.
313
+ - Requiere `whisper-server.exe` (se distribuye junto a `whisper-cli.exe`). Configúralo con `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT` si es necesario.
314
+
315
+ ---
316
+
301
317
  ## Formatos soportados
302
318
 
303
319
  | Tipo | Formatos |
@@ -371,6 +387,8 @@ Esta herramienta fue creada para minimizar las interacciones con la API de Claud
371
387
  | `WHISPER_GPU_DEVICE` | Índice del dispositivo Vulkan al que fijar la transcripción, para sistemas con múltiples GPU (el índice de enumeración de Vulkan — consulta el registro de inicio de whisper-cli; no el orden de GPU de Windows). Anulable por llamada con `gpu_device`. Ver [TROUBLESHOOTING.md](TROUBLESHOOTING.md). |
372
388
  | `WHISPER_FOREGROUND_MAX_SEC` | Límite de la transcripción en primer plano en segundos (predeterminado 210). Los archivos cuya ejecución se estima más larga se enrutan al modo en segundo plano en lugar de arriesgar el tiempo de espera de herramienta de ~4 minutos de Claude Desktop. |
373
389
  | `FFMPEG_PATH` | Ruta a ffmpeg si no está en el PATH del sistema |
390
+ | `WHISPER_SERVER_PATH` | Ruta a `whisper-server.exe` para el servidor de modelo persistente (predeterminado: junto a `whisper-cli.exe`). Ver la herramienta `whisper_server`. |
391
+ | `WHISPER_SERVER_PORT` | Puerto de localhost para el servidor de modelo persistente (predeterminado 8571). Siempre vinculado a `127.0.0.1`. |
374
392
  | `WHISPER_PRIVACY_MODE` | Establece en `true` para que todas las respuestas de herramientas devuelvan solo metadatos — ningún texto de transcripción devuelto a Claude. Para contenido regulado o confidencial. Puede anularse por llamada con el parámetro `privacy_mode`. Ver [PRIVACY.md](PRIVACY.md). |
375
393
  | `WHISPER_CONSENT_ACKNOWLEDGED` | Establece en `true` para omitir la divulgación de consentimiento única por sesión que se muestra antes de devolver texto de transcripción. Establécelo cuando entiendas los límites de privacidad y ya no necesites el recordatorio. Sin efecto cuando el modo de privacidad está activo. |
376
394
 
@@ -386,13 +404,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
386
404
 
387
405
  El hash esperado está documentado en la [página de releases](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0).
388
406
 
389
- **Validación de entrada.** Todas las rutas de archivo son validadas antes de su uso — las rutas UNC (`\\server\share`) y las secuencias de traversal de directorio (`..`) son rechazadas. Los archivos de más de 10 GB son rechazados para prevenir el agotamiento de recursos.
407
+ **Validación de entrada.** Todas las rutas de archivo y de carpeta son validadas antes de su uso, en cada herramienta que acepta una — las rutas UNC (`\\server\share`) y las secuencias de traversal de directorio (`..`) son rechazadas. Los archivos de más de 10 GB son rechazados para prevenir el agotamiento de recursos. `job_id` y `batch_id` se comprueban contra el formato exacto emitido por el servidor antes de usarse para construir cualquier ruta de archivo, de modo que un ID manipulado no pueda salir del directorio de tareas.
408
+
409
+ **Conciencia de inyección de transcripción.** Los archivos de audio pueden contener contenido hablado que, cuando se transcribe, se asemeja a instrucciones. Las defensas integradas de Claude manejan esto, pero vale la pena saber que el propio servidor MCP trata el contenido de transcripción como datos — nunca como instrucciones. Dado que el contenido transcrito aún puede influir en qué herramientas llama Claude a continuación, la validación de rutas/IDs se aplica de forma defensiva en lugar de confiar únicamente en la suposición de un solo usuario.
390
410
 
391
- **Conciencia de inyección de transcripción.** Los archivos de audio pueden contener contenido hablado que, cuando se transcribe, se asemeja a instrucciones. Las defensas integradas de Claude manejan esto, pero vale la pena saber que el propio servidor MCP trata el contenido de transcripción como datosnunca como instrucciones.
411
+ **Las descargas de modelos están restringidas.** La herramienta `download_model` solo descarga desde dos espacios de nombres de Hugging Face de confianza (`ggerganov/whisper.cpp` y `ggml-org`). Las URLs arbitrarias son rechazadas. Los redireccionamientos son validados contra una lista de permitidos antes de seguirlos. (Las descargas aún no se verifican contra un resumen SHA256 por modelo ver SECURITY.md.)
392
412
 
393
- **Las descargas de modelos están restringidas.** La herramienta `download_model` solo descarga desde dos espacios de nombres de Hugging Face de confianza (`ggerganov/whisper.cpp` y `ggml-org`). Las URLs arbitrarias son rechazadas. Los redireccionamientos son validados contra una lista de permitidos antes de seguirlos.
413
+ **La selección de modelos está en sandbox.** Tanto `switch_model` como la anulación `model` de `transcribe_audio` solo aceptan archivos `.bin` dentro del directorio de modelos configurado. Las rutas fuera de ese directorio son rechazadas mediante contención de rutas normalizada.
394
414
 
395
- **El cambio de modelos está en sandbox.** `switch_model` solo acepta archivos `.bin` dentro del directorio de modelos configurado. Las rutas fuera de ese directorio son rechazadas.
415
+ **Sin shadowing de PATH.** Los binarios del sistema que el servidor invoca en tu nombre (`tasklist`, `wmic`) son llamados por ruta absoluta de `System32` para que no puedan ser suplantados por un ejecutable con el mismo nombre situado antes en el `PATH`.
396
416
 
397
417
  Ver [SECURITY.md](SECURITY.md) para la política de seguridad completa.
398
418
 
package/README.id.md CHANGED
@@ -183,6 +183,7 @@ Transkripsi satu file. Mendukung mode pemblokiran (default) atau latar belakang
183
183
  | `word_timestamps` | Satu kata per segmen bertimestamp. Berguna untuk penyelarasan klip. |
184
184
  | `max_segment_length` | Panjang segmen maksimum dalam karakter. |
185
185
  | `diarize` | Diarisasi pembicara stereo — memerlukan audio stereo dengan pembicara di kanal terpisah. |
186
+ | `tinydiarize` | Deteksi pergantian pembicara mono — menandai `[SPEAKER_TURN]` pada perubahan pembicara di audio satu kanal. Memerlukan model tdrz: `download_model small.en-tdrz`, lalu `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Jalur ke file .bin model Silero VAD. Menghapus keheningan sebelum transkripsi — mengurangi halusinasi pada file yang bising. |
187
188
  | `offset_t` | Offset mulai dalam milidetik. |
188
189
  | `duration` | Durasi pemrosesan dalam milidetik dari offset. |
@@ -309,6 +310,21 @@ Deteksi hardware GPU dan konfirmasi akselerasi Vulkan tersedia. Melaporkan nama
309
310
 
310
311
  ---
311
312
 
313
+ ### `whisper_server`
314
+ Jalankan, hentikan, atau periksa **server model persisten** (`whisper-server` milik whisper.cpp). Selama berjalan, model aktif tetap berada di VRAM dan setiap panggilan `transcribe_audio` / `transcribe_batch` dilayani melalui localhost dengan **tanpa pemuatan ulang model per file** — percepatan besar saat mentranskrip banyak file pendek, di mana biaya pemuatan model satu kali biasanya mendominasi.
315
+
316
+ | Parameter | Deskripsi |
317
+ |---|---|
318
+ | `action` | `start` — luncurkan dengan model aktif tetap berada di memori; `stop` — matikan dan bebaskan VRAM; `status` — laporkan status berjalan, model yang berada di memori, port, dan uptime. |
319
+
320
+ - ⚠️ **Model yang berada di memori menahan VRAM GPU selama seluruh masa hidup server.** Mulai secara sengaja, lakukan pekerjaan Anda, lalu `stop` untuk mengembalikan GPU ke aplikasi lain yang berbagi kartu tersebut. Menghentikan melakukan kill penuh sehingga VRAM benar-benar dibebaskan.
321
+ - `switch_model` saat server berjalan melakukan hot-swap model yang berada di memori di tempat (tanpa restart).
322
+ - Terikat hanya ke `127.0.0.1` — tidak pernah terekspos di jaringan.
323
+ - Selama server aktif, operasi yang memerlukan CLI sekali-jalan — tugas latar belakang, `start_batch`, `generate_subtitles`, output `lrc`/`csv`, dan opsi per-panggilan lanjutan yang tidak didukung API HTTP (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — akan **ditolak** dengan pesan "hentikan server terlebih dahulu" alih-alih diabaikan secara diam-diam, sehingga tidak ada mesin kedua yang pernah bersaing untuk GPU.
324
+ - Memerlukan `whisper-server.exe` (dikirim bersama `whisper-cli.exe`). Konfigurasikan dengan `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT` jika diperlukan.
325
+
326
+ ---
327
+
312
328
  ## Format yang Didukung
313
329
 
314
330
  | Tipe | Format |
@@ -382,6 +398,8 @@ Alat ini dibangun untuk meminimalkan interaksi Claude API. Seluruh alur kerja tr
382
398
  | `WHISPER_GPU_DEVICE` | Indeks perangkat Vulkan untuk menyematkan transkripsi, untuk sistem multi-GPU (indeks enumerasi Vulkan — periksa log startup whisper-cli; bukan urutan GPU Windows). Dapat di-override per-panggilan dengan `gpu_device`. Lihat [TROUBLESHOOTING.md](TROUBLESHOOTING.md). |
383
399
  | `WHISPER_FOREGROUND_MAX_SEC` | Batas transkripsi latar depan dalam detik (default 210). File yang diperkirakan berjalan lebih lama dirutekan ke mode latar belakang alih-alih mempertaruhkan batas waktu alat ~4 menit milik Claude Desktop. |
384
400
  | `FFMPEG_PATH` | Jalur ke ffmpeg jika tidak ada di PATH sistem |
401
+ | `WHISPER_SERVER_PATH` | Jalur ke `whisper-server.exe` untuk server model persisten (default: bersama `whisper-cli.exe`). Lihat alat `whisper_server`. |
402
+ | `WHISPER_SERVER_PORT` | Port localhost untuk server model persisten (default 8571). Selalu terikat ke `127.0.0.1`. |
385
403
  | `WHISPER_PRIVACY_MODE` | Saat `true`, semua respons alat hanya mengembalikan metadata — tidak ada teks transkrip yang dikirimkan ke API Claude. Untuk konten yang diatur atau rahasia. Dapat di-override per-panggilan dengan parameter `privacy_mode`. Lihat [PRIVACY.md](PRIVACY.md). |
386
404
  | `WHISPER_CONSENT_ACKNOWLEDGED` | Saat `true`, melewati pengungkapan persetujuan sesi satu kali yang ditampilkan sebelum teks transkrip dikembalikan. Atur setelah Anda memahami batas privasi dan tidak lagi membutuhkan pengingat. Tidak berpengaruh saat mode privasi aktif. |
387
405
 
@@ -397,13 +415,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
397
415
 
398
416
  Hash yang diharapkan untuk binary rilis v1.4.0 didokumentasikan di [halaman rilis](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0).
399
417
 
400
- **Validasi input.** Semua jalur file divalidasi sebelum digunakan — jalur UNC (`\\server\share`) dan urutan traversal direktori (`..`) ditolak. File di atas 10 GB ditolak untuk mencegah kelelahan sumber daya.
418
+ **Validasi input.** Semua jalur file dan folder divalidasi sebelum digunakan, pada setiap alat yang menerimanya — jalur UNC (`\\server\share`) dan urutan traversal direktori (`..`) ditolak. File di atas 10 GB ditolak untuk mencegah kelelahan sumber daya. `job_id` dan `batch_id` diperiksa terhadap format persis yang dibuat server sebelum digunakan untuk membangun jalur file apa pun, sehingga ID yang direkayasa tidak dapat keluar dari direktori tugas melalui traversal.
419
+
420
+ **Kesadaran injeksi transkrip.** File audio dapat berisi konten yang diucapkan yang, saat ditranskripsi, menyerupai instruksi. Pertahanan bawaan Claude menangani ini, tetapi perlu diketahui bahwa konten transkrip diperlakukan sebagai data — tidak pernah sebagai instruksi — oleh server MCP itu sendiri. Karena konten yang ditranskripsi tetap dapat memengaruhi alat mana yang dipanggil Claude berikutnya, validasi jalur/ID diterapkan secara defensif alih-alih hanya mengandalkan asumsi pengguna tunggal.
401
421
 
402
- **Kesadaran injeksi transkrip.** File audio dapat berisi konten yang diucapkan yang, saat ditranskripsi, menyerupai instruksi. Pertahanan bawaan Claude menangani ini, tetapi perlu diketahui bahwa konten transkrip diperlakukan sebagai data tidak pernah sebagai instruksioleh server MCP itu sendiri.
422
+ **Unduhan model dibatasi.** Alat `download_model` hanya mengunduh dari dua namespace Hugging Face yang terpercaya (`ggerganov/whisper.cpp` dan `ggml-org`). URL sembarang ditolak. Pengalihan divalidasi terhadap daftar izin sebelum diikuti. (Unduhan belum diverifikasi terhadap digest SHA256 per-modellihat SECURITY.md.)
403
423
 
404
- **Unduhan model dibatasi.** Alat `download_model` hanya mengunduh dari dua namespace Hugging Face yang terpercaya (`ggerganov/whisper.cpp` dan `ggml-org`). URL sembarang ditolak. Pengalihan divalidasi terhadap daftar izin sebelum diikuti.
424
+ **Pemilihan model di-sandbox.** Baik `switch_model` maupun override `model` pada `transcribe_audio` hanya menerima file `.bin` dalam direktori model yang dikonfigurasi. Jalur di luar direktori tersebut ditolak melalui penahanan jalur yang dinormalisasi.
405
425
 
406
- **Penggantian model di-sandbox.** `switch_model` hanya menerima file `.bin` dalam direktori model yang dikonfigurasi. Jalur di luar direktori tersebut ditolak.
426
+ **Tidak ada PATH shadowing.** Binary sistem yang dipanggil server atas nama Anda (`tasklist`, `wmic`) dipanggil melalui jalur absolut `System32` sehingga tidak dapat dibayangi oleh executable bernama sama yang berada lebih awal di `PATH`.
407
427
 
408
428
  Lihat [SECURITY.md](SECURITY.md) untuk kebijakan keamanan lengkap.
409
429
 
package/README.ja.md CHANGED
@@ -183,6 +183,7 @@ GPUが検出されVulkan加速が有効になっていることを確認しま
183
183
  | `word_timestamps` | タイムスタンプ付き1単語ごとのセグメント出力。クリップ位置合わせに有用。 |
184
184
  | `max_segment_length` | セグメントの最大文字数。 |
185
185
  | `diarize` | ステレオ話者識別 — 別々のチャンネルに話者が録音されたステレオ音声が必要。 |
186
+ | `tinydiarize` | モノラルの話者交代検出 — 単一チャンネル音声で話者が変わる箇所に`[SPEAKER_TURN]`を付与します。tdrzモデルが必要:`download_model small.en-tdrz`を実行後、`switch_model ggml-small.en-tdrz.bin`。 |
186
187
  | `vad_model` | Silero VADモデル.binへのパス。文字起こし前に無音を除去 — ノイズの多いファイルでのハルシネーションを軽減。 |
187
188
  | `offset_t` | 開始オフセット(ミリ秒)。 |
188
189
  | `duration` | オフセットからの処理時間(ミリ秒)。 |
@@ -309,6 +310,21 @@ GPUハードウェアを検出しVulkan加速が利用可能か確認します
309
310
 
310
311
  ---
311
312
 
313
+ ### `whisper_server`
314
+ **永続モデルサーバー**(whisper.cppの`whisper-server`)を起動、停止、または状態確認します。実行中はアクティブモデルがVRAMに常駐し、すべての`transcribe_audio` / `transcribe_batch`呼び出しがlocalhost経由で処理され、**ファイルごとのモデル再読み込みが発生しません** — 多数の短いファイルを文字起こしする際に大きな高速化となります。この場合、一度きりのモデル読み込みコストが支配的だからです。
315
+
316
+ | パラメータ | 説明 |
317
+ |---|---|
318
+ | `action` | `start` — アクティブモデルを常駐させて起動;`stop` — 停止してVRAMを解放;`status` — 実行状態、常駐モデル、ポート、稼働時間を報告。 |
319
+
320
+ - ⚠️ **常駐モデルはサーバーの生存期間中ずっとGPU VRAMを占有します。** 意図的に起動し、作業を行い、その後`stop`してカードを共有する他のアプリケーションにGPUを返してください。停止時は完全なkillを実行するため、VRAMが実際に解放されます。
321
+ - サーバー実行中に`switch_model`を行うと、常駐モデルをその場でホットスワップします(再起動なし)。
322
+ - `127.0.0.1`のみにバインドされます — ネットワークに公開されることは一切ありません。
323
+ - サーバー起動中は、ワンショットCLIを必要とする操作 — バックグラウンドジョブ、`start_batch`、`generate_subtitles`、`lrc`/`csv`出力、およびHTTP APIが受け付けない高度なper-call オプション(`beam_size`、`best_of`、`word_timestamps`、`diarize`、`tinydiarize`、`vad_model`、`offset_t`、`duration`)— は、サイレントに無視されるのではなく「まずサーバーを停止してください」というメッセージとともに**拒否**されます。これにより2つ目のエンジンがGPUを奪い合うことは決してありません。
324
+ - `whisper-server.exe`が必要です(`whisper-cli.exe`と一緒に同梱されています)。必要に応じて`WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT`で設定してください。
325
+
326
+ ---
327
+
312
328
  ## 対応フォーマット
313
329
 
314
330
  | 種類 | フォーマット |
@@ -382,6 +398,8 @@ whisper-windows-mcpには機密および規制対象コンテンツ向けの組
382
398
  | `WHISPER_GPU_DEVICE` | マルチGPUシステムで文字起こしを固定するVulkanデバイスのインデックス(VulkanのenumerationインデックスでありWindowsのGPU順序ではありません — whisper-cliの起動ログを確認してください)。per-callで`gpu_device`により上書き可能。[TROUBLESHOOTING.md](TROUBLESHOOTING.md)を参照。 |
383
399
  | `WHISPER_FOREGROUND_MAX_SEC` | フォアグラウンド文字起こしの上限秒数(デフォルト210)。これより長く実行されると推定されるファイルは、Claude Desktopの約4分のツールタイムアウトのリスクを冒す代わりにバックグラウンドモードにルーティングされます。 |
384
400
  | `FFMPEG_PATH` | ffmpegがシステムPATHにない場合のパス |
401
+ | `WHISPER_SERVER_PATH` | 永続モデルサーバー用の`whisper-server.exe`へのパス(デフォルト:`whisper-cli.exe`と同じ場所)。`whisper_server`ツールを参照。 |
402
+ | `WHISPER_SERVER_PORT` | 永続モデルサーバーのlocalhostポート(デフォルト8571)。常に`127.0.0.1`にバインドされます。 |
385
403
  | `WHISPER_PRIVACY_MODE` | `true`の場合、すべてのツールレスポンスはメタデータのみを返し、トランスクリプトテキストはClaudeのAPIに送信されません。規制対象または機密性の高いコンテンツに使用します。per-callで`privacy_mode`パラメータを使用して上書き可能。[PRIVACY.md](PRIVACY.md)を参照。 |
386
404
  | `WHISPER_CONSENT_ACKNOWLEDGED` | `true`の場合、トランスクリプトテキストが返される前の一回限りのセッション同意開示をスキップします。プライバシーの境界を理解し、リマインダーが不要になったら設定してください。プライバシーモードが有効な場合には効果がありません。 |
387
405
 
@@ -397,13 +415,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
397
415
 
398
416
  v1.4.0リリースバイナリの期待されるハッシュは[リリースページ](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0)に記載されています。
399
417
 
400
- **入力検証。** すべてのファイルパスは使用前に検証されます — UNCパス(`\\server\share`)とディレクトリトラバーサル(`..`)は拒否されます。10GBを超えるファイルはリソース枯渇を防ぐために拒否されます。
418
+ **入力検証。** すべてのファイルパスとフォルダパスは、それらを受け取るすべてのツールで使用前に検証されます — UNCパス(`\\server\share`)とディレクトリトラバーサル(`..`)は拒否されます。10GBを超えるファイルはリソース枯渇を防ぐために拒否されます。`job_id`と`batch_id`は、いかなるファイルパスの構築に使用される前にも、サーバーが生成する正確な形式と照合されるため、細工されたIDでjobsディレクトリの外へトラバースすることはできません。
419
+
420
+ **トランスクリプトインジェクション対応。** 音声ファイルには、文字起こし時に指示のように見える内容が含まれる場合があります。Claudeの組み込み防御がこれを処理しますが、MCPサーバー自体はトランスクリプトの内容をデータとして扱い、指示として解釈しないことを知っておく価値があります。文字起こしされた内容がClaudeが次にどのツールを呼び出すかに影響を与える可能性があるため、シングルユーザーの前提のみに頼るのではなく、パス/ID検証を防御的に適用しています。
401
421
 
402
- **トランスクリプトインジェクション対応。** 音声ファイルには、文字起こし時に指示のように見える内容が含まれる場合があります。Claudeの組み込み防御がこれを処理しますが、MCPサーバー自体はトランスクリプトの内容をデータとして扱い、指示として解釈しないことを知っておく価値があります。
422
+ **モデルダウンロードの制限。** `download_model`ツールは信頼された2つのHugging Faceネームスペース(`ggerganov/whisper.cpp`と`ggml-org`)からのみダウンロードします。任意のURLは拒否されます。リダイレクトはフォロー前にアローリストで検証されます。(ダウンロードはまだモデルごとのSHA256ダイジェストで検証されていません — SECURITY.mdを参照。)
403
423
 
404
- **モデルダウンロードの制限。** `download_model`ツールは信頼された2つのHugging Faceネームスペース(`ggerganov/whisper.cpp`と`ggml-org`)からのみダウンロードします。任意のURLは拒否されます。リダイレクトはフォロー前にアローリストで検証されます。
424
+ **モデル選択のサンドボックス化。** `switch_model`と`transcribe_audio`の`model`上書きの両方は、設定済みモデルディレクトリ内の`.bin`ファイルのみを受け付けます。そのディレクトリ外のパスは、正規化されたパス封じ込めによって拒否されます。
405
425
 
406
- **モデル切り替えのサンドボックス化。** `switch_model`は設定済みモデルディレクトリ内の`.bin`ファイルのみ受け付けます。そのディレクトリ外のパスは拒否されます。
426
+ **PATHシャドウイングなし。** サーバーがユーザーに代わって呼び出すシステムバイナリ(`tasklist`、`wmic`)は、絶対`System32`パスで呼び出されるため、`PATH`上でより早い位置にある同名の実行ファイルによってシャドウイングされることはありません。
407
427
 
408
428
  完全なセキュリティポリシーについては[SECURITY.md](SECURITY.md)を参照してください。
409
429
 
package/README.ko.md CHANGED
@@ -183,6 +183,7 @@ GPU가 감지되고 Vulkan 가속이 활성화되었는지 확인합니다.
183
183
  | `word_timestamps` | 타임스탬프가 있는 단어별 세그먼트. 클립 정렬에 유용. |
184
184
  | `max_segment_length` | 세그먼트 최대 문자 수. |
185
185
  | `diarize` | 스테레오 화자 분리 — 별도 채널에 화자가 녹음된 스테레오 음성 필요. |
186
+ | `tinydiarize` | 모노 화자 전환 감지 — 단일 채널 음성에서 화자가 바뀌는 지점에 `[SPEAKER_TURN]`을 표시합니다. tdrz 모델이 필요합니다: `download_model small.en-tdrz`를 실행한 뒤 `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Silero VAD 모델 .bin 경로. 전사 전 무음 제거 — 잡음이 많은 파일의 환각 감소. |
187
188
  | `offset_t` | 시작 오프셋(밀리초). |
188
189
  | `duration` | 오프셋부터 처리할 시간(밀리초). |
@@ -298,6 +299,21 @@ GPU 하드웨어를 감지하고 Vulkan 가속 사용 가능 여부를 확인합
298
299
 
299
300
  ---
300
301
 
302
+ ### `whisper_server`
303
+ **영구 모델 서버**(whisper.cpp의 `whisper-server`)를 시작, 중지 또는 확인합니다. 실행 중에는 활성 모델이 VRAM에 상주하며 모든 `transcribe_audio` / `transcribe_batch` 호출이 localhost를 통해 처리됩니다 — **파일별 모델 재로드 없이** — 일회성 모델 로드 비용이 지배적인 짧은 파일을 많이 전사할 때 큰 속도 향상을 제공합니다.
304
+
305
+ | 파라미터 | 설명 |
306
+ |---|---|
307
+ | `action` | `start` — 활성 모델을 상주시켜 실행; `stop` — 종료하고 VRAM 해제; `status` — 실행 상태, 상주 모델, 포트, 가동 시간 보고. |
308
+
309
+ - ⚠️ **상주 모델은 서버의 전체 수명 동안 GPU VRAM을 점유합니다.** 의도적으로 시작하고, 작업을 수행한 뒤, `stop`으로 카드를 공유하는 다른 애플리케이션에 GPU를 반환하세요. 중지는 완전한 종료를 수행하므로 VRAM이 실제로 해제됩니다.
310
+ - 서버가 실행 중일 때 `switch_model`은 상주 모델을 그 자리에서 핫스왑합니다(재시작 없음).
311
+ - `127.0.0.1`에만 바인딩됩니다 — 네트워크에 노출되지 않습니다.
312
+ - 서버가 실행 중인 동안, 일회성 CLI가 필요한 작업 — 백그라운드 작업, `start_batch`, `generate_subtitles`, `lrc`/`csv` 출력, 그리고 HTTP API가 준수하지 않는 고급 호출별 옵션(`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — 은 조용히 무시되는 대신 "먼저 서버를 중지하세요" 메시지와 함께 **거부**되므로, 두 번째 엔진이 GPU를 두고 경합하는 일이 절대 없습니다.
313
+ - `whisper-server.exe`가 필요합니다(`whisper-cli.exe`와 함께 제공됨). 필요한 경우 `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT`로 설정하세요.
314
+
315
+ ---
316
+
301
317
  ## 지원 포맷
302
318
 
303
319
  | 유형 | 포맷 |
@@ -371,6 +387,8 @@ whisper-windows-mcp에는 민감하고 규제 대상인 콘텐츠를 위한 내
371
387
  | `WHISPER_GPU_DEVICE` | 다중 GPU 시스템에서 전사를 고정할 Vulkan 장치 인덱스(Windows GPU 순서가 아닌 Vulkan 열거 인덱스 — whisper-cli 시작 로그를 확인하세요). 호출별 `gpu_device`로 재정의 가능합니다. [TROUBLESHOOTING.md](TROUBLESHOOTING.md) 참고. |
372
388
  | `WHISPER_FOREGROUND_MAX_SEC` | 포그라운드 전사 한도(초, 기본값 210). 더 오래 실행될 것으로 추정되는 파일은 Claude Desktop의 약 4분 도구 타임아웃 위험을 감수하는 대신 백그라운드 모드로 라우팅됩니다. |
373
389
  | `FFMPEG_PATH` | ffmpeg가 시스템 PATH에 없을 경우 경로 |
390
+ | `WHISPER_SERVER_PATH` | 영구 모델 서버용 `whisper-server.exe` 경로 (기본값: `whisper-cli.exe`와 동일 위치). `whisper_server` 도구 참고. |
391
+ | `WHISPER_SERVER_PORT` | 영구 모델 서버의 localhost 포트 (기본값 8571). 항상 `127.0.0.1`에 바인딩됩니다. |
374
392
  | `WHISPER_PRIVACY_MODE` | `true`로 설정하면 모든 도구 응답에서 전사 텍스트 없이 메타데이터만 반환됩니다. 규제 대상 또는 기밀 콘텐츠에 사용합니다. 호출별 `privacy_mode` 파라미터로 재정의 가능합니다. [PRIVACY.md](PRIVACY.md) 참고. |
375
393
  | `WHISPER_CONSENT_ACKNOWLEDGED` | `true`로 설정하면 전사 텍스트 반환 전 표시되는 일회성 세션 동의 공개를 건너뜁니다. 개인 정보 경계를 이해하고 더 이상 알림이 필요하지 않을 때 설정하세요. 개인 정보 모드가 활성화된 경우 효과 없음. |
376
394
 
@@ -386,13 +404,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
386
404
 
387
405
  예상 해시는 [릴리스 페이지](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0)에 문서화되어 있습니다.
388
406
 
389
- **입력 검증.** 모든 파일 경로는 사용 전에 검증됩니다 — UNC 경로(`\\server\share`) 및 디렉터리 탐색 시퀀스(`..`)는 거부됩니다. 10 GB를 초과하는 파일은 리소스 고갈을 방지하기 위해 거부됩니다.
407
+ **입력 검증.** 모든 파일 및 폴더 경로는 경로를 받는 모든 도구에서 사용 전에 검증됩니다 — UNC 경로(`\\server\share`) 및 디렉터리 탐색 시퀀스(`..`)는 거부됩니다. 10 GB를 초과하는 파일은 리소스 고갈을 방지하기 위해 거부됩니다. `job_id`와 `batch_id`는 파일 경로를 구성하는 데 사용되기 전에 서버가 발급한 정확한 형식과 대조되어, 조작된 ID가 작업 디렉터리 밖으로 탈출할 수 없습니다.
408
+
409
+ **전사 인젝션 인식.** 음성 파일에는 전사 시 지시처럼 보이는 발화 내용이 포함될 수 있습니다. Claude의 내장 방어 기능이 이를 처리하지만, MCP 서버 자체도 전사 내용을 데이터로만 처리하며 지시로 해석하지 않는다는 점을 알아두는 것이 좋습니다. 전사된 내용이 Claude가 다음에 호출할 도구에 여전히 영향을 줄 수 있으므로, 경로/ID 검증은 단일 사용자 가정에만 의존하지 않고 방어적으로 적용됩니다.
390
410
 
391
- **전사 인젝션 인식.** 음성 파일에는 전사 지시처럼 보이는 발화 내용이 포함될 있습니다. Claude의 내장 방어 기능이 이를 처리하지만, MCP 서버 자체도 전사 내용을 데이터로만 처리하며 지시로 해석하지 않는다는 점을 알아두는 것이 좋습니다.
411
+ **모델 다운로드는 제한됩니다.** `download_model` 도구는 개의 신뢰할 있는 Hugging Face 네임스페이스(`ggerganov/whisper.cpp` `ggml-org`)에서만 다운로드합니다. 임의의 URL은 거부됩니다. 리다이렉트는 따르기 전에 허용 목록에 대해 검증됩니다. (다운로드는 아직 모델별 SHA256 다이제스트로 검증되지 않습니다 — SECURITY.md 참고.)
392
412
 
393
- **모델 다운로드는 제한됩니다.** `download_model` 도구는 개의 신뢰할 있는 Hugging Face 네임스페이스(`ggerganov/whisper.cpp` `ggml-org`)에서만 다운로드합니다. 임의의 URL은 거부됩니다. 리다이렉트는 허용 목록에 대해 검증된 후 따릅니다.
413
+ **모델 선택은 샌드박스화됩니다.** `switch_model`과 `transcribe_audio`의 `model` 재정의는 모두 설정된 모델 디렉터리 내의 `.bin` 파일만 허용합니다. 해당 디렉터리 외부의 경로는 정규화된 경로 격리를 통해 거부됩니다.
394
414
 
395
- **모델 전환은 샌드박스화됩니다.** `switch_model`은 설정된 모델 디렉터리 내의 `.bin` 파일만 허용합니다. 해당 디렉터리 외부의 경로는 거부됩니다.
415
+ **PATH 섀도잉 없음.** 서버가 사용자를 대신하여 호출하는 시스템 바이너리(`tasklist`, `wmic`)는 절대 `System32` 경로로 호출되므로 `PATH`상 앞에 위치한 동일 이름의 실행 파일로 섀도잉될 수 없습니다.
396
416
 
397
417
  전체 보안 정책은 [SECURITY.md](SECURITY.md)를 참고하세요.
398
418
 
package/README.md CHANGED
@@ -183,6 +183,7 @@ Transcribe a single file. Supports blocking (default) or background mode for lon
183
183
  | `word_timestamps` | One word per timestamped segment. Useful for clip alignment. |
184
184
  | `max_segment_length` | Max segment length in characters. |
185
185
  | `diarize` | Stereo speaker diarization — requires stereo audio with speakers on separate channels. |
186
+ | `tinydiarize` | Mono speaker-turn detection — marks `[SPEAKER_TURN]` at speaker changes on single-channel audio. Requires a tdrz model: `download_model small.en-tdrz`, then `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Path to Silero VAD model .bin. Strips silence before transcription — reduces hallucinations on noisy files. |
187
188
  | `offset_t` | Start offset in milliseconds. |
188
189
  | `duration` | Process duration in milliseconds from offset. |
@@ -309,6 +310,21 @@ Detect GPU hardware and verify Vulkan acceleration is available. Reports GPU nam
309
310
 
310
311
  ---
311
312
 
313
+ ### `whisper_server`
314
+ Start, stop, or check the **persistent model server** (whisper.cpp's `whisper-server`). While running, the active model stays resident in VRAM and every `transcribe_audio` / `transcribe_batch` call is served over localhost with **no per-file model reload** — a large speedup when transcribing many short files, where the one-time model-load cost otherwise dominates.
315
+
316
+ | Parameter | Description |
317
+ |---|---|
318
+ | `action` | `start` — launch with the active model resident; `stop` — shut down and free VRAM; `status` — report running state, resident model, port, and uptime. |
319
+
320
+ - ⚠️ **The resident model holds GPU VRAM for the server's whole lifetime.** Start it deliberately, do your work, then `stop` it to hand the GPU back to other applications sharing the card. Stopping performs a full kill so VRAM is actually released.
321
+ - `switch_model` while the server is running hot-swaps the resident model in place (no restart).
322
+ - Bound to `127.0.0.1` only — never exposed on the network.
323
+ - While the server is up, operations that need the one-shot CLI — background jobs, `start_batch`, `generate_subtitles`, `lrc`/`csv` output, and advanced per-call options the HTTP API doesn't honor (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — are **refused** with a "stop the server first" message rather than silently ignored, so no second engine ever contends for the GPU.
324
+ - Requires `whisper-server.exe` (ships alongside `whisper-cli.exe`). Configure with `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT` if needed.
325
+
326
+ ---
327
+
312
328
  ## Supported formats
313
329
 
314
330
  | Type | Formats |
@@ -382,6 +398,8 @@ This tool is built to minimize Claude API interactions. The entire transcription
382
398
  | `WHISPER_GPU_DEVICE` | Vulkan device index to pin transcription to, for multi-GPU systems (the Vulkan enumeration index — check whisper-cli's startup log; not the Windows GPU order). Overridable per-call with `gpu_device`. See [TROUBLESHOOTING.md](TROUBLESHOOTING.md). |
383
399
  | `WHISPER_FOREGROUND_MAX_SEC` | Foreground-transcription cutoff in seconds (default 210). Files estimated to run longer are routed to background mode instead of risking Claude Desktop's ~4-minute tool timeout. |
384
400
  | `FFMPEG_PATH` | Path to ffmpeg if not in system PATH |
401
+ | `WHISPER_SERVER_PATH` | Path to `whisper-server.exe` for the persistent model server (default: alongside `whisper-cli.exe`). See the `whisper_server` tool. |
402
+ | `WHISPER_SERVER_PORT` | Localhost port for the persistent model server (default 8571). Always bound to `127.0.0.1`. |
385
403
  | `WHISPER_PRIVACY_MODE` | When `true`, all tool responses return metadata only — no transcript text transmitted to Claude's API. For regulated or confidential content. Can be overridden per-call with the `privacy_mode` parameter. See [PRIVACY.md](PRIVACY.md). |
386
404
  | `WHISPER_CONSENT_ACKNOWLEDGED` | When `true`, skips the one-time session consent disclosure shown before transcript text is returned. Set after you understand the privacy boundary and no longer need the reminder. Has no effect when privacy mode is active. |
387
405
 
@@ -397,13 +415,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
397
415
 
398
416
  The expected hash for the v1.4.0 release binary is documented in the [releases page](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0).
399
417
 
400
- **Input validation.** All file paths are validated before use — UNC paths (`\\server\share`) and directory traversal sequences (`..`) are rejected. Files over 10 GB are rejected to prevent resource exhaustion.
418
+ **Input validation.** All file and folder paths are validated before use, on every tool that takes one — UNC paths (`\\server\share`) and directory traversal sequences (`..`) are rejected. Files over 10 GB are rejected to prevent resource exhaustion. `job_id` and `batch_id` are checked against the exact server-minted format before they are used to build any file path, so a crafted ID cannot traverse out of the jobs directory.
419
+
420
+ **Transcript injection awareness.** Audio files can contain spoken content that, when transcribed, resembles instructions. Claude's built-in defenses handle this, but it is worth knowing that transcript content is treated as data — never as instructions — by the MCP server itself. Because transcribed content can still influence which tools Claude calls next, path/ID validation is applied defensively rather than trusting the single-user assumption alone.
401
421
 
402
- **Transcript injection awareness.** Audio files can contain spoken content that, when transcribed, resembles instructions. Claude's built-in defenses handle this, but it is worth knowing that transcript content is treated as data never as instructions by the MCP server itself.
422
+ **Model downloads are restricted.** The `download_model` tool only downloads from two trusted Hugging Face namespaces (`ggerganov/whisper.cpp` and `ggml-org`). Arbitrary URLs are rejected. Redirects are validated against an allowlist before following. (Downloads are not yet verified against a per-model SHA256 digest see SECURITY.md.)
403
423
 
404
- **Model downloads are restricted.** The `download_model` tool only downloads from two trusted Hugging Face namespaces (`ggerganov/whisper.cpp` and `ggml-org`). Arbitrary URLs are rejected. Redirects are validated against an allowlist before following.
424
+ **Model selection is sandboxed.** Both `switch_model` and the `transcribe_audio` `model` override only accept `.bin` files within the configured models directory. Paths outside that directory are rejected via normalized path containment.
405
425
 
406
- **Model switching is sandboxed.** `switch_model` only accepts `.bin` files within the configured models directory. Paths outside that directory are rejected.
426
+ **No PATH shadowing.** System binaries the server invokes on your behalf (`tasklist`, `wmic`) are called by absolute `System32` path so they can't be shadowed by a same-named executable earlier on `PATH`.
407
427
 
408
428
  See [SECURITY.md](SECURITY.md) for the full security policy.
409
429
 
package/README.pl.md CHANGED
@@ -183,6 +183,7 @@ Transkrybuje pojedynczy plik. Obsługuje tryb blokujący (domyślny) lub działa
183
183
  | `word_timestamps` | Jedno słowo na segment ze znacznikiem czasu. Przydatne do wyrównywania klipów. |
184
184
  | `max_segment_length` | Maksymalna długość segmentu w znakach. |
185
185
  | `diarize` | Diaryzacja mówców stereo — wymaga audio stereo z mówcami na osobnych kanałach. |
186
+ | `tinydiarize` | Wykrywanie zmian mówcy mono — oznacza `[SPEAKER_TURN]` przy zmianach mówcy w audio jednokanałowym. Wymaga modelu tdrz: `download_model small.en-tdrz`, a następnie `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Ścieżka do pliku .bin modelu Silero VAD. Usuwa ciszę przed transkrypcją — redukuje halucynacje w hałaśliwych plikach. |
187
188
  | `offset_t` | Przesunięcie początkowe w milisekundach. |
188
189
  | `duration` | Czas przetwarzania w milisekundach od przesunięcia. |
@@ -309,6 +310,21 @@ Wykrywa sprzęt GPU i potwierdza dostępność akceleracji Vulkan. Raportuje naz
309
310
 
310
311
  ---
311
312
 
313
+ ### `whisper_server`
314
+ Uruchamia, zatrzymuje lub sprawdza **trwały serwer modelu** (`whisper-server` z whisper.cpp). Gdy jest uruchomiony, aktywny model pozostaje rezydentny w VRAM, a każde wywołanie `transcribe_audio` / `transcribe_batch` jest obsługiwane przez localhost **bez przeładowywania modelu dla każdego pliku** — duże przyspieszenie przy transkrypcji wielu krótkich plików, gdzie jednorazowy koszt załadowania modelu w przeciwnym razie dominuje.
315
+
316
+ | Parametr | Opis |
317
+ |---|---|
318
+ | `action` | `start` — uruchom z aktywnym modelem rezydentnym; `stop` — zamknij i zwolnij VRAM; `status` — raportuj stan działania, model rezydentny, port i czas działania. |
319
+
320
+ - ⚠️ **Model rezydentny zajmuje VRAM GPU przez cały czas życia serwera.** Uruchamiaj go świadomie, wykonaj swoją pracę, a następnie `stop`, aby oddać GPU innym aplikacjom współdzielącym kartę. Zatrzymanie wykonuje pełne zabicie procesu, więc VRAM jest rzeczywiście zwalniany.
321
+ - `switch_model` w trakcie działania serwera podmienia model rezydentny w locie (bez restartu).
322
+ - Powiązany tylko z `127.0.0.1` — nigdy nie udostępniany w sieci.
323
+ - Gdy serwer działa, operacje wymagające jednorazowego CLI — zadania w tle, `start_batch`, `generate_subtitles`, wyjście `lrc`/`csv` oraz zaawansowane opcje per wywołanie, których nie obsługuje API HTTP (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — są **odrzucane** z komunikatem "najpierw zatrzymaj serwer" zamiast być po cichu ignorowane, więc żaden drugi silnik nigdy nie rywalizuje o GPU.
324
+ - Wymaga `whisper-server.exe` (dostarczany razem z `whisper-cli.exe`). W razie potrzeby skonfiguruj przez `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT`.
325
+
326
+ ---
327
+
312
328
  ## Obsługiwane formaty
313
329
 
314
330
  | Typ | Formaty |
@@ -382,6 +398,8 @@ To narzędzie zostało stworzone, aby zminimalizować interakcje z API Claude. C
382
398
  | `WHISPER_GPU_DEVICE` | Indeks urządzenia Vulkan, do którego przypiąć transkrypcję, dla systemów z wieloma GPU (indeks enumeracji Vulkan — sprawdź log startowy whisper-cli; nie kolejność GPU w Windows). Możliwe do zastąpienia per wywołanie przez `gpu_device`. Zobacz [TROUBLESHOOTING.md](TROUBLESHOOTING.md). |
383
399
  | `WHISPER_FOREGROUND_MAX_SEC` | Limit transkrypcji na pierwszym planie w sekundach (domyślnie 210). Pliki, których czas wykonania szacuje się na dłuższy, są kierowane do trybu w tle zamiast ryzykować ~4-minutowy limit czasu narzędzia w Claude Desktop. |
384
400
  | `FFMPEG_PATH` | Ścieżka do ffmpeg jeśli nie ma go w systemowym PATH |
401
+ | `WHISPER_SERVER_PATH` | Ścieżka do `whisper-server.exe` dla trwałego serwera modelu (domyślnie: obok `whisper-cli.exe`). Zobacz narzędzie `whisper_server`. |
402
+ | `WHISPER_SERVER_PORT` | Port localhost dla trwałego serwera modelu (domyślnie 8571). Zawsze powiązany z `127.0.0.1`. |
385
403
  | `WHISPER_PRIVACY_MODE` | Gdy `true`, odpowiedzi narzędzi zwracają tylko metadane — żaden tekst transkrypcji nie jest przesyłany do Claude. Dla treści regulowanych lub poufnych. Może być zastąpione per wywołanie przez parametr `privacy_mode`. Zobacz [PRIVACY.md](PRIVACY.md). |
386
404
  | `WHISPER_CONSENT_ACKNOWLEDGED` | Gdy `true`, pomija jednorazowe ujawnienie zgody dla sesji przed zwróceniem tekstu transkrypcji. Ustaw po zapoznaniu się z granicami prywatności, gdy przypomnienie nie jest już potrzebne. Nie ma efektu gdy tryb prywatności jest aktywny. |
387
405
 
@@ -397,13 +415,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
397
415
 
398
416
  Oczekiwany skrót dla binarnego wydania jest udokumentowany na [stronie wydań](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0).
399
417
 
400
- **Walidacja danych wejściowych.** Wszystkie ścieżki plików są weryfikowane przed użyciem — ścieżki UNC (`\\server\share`) i sekwencje przechodzenia katalogów (`..`) są odrzucane. Pliki powyżej 10 GB są odrzucane, aby zapobiec wyczerpaniu zasobów.
418
+ **Walidacja danych wejściowych.** Wszystkie ścieżki plików i folderów są weryfikowane przed użyciem, w każdym narzędziu, które je przyjmuje — ścieżki UNC (`\\server\share`) i sekwencje przechodzenia katalogów (`..`) są odrzucane. Pliki powyżej 10 GB są odrzucane, aby zapobiec wyczerpaniu zasobów. `job_id` i `batch_id` są sprawdzane względem dokładnego formatu wygenerowanego przez serwer, zanim zostaną użyte do zbudowania jakiejkolwiek ścieżki pliku, więc spreparowany identyfikator nie może wyjść poza katalog zadań.
419
+
420
+ **Świadomość iniekcji transkrypcji.** Pliki audio mogą zawierać wypowiadaną treść, która po transkrypcji przypomina instrukcje. Wbudowane mechanizmy obronne Claude obsługują to, ale warto wiedzieć, że sam serwer MCP traktuje treść transkrypcji jako dane — nigdy jako instrukcje. Ponieważ transkrybowana treść może nadal wpływać na to, które narzędzia Claude wywoła dalej, walidacja ścieżek/identyfikatorów jest stosowana obronnie, zamiast polegać wyłącznie na założeniu pojedynczego użytkownika.
401
421
 
402
- **Świadomość iniekcji transkrypcji.** Pliki audio mogą zawierać wypowiadaną treść, która po transkrypcji przypomina instrukcje. Wbudowane mechanizmy obronne Claude obsługują to, ale warto wiedzieć, że sam serwer MCP traktuje treść transkrypcji jako danenigdy jako instrukcje.
422
+ **Pobieranie modeli jest ograniczone.** Narzędzie `download_model` pobiera tylko z dwóch zaufanych przestrzeni nazw Hugging Face (`ggerganov/whisper.cpp` i `ggml-org`). Dowolne URL odrzucane. Przekierowania weryfikowane względem listy dozwolonych przed wykonaniem. (Pobrania nie jeszcze weryfikowane względem skrótu SHA256 per model zobacz SECURITY.md.)
403
423
 
404
- **Pobieranie modeli jest ograniczone.** Narzędzie `download_model` pobiera tylko z dwóch zaufanych przestrzeni nazw Hugging Face (`ggerganov/whisper.cpp` i `ggml-org`). Dowolne URL odrzucane. Przekierowania weryfikowane względem listy dozwolonych przed wykonaniem.
424
+ **Wybór modelu jest piaskownicowany.** Zarówno `switch_model`, jak i zastąpienie `model` w `transcribe_audio` akceptują tylko pliki `.bin` w skonfigurowanym katalogu modeli. Ścieżki poza tym katalogiemodrzucane przez znormalizowane sprawdzanie zawierania ścieżki.
405
425
 
406
- **Przełączanie modeli jest piaskownicowane.** `switch_model` akceptuje tylko pliki `.bin` w skonfigurowanym katalogu modeli. Ścieżki poza tym katalogiem odrzucane.
426
+ **Brak przesłaniania PATH.** Binaria systemowe wywoływane przez serwer w twoim imieniu (`tasklist`, `wmic`) uruchamiane po bezwzględnej ścieżce `System32`, więc nie mogą zostać przesłonięte przez plik wykonywalny o tej samej nazwie umieszczony wcześniej na `PATH`.
407
427
 
408
428
  Zobacz [SECURITY.md](SECURITY.md) dla pełnej polityki bezpieczeństwa.
409
429
 
package/README.pt-BR.md CHANGED
@@ -183,6 +183,7 @@ Transcreve um único arquivo. Suporta modo de bloqueio (padrão) ou em segundo p
183
183
  | `word_timestamps` | Uma palavra por segmento com carimbo de tempo. Útil para alinhamento de clipes. |
184
184
  | `max_segment_length` | Comprimento máximo do segmento em caracteres. |
185
185
  | `diarize` | Diarização de falantes estéreo — requer áudio estéreo com falantes em canais separados. |
186
+ | `tinydiarize` | Detecção de turnos de fala em mono — marca `[SPEAKER_TURN]` nas mudanças de falante em áudio de canal único. Requer um modelo tdrz: `download_model small.en-tdrz` e depois `switch_model ggml-small.en-tdrz.bin`. |
186
187
  | `vad_model` | Caminho para o arquivo .bin do modelo Silero VAD. Remove silêncio antes de transcrever — reduz alucinações em arquivos ruidosos. |
187
188
  | `offset_t` | Deslocamento de início em milissegundos. |
188
189
  | `duration` | Duração a processar a partir do deslocamento em milissegundos. |
@@ -298,6 +299,21 @@ Detecta o hardware GPU e confirma se a aceleração Vulkan está disponível. Re
298
299
 
299
300
  ---
300
301
 
302
+ ### `whisper_server`
303
+ Inicia, para ou verifica o **servidor de modelo persistente** (o `whisper-server` do whisper.cpp). Enquanto está em execução, o modelo ativo permanece residente na VRAM e cada chamada de `transcribe_audio` / `transcribe_batch` é atendida por localhost **sem recarregar o modelo por arquivo** — um grande ganho de velocidade ao transcrever muitos arquivos curtos, onde o custo único de carregamento do modelo domina.
304
+
305
+ | Parâmetro | Descrição |
306
+ |---|---|
307
+ | `action` | `start` — inicia com o modelo ativo residente; `stop` — desliga e libera a VRAM; `status` — reporta o estado de execução, o modelo residente, a porta e o tempo de atividade. |
308
+
309
+ - ⚠️ **O modelo residente mantém a VRAM da GPU durante toda a vida útil do servidor.** Inicie-o deliberadamente, faça seu trabalho e depois use `stop` para devolver a GPU a outras aplicações que compartilham a placa. O `stop` executa um encerramento completo para que a VRAM seja de fato liberada.
310
+ - `switch_model` com o servidor em execução troca o modelo residente em tempo real, no lugar (sem reinicialização).
311
+ - Vinculado apenas a `127.0.0.1` — nunca exposto na rede.
312
+ - Enquanto o servidor está ativo, operações que precisam da CLI de uma passagem — tarefas em segundo plano, `start_batch`, `generate_subtitles`, saída `lrc`/`csv` e opções avançadas por chamada que a API HTTP não respeita (`beam_size`, `best_of`, `word_timestamps`, `diarize`, `tinydiarize`, `vad_model`, `offset_t`, `duration`) — são **recusadas** com uma mensagem "pare o servidor primeiro" em vez de serem silenciosamente ignoradas, de modo que nenhum segundo motor jamais dispute a GPU.
313
+ - Requer `whisper-server.exe` (distribuído junto com `whisper-cli.exe`). Configure com `WHISPER_SERVER_PATH` / `WHISPER_SERVER_PORT` se necessário.
314
+
315
+ ---
316
+
301
317
  ## Formatos suportados
302
318
 
303
319
  | Tipo | Formatos |
@@ -371,6 +387,8 @@ Esta ferramenta foi criada para minimizar as interações com a API do Claude. T
371
387
  | `WHISPER_GPU_DEVICE` | Índice do dispositivo Vulkan ao qual fixar a transcrição, para sistemas com múltiplas GPUs (o índice de enumeração do Vulkan — verifique o log de inicialização do whisper-cli; não a ordem de GPU do Windows). Substituível por chamada com `gpu_device`. Veja [TROUBLESHOOTING.md](TROUBLESHOOTING.md). |
372
388
  | `WHISPER_FOREGROUND_MAX_SEC` | Limite da transcrição em primeiro plano em segundos (padrão 210). Arquivos cuja execução estimada é mais longa são roteados para o modo em segundo plano em vez de arriscar o tempo limite de ferramenta de ~4 minutos do Claude Desktop. |
373
389
  | `FFMPEG_PATH` | Caminho para o ffmpeg se não estiver no PATH do sistema |
390
+ | `WHISPER_SERVER_PATH` | Caminho para `whisper-server.exe` do servidor de modelo persistente (padrão: ao lado de `whisper-cli.exe`). Veja a ferramenta `whisper_server`. |
391
+ | `WHISPER_SERVER_PORT` | Porta de localhost do servidor de modelo persistente (padrão 8571). Sempre vinculada a `127.0.0.1`. |
374
392
  | `WHISPER_PRIVACY_MODE` | Defina como `true` para que todas as respostas das ferramentas retornem apenas metadados — nenhum texto de transcrição retornado ao Claude. Para conteúdo regulamentado ou confidencial. Pode ser substituído por chamada com o parâmetro `privacy_mode`. Veja [PRIVACY.md](PRIVACY.md). |
375
393
  | `WHISPER_CONSENT_ACKNOWLEDGED` | Defina como `true` para suprimir a divulgação de consentimento única por sessão exibida antes de retornar texto de transcrição. Defina quando você entende os limites de privacidade e não precisa mais do lembrete. Sem efeito quando o modo de privacidade está ativo. |
376
394
 
@@ -386,13 +404,15 @@ Get-FileHash "C:\whisper\Release\whisper-cli.exe" -Algorithm SHA256
386
404
 
387
405
  O hash esperado está documentado na [página de releases](https://github.com/eviscerations/whisper-windows-mcp/releases/tag/v1.4.0).
388
406
 
389
- **Validação de entrada.** Todos os caminhos de arquivo são validados antes do uso — caminhos UNC (`\\server\share`) e sequências de travessia de diretório (`..`) são rejeitados. Arquivos acima de 10 GB são rejeitados para evitar esgotamento de recursos.
407
+ **Validação de entrada.** Todos os caminhos de arquivo e pasta são validados antes do uso, em toda ferramenta que recebe um — caminhos UNC (`\\server\share`) e sequências de travessia de diretório (`..`) são rejeitados. Arquivos acima de 10 GB são rejeitados para evitar esgotamento de recursos. `job_id` e `batch_id` são verificados contra o formato exato gerado pelo servidor antes de serem usados para construir qualquer caminho de arquivo, de modo que um ID forjado não possa escapar do diretório de tarefas.
408
+
409
+ **Consciência de injeção de transcrição.** Arquivos de áudio podem conter conteúdo falado que, quando transcrito, se assemelha a instruções. As defesas integradas do Claude lidam com isso, mas vale saber que o próprio servidor MCP trata o conteúdo de transcrição como dados — nunca como instruções. Como o conteúdo transcrito ainda pode influenciar quais ferramentas o Claude chama em seguida, a validação de caminhos/IDs é aplicada de forma defensiva, em vez de confiar apenas na premissa de usuário único.
390
410
 
391
- **Consciência de injeção de transcrição.** Arquivos de áudio podem conter conteúdo falado que, quando transcrito, se assemelha a instruções. As defesas integradas do Claude lidam com isso, mas vale saber que o próprio servidor MCP trata o conteúdo de transcrição como dadosnunca como instruções.
411
+ **Downloads de modelos são restritos.** A ferramenta `download_model` baixa apenas de dois namespaces confiáveis do Hugging Face (`ggerganov/whisper.cpp` e `ggml-org`). URLs arbitrários são rejeitados. Redirecionamentos são validados contra uma lista de permissões antes de serem seguidos. (Os downloads ainda não são verificados contra um digest SHA256 por modelo veja SECURITY.md.)
392
412
 
393
- **Downloads de modelos são restritos.** A ferramenta `download_model` baixa apenas de dois namespaces confiáveis do Hugging Face (`ggerganov/whisper.cpp` e `ggml-org`). URLs arbitrários são rejeitados. Redirecionamentos são validados contra uma lista de permissões antes de serem seguidos.
413
+ **Seleção de modelos é isolada em sandbox.** Tanto `switch_model` quanto a substituição `model` de `transcribe_audio` aceitam apenas arquivos `.bin` dentro do diretório de modelos configurado. Caminhos fora desse diretório são rejeitados via contenção de caminho normalizado.
394
414
 
395
- **Troca de modelos é isolada em sandbox.** `switch_model` aceita apenas arquivos `.bin` dentro do diretório de modelos configurado. Caminhos fora desse diretório são rejeitados.
415
+ **Sem shadowing de PATH.** Os binários de sistema que o servidor invoca em seu nome (`tasklist`, `wmic`) são chamados pelo caminho absoluto em `System32`, de modo que não possam ser mascarados por um executável de mesmo nome situado antes no `PATH`.
396
416
 
397
417
  Veja [SECURITY.md](SECURITY.md) para a política de segurança completa.
398
418