gnome-screencast-mcp
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
uvinstala direto deste repositório no GitHub — funciona igual, só o comando é um pouco mais longo. Assim que publicarmos no PyPI,gnome-screencast-mcpsozinho 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 |
|
PyGObject ( | Mantém viva a conexão D-Bus durante a gravação; não instala via pip |
|
Instala e roda o pacote, sem venv manual |
|
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-mcpIsso põe três executáveis no seu PATH:
Executável | Papel |
| Inicia a gravação pela linha de comando. |
| Encerra a gravação pela linha de comando. |
| 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-stopDeve 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.shEstrutura
Arquivo | Papel |
| Inicia a gravação. Imprime JSON e retorna na hora. |
| Encerra e espera o arquivo ser finalizado. |
| Processo auxiliar que segura a conexão D-Bus. Não chame direto. |
| Servidor MCP; converte chamadas de ferramenta em execuções dos scripts. |
| Executáveis |
| 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-stopNum 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 |
| Caminho do |
| Quadros por segundo (padrão: 30). |
| Grava só a região retangular informada, em pixels. |
| 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.webmOpções do stop
Opção | Efeito |
| Segundos de espera até o arquivo ser finalizado (padrão: 20). |
| 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:2já existe uma gravação em andamento ·3o GNOME Shell recusou iniciarstop:2nenhuma gravação em andamento ·3o 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 |
| Inicia e retorna na hora. |
| Encerra e devolve caminho, tamanho e duração. |
|
|
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-mcpSe 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:
uvxpode não estar noPATHdo cliente. Clientes iniciados por um lançador gráfico (Cursor, VS Code, Zed, Claude Desktop) costumam herdar umPATHmínimo, sem~/.local/bin. Se o servidor falhar comuvx: command not found, troqueuvxpela saída decommand -v uvx— normalmente/home/<seu-usuário-do-sistema>/.local/bin/uvx.A gravação precisa do barramento da sessão. O D-Bus do GNOME é alcançado através de
DBUS_SESSION_BUS_ADDRESSeXDG_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 blocoenvdo 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_DIRnum 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-mcpDepois 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-mcpDepois 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-mcpDepois 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 finalO 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_recordingtravaria até lá.Ambiente Python. Instalado, o servidor roda dentro de um ambiente virtual, que fica no início do
PATH. Os scripts passariam a resolverpython3para 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.she o daemon comopython3 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 PyPIA versão fica em pyproject.toml.
Available Tools
3 toolsrecording_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).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| area | No | ||
| output | No | ||
| framerate | No | ||
| draw_cursor | No |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| timeout | No |
TDQS
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.
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.
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.
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.
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.
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.
3 tool updates
v0.1.0- First observed
recording_status - First observed
start_recording - First observed
stop_recording
TDQS
Scored across 3 tools
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.
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.
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.
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
Related MCP Connectors
214 tools for AI agents over one MCP endpoint: image, video, audio, 3D, data, storage, mail, GPUs.
MCP server for Clipkit — gives AI agents a video toolbox via the Clipkit schema.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Web scraping, browser automation, screenshots and AI data extraction for AI agents via MCP.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables 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.111-
- AlicenseAqualityDmaintenanceEnables AI agents to start and stop full-screen recordings on macOS using FFmpeg, with control over quality, FPS, and audio.5MIT
- AlicenseAqualityDmaintenanceEnables LLMs to capture desktop screenshots and control the mouse and keyboard on Linux, including Wayland, through MCP.11MIT
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to create and manage macOS screen recordings through a semantic demo plan, including permission checks, source listing, and durable recording jobs.15 npmApache 2.0