Skip to main content
Glama

desktop-mcp

Linux(Waylandを含む)上のLLM向けデスクトップビジョン&コントロール — モデルが 画面全体のスクリーンショットを取得し、表示されているものに対してクリック、タイプ、スクロールを 実行します。stdio上のプレーンなMCPなので、Claude Code、Claude Desktop、Cursor、 その他のMCPクライアントで動作します。

最初にお読みください:これは不要かもしれません

Anthropicはコンピューター操作をネイティブに提供しており、それが機能する環境では そちらを使うべきです — 統合度が高く、実際にメンテナンスされています:

  • macOSおよびWindows:Claude Desktopにはコンピューター操作が組み込まれており、Coworkおよび Claude Codeで利用できます。実際のデスクトップを操作します。 (ドキュメント

  • 独自エージェントの構築:Claude APIにはファーストパーティのcomputerツールがあります (GA版はcomputer_toolset_20260801ツールセット)。 (ドキュメント

このツールが埋めるギャップはLinuxです。 2026年8月現在、コンピューター操作は Linuxデスクトップアプリでは利用できず、Waylandでのデスクトップ自動化は X11ではなかった形で困難を極めます:

  • COSMICのコンポジタはwlr-screencopyを実装していないため、grimは失敗し、 スクリーンショットツールはすべてコンポジタごとの個別対応が必要になります。

  • カーソル位置を問い合わせるプロトコルも、他のクライアントのウィンドウを列挙するプロトコルも 存在しません。

  • 入力はコンポジタの下層、/dev/uinput経由で行う必要があります。なぜなら、 一般的にパッケージされているydotool相対ポインタしか公開しておらず、 長距離のジャンプがポインタ加速によって変形してしまうからです。

macOSやWindowsをお使いなら、このリポジトリはほぼ不要です。Linux、 特にWaylandをお使いなら、これが有効な選択肢です。

Related MCP server: mcp-linux-desktop

ステータス

クロスプラットフォーム対応として書かれていますが、実際に検証されているのは 1つの構成のみです。それ以外はコードパス上の実装であり、実証済みではありません — そのつもりで 扱ってください。

プラットフォーム

スクリーンショット

入力

テスト

Linux / Wayland

cosmic-screenshotgrimspectacle、GNOME D-Bus

/dev/uinput

あり — COSMICのみ

Linux / X11

maim、ImageMagick importmss

/dev/uinputxdotool

なし

macOS

screencapture

pyautogui

なし

Windows

mss、PowerShell

pyautogui

なし

テスト内容と方法

エンドツーエンドで検証済み:

  • Pop!_OS 24.04 LTS、カーネル7.0.11、COSMICcosmic-comp 1.0.0)、 Wayland、シングル2560x1440ディスプレイ、Python 3.13。

結果:

チェック

方法

結果

スクリーンショット

cosmic-screenshotバックエンド

2560x1440を取得、1400x788に縮小

ポインタ精度

XWayland経由で5つのターゲットポイントを読み戻し

5/5正確、誤差0px

ボタンとスクロール

xevイベントログ

ボタン1、3、4でButtonPress/ButtonRelease

ドラッグ

xevモーションカウント

押下と解放の間にMotionNotifyイベント26件

タイピング

wtypeと生のuinputキーコードの両方

テキストがフォーカス中のエディタに着地

キーコンビネーション

エディタでctrl+a

適用されました

MCP経由のクリック

ネイティブWaylandアプリに対する完全なstdioラウンドトリップ

新しいタブが開きました

未検証で知っておくべきこと:マルチモニタレイアウト、HiDPIスケーリング、非US キーボードレイアウト(生のキーコードパスの場合 — wtypeはこれらを正しく処理しますが、 uinputキーコードはUS配列を前提としています)、およびCOSMIC以外のすべてのコンポジタ。

他のプラットフォームからの報告は歓迎します — desktop_infoはバックエンドの問題を 診断するために必要な情報をすべて出力します。

インストール

git clone <this repo> && cd desktop-mcp
uv venv && uv pip install -e .

macOS、Windows、Linux/X11でも入力依存関係が必要です:

uv pip install -e ".[gui]"

Linux:1回限りの権限設定

Waylandで入力を注入するには/dev/uinputへの書き込みが必要ですが、これはデフォルトでは root所有です:

bash scripts/setup-linux.sh   # needs sudo once
# then log out and back in

macOS:1回限りの権限設定

サーバーを起動するアプリ(ターミナル、iTerm、Claude Desktop)に対して、 システム設定 → プライバシーとセキュリティで画面収録アクセシビリティを 許可してください。

配線

Claude Code:

claude mcp add desktop -- /absolute/path/to/desktop-mcp/.venv/bin/python -m desktop_mcp.server

Claude Desktop(claude_desktop_config.json)とCursor (.cursor/mcp.json)も同じ形式です:

{
  "mcpServers": {
    "desktop": {
      "command": "/absolute/path/to/desktop-mcp/.venv/bin/python",
      "args": ["-m", "desktop_mcp.server"]
    }
  }
}

ツール

ツール

目的

screenshot

デスクトップをキャプチャ

click

左/中/右クリック、シングルまたはダブル

move

クリックせずにポインタを移動(ホバー)

drag

押下、移動、解放 — 選択、スライダー、ウィンドウ移動用

scroll

特定のポイントでホイールスクロール

type_text

フォーカス中の要素に入力

key

ctrl+salt+tabcmd+spaceなどのキーコンビネーション

cursor_position

ポインタの現在位置

list_windows

開いているウィンドウ(OSが許可する場合)

wait

一時停止してから再確認

desktop_info

環境、アクティブなバックエンド、安全設定

座標

スクリーンショットは送信前に縮小されます(デフォルトでは長辺1400px)。そのため モデルは画像ピクセル単位で作業し、サーバーが毎回の呼び出しでそれらを画面ピクセルに マッピングします。スクリーンショットから読み取った座標をそのまま渡してください。

これは自作のコンピューター操作ツールのほとんどが間違える詳細です。これを間違えると、 すべてのクリックが意図した場所から一定の割合でずれた位置に着地します。

Linuxでydotoolではなく/dev/uinputを使う理由

一般的にパッケージされているydotoolビルドは相対ポインタしか公開していないため、 (1280, 720)へのジャンプは1回の大きな相対移動として配信され、コンポジタが ポインタ加速を適用します。その結果、カーソルはターゲットの近くには着地しますが、 距離が大きいほど誤差も大きくなります。絶対座標のuinputデバイスは加速を回避します: 2560x1440画面で測定した結果、5/5正確でした。ydotool/dev/uinputに 書き込めない場合のフォールバックとして残されています。

クリックのタイミング

コンポジタはポインタ移動を非同期でディスパッチするため、ツールキットは カーソルをウィジェット上に置いた移動イベントを処理する前にボタン押下が届くと、 それを無視します。COSMICで測定した結果:移動と押下の間隔が30msだと、ボタンは ハイライトされるだけでアクティベートされません — ホバー状態は座標が正しいことの 証明ですが、この失敗はターゲティングバグと誤読されがちです。250msあればアクティベートされます。 また、押下は約90ms保持しないと、単なるイベントとして扱われず実際のクリックとして 認識されません。

両方の遅延は調整可能ですが、デスクトップが許容する場合にのみ下げてください。

安全性

これによりモデルは、その場に座っている人間と同じ範囲でマシンを操作できるようになります。 画面上のあらゆるもの — 開いているパスワードマネージャー、プライベートメッセージ、 トークン — を読み取ることができ、破壊的なボタンも含めて何でもクリックできます。 セッションは、誰かにキーボードを預けたのと同じように扱ってください。

環境変数:

変数

デフォルト

効果

DESKTOP_MCP_READ_ONLY

オフ

スクリーンショットは許可、すべての入力を拒否

DESKTOP_MCP_RATE_LIMIT

240

1分あたりの最大入力アクション数

DESKTOP_MCP_BLOCK_KEYS

拒否する追加のカンマ区切りキーコンビネーション

DESKTOP_MCP_AUDIT_LOG

すべてのアクションをこのファイルに追記

DESKTOP_MCP_MAX_EDGE

1400

スクリーンショットの長辺のピクセル数

DESKTOP_MCP_MOVE_SETTLE

0.25

ポインタ移動から押下までの秒数

DESKTOP_MCP_PRESS_HOLD

0.09

マウスボタンを押下したままにする秒数

ctrl+alt+F1F12は常にブロックされます。VT切り替えによってグラフィカル セッションが足元から消える可能性があります。

読み取り専用のレビューア用セットアップ:

DESKTOP_MCP_READ_ONLY=1 python -m desktop_mcp.server

検証

.venv/bin/python scripts/mcp_smoke.py   # real stdio MCP round trip
Install Server
A
license - permissive license
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Related MCP Servers

  • A
    license
    Not graded
    quality
    A
    maintenance
    Controls a real Linux desktop from any MCP host. Reads accessibility trees, takes screenshots, and drives clicks, scrolls, and keystrokes across GNOME, KDE/KWin, Hyprland, i3, and COSMIC.
    671
    395
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables full Linux desktop control including windows, mouse, keyboard, clipboard, audio, screenshots, OCR, accessibility, and system management through MCP-compatible AI agents.
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    An MCP server that gives a model eyes and hands on a Linux Wayland desktop, enabling screenshot capture, mouse/keyboard control, OCR, and icon detection via OmniParser.
    1
  • A
    license
    A
    quality
    D
    maintenance
    Enables LLM agents to capture screenshots, control mouse/keyboard, and manage windows on desktop platforms, primarily Windows, via an MCP server.
    16
    1
    MIT

View all related MCP servers

Related MCP Connectors

  • OCR, transcription, file extraction, and image generation for AI agents via MCP.

  • A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…

  • MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Zetakai/desktop-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server