Skip to main content
Glama

mcp-tools-for-agents

Dê mãos ao seu agente de IA. Um binário, nenhuma instalação.

Um servidor MCP local, em Rust, que entrega ao seu agente ferramentas reais de vídeo, áudio e arquivos. Sem API, sem UI, sem runtime. São 36 tools compiladas em um executável único: baixe o mcp-tools da sua plataforma, aponte o host MCP para ele e pronto.

Funciona com Claude Code, Claude Desktop, Cursor e qualquer host MCP.

Por que Rust

O servidor precisa de um arquivo:

  • Binário único por plataforma. Linux (x86_64, arm64), macOS (Intel, Apple Silicon) e Windows. Sem runtime, sem dependência de sistema.

  • FFmpeg e yt-dlp sob demanda. Se não estiverem no PATH nem ao lado do binário, o servidor baixa os builds estáticos oficiais na primeira chamada e guarda em uma pasta de cache. Desligue com MCP_AUTO_DOWNLOAD=false.

  • Fonte e modelos embutidos. A DejaVu Sans Bold (para texto e legenda), o YuNet (detector de rosto do OpenCV Zoo) e o Silero VAD (detector de fala) vão dentro do executável.

  • Transcrição, visão e fala nativas. transcribe_audio usa o whisper.cpp (whisper-rs); smart_crop roda o YuNet e remove_silence e add_background_music rodam o Silero VAD no tract, runtime ONNX em Rust puro. Nada de OpenCV ou onnxruntime instalado.

  • Mesmos princípios. Erro que ensina ({error, code, hint}), workspace como fronteira, jobs em background, resposta sempre tipada, um arquivo por tool.

Related MCP server: ffmpeg-mcp

Em 60 segundos

Baixe o pacote da sua plataforma na página de releases (ou compile, abaixo), descompacte e rode:

WORKSPACE_DIR=/dados/videos ./mcp-tools     # servidor no ar, via stdio

Na primeira tool que precisar de FFmpeg (ou de yt-dlp) o binário é baixado para o cache. Se preferir, coloque ffmpeg, ffprobe e yt-dlp ao lado do mcp-tools ou no PATH: eles têm prioridade e nada é baixado.

Compilar do fonte

cargo build --release --features full   # binário completo (transcrição + visão + fala)
cargo build --release                   # binário leve, sem os extras

Requisitos de build: Rust estável (1.85+); com --features full, também cmake e um compilador C++ (o whisper.cpp é compilado e linkado estaticamente). O executável fica em target/release/mcp-tools (~24 MB). No Linux ele depende só da glibc e da libstdc++ do sistema, presentes em qualquer distribuição.

Plugar no agente

{
  "mcpServers": {
    "mcp-tools-for-agents": {
      "command": "/caminho/mcp-tools",
      "env": { "WORKSPACE_DIR": "/dados/videos" }
    }
  }
}

Cole isso no .mcp.json (Claude Code), no claude_desktop_config.json (Claude Desktop) ou no equivalente do seu host. Pronto: peça "corta os 10 primeiros segundos do intro.mp4" e veja acontecer.

Claude Code neste repositório

Abrindo este repositório no Claude Code nada precisa ser compilado: o hook SessionStart em .claude/settings.json roda scripts/install-mcp-tools.sh, que baixa o mcp-tools da última release para bin/ (pasta ignorada pelo git), e o .mcp.json sobe o servidor por scripts/mcp-tools-run.sh, que espera esse download terminar (ou baixa sozinho) antes de executar bin/mcp-tools. Para atualizar à mão ou fixar uma versão:

sh scripts/install-mcp-tools.sh                        # última release
MCP_TOOLS_VERSION=v0.1.0 sh scripts/install-mcp-tools.sh   # versão fixa
MCP_TOOLS_FORCE=true sh scripts/install-mcp-tools.sh   # baixa de novo

Publicar uma release

Automático. A cada merge em producao, o workflow .github/workflows/release.yml cria a próxima tag vX.Y.Z, compila o binário completo (--features full) para Linux x86_64 e arm64, macOS Intel e Apple Silicon e Windows, e anexa os pacotes à release.

Tools

Domínio

Tool

O que faz

files

list_files

Lista arquivos do workspace, com filtro por tipo

files

delete_file

Apaga um arquivo

video

probe_video

Duração, resolução, fps, codecs

video

cut_video

Recorta um trecho, com ou sem re-encode

video

concat_videos

Junta vídeos em sequência, com corte seco ou 20 transições (fade, wipe, slide...)

video

remove_silence

Corta as pausas em que ninguém fala, reconhecendo voz por rede neural (Silero VAD) ou por limiar em dB

video

detect_scenes

Encontra mudanças de cena

video

extract_frame

Salva um frame como imagem

video

add_text_overlay

Escreve título ou descrição sobre a imagem

video

create_subtitles

Gera um .srt a partir de trechos com tempos

video

burn_subtitles

Grava legendas de um .srt ou .ass no vídeo, com cor, tamanho e posição

video

set_video_metadata

Embute título, descrição e autor no arquivo

video

add_narration

Mistura um áudio de narração no vídeo

video

add_sound_effects

Insere efeitos sonoros (vine boom, ding, whoosh) em instantes do vídeo, buscando no Freesound se preciso

video

list_templates

Lista os templates visuais disponíveis

video

apply_template

Shorts 9:16, quadrado, 16:9, título de abertura, marca d'água

video

add_banner

Faixa com fundo colorido e texto no topo ou rodapé, o tempo todo ou num intervalo

video

add_background_music

Música de fundo em loop, com fade e ducking de duck_db guiado pela fala (Silero VAD)

video

add_fade

Fade de entrada e saída na imagem e no som

video

change_speed

Acelera ou desacelera o vídeo todo ou um trecho, mantendo o tom da voz

video

zoom_video

Punch-in de impacto ou zoom progressivo (Ken Burns) em um trecho

video

apply_studio_background_light

Acende uma luz colorida de estúdio no fundo (halo radial, de cima, de baixo ou nas laterais), com presets de cor ou cor própria

video

stabilize_video

Tira o tremor de câmera na mão, com o vid.stab em dois passes

video

create_dynamic_subtitles

Legenda animada palavra por palavra em .ass, com presets (hormozi, boxed, karaoke, pop, clean, neon), fonte, contorno e sombra

video

create_thumbnail

Capa do vídeo com título grande, nos tamanhos de YouTube, Shorts e feed

video

smart_crop

Reenquadra 16:9 para 9:16 seguindo o rosto de quem fala (feature vision)

video

export_for_platform

Codifica o vídeo final com o preset de TikTok, Reels, Shorts, YouTube ou X, em H.264, H.265 ou AV1, pela placa de vídeo quando há uma

audio

extract_audio

Separa a trilha de áudio

audio

transcribe_audio

Transcreve fala com timestamps por trecho e por palavra (feature transcribe)

audio

normalize_audio

Normaliza o volume para o loudness da plataforma (EBU R128, duas passadas)

media

get_video_info

Título, duração, descrição e capítulos de uma URL, sem baixar

media

download_video

Baixa o vídeo de qualquer site (yt-dlp) para o workspace

media

search_sound_effects

Busca efeitos sonoros gratuitos no Freesound por descrição em texto

media

download_sound_effect

Baixa um efeito do Freesound (MP3) para a pasta sfx/ do workspace

jobs

job_status

Estado de um job em background

jobs

job_result

Saída de um job concluído

Ative só o que precisa com MCP_DOMAINS=video,files.

O que é baixado, e quando

O binário não traz FFmpeg nem yt-dlp dentro (são ~150 MB e ~30 MB, com licenças próprias). Ele os procura nesta ordem e para na primeira que encontrar:

  1. o caminho em FFMPEG_BIN, FFPROBE_BIN ou YTDLP_BIN, se for um caminho;

  2. a pasta onde o mcp-tools está;

  3. o PATH;

  4. a pasta de cache (MCP_CACHE_DIR);

  5. download, se MCP_AUTO_DOWNLOAD=true (padrão).

O quê

De onde

Quando

ffmpeg + ffprobe

builds estáticos BtbN (Linux, Windows) e evermeet.cx (macOS)

primeira tool de vídeo ou áudio

yt-dlp

release oficial no GitHub (executável standalone, sem Python)

primeiro download_video / get_video_info

modelo Whisper (ggml-<size>.bin)

Hugging Face, repositório ggerganov/whisper.cpp

primeiro transcribe_audio com aquele model_size

fonte DejaVu

embutida; gravada no cache só se o sistema não tiver fonte

primeira tool com texto

modelos YuNet e Silero VAD

embutidos no binário (core/models)

nunca baixados

Cache padrão: ~/.cache/mcp-tools-for-agents (Linux), ~/Library/Caches/mcp-tools-for-agents (macOS), %LOCALAPPDATA%\mcp-tools-for-agents (Windows). Para um pacote 100% offline, coloque esses arquivos na pasta do binário (ffmpeg, ffprobe, yt-dlp, models/ggml-base.bin, fonts/DejaVuSans-Bold.ttf).

Download de qualquer fonte

download_video e get_video_info aceitam qualquer URL http(s). São três tentativas, nesta ordem:

  1. Extractor nativo do yt-dlp — cobre mais de mil sites.

  2. Extractor genérico — lê o HTML da página e procura <video>, <source>, HLS .m3u8, DASH .mpd, players conhecidos e JSON-LD.

  3. Varredura própria — o servidor busca a página, junta as mídias diretas e desce um nível nos iframe.

Não há como baixar conteúdo com DRM nem páginas que exigem login. Nesses casos o hint do erro diz para não insistir.

Efeitos sonoros do Freesound

add_sound_effects recebe uma lista de efeitos com o instante em que cada um toca e aplica tudo em um único passo do ffmpeg. Cada efeito vem de query (busca no Freesound), sound_id (resultado de search_sound_effects) ou audio (arquivo do workspace). A chave da API já vem embutida em config.rs; FREESOUND_API_KEY no ambiente substitui.

Features opcionais

Algumas tools dependem de bibliotecas pesadas, ligadas por feature do Cargo:

cargo build --release --features transcribe   # whisper-rs: transcribe_audio
cargo build --release --features vision       # tract + YuNet: smart_crop com mode="face"
cargo build --release --features vad          # tract + Silero VAD: remove_silence e ducking com method="vad"
cargo build --release --features full         # as três (é o que a release publica)

Sem a feature, a tool continua registrada e devolve um erro unavailable explicando como habilitar; smart_crop segue funcionando com mode="center" e remove_silence e add_background_music com o limiar de dB (method="db").

O modelo do Silero VAD em core/models/silero_vad_16k.onnx é o oficial (16 kHz, opset 15) com os nós If resolvidos para forma fixa, que o tract não traduz; scripts/prepare-silero-vad.py regenera o arquivo a partir do original.

Configuração

Todas as variáveis estão em .env.example. As principais:

Variável

Padrão

Para quê

YTDLP_BIN

yt-dlp

Nome ou caminho do yt-dlp

MCP_AUTO_DOWNLOAD

true

Baixar ffmpeg, yt-dlp e modelos sob demanda

MCP_CACHE_DIR

cache do sistema

Onde os downloads ficam

Como é por dentro

A árvore fica na raiz do crate (o Cargo.toml aponta para a raiz em vez de src/):

server.rs     cria o McpServer, monta o Runtime e registra os domínios
config.rs     único lugar que lê variáveis de ambiente (Settings)
core/         ffmpeg, paths, jobs, errors, binários externos, rede. Não conhece MCP.
domains/      um módulo por área, um arquivo por tool
tests/        espelha a estrutura acima

Uma tool inteira, do jeito que todas são:

pub fn delete_file(runtime: &Runtime, path: &str) -> ToolResult<DeleteFileResult> {
    let target = runtime.workspace.existing(path)?;
    let size = std::fs::metadata(&target).map(|m| m.len()).unwrap_or(0);
    std::fs::remove_file(&target).map_err(|error| {
        ToolError::new(format!("Não foi possível apagar '{path}': {error}"), ErrorCode::NotFound)
    })?;
    Ok(DeleteFileResult { deleted: runtime.workspace.relative(&target), freed_bytes: size })
}

#[derive(Debug, Deserialize, JsonSchema)]
pub struct Params {
    /// Arquivo, relativo ao workspace.
    pub path: String,
}

pub fn register(mcp: &mut McpServer, runtime: &Arc<Runtime>) {
    let runtime = Arc::clone(runtime);
    mcp.tool(
        "delete_file",
        "Apaga permanentemente um arquivo do workspace.\n\n\
         Use para limpar saídas intermediárias. Não há lixeira nem desfazer.",
        move |params: Params| guarded(delete_file(&runtime, &params.path)),
    );
}

Função pura e testável em cima, registro com a description para o agente embaixo. Err(ToolError) vira {error, code, hint} na resposta.

Contribuir

Quer uma tool nova? Copie domains/files/delete.rs, troque o miolo, escreva o teste espelhado em tests/, adicione a linha na tabela acima. As regras completas estão em .claude/rules/arquitetura.md, e se você usa Claude Code, /nova-tool faz o roteiro.

Antes do PR, os três precisam passar:

cargo fmt --check
cargo clippy --all-targets -- -D warnings
cargo test

Os testes que usam ffmpeg são pulados quando o binário não está instalado.

Licença

MIT. A fonte DejaVu embutida segue a licença Bitstream Vera (core/fonts/LICENSE-DejaVu.txt); o modelo YuNet é MIT (OpenCV Zoo).

Available Tools

11 tools
concat_videosA

Junta dois ou mais vídeos na ordem informada em um único arquivo.

Os vídeos devem ter o mesmo codec e resolução (por exemplo, cortes do mesmo original). Os arquivos de entrada não são alterados.

Args: paths: Lista de vídeos, relativa ao workspace, na ordem desejada. output_name: Nome do arquivo de saída. Gerado automaticamente se omitido. background: Executa como job e devolve job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathsYes
backgroundNo
output_nameNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

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

With no annotations, the description carries the behavioral burden. It explicitly states that input files are not altered, that output_name is auto-generated when omitted, and that background mode runs as a job returning job_id. It does not cover failure modes for codec mismatches or overwrite behavior, but the core behavioral contract is clear.

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?

The description is compact and well-structured: a one-sentence purpose, a short prerequisite line, then a labeled Args section. Every sentence earns its place, and the most important behavioral facts are front-loaded.

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

Completeness4/5

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

For a three-parameter tool with an output schema and no annotations, the description is nearly complete: it covers parameters, ordering, compatibility prerequisites, input persistence, and background job behavior. Minor edge details such as the exact generated output-name pattern or overwrite policy are omitted, but they are not essential for correct invocation.

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 description coverage is 0%, but the description fully compensates by explaining every parameter in plain language: paths are relative to the workspace and order-sensitive, output_name is auto-generated if omitted, and background executes as a job returning job_id. This adds substantial meaning beyond the bare schema types.

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?

The description opens with a specific action: 'Junta dois ou mais vídeos na ordem informada em um único arquivo.' This clearly states the verb, resource, and result, and naturally distinguishes concat_videos from sibling tools like cut_video or extract_audio.

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

Usage Guidelines3/5

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

The description gives useful prerequisites: videos must have the same codec and resolution, and it gives a concrete example ('cortes do mesmo original'). However, it never names alternative tools or explicitly states when not to use this tool, so the routing guidance remains implied rather than explicit.

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

cut_videoA

Corta o trecho entre start e end (segundos) e salva um novo arquivo.

O original não é modificado. Por padrão copia os streams sem re-encodar, o que é rápido mas corta no keyframe mais próximo. Use reencode=true para corte exato no frame. Para vídeos longos use background=true e acompanhe com job_status.

Args: path: Vídeo de origem, relativo ao workspace. start: Início do trecho em segundos. end: Fim do trecho em segundos. reencode: Re-encoda para corte exato (mais lento). background: Executa como job e devolve job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
endYes
pathYes
startYes
reencodeNo
backgroundNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden, and it delivers: it discloses that the original is not modified, that streams are copied without re-encoding by default, that this cuts at the nearest keyframe, that reencode=true gives exact cuts, and that background=true returns a job_id tracked via job_status. These are genuine behavioral traits beyond what schema types express.

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?

The description is well-structured and front-loaded: core behavior first, then key behavioral tradeoffs, then a compact parameter list. Every sentence earns its place, and the Args section is justified given the 0% schema coverage. Nothing is redundant or padded.

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

Completeness4/5

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

For a 5-parameter tool with no annotations, the description is nearly complete: it covers the operation, non-destructive behavior, encoding tradeoffs, job mode, and all parameter meanings, and an output schema exists so return values need no elaboration. Minor gaps remain—no mention of output file naming/location or error edge cases like start > end—but these don't block correct invocation.

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 description coverage is 0%, so the description must compensate, and it does completely: all 5 parameters are documented with semantics—path relative to workspace, start/end in seconds, reencode for exact cut (slower), background returning a job_id. The 'Args' block adds real meaning beyond the bare schema property names and types.

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?

The description opens with a specific verb and resource: 'Corta o trecho entre start e end (segundos) e salva um novo arquivo', which precisely states that this tool trims a video segment and writes a new file. This clearly distinguishes it from siblings like extract_audio (audio extraction), extract_frame (single frame), concat_videos (joining), and detect_scenes (scene detection), so an agent can discriminate without inspecting schemas.

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 description gives strong usage context: it explains the default fast path (copy streams, cuts at nearest keyframe), when to switch to reencode=true (exact frame cut, slower), and when to use background=true (long videos) with job_status for monitoring. It lacks explicit exclusions naming sibling alternatives, but the parameter-mode guidance is clear and actionable.

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

delete_fileA

Apaga permanentemente um arquivo do workspace.

Use para limpar saídas intermediárias. Não há lixeira nem desfazer.

Args: path: Arquivo, relativo ao workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly warns 'Não há lixeira nem desfazer' (there is no trash or undo), which is critical for a destructive operation. This goes well beyond simply saying 'delete file.'

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?

The description is concise and well-structured: action first, usage second, parameter semantics last. Every sentence adds value, and the most important operational warning (permanence, no undo) is front-loaded.

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 one-parameter destructive tool, the description covers what the tool does, when to use it, the irreversible behavior, and the path semantics. An output schema exists, so return-value documentation is not needed. Nothing essential is missing.

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 input schema has 0% description coverage, so the description must compensate. It does so by defining 'path' as 'Arquivo, relativo ao workspace' (file, relative to the workspace), adding important meaning about path interpretation that the schema itself lacks. It could be slightly richer, but it is sufficient for the single required parameter.

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?

The description opens with a specific verb and resource: 'Apaga permanentemente um arquivo do workspace.' This clearly states the action, the target, and the permanent nature of the deletion, distinguishing it from the listed sibling tools that operate on media files or job status.

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?

It gives clear usage context: 'Use para limpar saídas intermediárias' (use to clean intermediate outputs). It does not explicitly mention alternatives or when not to use it, but since there is no other deletion tool among the siblings, the guidance is sufficient for selection.

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

detect_scenesA

Detecta mudanças de cena e devolve os intervalos de cada cena.

Use para decidir onde cortar. Percorre o vídeo inteiro, então em vídeos longos prefira background=true.

Args: path: Vídeo, relativo ao workspace. threshold: Sensibilidade entre 0 e 1. Menor detecta mais cenas. background: Executa como job e devolve job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
thresholdNo
backgroundNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden and does well: it discloses that the tool scans the full video, that long videos should use background mode, and that background=true returns a job_id. It does not mention blocking behavior or side effects, but the core behavioral profile is clearly conveyed.

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?

The description is compact and well-structured: a one-line function statement, a usage hint, and a concise parameter list. Every sentence earns its place and the most important guidance is front-loaded.

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 3-parameter tool with no annotations and an output schema available, the description is complete enough: it covers purpose, parameter semantics, and the important background-job path. The mention of job_id also informs the agent that follow-up with job_status/job_result may be needed, which fits the sibling set.

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 description coverage is 0%, so the description must fully document parameters. It does: path is relative to the workspace, threshold is a sensitivity value between 0 and 1 with lower values detecting more scenes, and background executes as a job returning job_id. This adds meaning well beyond the raw schema.

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?

The description states a specific action ('detect scene changes'), the resource (video), and the return value (scene intervals). The stated purpose 'decide where to cut' clearly differentiates it from siblings like cut_video and probe_video.

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 description explicitly says to use it 'para decidir onde cortar' and advises using background=true for long videos because it scans the entire video. It gives clear context but does not explicitly mention when not to use it or name alternative tools.

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

extract_audioA

Extrai a trilha de áudio de um vídeo para um arquivo separado.

Args: path: Vídeo, relativo ao workspace. audio_format: mp3, wav, aac ou flac. background: Executa como job e devolve job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
backgroundNo
audio_formatNomp3

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.9/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 burden. It does disclose the main output behavior and adds useful behavioral detail for the 'background' flag — running as a job and returning a job_id — but it does not mention output file naming, whether existing files are overwritten, or behavior for synchronous runs beyond implication.

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?

The one-sentence summary is front-loaded, and the Args block is compact and useful. Every line adds a distinct piece of information with no filler.

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

Completeness4/5

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

For a three-parameter tool with an output schema, the description covers the core workflow and all parameters. A small gap remains in not stating where the extracted audio file is written or that the non-background path runs synchronously, but this is minor given the output schema exists.

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 description coverage is 0%, so the description must compensate, and it does: 'path' is specified as video relative to the workspace, 'audio_format' lists the allowed values, and 'background' is explained as job execution returning a job_id. This is exactly the semantic information missing from the schema.

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?

The description opens with a specific action and object — 'Extracts the audio track from a video to a separate file' — which clearly distinguishes it from siblings like transcribe_audio, extract_frame, and probe_video. Even without explicitly naming alternatives, the purpose is unambiguous.

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 guidance is given about when to choose this over transcribe_audio, extract_frame, or other video tools. The usage context is only implied by the purpose statement, and no exclusions or alternatives are mentioned.

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

extract_frameA

Extrai um único frame do vídeo no instante informado e salva como imagem.

Útil para conferir visualmente o conteúdo antes de cortar.

Args: path: Vídeo, relativo ao workspace. time: Instante em segundos. image_format: png ou jpg.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
timeYes
image_formatNopng

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

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

No annotations are provided, so the description must carry behavioral context. It discloses that the tool creates/saves an image file and extracts content from a video, which communicates the primary side effect. It does not detail output file naming or overwrite behavior, but the core behavior is transparent enough.

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?

The description is compact and front-loaded with the main action, followed by a short use-case statement and parameter notes. Every sentence serves a purpose and no filler is present.

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

Completeness4/5

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

For a relatively simple extraction tool, the description covers purpose, parameter semantics, and the typical scenario. It could be more complete by mentioning where the image is saved or what the output schema contains, but it is still sufficient for an agent to select and invoke correctly.

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?

Schema description coverage is 0%, and the description compensates by explaining path as relative to the workspace and time as expressed in seconds. image_format only restates the enum values from the schema, so it adds some but not exceptional value.

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?

The description states a specific verb and resource: extracts a single frame from the video at a given instant and saves it as an image. It also hints at the intended use case ('before cutting'), which helps distinguish it from sibling tools like cut_video or detect_scenes.

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?

It provides clear context by saying this is useful for visually inspecting content before cutting. However, it does not explicitly mention when not to use it or name alternative sibling tools.

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

job_resultA

Obtém o resultado de um job que já terminou.

Retorna erro job_not_finished se ainda estiver rodando.

Args: job_id: Id devolvido pela tool que iniciou o job.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description must carry behavioral disclosure. It does disclose the error behavior for unfinished jobs, which is valuable. However, it does not mention whether retrieval is idempotent, whether results are consumed, or any side effects — acceptable for a simple result getter but not richly transparent.

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?

The description is three concise sentences, front-loaded with the core purpose, then the error case, then parameter guidance. Every sentence earns its place with no redundancy.

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

Completeness4/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 value details are already covered. The description covers the error condition, the ID source, and the completion requirement. It could be slightly more complete by referencing job_status for progress checks, but overall it is sufficient for a one-parameter tool.

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 schema only says 'Job Id', but the description adds meaning: 'Id devolvido pela tool que iniciou o job' clarifies that the ID comes from the initiating tool. This is useful guidance beyond the raw schema.

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?

The description clearly states the tool's purpose: 'Obtém o resultado de um job que já terminou' — retrieving the result of a completed job. This distinguishes it from siblings like job_status, which monitors progress.

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 description explicitly notes that calling it while the job is still running returns an error ('Retorna erro job_not_finished se ainda estiver rodando'). This serves as a when-not-to-use condition. It does not explicitly name an alternative like job_status for checking progress, so it falls short of a 5.

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

job_statusA

Informa se um job em background está pending, running, done ou failed.

Quando estiver done, chame job_result para obter a saída.

Args: job_id: Id devolvido pela tool que iniciou o job.

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations, the description carries the burden and it does disclose the possible status values plus the handoff to job_result. It does not mention polling or error behavior, but the presence of an output schema reduces the need to describe return structure.

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?

Three short, purposeful sentences: the core function, the conditional next step, and the parameter definition. No filler or repetitive restatement.

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 single-parameter status-check tool with an output schema, this description covers purpose, possible states, parameter origin, and related-tool flow. Nothing essential is missing for correct invocation.

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?

The schema provides zero parameter documentation (0% coverage), so the description is the sole source. It explains that job_id is the value returned by the tool that started the job, which is precisely the provenance information an agent needs to fill the parameter correctly.

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?

The description states a specific action — informing whether a background job is pending, running, done, or failed — and distinguishes job_status from the sibling job_result by indicating that job_result is the follow-up for output. This makes the tool's role unambiguous.

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

Usage Guidelines5/5

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

It explicitly names the alternative tool (job_result) and the exact condition for switching to it: when the status is done. This gives the agent a clear when-to-use/next-step rule without requiring inference.

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

list_filesA

Lista os arquivos disponíveis no workspace.

Chame primeiro para descobrir com o que trabalhar. Não altera nada.

Args: directory: Subdiretório do workspace. Raiz por padrão. kind: Filtra por tipo: video, audio, image ou other. recursive: Inclui subdiretórios.

ParametersJSON Schema
NameRequiredDescriptionDefault
kindNo
directoryNo.
recursiveNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It explicitly states 'Não altera nada' (doesn't change anything), which is essential for an agent to know the operation is safe and non-destructive. This goes beyond what a simple list operation might imply and adds meaningful transparency.

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?

The description is compact and well-structured: purpose first, followed by a usage hint and a non-destructive guarantee, then a clean bulleted list of parameters. Every sentence adds value, and the information is front-loaded for quick agent scanning.

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 low-complexity listing tool with an output schema, the description covers everything needed to call it correctly: what it does, when to use it, that it's non-destructive, and what each parameter means. The presence of an output schema reduces the need to describe return values. There are no meaningful gaps.

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 description coverage is 0%, but the description provides clear semantics for all three parameters: directory is the workspace subdirectory (root by default), kind filters by type, and recursive includes subdirectories. This fully compensates for the schema's lack of descriptions and makes the defaults unambiguous.

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?

The description states a specific action and resource: 'Lista os arquivos disponíveis no workspace' (lists available files in the workspace). It clearly identifies the tool as a discovery/listing operation and distinguishes it from the sibling processing, deletion, and job-management tools.

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 instruction 'Chame primeiro para descobrir com o que trabalhar' explicitly tells the agent to call this tool first to learn what files exist. This provides clear usage context, though it does not explicitly mention alternatives or when not to use it. The sibling tool list makes the differentiation obvious.

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

probe_videoA

Lê duração, resolução, fps, codecs e tamanho de um vídeo.

Use antes de cortar ou concatenar para conhecer o arquivo. Não altera nada.

Args: path: Caminho do vídeo, relativo ao workspace.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It explicitly states 'Não altera nada', which directly communicates that the operation is non-destructive. It also specifies the data read (duration, resolution, fps, codecs, size), giving a transparent picture of what the tool does. The output schema exists to cover the exact return structure, so the description need not repeat those details.

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?

The description is compact and efficiently structured: a one-line summary of output fields, a clear usage directive, a non-destructive note, and a simple Args block. Every sentence earns its place with no redundant filler. Important information is front-loaded, making it easy for an agent to scan.

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 simple one-parameter, read-only probing tool, the description covers all essential aspects: what it reads, when to use it, that it changes nothing, and how the path argument is interpreted. The presence of an output schema means return values are already declared structurally. There are no significant missing pieces given the tool's complexity.

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 description coverage is 0%, and the tool has one required parameter with no schema-level description. The description compensates fully by documenting 'path: Caminho do vídeo, relativo ao workspace', which adds critical semantics about the path being workspace-relative. For a single-parameter tool, this is complete and adds meaning beyond the bare schema declaration.

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?

The description starts with a clear, specific verb and resource: 'Lê duração, resolução, fps, codecs e tamanho de um vídeo' — it enumerates exactly what the tool reads. This differentiates it from siblings like cut_video or concat_videos by focusing on metadata probing rather than manipulation. The purpose is unambiguous and the tool name is reinforced without being a tautology.

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 description explicitly says to use the tool before cutting or concatenating to know the file, which gives clear contextual placement among the sibling operations. It does not explicitly name alternatives or state when not to use it, but the primary use case is well defined. This is a clear context with no exclusions, matching a score of 4 rather than 5.

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

transcribe_audioA

Transcreve a fala de um áudio ou vídeo, com tempos de cada trecho.

Combine com cut_video para cortar por conteúdo falado. É lento, por isso roda em background por padrão.

Args: path: Áudio ou vídeo, relativo ao workspace. model_size: Modelo whisper: tiny, base, small, medium ou large-v3. language: Código do idioma (pt, en). Detecta automaticamente se omitido. background: Executa como job e devolve job_id.

ParametersJSON Schema
NameRequiredDescriptionDefault
pathYes
languageNo
backgroundNo
model_sizeNobase

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations provided, the description carries the full behavioral burden and does well: it discloses that the operation is slow, runs as a background job by default, returns timestamps, and can auto-detect language. It could add more detail about job lifecycle or blocking behavior when background=false, but the key traits an agent needs are present.

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?

The description is compact and front-loaded: purpose first, then collaboration guidance, then the important performance/background note, then concise parameter definitions. Every sentence adds value and nothing is redundant with the schema.

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 4-parameter transcription tool with an output schema present, the description covers the required input semantics, the behavioral caveats, and the relevant sibling collaboration. An agent has enough information to call the tool correctly and interpret the background-job behavior.

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 description coverage is 0%, so the description must compensate, and it does thoroughly: path is specified as relative to workspace, model_size enumerates the available Whisper options, language gives example codes and clarifies auto-detection, and background is explained as running as a job and returning job_id. Every parameter gains meaning beyond the raw schema.

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?

The description opens with a specific verb and resource: 'Transcreve a fala de um áudio ou vídeo, com tempos de cada trecho,' making it clear this tool produces a timestamped transcript. It also distinguishes itself from sibling tools by positioning it as the companion to cut_video for content-based cutting, so an agent can tell it apart from tools like probe_video or extract_audio.

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 description gives clear usage context: use it to transcribe speech and combine it with cut_video when cutting by spoken content. It also warns that the tool is slow and therefore runs in background by default, helping an agent set expectations. It does not explicitly name when-not-to-use alternatives, but no direct alternative transcription tool exists among the siblings.

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. 11 tool updatesv0.1.0
    • First observedconcat_videos
    • First observedcut_video
    • First observeddelete_file
    • First observeddetect_scenes
    • First observedextract_audio
    • First observedextract_frame
    • First observedjob_result
    • First observedjob_status
    • First observedlist_files
    • First observedprobe_video
    • First observedtranscribe_audio

TDQS

A4.4/5.0

Scored across 11 tools

Disambiguation5/5

Each tool targets a distinct operation: audio extraction, transcription, video probing, cutting, concatenation, scene detection, frame extraction, file listing/deletion, and job status/result retrieval. There is no meaningful overlap that would cause an agent to select the wrong tool.

Naming Consistency5/5

All tool names follow the snake_case verb_noun convention (extract_audio, cut_video, detect_scenes, list_files, delete_file) except job_status and job_result, which are noun_noun but still clearly patterned and consistent with the job subsystem. The style is uniform and predictable.

Tool Count5/5

11 tools is well within the ideal range for a focused media-processing server. Each tool covers a distinct need in the workflow: file discovery, inspection, editing, extraction, cleanup, and async job handling. No tool feels redundant or unnecessary.

Completeness4/5

The tool surface covers the core video/audio processing lifecycle: inspect, cut, concat, detect scenes, extract audio/frame, and transcribe, plus file and job management. Minor gaps exist such as no job cancellation or listing, and no upload tool, but these do not block the primary workflows.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers