screenshot-mcp
Integrates with KDE components: Konsole for spawning real terminal windows that inherit the user's ~/.bashrc and bash readline behavior, Spectacle for screenshots, and KWin (via qdbus6 scripting) for window discovery and focusing.
Targets KDE Plasma 6 desktop sessions, providing tools to open and drive a real Konsole terminal window (executing commands, reading output and exit codes, sending keys), bring windows to the foreground via KWin scripting, and capture full-desktop screenshots using Spectacle, returning the image back to the agent.
Operates inside a KDE Plasma Wayland session, writing input directly into a pseudo-terminal so native Wayland terminal windows can be driven without key emulation, and capturing the Wayland desktop.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
screenshot-mcp
MCP-сервер, который даёт агенту настоящее окно консоли на рабочем столе и снимки экрана штатным средством системы.
Ключевая сложность в том, что под Wayland не работают привычные приёмы автоматизации
терминала: xdotool не вводит текст в нативные Wayland-приложения, wmctrl не
существует, а tmux умеет управлять сессией, но не окном на экране. Здесь ввод идёт
прямо в псевдотерминал, поэтому терминал показывает его так же, как ввод с
клавиатуры, — без эмуляции клавиш и без каких-либо следов в интерфейсе.
Возможности:
новое отдельное окно консоли с твоим
~/.bashrc— твой промпт, цвета, алиасы;ввод команд и чтение вывода с кодом возврата;
интерактивные программы: ввод,
Ctrl+C,Ctrl+D, стрелки, история команд;снимок всего рабочего стола с поднятием окна консоли на передний план;
снимок возвращается агенту прямо в ответе (картинкой), так что он может сам оценить, что попало в кадр.
Как это устроено
MCP-сервер (server.py)
│ UNIX-сокет, JSON
▼
core/bridge.py — «насос»: переливает ввод и вывод
│ псевдотерминал (pty)
▼
bash ── запущен прямо в окне терминала, наследует ~/.bashrcНастоящий
bashработает внутри окна терминала и подхватывает пользовательский.bashrc. Заголовок окна при этом неотличим от обычного (<каталог> : bash — Konsole).Агент пишет байтами прямо в pty. Их обрабатывает tty-драйвер (отражение ввода) и
readline— то есть это буквально тот же путь, что и при наборе с клавиатуры. Никакой эмуляции клавиш, поэтому в терминале не остаётся следов автоматизации.Код возврата берётся через хук
PROMPT_COMMAND, который пишет маркер в служебный файл: на экране ничего не появляется.
Related MCP server: hyprland-mcp
Архитектура
Платформенные различия вынесены в бэкенды, ядро от них не зависит:
screenshot_mcp/
├── core/ pty-мост, сессия консоли, лаунчер — POSIX, работает везде
├── backends/
│ ├── terminal/ konsole · xterm · gnome-terminal
│ ├── screenshot/ spectacle · x11 · gnome
│ └── focus/ kwin · xdo_tool · atspi · none
├── config.py определение окружения и пользовательские настройки
└── runtime.py сборка окружения, настроек и бэкендовВыбор бэкендов автоматический: определяется тип сессии (XDG_SESSION_TYPE) и рабочее
окружение (XDG_CURRENT_DESKTOP). При необходимости его можно задать явно — см.
Настройку.
Поддерживаемые окружения
Окружение | Окно терминала | Снимок экрана | Поднятие окна |
KDE Plasma 6 / Wayland | Konsole | Spectacle | KWin-скриптинг |
KDE Plasma / X11 | Konsole, xterm | ImageMagick, scrot, maim | xdotool |
GNOME / Wayland | gnome-terminal | gnome-screenshot | AT-SPI |
X11 (любой DE) | xterm, gnome-terminal | ImageMagick, scrot, maim | xdotool |
Что проверено вживую: только вариант KDE Plasma / Wayland — на нём прогнаны все тесты. X11- и GNOME-пути написаны по документации используемых утилит (
scrot,maim,import,xdotool,gnome-screenshot, AT-SPI) и требуют проверки на своём железе: терминал и снимок там работают через те же бэкенды ядра, но поднятие окна в X11 завязано наxdotool, а в GNOME — на AT-SPI, и доступность этих способов зависит от окружения.
Требования
Python 3.11+ и пакет
mcp;терминал:
konsole,xtermилиgnome-terminal;для снимков:
spectacle(KDE) либоscrot/maim/import(X11) либоgnome-screenshot(GNOME);для поднятия окна: KWin (идёт с Plasma) либо
xdotoolна X11;dbus-pythonиPyGObject— для приёма отчётов от KWin-скриптов и AT-SPI.
Проверено на Debian 13, KDE Plasma 6.3, Wayland.
Установка
git clone git@github.com:Bra1nZ/screenshot-mcp.git
cd screenshot-mcp
pip install -r requirements.txtНастройка
По умолчанию бэкенды выбираются по окружению. Если нужно указать явно, создай
~/.config/screenshot-mcp/config.toml:
[terminal]
backend = "konsole" # konsole | xterm | gnome-terminal
[screenshot]
backend = "spectacle" # spectacle | x11 | gnome
[focus]
backend = "kwin" # kwin | xdo_tool | atspi | noneДругой путь к конфигу можно задать переменной SCREENSHOT_MCP_CONFIG.
Подключение
opencode
~/.config/opencode/opencode.json:
{
"mcp": {
"desktop-console": {
"command": ["python3", "/путь/к/screenshot-mcp/server.py"],
"type": "local"
}
}
}Другие MCP-клиенты
Сервер говорит на stdio, поэтому подходит любому клиенту с поддержкой локальных MCP-серверов. Команда запуска:
python3 /путь/к/screenshot-mcp/server.pyСервер запускается в графической сессии и наследует WAYLAND_DISPLAY и
DBUS_SESSION_BUS_ADDRESS; если переменных нет, подставляются значения по умолчанию
для текущего пользователя.
Инструменты
Инструмент | Назначение |
| открыть новое окно консоли, вернуть |
| напечатать команду и дождаться результата: |
| напечатать текст без выполнения — для программ, ждущих ввода |
| спецклавиши: |
| дочитать новый вывод |
| состояние консолей |
| закрыть окно |
| снимок рабочего стола; |
| поднять окно консоли на передний план |
| что сейчас на переднем плане, список окон |
Пример сессии
console_open(cwd="~/projects/lab") → console_id
console_exec(console_id, "make") → output, exit_code
console_exec(console_id, "ls -la build/") → убедиться, что артефакты на месте
desktop_screenshot(console_id=console_id) → PNG в папке снимков + картинка в ответеОграничения
Экран должен быть разблокирован. Пока активен lock screen, композитор не отдаёт снимки — это защита KWin, а не ошибка сервера.
desktop_screenshotв этом случае вернёт понятное сообщение.Под GNOME поднять окно можно не всегда: там нет скриптинга композитора, а AT-SPI работает не у всех приложений. Если окно не поднялось, снимок всё равно делается — просто в кадре может быть другое окно.
Символ табуляции в командах не поддерживается:
bashвоспринимает его как запрос автодополнения.console_execждёт нового промпта; для долгих задач нуженtimeout, для интерактивных программ —console_sendиconsole_key.
Безопасность
Сервер даёт подключённому агенту полный контроль над консолью в графической сессии и чтение содержимого экрана. Это инструмент автоматизации, а не средство изоляции: запускай его только с тем агентом, которому доверяешь, и не оставляй незакрытые окна консоли с активными сессиями.
Скриншоты складываются в стандартную папку для снимков и дублируются в
screenshots/ рядом с сервером — помни, что они могут содержать чувствительные
данные с экрана.
Тесты
Тесты живые: они открывают настоящие окна и снимают настоящий экран, поэтому требуют запущенной графической сессии.
pip install -r requirements-dev.txt
python3 tests/test_backends.py # юнит-тесты: конфиг и бэкенды (GUI не нужен)
python3 tests/test_bridge.py # pty-мост: команды, вывод, код возврата
python3 tests/test_interactive.py # ввод в программу, ctrl+c, история
python3 tests/test_e2e.py # полный цикл: окно → команды → фокус → снимок
python3 tests/test_agent_flow.py # то же через настоящий MCP-протокол
python3 tests/test_mcp_stdio.py # протокол MCP: список тулов и вызовыВ CI (.github/workflows/ci.yml) гоняются линтер, юнит-тесты и проверка импорта —
живые тесты в контейнере без композитора не запустятся.
Лицензия
MIT — см. LICENSE.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
This server cannot be deployed
Maintenance
Related MCP Connectors
A cloud Linux desktop for your AI: browse, click, type, read the screen and run commands.
Operate Linux, macOS and Windows from your LLM. Every action runs through an auditable allowlist.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Cloud desktops for AI agents: create a Linux computer, see its screen, click, type and run tasks.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceEnables AI agents to automate Linux desktop GUI by launching and interacting with Wayland applications in isolated virtual KWin sessions, or connecting to live desktops for collaborative automation.157 PyPI78MIT
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to control a Hyprland Wayland desktop by listing windows, capturing screenshots, and sending input to a dedicated agent workspace without disrupting the user's screen.1MIT
- AlicenseNot gradedqualityCmaintenanceEnables an AI agent to see and control a Linux desktop via Wayland/Hyprland, providing screenshots, structured desktop state, pointer/keyboard input, semantic window/workspace tools, and a policy engine for safe execution.Apache 2.0
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to automate and observe Linux desktop GUIs on KDE Plasma 6 Wayland through isolated virtual sessions or live desktop connections, providing 30 tools for input, clipboard, accessibility tree inspection, screenshots, and window management.2MIT