Skip to main content
Glama
gnome-screencast-mcp

gnome-screencast-mcp

by quinho981

gnome-screencast-mcp

Gravação de tela no GNOME, controlada por linha de comando ou por um agente de IA via MCP.

Usa o gravador nativo do GNOME Shell (a interface D-Bus org.gnome.Shell.Screencast, a mesma por trás do atalho Ctrl+Alt+Shift+R). Não depende de ffmpeg, wf-recorder nem de qualquer binário externo de captura.

Para que serve

Automatizar gravações de tela sem tocar na interface gráfica: demonstrações, evidências de bug, documentação de fluxos, registro de sessões de teste. Como cada comando devolve JSON, serve tanto para scripts quanto para um agente que precisa gravar o que está fazendo.

O problema que ele resolve: chamar o D-Bus do GNOME diretamente não funciona para gravar. O Shell encerra a gravação assim que o cliente D-Bus que a iniciou sai do barramento, então um gdbus call avulso produz um arquivo com um único quadro e duração 0:00. A solução aqui é um processo auxiliar que mantém a conexão aberta durante toda a gravação e a encerra de forma limpa no stop — só assim o WebM sai com duração e índice corretos.

Related MCP server: screen-recorder-mcp

Instalação

Nada para clonar nem compilar. Quatro passos, do zero ao primeiro vídeo gravado.

Ainda não está no PyPI. Por enquanto o uv instala direto deste repositório no GitHub — funciona igual, só o comando é um pouco mais longo. Assim que publicarmos no PyPI, gnome-screencast-mcp sozinho basta; os dois viram intercambiáveis.

Passo 1 — confira os requisitos

Requisito

Por quê

Verificar

GNOME Shell, sessão gráfica ativa (Wayland ou X11)

É o próprio GNOME que grava; testado no GNOME Shell 42

gnome-shell --version

PyGObject (python3-gi)

Mantém viva a conexão D-Bus durante a gravação; não instala via pip

python3 -c "import gi" — se der erro: sudo apt install python3-gi

uv

Instala e roda o pacote, sem venv manual

uv --version — se faltar: curl -LsSf https://astral.sh/uv/install.sh | sh

Se as três passarem sem erro, siga para o passo 2.

Passo 2 — instale

uv tool install --from git+https://github.com/quinho981/gnome-screencast-mcp gnome-screencast-mcp

Isso põe três executáveis no seu PATH:

Executável

Papel

gnome-screencast-start

Inicia a gravação pela linha de comando.

gnome-screencast-stop

Encerra a gravação pela linha de comando.

gnome-screencast-mcp

Servidor MCP (transporte stdio) — é o que um agente de IA chama.

Se o terminal avisar que o diretório de instalação não está no PATH, rode o comando que ele mesmo sugere (geralmente uv tool update-shell) e abra um terminal novo.

Passo 3 — teste

gnome-screencast-start && sleep 3 && gnome-screencast-stop

Deve sair um JSON com "status": "recording", uma pausa de 3 segundos, e outro JSON com "status": "stopped" e duration_seconds perto de 3. Se saiu isso, está tudo funcionando — o arquivo .webm ficou no seu diretório de vídeos.

Deu errado? Vá direto para Problemas comuns.

Passo 4 — escolha como usar

  • Pela linha de comando: já está pronto — veja Uso pela linha de comando para as opções de -o, -f, -a.

  • Por um agente de IA (Claude Code, Cursor, opencode, etc.): falta registrar o servidor MCP no seu cliente — veja Uso via MCP, que tem o passo a passo de cada um.

Sem passos: só quer o MCP funcionando num agente

Se o único uso é MCP, não precisa instalar nada à mão — o próprio cliente baixa o pacote na hora de rodar. Confira os requisitos do passo 1, pule os passos 2 e 3, e vá direto para Uso via MCP.

Desenvolvendo o próprio projeto

Só para quem vai alterar este repositório:

git clone https://github.com/quinho981/gnome-screencast-mcp
cd gnome-screencast-mcp
uv run gnome-screencast-mcp        # servidor MCP a partir do código local
bash bin/start-recording.sh        # scripts de gravação, sem instalar nada
bash bin/stop-recording.sh

Estrutura

Arquivo

Papel

bin/start-recording.sh

Inicia a gravação. Imprime JSON e retorna na hora.

bin/stop-recording.sh

Encerra e espera o arquivo ser finalizado.

bin/recorder-daemon.py

Processo auxiliar que segura a conexão D-Bus. Não chame direto.

gnome_screencast_mcp/server.py

Servidor MCP; converte chamadas de ferramenta em execuções dos scripts.

gnome_screencast_mcp/cli.py

Executáveis gnome-screencast-start e -stop de uma instalação.

.mcp.json

Registro do servidor MCP para quem abrir este projeto no Claude Code.

Os scripts ficam em bin/ para continuarem utilizáveis direto de um clone; o build do wheel os copia para dentro do pacote, e o servidor os encontra nos dois lugares.

Uso pela linha de comando

# Tela inteira, 30 fps, arquivo com data e hora em ~/Vídeos
gnome-screencast-start

# ... faça o que precisa ser gravado ...

gnome-screencast-stop

Num clone, os equivalentes são bash bin/start-recording.sh e bash bin/stop-recording.sh.

O start devolve o caminho do arquivo assim que a gravação começa:

{
  "status": "recording",
  "file": "/home/user/Vídeos/screencast-20260824-152940.webm",
  "mode": "screen",
  "framerate": 30,
  "draw_cursor": true,
  "started_at": "2026-08-24T15:29:40-0300",
  "pid": 183615
}

E o stop, o resumo do que foi gravado:

{
  "status": "stopped",
  "file": "/home/user/Vídeos/screencast-20260824-152940.webm",
  "size_bytes": 361637,
  "duration_seconds": 4.488
}

Opções do start

Opção

Efeito

-o, --output ARQUIVO

Caminho do .webm de saída. Não pode conter %.

-f, --framerate N

Quadros por segundo (padrão: 30).

-a, --area X Y L A

Grava só a região retangular informada, em pixels.

-c, --no-cursor

Não desenha o ponteiro do mouse.

Exemplo — canto superior esquerdo, 1280×720, 60 fps, sem cursor:

gnome-screencast-start -a 0 0 1280 720 -f 60 --no-cursor -o /tmp/demo.webm

Opções do stop

Opção

Efeito

-t, --timeout N

Segundos de espera até o arquivo ser finalizado (padrão: 20).

-q, --quiet

Não imprime o JSON de resultado.

Códigos de saída

Ambos os comandos usam 0 para sucesso e 1 para erro de uso ou de ambiente. Além disso:

  • start: 2 já existe uma gravação em andamento · 3 o GNOME Shell recusou iniciar

  • stop: 2 nenhuma gravação em andamento · 3 o arquivo não foi finalizado a tempo

Uso via MCP

Registrar o servidor faz a gravação virar uma capacidade do agente: ele chama start_recording e stop_recording como ferramentas tipadas, sem precisar de acesso ao shell.

Ferramentas expostas

Ferramenta

O que faz

start_recording(output?, framerate=30, draw_cursor=true, area?)

Inicia e retorna na hora. area é [x, y, largura, altura].

stop_recording(timeout=20)

Encerra e devolve caminho, tamanho e duração.

recording_status()

idle, recording (com elapsed_seconds) ou stale.

recording_status é a forma barata de checar antes de agir — evita tentar iniciar uma gravação que já existe, ou parar uma que não existe.

O comando, em qualquer cliente

O servidor é um processo stdio comum, e o comando é o mesmo em toda parte:

comando:    uvx
argumentos: gnome-screencast-mcp

Se você fez uv tool install, o comando é só gnome-screencast-mcp, sem argumentos.

Enquanto o pacote não estiver no PyPI, use esta lista de argumentos em vez de ["gnome-screencast-mcp"] em todos os exemplos abaixo:

["--from", "git+https://github.com/quinho981/gnome-screencast-mcp", "gnome-screencast-mcp"]

Assim que o pacote for publicado, volte para a forma curta — os exemplos já estão escritos nela.

Duas coisas quebram configurações que parecem certas:

  1. uvx pode não estar no PATH do cliente. Clientes iniciados por um lançador gráfico (Cursor, VS Code, Zed, Claude Desktop) costumam herdar um PATH mínimo, sem ~/.local/bin. Se o servidor falhar com uvx: command not found, troque uvx pela saída de command -v uvx — normalmente /home/<seu-usuário-do-sistema>/.local/bin/uvx.

  2. A gravação precisa do barramento da sessão. O D-Bus do GNOME é alcançado através de DBUS_SESSION_BUS_ADDRESS e XDG_RUNTIME_DIR. Um cliente lançado dentro da sua sessão gráfica já as herda. Um cliente em contêiner, snap, flatpak ou sessão SSH, não — nesse caso declare as duas no bloco env do servidor:

    "env": {
      "DBUS_SESSION_BUS_ADDRESS": "unix:path=/run/user/1000/bus",
      "XDG_RUNTIME_DIR": "/run/user/1000"
    }

    Os valores corretos para a sua máquina saem de echo $DBUS_SESSION_BUS_ADDRESS $XDG_RUNTIME_DIR num terminal da sessão gráfica.

Claude Code

claude mcp add screen-recorder --scope user \
  -- uvx --from git+https://github.com/quinho981/gnome-screencast-mcp gnome-screencast-mcp

Depois de publicado no PyPI, simplifica para -- uvx gnome-screencast-mcp.

Reinicie a sessão e confirme com /mcp que screen-recorder aparece conectado.

Dentro deste repositório não é preciso nem isso: o .mcp.json versionado aqui já registra o servidor a partir do código local — basta aprová-lo ao abrir o diretório.

Codex CLI

codex mcp add screen-recorder \
  -- uvx --from git+https://github.com/quinho981/gnome-screencast-mcp gnome-screencast-mcp

Depois de publicado no PyPI, simplifica para -- uvx gnome-screencast-mcp.

Ou à mão, em ~/.codex/config.toml:

[mcp_servers.screen-recorder]
command = "uvx"
args = ["gnome-screencast-mcp"]

opencode

Em opencode.json na raiz do seu projeto, ou em ~/.config/opencode/opencode.json para valer em todos:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "screen-recorder": {
      "type": "local",
      "enabled": true,
      "command": ["gnome-screencast-mcp"]
    }
  }
}

Isso pressupõe o uv tool install do passo 2 da instalação — o comando é só o nome do executável, já resolvido pelo PATH. O opencode marca o servidor como falho (e reverte enabled para false sozinho) se o comando não sobe de primeira, e uvx gnome-screencast-mcp cai nesse caso enquanto o pacote não estiver no PyPI: cada chamada tentaria resolvê-lo ali e falharia. Se preferir não instalar de vez, a forma que funciona sem instalar é a mesma nota de git+ dos outros clientes:

"command": ["uvx", "--from", "git+https://github.com/quinho981/gnome-screencast-mcp", "gnome-screencast-mcp"]

O opencode é o único caso em que o comando é uma lista única, e não um command separado dos args.

Cursor

Em ~/.cursor/mcp.json (global) ou .cursor/mcp.json (só naquele projeto):

{
  "mcpServers": {
    "screen-recorder": {
      "command": "uvx",
      "args": ["gnome-screencast-mcp"]
    }
  }
}

O Cursor é lançado pelo ambiente gráfico: se ele não conectar, o motivo mais provável é o PATH sem uvx. Veja o item 1 de O comando, em qualquer cliente.

Gemini CLI

gemini mcp add screen-recorder \
  uvx --from git+https://github.com/quinho981/gnome-screencast-mcp gnome-screencast-mcp

Depois de publicado no PyPI, simplifica para uvx gnome-screencast-mcp.

Ou à mão, em ~/.gemini/settings.json (global) ou .gemini/settings.json (por projeto), no mesmo formato mcpServers mostrado para o Cursor.

VS Code (GitHub Copilot)

Em .vscode/mcp.json no projeto. Repare que a chave é servers, não mcpServers, e que o tipo é explícito:

{
  "servers": {
    "screen-recorder": {
      "type": "stdio",
      "command": "uvx",
      "args": ["gnome-screencast-mcp"]
    }
  }
}

Windsurf

Em ~/.codeium/windsurf/mcp_config.json, no mesmo formato mcpServers do Cursor.

Zed

No settings.json do Zed, sob context_servers:

{
  "context_servers": {
    "screen-recorder": {
      "source": "custom",
      "command": "uvx",
      "args": ["gnome-screencast-mcp"],
      "env": {}
    }
  }
}

Claude Desktop

No Linux, em ~/.config/Claude/claude_desktop_config.json, no mesmo formato mcpServers do Cursor. O app precisa ser reiniciado por completo depois da edição.

Outros clientes

Se o seu cliente não estiver listado, procure na documentação dele onde ficam os "MCP servers" e informe o comando uvx com o argumento gnome-screencast-mcp. Na prática só há duas variações de formato em todo o ecossistema: o par command + args separados (a maioria) e o command como lista única (opencode).

Sem uv

O pacote é um projeto Python comum e o pip dá conta:

pip install --user git+https://github.com/quinho981/gnome-screencast-mcp

(Depois de publicado no PyPI: pip install --user gnome-screencast-mcp.)

O comando do cliente passa a ser gnome-screencast-mcp, sem argumentos. Um ambiente virtual dedicado também funciona — nesse caso aponte para o executável de dentro dele; o servidor remove o próprio venv do PATH que repassa aos scripts, então eles continuam achando o PyGObject do sistema.

Testar o servidor sem um cliente

Antes de brigar com a configuração de um agente, vale confirmar que o servidor sobe:

printf '%s\n' \
  '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' \
  '{"jsonrpc":"2.0","method":"notifications/initialized"}' \
  '{"jsonrpc":"2.0","id":2,"method":"tools/list"}' \
  | uvx --from git+https://github.com/quinho981/gnome-screencast-mcp gnome-screencast-mcp

(Depois de publicado no PyPI, uvx gnome-screencast-mcp sozinho já basta.)

Deve sair a resposta do initialize seguida das três ferramentas. Na primeira execução o uvx também imprime uma linha de instalação em stderr.

Como funciona

start-recording.sh
  └─ setsid recorder-daemon.py        (sobrevive ao script que o criou)
       ├─ D-Bus: Screencast(...)      → o GNOME Shell começa a gravar
       ├─ escreve o estado em $XDG_RUNTIME_DIR/screen-recorder/current.json
       └─ fica vivo, segurando a conexão, até receber SIGTERM

stop-recording.sh
  └─ SIGTERM no pid do estado
       └─ daemon: D-Bus StopScreencast pela mesma conexão
            └─ espera o GStreamer fechar o WebM e escreve o resumo final

O arquivo de estado garante que só exista uma gravação por vez — limite do próprio GNOME Shell, que suporta uma sessão de screencast simultânea.

Se o daemon morrer sem limpar (por exemplo, num logout), o arquivo de estado fica órfão: recording_status reporta stale e o próximo start_recording o remove sozinho.

Detalhes de implementação

Três armadilhas que o pacote precisa contornar:

  • Captura de saída. O servidor executa os scripts com a saída redirecionada para arquivos temporários, não para pipes. O daemon herda os descritores de saída, então um pipe só veria EOF no fim da gravação — e a chamada de start_recording travaria até lá.

  • Ambiente Python. Instalado, o servidor roda dentro de um ambiente virtual, que fica no início do PATH. Os scripts passariam a resolver python3 para ele, onde o PyGObject do sistema não existe. O servidor remove o venv do ambiente que os scripts herdam.

  • Bit de execução. Os scripts são invocados como bash script.sh e o daemon como python3 daemon.py, nunca diretamente: a permissão de execução não sobrevive de forma confiável ao empacotamento em wheel.

Problemas comuns

PyGObject não encontrado — instale com sudo apt install python3-gi. Se aparecer só ao usar o MCP e não na linha de comando, o venv está vazando para o PATH dos scripts.

O agente não lista as ferramentas — o servidor nem chegou a subir. Rode o teste de Testar o servidor sem um cliente; se ele passar, o problema está na configuração do cliente, quase sempre no uvx fora do PATH (item 1 de O comando, em qualquer cliente).

o GNOME Shell recusou iniciar a gravação — normalmente não há sessão GNOME acessível. O servidor MCP herda o ambiente de quem o iniciou, e o D-Bus precisa de DBUS_SESSION_BUS_ADDRESS e XDG_RUNTIME_DIR. Se o cliente MCP rodar num ambiente confinado (contêiner, snap, flatpak, serviço, SSH), declare as duas variáveis no bloco env do servidor — veja o item 2 de O comando, em qualquer cliente.

gravação já em andamento — chame stop_recording, ou gnome-screencast-stop. Para inspecionar o estado à mão: cat $XDG_RUNTIME_DIR/screen-recorder/current.json.

Vídeo com duração 0:00 — sinal de que a gravação foi iniciada por fora destes comandos, com um cliente D-Bus que não sobreviveu. Use o gnome-screencast-start.

Log do processo auxiliar: $XDG_RUNTIME_DIR/screen-recorder/daemon.log.

Licença

MIT — veja LICENSE.

Publicar uma versão

uv build          # gera dist/*.whl e dist/*.tar.gz
uv publish        # envia ao PyPI

A versão fica em pyproject.toml.

Available Tools

3 tools
recording_statusA

Informa se há uma gravação em andamento.

Returns: Um dos três estados: "idle" (nenhuma gravação), "recording" (com o estado da gravação e há quantos segundos ela corre) ou "stale" (restou um arquivo de estado de um processo que morreu; a próxima chamada a start_recording o remove sozinha).

NameRequiredDescriptionDefault

No parameters

TDQS

A4/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 behavioral burden and covers the key ground: all three possible states, what 'stale' means, and how the stale file will be removed on the next start_recording. It does not explicitly promise that the call is side-effect-free, but the verb 'Informa' implies a read-only status check.

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 front-loaded with a one-line purpose and then gives a compact Returns block covering every possible outcome. There is no filler or redundancy, and every sentence adds meaningful information.

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 no-parameter tool with no annotations and no output schema, this description is complete: it defines each return state, the meaning of 'stale', and the recovery behavior. An agent can confidently invoke it and interpret the result 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?

The tool has zero parameters, and the schema already documents this completely with 0 properties. The description correctly avoids inventing parameter-level detail, which matches the baseline for a 0-parameter tool.

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 first sentence states the tool's purpose and domain ('Informa se há uma gravação em andamento'), and the Returns section enumerates exactly what it reports. It is clear enough to distinguish from the start/stop siblings, but it never explicitly names the sibling alternatives.

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?

Usage is implied rather than stated: this is clearly the state-checking tool alongside start_recording and stop_recording, and it mentions that start_recording handles stale state. However, it gives no explicit 'use this when...' or 'do not use this to start/stop' guidance.

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

start_recordingA

Inicia uma gravação de tela e devolve imediatamente.

A gravação continua em segundo plano até stop_recording ser chamado. Só uma gravação pode existir por vez.

Args: output: caminho do arquivo .webm de saída. Por padrão, um arquivo com data e hora no diretório de vídeos do usuário. Não pode conter '%'. framerate: quadros por segundo. draw_cursor: se False, o ponteiro do mouse não aparece na gravação. area: região retangular a gravar, como [x, y, largura, altura] em pixels. Por padrão, grava a tela inteira.

Returns: Estado da gravação, incluindo o caminho do arquivo e o pid do processo auxiliar que a mantém viva.

NameRequiredDescriptionDefault
areaNo
outputNo
framerateNo
draw_cursorNo

TDQS

A4.8/5.0
Behavior5/5

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

There are no annotations, so the description carries the full behavioral disclosure burden. It does so thoroughly by saying the call returns immediately, recording continues in the background, only one recording can exist, and the return includes the file path and the PID of the helper process keeping it alive.

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: it opens with the core behavior, then provides a compact Args section and a Returns note. Every sentence contributes meaningful information with no filler or redundancy.

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 an asynchronous operation with no annotations or output schema, the description is highly complete. It explains when to call it, how it runs, when it stops, what parameters matter, and what the return value contains. The only omitted detail is error behavior when a recording already exists, but the single-recording constraint makes that outcome interpretable.

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 compensates completely: output is explained with .webm, default timestamped location, and the '%' restriction; framerate is given units; draw_cursor behavior is described; and area is defined as [x, y, width, height] pixels with a full-screen default.

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 first sentence clearly states the operation: it starts a screen recording and returns immediately. It also frames the recording's lifecycle relative to stop_recording, making it distinct from the sibling tools stop_recording and recording_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?

The description provides strong lifecycle guidance: the recording continues in the background until stop_recording is called, and only one recording can exist at a time. It does not explicitly mention when to prefer recording_status over start_recording, so it falls just short of full alternative-routing guidance.

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

stop_recordingA

Encerra a gravação em andamento e espera o arquivo ser finalizado.

Só retorna depois que o WebM está completo — com duração e índice escritos.

Args: timeout: segundos de espera até o processo auxiliar fechar o arquivo.

Returns: Resumo da gravação: caminho, tamanho em bytes e duração em segundos.

NameRequiredDescriptionDefault
timeoutNo

TDQS

A4.2/5.0
Behavior4/5

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

The description clearly states that the method blocks until the WebM file is finalized, including duration and index metadata, and that the timeout parameter controls waiting. It also discloses the return value with path, size, and duration. With no annotations provided, this is strong behavioral disclosure, though timeout failure behavior is not described.

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 short, structured, and front-loaded with the main behavior before diving into parameter and return details. Every sentence adds relevant information with no redundancy or 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?

The tool is simple: one optional parameter and no output or input schema beyond the timeout. The description explains what the tool does, how it behaves, what the timeout means, and what the return value contains. The only missing detail is what happens when the timeout expires—whether it raises an error, returns partial data, or still returns a summary. This is a meaningful but minor gap in an otherwise complete description.

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 only provides the parameter name and default value, and schema description coverage is 0%. The description compensates by explaining that timeout is the number of seconds to wait for the auxiliary process to close the file. This is enough for an agent to know how to set it appropriately.

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 action (end current recording), a specific resource (the recording in progress), and key behavioral constraints (waits for the WebM to be complete). The function is clearly distinct from its siblings start_recording and recording_status.

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 clearly implies this is the operation to stop a recording after start_recording has begun, but it does not explicitly mention alternatives or conditions for when recording_status might be preferable. An agent can infer the correct use case, though the guidance is not explicit.

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. 3 tool updatesv0.1.0
    • First observedrecording_status
    • First observedstart_recording
    • First observedstop_recording

TDQS

A4.4/5.0

Scored across 3 tools

Disambiguation5/5

Start, stop, and status are three clearly distinct lifecycle operations with no overlap. An agent can easily tell them apart based on name and description.

Naming Consistency4/5

start_recording and stop_recording follow the verb_noun pattern consistently, while recording_status is slightly inconsistent as a noun phrase rather than get_recording_status. Overall the naming is still predictable and readable.

Tool Count5/5

Three tools is the right size for the server's single-purpose scope: start, stop, and query status. Each tool fills an essential role without redundancy.

Completeness5/5

The screen-recording lifecycle is fully covered: start, stop, and monitor status. The stale-state handling also addresses the natural failure case, making the surface complete for the stated domain.

Maintenance

ActivityStale
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    A
    quality
    D
    maintenance
    Enables LLMs to capture screenshots and screen recordings through MCP with chunked session-based transfers for reliable image consumption. Supports multi-monitor selection, timeline capture, and compatibility with both vision and non-vision language models.
    11
    1
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables AI agents to create and manage macOS screen recordings through a semantic demo plan, including permission checks, source listing, and durable recording jobs.
    15 npm
    Apache 2.0