Nota · mcp
Deixei meu agente de IA gravar as próprias demos
Eu queria que meu agente de IA me entregasse um vídeo da feature que acabou de fazer, sem eu abrir o OBS. Um servidor MCP pequeno grava a janela de um app e deixa de fora tudo o que estiver por cima, e um app de desktop mostra quando a IA está gravando.
Toda vez que meu agente termina uma feature, caio no mesmo ritual. Abro o OBS, enquadro a janela, fecho o Slack para nada aparecer no canto, rodo a coisa, aperto gravar e depois corto o começo em que ainda estou procurando o mouse. Tudo isso para provar que alguns minutos de trabalho fazem o que dizem.
Eu queria que o agente fizesse essa parte. Ele termina, eu falo "grava o app", e um vídeo limpo daquela janela aparece numa pasta. Sem notificação deslizando, sem janela de chat arrastada no meio, sem o resto da minha área de trabalho.
Isso é o screen-recorder-mcp, um servidor pequeno que qualquer cliente MCP consegue chamar. Ele grava uma janela de app, um pedaço dela ou um monitor inteiro. Verifiquei no Windows; o backend de macOS está escrito, mas é experimental, porque não tenho um Mac para rodar.
Um gravador de tela copia o que está na tela
Esse é todo o problema de entregar um gravador comum a um agente. O que estiver por cima do app naquele instante vai parar no vídeo. Para ter uma gravação limpa eu precisaria manter a área de trabalho arrumada enquanto o agente trabalha, e o agente não enxerga a minha área de trabalho. Ele não tem como conferir que não há nada na frente. Gravar uma região da tela tem o mesmo defeito, porque uma região da tela não é a janela do app.
Então a pergunta mudou. Em vez de perguntar à tela o que ela mostra, perguntar ao app como ele está.
Pergunte à janela, não à tela
Os dois sistemas sabem fazer isso. O Windows Graphics Capture e o ScreenCaptureKit do macOS leem a superfície própria da janela direto do compositor, antes de ela ser combinada com todo o resto da tela. Uma janela arrastada por cima do app nunca chega a essa superfície.

Para ter certeza de que eu não estava me enganando, o repositório tem um script que coloca uma janela vermelha por cima do app durante três segundos enquanto grava e depois conta os pixels vermelhos dos quadros do resultado, na janela inteira e num pedaço recortado. No Windows ele passa: a janela que cobre nunca chega ao vídeo.
O lado Windows se apoia no pacote windows-capture, que me entregou os quadros. O que adicionei em volta foi o ritmo dos quadros, o recorte, o áudio e a camada MCP.
Uma janela parada ainda precisa virar vídeo
Receber quadros levou direto à próxima surpresa. As duas APIs de captura só mandam um quadro quando a janela muda. Aponte para uma página que não se mexe e uma gravação de dez segundos sai com uma fração de segundo.
O servidor guarda o último quadro e o reenvia num relógio fixo, 30 por segundo por padrão, então esperar também conta como tempo. O resultado é um MP4 com taxa de quadros constante, que toca na velocidade em que as coisas aconteceram.

O agente pergunta, você arrasta
Às vezes a janela inteira é demais. O servidor instrui o agente a perguntar se quero a janela toda ou só uma parte. Se for uma parte, abre uma camada sobre o app, eu arrasto um retângulo e aperto Enter. Esc ou botão direito grava tudo.

Essa camada roda como um processo próprio, e a saída do ffmpeg vai para um arquivo de log. Num servidor MCP que conversa por stdio, a saída padrão é a conversa. Um print perdido de uma biblioteca de janelas e o cliente deixa de entender o servidor, então nada mais pode escrever ali.
Como é usar hoje
Instalo uma vez e o cliente lista onze ferramentas: achar janelas, escolher uma região, iniciar, pausar, parar e mais algumas para o que vem depois, como listar gravações antigas, cortar uma e exportar um GIF. Na prática eu nunca chamo nenhuma. Digo "grava a janela do Chrome, só a metade esquerda", o agente acha a janela, abre a camada, inicia, e quando eu falo para parar ele responde com o caminho do arquivo.
Algumas escolhas que passam batido. O áudio fica desligado a menos que eu peça, porque uma demo que leva sem querer a minha música ou o meu microfone é pior do que uma muda. Só existe uma gravação por vez. Uma janela minimizada não gera quadros, então o servidor avisa em vez de gravar um arquivo vazio. Apps que bloqueiam captura, como alguns players com DRM, saem pretos. Se a GPU estiver ocupada, ele lê a janela pela CPU, então a gravação acontece do mesmo jeito.
Quero ver quando o agente está gravando
Tinha uma coisa em tudo isso que eu não gostava. Um agente que pode filmar minha tela quando bem entender só é confortável se eu perceber quando ele faz isso. Só com o servidor eu não percebia: nenhuma janela, nenhuma luz, só um arquivo aparecendo depois.
Então fiz um app de desktop pequeno, com o mesmo desenho da Ferramenta de Captura do Windows, porque minha mão já conhece esse layout. Ele fica na bandeja, e um atalho abre a camada de seleção com Rectangle, Window e Full screen, mais um atraso de 3, 5 ou 10 segundos se eu precisar de tempo para me preparar.

Enquanto grava, uma barra fica encaixada no topo da tela. Posso arrastá-la para onde quiser, ela nunca aparece no vídeo, e uma borda marca exatamente o que está sendo capturado. Quando eu paro, a gravação é copiada para a área de transferência e abre num player com corte e exportação de GIF, e um menu de gravações recentes deixa as últimas a um clique.

O que importa para o agente é que o app e o servidor MCP não gravam de dois jeitos diferentes. Os dois usam um único serviço de gravação. Com o app aberto, a IA grava por ele, então a mesma barra aparece com um selo AI e eu mesmo posso parar. Funciona no outro sentido também: o que eu gravo na mão fica visível para o agente, então posso dizer "faz um GIF da minha última gravação" e ele sabe qual é. Com o app fechado, o servidor grava sozinho, como antes. Continua sendo uma gravação por vez, não importa quem começou.

O que vem depois
Linux é a lacuna óbvia. O código específico de cada sistema fica atrás de uma interface só, então um backend novo é basicamente escrever essa peça. O mais útil agora é um Mac: o script de verificação está no repositório e o caminho do macOS nunca rodou em hardware de verdade. Se você tem um, o que ele imprime?
Algo a acrescentar, ou uma parte de que você discorda? Me responda.
Responder por e-mail