Skip to main content
Glama
gnome-screencast-mcp

gnome-screencast-mcp

by quinho981

gnome-screencast-mcp

GNOME の画面録画をコマンドラインまたは AI エージェントから操作できるようにします。MCP 経由で利用します。

GNOME Shell 標準のレコーダー(D-Bus インターフェース org.gnome.Shell.Screencast。これは Ctrl+Alt+Shift+R のショートカットと同じものです)を使用します。ffmpeg や wf-recorder、またはその他の外部キャプチャバイナリには依存しません。

用途

グラフィカルインターフェースに触れずに画面録画を自動化します。デモ、バグの証拠、フローのドキュメント化作業、テストセッションの記録などに使えます。各コマンドが JSON を返すため、スクリプトでも、自分の作業内容を録画する必要がある AI エージェントでも利用できます。

このツールが解決する問題: GNOME の D-Bus を直接呼んでも、録画には対応していません。起動した D-Bus クライアントがバスから離れると、GNOME Shell はすぐに録画を終了します。そのため、単発の gdbus call では、1フレームと 0:00 の長さしかないファイルができます。このツールの補助プロセスが録画中ずっと接続を維持し、ストップ時にクリーンに終了することで、はじめて正しい長さとインデックスの WebM が生成されます。

Related MCP server: screen-recorder-mcp

インストール

クローンやビルドの必要はありません。ゼロから最初の録画まで、4つのステップだけです。

PyPI にはまだ公開されていません。 現時点では uv がこの GitHub リポジトリから直接インストールします。動作は同じで、コマンドが少し長いだけです。PyPI に公開されれば、gnome-screencast-mcp だけで十分になり、2つの形式を入れ替えて使えます。

ステップ 1 — 要件を確認する

要件

理由

確認方法

GNOME Shell、アクティブなグラフィカルセッション(Wayland または X11)

GNOME 自身が録画を行います。GNOME Shell 42 でテスト済み

gnome-shell --version

PyGObject (python3-gi)

録画中 D-Bus 接続を維持します。pip ではインストールされません

python3 -c "import gi" — errors: sudo apt install python3-gi

uv

手動 venv なしでパッケージをインストールして実行します

uv --version — ない場合: curl -LsSf https://astral.sh/uv/install.sh | sh

3つが問題なく動作すれば、ステップ 2 に進んでください。

ステップ 2 — インストールする

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

これで 3 つの実行ファイルが PATH に追加されます。

実行ファイル

役割

gnome-screencast-start

コマンドラインから録画を開始します。

gnome-screencast-stop

コマンドラインから録画を終了します。

gnome-screencast-mcp

AI エージェントが呼び出す MCP サーバー (stdio トランスポート) です。

ターミナルが、インストールディレクトリが PATH に含まれていないと警告した場合は、それが提案するコマンド(通常は uv tool update-shell)を実行し、新しいターミナルを開いてください。

ステップ 3 — テストする

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

JSON で "status": "recording" が出力され、3秒間の間があり、その後 "status": "stopped" と duration_seconds が 3 に近い値の JSON が出力されるはずです。この通りに出力されれば、すべて動作しています。.webm ファイルはビデオディレクトリに保存されています。

うまくいきませんでしたか? よくある問題 をご覧ください。

ステップ 4 — 使用方法を選ぶ

  • コマンドラインの場合: すでに使える状態です。コマンドラインでの使用 で、-o、-f、-a のオプションを確認してください。

  • AI エージェント (Claude Code、Cursor、opencode など) の場合: クライアントに MCP サーバーを登録する必要があります。MCP を利用する に、それぞれのステップバイステップがあります。

ステップなし — MCP をエージェントで動かすだけの場合

MCP のためだけに使うなら、手動でインストールする必要はありません。クライアントが実行時にパッケージを自動でダウンロードします。ステップ 1 の要件を確認し、ステップ 2 と 3 は飛ばして、MCP の使い方 に進んでください。

このリポジトリを開発する場合

このリポジトリを変更する場合のみ:

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

構成

ファイル

役割

bin/start-recording.sh

録画を開始します。JSON を出力して直ちに終了します。

bin/stop-recording.sh

録画を終了し、ファイルが完了するのを待ちます。

bin/recorder-daemon.py

D-Bus 接続を保持する補助プロセス。直接呼び出さないでください。

gnome_screencast_mcp/server.py

MCP サーバー。ツール呼び出しをスクリプトの実行に変換します。

gnome_screencast_mcp/cli.py

インストール時の gnome-screencast-start と -stop の実行ファイル。

.mcp.json

このプロジェクトを Claude Code で開いたときの MCP サーバー登録。

スクリプトは、クローンから直接使えるように bin/ に置いています。wheel のビルドではこれらをパッケージ内にコピーし、サーバーはどちらの場所からでもスクリプトを見つけられます。

コマンドラインでの使用

# 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

クローンでは、それぞれ bash bin/start-recording.sh と bash bin/stop-recording.sh が相当します。

start は録画が始まるとすぐにファイルのパスを返します:

{
  "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
}

そして、stop は録画された内容の概要を返します:

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

start のオプション

オプション

効果

-o, --output ARQUIVO

出力 .webm のパス。% を含めることはできません。

-f, --framerate N

1秒あたりのフレーム数(デフォルト: 30)。

-a, --area X Y L A

指定された長方形の領域のみをピクセル単位で録画します。

-c, --no-cursor

マウスポインターを描画しません。

例 — 左上隅、1280×720、60 fps、カーソルなし:

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

stop のオプション

オプション

効果

-t, --timeout N

ファイルが完了するまでの待機秒数(デフォルト: 20)。

-q, --quiet

結果の JSON を出力しません。

終了コード

どちらのコマンドも、成功时は 0 を、使用方法または環境エラーには 1 を返します。さらに:

  • start: 2 は既に録画が進行中・3 は GNOME Shell が開始を拒否

  • stop: 2 は進行中の録画がない・3 はファイルが時間内に完了しなかった

MCP の使用

サーバーを登録することで、録画がエージェントの機能になります。エージェントはシェルへのアクセスなしに、型付きツールとして start_recording と stop_recording を呼び出せます。

公開されるツール

ツール

機能

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

開始して直ちに戻ります。area は [x, y, largura, altura] です。

stop_recording(timeout=20)

終了し、パス、サイズ、再生時間を返します。

recording_status()

idle、recording(elapsed_seconds を含む)、または stale を返します。

recording_status は、アクションの前に安価に確認する方法です。既に存在する録画を開始しようとしたり、存在しない録画を停止しようとすることが避けられます。

どのクライアントでも同じコマンド

サーバーは標準の stdio プロセスであり、コマンドはどこでも同じです:

comando:    uvx
argumentos: gnome-screencast-mcp

uv tool install を実行した場合、コマンドは引数なしの gnome-screencast-mcp だけになります。

パッケージが PyPI にまだ無い間は, 下記のすべての例で、["gnome-screencast-mcp"] の代わりに、この引数リストを使ってください:

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

PyPI に公開されたら、短い形式に戻してください。例はすでに短い形式で書かれています。

正しく見える設定を壊すものは2つあります:

  1. uvx がクライアントの PATH にない場合。 グラフィカルなランチャーからの一覧 (Cursor、VS Code、Zed、Claude Desktop など) で起動されるクライアントは、通常、最小限の PATH を継承し、~/.local/bin は含まれません。サーバーで uvx: command not found が発生したら、uvx を command -v uvx の出力(通常は /home/<seu-usuário-do-sistema>/.local/bin/uvx)に置き換えてください。

  2. 録画にはセッションバスが必要です。 GNOME の D-Bus には DBUS_SESSION_BUS_ADDRESS と XDG_RUNTIME_DIR を介してアクセスします。グラフィカルセッション内で起動されたクライアントは、これらをすでに継承しています。コンテナ、snap, flatpak 、または SSH セッション内のクライアントにはありません。その場合、サーバーの env ブロックで両方を宣言してください:

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

    ご自分のマシンでの正しい値は、グラフィカルセッションのターミナルで echo $DBUS_SESSION_BUS_ADDRESS $XDG_RUNTIME_DIR を実行すると出力されます。

Claude Code

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

PyPI に公開されたら、-- uvx gnome-screencast-mcp に簡略化できます。

セッションを再起動し、/mcp で screen-recorder が接続されていることを確認してください。

このリポジトリ内では、この操作すら必要ありません。ここにバージョン管理された .mcp.json が、ローカルコードからサーバーを登録します。ディレクトリを開いたときに、それを承認するだけです。

Codex CLI

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

PyPI に公開されたら、-- uvx gnome-screencast-mcp に簡略化できます。

または、手動で ~/.codex/config.toml に:

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

opencode

プロジェクトのルートの opencode.json、または、すべてで有効にする場合は ~/.config/opencode/opencode.json に:

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

これは、インストールのステップ 2 の uv tool install を前提としています。コマンドは PATH で解決済みの実行ファイル名だけです。opencode は、コマンドが最初から起動に失敗すると、サーバーを失敗とマークし(enabled も自動的に false に戻します)、uvx gnome-screencast-mcp は、PyPI にパッケージが無い間はこれに該当します。呼び出すたびに PyPI で解決しようとして失敗します。どうしてもインストールしたくない場合は、インストール不要で使える方法は、他のクライアントの git+ と同じ形です:

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

opencode は、コマンドが単一のリストで、command と args が分かれていない、唯一のクライアントです。

Cursor

~/.cursor/mcp.json(グローバル)または .cursor/mcp.json(そのプロジェクトのみ)に:

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

Cursor はグラフィカル環境から起動されることが多いです。接続しない場合は、PATH に uvx が含まれていないことが最も考えられます。コマンドをすべてのクライアントで使用する の項目 1 を参照してください。

Gemini CLI

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

PyPI に公開されたら、uvx gnome-screencast-mcp に簡略化できます。

または、手動で ~/.gemini/settings.json(グローバル)または .gemini/settings.json(プロジェクトごと)に、Cursor と同様の mcpServers 形式で設定:

VS Code (GitHub Copilot)

プロジェクトの .vscode/mcp.json に設定します。キーは mcpServers ではなく servers で、かつ type が明示されていることに注意してください:

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

Windsurf

~/.codeium/windsurf/mcp_config.json に、Cursor と同じ mcpServers 形式で設定します。

Zed

Zed の settings.json の context_servers に:

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

Claude Desktop

Linux では ~/.config/Claude/claude_desktop_config.json に、Cursor と同じ mcpServers 形式で設定します。編集後は、アプリを完全に再起動する必要があります。

その他のクライアント

お使いのクライアントが一覧にない場合は、そのクライアントのドキュメントで「MCP servers」の説明を確認し、uvx コマンドに引数 gnome-screencast-mcp を渡してください。実際には、エコシステム中でフォーマットは2つだけです。command と args を別々に持つもの(大部分)と、command を単一のリストとして持つもの(opencode)です。

uv がいない場合

The package is a standard Python project, and pip handles it:

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

(Once published to PyPI: pip install --user gnome-screencast-mcp.)

The client command becomes gnome-screencast-mcp, with no arguments. A dedicated virtual environment also works — in that case, the point to the executable inside it; the server removes its own venv from the PATH it passes to the scripts, so they keep finding the system PyGObject.

Testing the server without a client

Before wrestling with an agent's configuration, it's worth confirming the server comes up:

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

(Once published to PyPI, uvx gnome-screencast-mcp alone is enough.)

The initialize response should appear, followed by the three tools. On the first run, uvx also prints an installation line to stderr.

How it works

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

The state file ensures there is only one recording at a time — a limit of GNOME Shell itself, which supports one at a time simultaneous screencast session.

If the daemon dies without cleaning up (for example, on logout), the state file is left orphaned: recording_status reports stale and the next start_recording removes it by itself.

Implementation details

Three pitfalls the package needs to work around:

  • Output capture. The server runs the scripts with output redirected to temporary files, not pipes. The daemon inherits the output descriptors, so a pipe would only see EOF at the end of the recording — and the start_recording call would hang until then.

  • Python environment. Once installed, the server runs inside a virtual environment, which sits at the beginning of the PATH. The scripts would start resolving python3 to it, where the system PyGObject doesn't exist. The server removes the venv from the environment the scripts inherit.

  • Executable bit. The scripts are invoked as bash script.sh and the daemon is invoked as python3 daemon.py, never directly: the execute permission doesn't survive reliably when packaged into a wheel.

Common problems

PyGObject not found — install with sudo apt install python3-gi. If the issue appears only when using the MCP server and not on the command line, the venv is leaking into the PATH of the scripts.

The agent does not list the tools — the server never even started. Run the test from to Testing the server without a client; if it passes, the problem is in the client configuration, almost always with uvx outside the PATH (item 1 of O comando, em qualquer cliente).

the GNOME Shell refused to start the recording — usually there is no accessible GNOME session. The MCP server inherits the environment from whoever started it, and D-Bus needs DBUS_SESSION_BUS_ADDRESS and XDG_RUNTIME_DIR. If the MCP and not on the command line, the venv is leaking into the PATH of the scripts; if it appears only at MCP server level, the client/client is in a confined environment (container, snap, flatpak, service, SSH), set both variables in the server env block — see item 2 of The command, in any client.

recording already in progress — call stop_recording, or gnome-screencast-stop. To inspect the state by hand: cat $XDG_RUNTIME_DIR/screen-recorder/current.json.

Video with a 0:00 duration — a sign that the recording was started outside these commands, with a D-Bus client that didn't survive. Use gnome-screencast-start.

Auxiliary process log: $XDG_RUNTIME_DIR/screen-recorder/daemon.log.

License

MIT — see LICENSE.

Publishing a version

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

The version is defined in 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