orca
Orca — MCP-сервер для ATK-доступности
Захватывает дерево виджетов ATK (Accessibility Toolkit) из запущенных на Linux GTK-приложений, нормализует его к ролям/типам ARIA, применяет настраиваемую декларативную политику безопасности и предоставляет результат в виде инструментов MCP любому стандартному MCP-клиенту (Claude, Cursor, Windsurf и т.п.).
Быстрый старт
cd orca
just shell # enter nix-shell with all dependencies
just server # start the MCP server on stdioИли вручную:
nix-shell
PYTHONPATH=src python3 -m srcRelated MCP server: blade-computer-use
Архитектура
orca/
├── shell.nix # nix-shell environment
├── pyproject.toml # package config
├── Justfile # task runner
├── docs/
│ ├── README.md # this file
│ ├── usage.md # client integration guide
│ ├── policy.md # policy engine reference
│ ├── atk.md # ATK capture internals
│ └── contribute.md # development guide
└── src/
├── __init__.py
├── __main__.py # entry point
├── atk.py # ATK tree capture
├── normalize.py # ATK→ARIA normalization
├── policy.py # declarative security policy
├── server.py # MCP server
└── default_policy.yaml # ship-default policyИнструменты MCP
Инструмент | Параметры | Описание |
| нет | Полное ARIA-нормализованное дерево, отфильтрованное политикой |
|
| Дерево конкретного приложения (glob-шаблон fnmatch) |
|
| Поиск одного узла по |
| нет | Объекты верхнего уровня приложений (name, pid, role) |
Конфигурация
Политика
Файлы политики загружаются в следующем порядке приоритета:
~/.config/atk-mcp/policy.yaml(переопределение пользователя)src/default_policy.yaml(встроенный вариант по умолчанию)
Если ни один из файлов не существует либо какой-то из них не удаётся разобрать, сервер запускается с default_action: allow и без пользовательских правил.
Политика загружается один раз при запуске — перезапустите сервер, чтобы изменения вступили в силу.
Полное описание схемы и примеры — в docs/policy.md.
Окружение Nix
Все зависимости управляются через shell.nix. Никаких uv и virtualenv.
Ключевые пакеты:
python314— среда выполненияpython314Packages.pyatspi— доступ к дереву ATKpython314Packages.pygobject3— интроспекция GIpython314Packages.mcp— MCP SDK v2python314Packages.pydantic-settings— конфигурация политикиpython314Packages.pyyaml— разбор политикиat-spi2-core,at-spi2-atk,atk,gtk3— рантайм-библиотеки
Использование
С Cursor
Добавьте в ~/.cursor/mcp.json:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}С Claude Desktop
Добавьте в ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}С Windsurf
Добавьте в .mcp.json в вашем проекте:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}Из командной строки (интерактивный тест)
just shell
python -m src # runs indefinitely on stdioПередайте сырой MCP-запрос, чтобы проверить отдельные инструменты:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| python -m srcМеханизм политик
Полный справочник: docs/policy.md.
Быстрый пример — запретить все узлы heading и скрыть имена textbox:
default_action: allow
built_in_deny:
aria_roles:
- "password"
state_keywords:
- "hidden"
- "invisible"
rules:
- id: deny-headings
conditions:
role: "heading"
action: deny
- id: redact-forms
conditions:
role: "textbox"
action: redact
redact_fields:
- "name"
- "description"Захват ATK
Внутреннее устройство — в docs/atk.md. Ключевые моменты:
Рекурсивно обходит корень рабочего стола
gi.repository.AtspiFail-closed: изоляция в подпроцессе предотвращает падение сервера из-за аварийного завершения GLib при отсутствии шины AT-SPI
Для каждого узла сохраняются:
obj_id,role(int),role_name,name,description,state_set,attributes,child_count,index_in_parent,app_name,pid
Нормализация
Карта ролей — в docs/normalize.md.
Целочисленные роли ATK (0–132) сопоставляются со строками ролей ARIA. Несопоставленные роли передаются как есть — строкой role_name. Имена состояний преобразуются (например, FOCUSED → focused, CHECKED → checked).
Разработка
Руководство по разработке — docs/contribute.md.
just shell # enter dev environment
just test # run verification suite
just compile # syntax check
just lint # import + smoke check
just server # start server for manual testingОграничения
Wayland-приложения без AT-SPI: Некоторые нативные Wayland GTK-приложения не раскрывают интерфейсы AT-SPI. Для таких приложений
get_tree_for_appвозвращает[]. Ожидаемое поведение, а не ошибка.Без горячей перезагрузки: Политика загружается один раз при запуске.
Требуется шина AT-SPI: без запущенной шины доступности (например,
at-spi-bus-launcher) модуль ATK корректно возвращает[].Python 3.14+: без зависимости
typing-extensions.
Лицензия
MIT
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
No tool schema history has been recorded yet.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
MCP server for mandates, delegation, policy-gated execution, credential grants, and audit.
111Guarded MCP server for agent-readable business truth, provenance, readiness, and discovery.
Read-only MCP server for turva.dev, an agent-readiness audit and advisory service.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceEnables browser automation through the MCP protocol, allowing AI agents to control a real browser using accessibility snapshots and natural language commands.-
- AlicenseNot gradedqualityBmaintenanceEnables MCP clients to control macOS via accessibility and screen recording, providing tools to list apps, observe UI, click, type, press keys, and scroll.MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to control a Linux/X11 desktop like a human: see the screen, move the mouse, click UI elements via the accessibility tree, type text, and manage windows.MIT
- AlicenseAqualityBmaintenanceBrowser automation MCP server that uses a real browser to give agents eyes and hands—open pages, click, fill, screenshot, and run scripts via accessibility-tree snapshots.223981MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/sachin-sankar/orca'
If you have feedback or need assistance with the MCP directory API, please join our Discord server