Skip to main content
Glama

film-subtitles-mcp

把影片或音檔轉成逐字稿與繁體中文字幕的 MCP server。

兩條路線:

音源

參數

產出

英文

language="en"(預設)

<檔名>.en.srt(英文逐字稿)+ <檔名>.zh-TW.srt(繁中字幕,過長的依標點拆開)

中文

language="zh"

<檔名>.zh.srt(原始轉錄)+ <檔名>.zh-TW.srt(轉台灣繁體、校對錯字標點、拆長句)

轉錄用 Groq Whisper,翻譯/校對預設也走 Groq——只要一把免費的 Groq 金鑰就能全部跑完,不必另外安裝任何 CLI。

設計原則

  • 翻譯後端永遠看不到時間軸,只拿到一串編號句子,回傳同樣數量的譯文。數量對不上就重試、再不行拆小批重試,絕不「少一句也沒關係」。

  • 組回字幕時用的是逐字稿原本的時間軸;寫檔後再讀回來逐條比對,時間軸一個字元都不能變。

  • 中途斷掉(網路、配額、關機)直接重跑,已完成的切片與翻譯批次會跳過。

Related MCP server: faster-whisper-mcp

需要什麼

  1. uv(用來下載並執行這支 server)

  2. ffmpeg / ffprobe

    • Windows:winget install Gyan.FFmpeg

    • macOS:brew install ffmpeg

    • 裝完重開終端機。

  3. Groq 金鑰(免費):到 https://console.groq.com/keys 申請,等一下填進設定檔。

裝好之後可以先叫 check_setup 這支 tool 自我檢查。

安裝

不用 clone,直接讓 uvx 跑。

Claude Code:在終端機跑一行(-s user 表示所有專案都能用):

claude mcp add -s user film-subtitles -e GROQ_API_KEY=把你自己的金鑰貼在這裡 -- uvx --from git+https://github.com/s9101800111-byte/film-subtitles-mcp@v0.1.1 film-subtitles-mcp

跑完用 claude mcp get film-subtitles 確認顯示 Connected。

Claude Desktop:把下面這段加進設定檔(Windows:%APPDATA%\Claude\claude_desktop_config.json;macOS:~/Library/Application Support/Claude/claude_desktop_config.json),存檔後完全結束 Claude 再重開:

{
  "mcpServers": {
    "film-subtitles": {
      "command": "uvx",
      "args": ["--from", "git+https://github.com/s9101800111-byte/film-subtitles-mcp@v0.1.1", "film-subtitles-mcp"],
      "env": { "GROQ_API_KEY": "把你自己的金鑰貼在這裡" }
    }
  }
}

@v0.1.1 是版本標籤,建議釘住。不釘版本的話上游一更新就可能整支掛掉。

剛裝完 uv 就設定的話,Claude 可能還找不到 uvx(連線失敗、ENOENT)。先完全結束 Claude 再重開;還是不行就把 "command" 改成 uvx 的完整路徑——在終端機跑 where uvx(Windows)或 which uvx(macOS)查,JSON 裡的反斜線要寫成 \\。

要改程式碼就照一般方式 clone 下來:

git clone https://github.com/s9101800111-byte/film-subtitles-mcp
cd film-subtitles-mcp
uv sync
uv run film-subtitles-mcp

工具

Tool

用途

transcribe_start(paths, language, translate, translator, model, context, force)

開始轉字幕,立刻回傳 job_id(實際工作在背景跑)

transcribe_status(job_id)

查進度、產出的字幕檔路徑、最近的執行訊息

transcribe_list()

列出最近的工作

check_setup()

檢查 ffmpeg 與金鑰是否齊備

轉字幕是長時間工作(一小時影片約數分鐘),所以拆成 start/status 兩段,不會卡住對話。

用起來像這樣

「把 D:\錄音\會議.m4a 轉成逐字稿」 「這支英文影片上中文字幕,專有名詞有 Revit 和 Dynamo」

context 參數填上專有名詞(例如 "Revit, Dynamo, MCP")能讓譯名穩定很多。

常見問題

「整部影片沒有轉出任何語音」 — 檔案真的沒有聲音,或截到了靜音片段。用 ffmpeg -i 檔案 -af volumedetect -f null - 確認。

音檔可以直接丟資料夾嗎? 可以。.mp3 .m4a .wav .aac .flac .ogg .opus .wma 與常見影片格式都會被掃到。

免費額度會卡嗎? Groq 免費層有每分鐘 token 限制,長片翻譯時可能遇到 429。程式會自己等待重試,重跑也會從中斷處接續。

想換翻譯模型? model 參數可填任何 Groq 上的模型,例如 qwen/qwen3.8-27b。預設是 openai/gpt-oss-120b(指令遵循最穩,這條 pipeline 最吃這個)。

想用自己的 CLI agent 翻譯? translator 填那支指令的名字(需支援 -p <prompt> --model <model>),例如 agy、claude。model 要一起指定該 CLI 認得的模型名(例如 claude 配 sonnet),留空會帶入 agy 的預設模型而失敗。該 CLI 也要事先在本機登入好。

授權

MIT

Available Tools

4 tools
check_setupA

檢查這台電腦的環境是否齊備(ffmpeg、Groq 金鑰、翻譯後端)。裝完先跑這個。

NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full behavioral burden: it discloses the three things that are inspected, which is useful, but says nothing about whether checks hit the network, whether failures throw vs. report, or what the result looks like. For a zero-parameter diagnostic that is an acceptable but not rich disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero waste; the check list is front-loaded and the directive to run it first is a natural trailing clause. Nothing could be removed without losing meaning.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a trivially simple, parameterless check tool the description is nearly sufficient, but with no output schema and no annotations it leaves the agent guessing about the result shape and the remediation path when a component is missing. Adding one clause on the pass/fail outcome would close the gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so the baseline of 4 applies — there is nothing for the description to clarify beyond confirming that no configuration input is required, which its call-with-nothing framing implicitly does.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource in 'check whether this computer's environment is complete' and enumerates what is verified (ffmpeg, Groq key, translation backend). This clearly distinguishes it from the transcribe_* siblings, which all deal with running transcriptions rather than verifying the host environment.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'裝完先跑這個' (run this first after installation) gives an explicit trigger condition for invoking the tool. It offers no exclusions or named alternatives, but the sibling set is a different workflow so no disambiguation is really needed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_listC

列出最近的轉字幕工作與各自狀態。

NameRequiredDescriptionDefault
limitNo

Output Schema

NameRequiredDescription
resultYes

TDQS

C2.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and discloses very little. It implies a read-only listing but says nothing about ordering, pagination, retention window, or whether results are scoped to the caller – all relevant for a job-listing tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single compact sentence with the resource and returned status front-loaded and no filler. It is appropriately sized for a simple list tool, though it is terse to the point of under-specification.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema exists, so return values need not be explained. However, the undocumented limit parameter and the absent usage context leave the agent without enough to call the tool confidently in edge cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% and the single parameter (limit, default 20) is never mentioned in the description, so the agent learns nothing about how many jobs are returned or whether the list is truncated. The description does not compensate for the coverage gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a clear verb (列出/list) and resource (轉字幕工作/transcription jobs) plus the returned content (各自狀態/each one's status). It does not differentiate itself from the sibling transcribe_status, which also concerns job status, so an agent must infer the distinction (list all vs. query one).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no statement of when to use this tool versus transcribe_status or transcribe_start, nor any prerequisite or scope conditions. The 'recent jobs' framing implies browsing, but nothing is explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_startA

把影片或音檔轉成字幕/逐字稿(開背景工作,立刻回傳 job_id)。

用在:影片上字幕、音檔轉文字、錄音轉逐字稿、演講/會議/課程影片轉文字、翻譯成中文字幕。

參數: paths -- 影片或音檔的完整路徑,可給多個;也可以給整個資料夾。 language -- 音源語言。"en"=英文(產生英文逐字稿再翻成繁中字幕); "zh"=中文(直接產生繁中字幕,會轉台灣繁體並校對錯字標點)。 translate -- True=要中文字幕;False=只要原文逐字稿。 translator -- "groq"(預設,只要 Groq 金鑰)或任何吃 -p/--model 的 CLI agent(例如 "agy")。 model -- 翻譯模型,留空用預設。 context -- 本片的專有名詞或背景,例如 "Revit, Dynamo, MCP",會讓譯名穩定。 force -- 字幕已存在也重做。

產出會放在原檔案旁邊:<檔名>.en.srt(或 .zh.srt)與 <檔名>.zh-TW.srt。 回傳 job_id,用 transcribe_status 查進度。

NameRequiredDescriptionDefault
forceNo
modelNo
pathsYes
contextNo
languageNoen
translateNo
translatorNogroq

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden and does well: it discloses that this is an async background job that returns a job_id immediately, where output files land (<filename>.en.srt / .zh.srt / .zh-TW.srt), that translator='groq' needs a Groq key, and what force does. It does not cover auth beyond the Groq key, rate limits, or failure/error behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core function and the async behavior, then use cases, then a clean parameter block. The parameter list is long but each entry earns its place given 0% schema coverage; wording is dense but not redundant.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 7-parameter tool with no annotations and no output schema, the description supplies the async model, the return value (job_id), the on-disk outputs, and the follow-up tool. Nothing essential for correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must compensate and it does thoroughly: each of the 7 parameters (paths, language, translate, translator, model, context, force) is explained with meaning, accepted values, defaults, and practical effects (e.g. language 'zh' triggers Traditional-Chinese conversion and proofreading; context stabilizes proper-noun translation). This is far beyond what the bare schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (convert video/audio into subtitles or transcripts) plus the key behavioral fact that it runs as a background job returning a job_id immediately. This clearly distinguishes it from siblings transcribe_status and transcribe_list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The '用在:' line enumerates concrete scenarios (subtitle overlays, audio-to-text, meeting/lecture transcription, Chinese subtitle translation) that give strong positive guidance. It also routes the agent to transcribe_status for progress, though it never states when NOT to use it or contrast against the sibling tools explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

transcribe_statusB

查某支轉字幕工作的進度、產出的字幕檔路徑,以及最近的執行訊息。

NameRequiredDescriptionDefault
job_idYes
log_linesNo

TDQS

B3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It usefully discloses that the tool returns progress, subtitle file paths, and recent execution messages, but it does not state that this is a read-only operation, whether it has side effects, or any permission or rate-limit considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that states the tool's purpose and returned data with no filler whatsoever.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations, no output schema, and 0% schema description coverage, the description is insufficient. It covers the general return content but leaves parameter semantics, especially log_lines, and usage alternatives unexplained, so an agent lacks enough context to invoke it confidently.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate for two undocumented parameters. It implies selecting a specific job via '某支' but does not name job_id or explain its format, and it never mentions log_lines or what that parameter controls.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description gives a specific verb (查/check) and resource (某支轉字幕工作/a subtitle transcription job), and it enumerates the returned information: progress, output subtitle path, and recent execution messages. It clearly distinguishes itself from transcribe_list and transcribe_start by focusing on one job's status, though it does not explicitly name those siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No when-to-use or when-not-to-use guidance is provided. The description does not mention alternatives such as transcribe_list for listing jobs or transcribe_start for creating them, so the agent must infer the routing from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 4 tool updatesv0.1.1
    • First observedcheck_setup
    • First observedtranscribe_list
    • First observedtranscribe_start
    • First observedtranscribe_status

TDQS

A3.7/5.0

Scored across 4 tools

Disambiguation5/5

Each tool clearly targets a distinct operation: transcribe_start creates a job, transcribe_status queries one job, transcribe_list lists all recent jobs, and check_setup validates the environment. There is no overlap or ambiguity in purpose.

Naming Consistency5/5

All tool names use consistent snake_case with a predictable verb_noun structure (transcribe_list, transcribe_start, transcribe_status, check_setup). The shared transcribe_ prefix for core operations and distinct check_setup for setup are logically organized.

Tool Count5/5

Four tools is well-scoped for a focused background transcription service: one for environment check, one to start jobs, one to list jobs, and one to check status. No unnecessary tools and no obvious thinness for the core workflow.

Completeness4/5

The core lifecycle (setup check, start job, list jobs, poll status) is fully covered. Minor gaps exist, such as cancelling/deleting jobs or directly retrieving subtitle content via MCP, but agents can work around these by using returned file paths.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers