orca
Orca — Servidor MCP de accesibilidad ATK
Captura el árbol de widgets ATK (Accessibility Toolkit) de aplicaciones GTK en ejecución en Linux, lo normaliza a roles/tipos ARIA, aplica una política de seguridad declarativa configurable y expone el resultado como herramientas MCP a cualquier cliente MCP estándar (Claude, Cursor, Windsurf, etc.).
Inicio rápido
cd orca
just shell # enter nix-shell with all dependencies
just server # start the MCP server on stdioO manualmente:
nix-shell
PYTHONPATH=src python3 -m srcRelated MCP server: blade-computer-use
Arquitectura
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 policyHerramientas MCP
Tool | Params | Description |
| none | Árbol completo normalizado a ARIA, filtrado por política |
|
| Árbol limitado a una app (glóbulo fnmatch) |
|
| Consulta de un único nodo por |
| none | Objetos app de nivel superior (nombre, pid, rol) |
Configuración
Política
Los archivos de política se cargan con esta prioridad:
~/.config/atk-mcp/policy.yaml(anulación del usuario)src/default_policy.yaml(predeterminado incluido)
Si ninguno existe o alguno falla al analizarse, el servidor se inicia con
default_action: allow y sin reglas de usuario.
La política se carga una sola vez al arrancar: reinicia el servidor para que los cambios surtan efecto.
Consulta docs/policy.md para ver el esquema completo y ejemplos.
Entorno Nix
Todas las dependencias se gestionan mediante shell.nix. No hay uv, ni
virtualenv. Paquetes clave:
python314— tiempo de ejecuciónpython314Packages.pyatspi— acceso al árbol ATKpython314Packages.pygobject3— introspección GIpython314Packages.mcp— SDK MCP v2python314Packages.pydantic-settings— configuración de políticaspython314Packages.pyyaml— análisis de políticasat-spi2-core,at-spi2-atk,atk,gtk3— librerías de tiempo de ejecución
Uso
Con Cursor
Añade a ~/.cursor/mcp.json:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}Con Claude Desktop
Añade a ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}Con Windsurf
Añade a .mcp.json en tu proyecto:
{
"mcpServers": {
"atk-accessibility": {
"command": "nix-shell",
"args": ["--run", "python -m src"],
"cwd": "/path/to/orca"
}
}
}Desde la línea de comandos (prueba interactiva)
just shell
python -m src # runs indefinitely on stdioPasa una solicitud MCP bruta para probar herramientas individuales:
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' \
| python -m srcMotor de políticas
Consulta docs/policy.md como referencia completa.
Ejemplo rápido: deniega todos los nodos heading y redacta los nombres de
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"Captura ATK
Consulta docs/atk.md para conocer los detalles internos. Puntos clave:
Recorre recursivamente la raíz de escritorio
gi.repository.AtspiFail-closed: el aislamiento de subprocesos evita que una anulación de GLib bloquee el servidor cuando no hay bus AT-SPIA disponible
Cada nodo captura:
obj_id,role(int),role_name,name,description,state_set,attributes,child_count,index_in_parent,app_name,pid
Normalización
Consulta docs/ify.md para el mapa de roles.
Los roles enteros ATK (0–123) se asignan a cadenas de rol ARIA. Los roles
no asignados pasan como su cadena role_name. Los nombres de estado se
traducen (p. ej. FOCUSED → focused, CHECKED → checked).
Desarrollo
Consulta docs/contribute.md para la guía de desarrollo.
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 testingLimitaciones
Aplicaciones Wayland sin AT-SPI: algunas aplicaciones GTK nativas de Wayland no exponen interfaces AT-SPI.
get_tree_for_appdevuelve[]para esas aplicaciones. Esperado, no es un bug.Sin recarga en caliente: la política se carga una sola vez al arrancar.
Requiere bus AT-SPI: sin un bus de accesibilidad en ejecución (p. ej.
at-spi-bus-launcher), el módulo ATK devuelve[]de forma controlada.Python 3.14+: no hay de dependencia
typing-extensions.
Licencia
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.
Guarded 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