orca
Orca — ATK Accessibility MCP Server
捕获 Linux 上运行的 GTK 应用程序的 ATK(Accessibility Toolkit)控件树,将其规范化为 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 policyMCP 工具
工具 | 参数 | 说明 |
| 无 | 完整 ARIA 规范化树,按策略过滤 |
|
| 限定某个应用的树(fnmatch 通配符) |
|
| 按 |
| 无 | 顶层应用对象(name、pid、role) |
配置
策略
策略文件按以下优先级加载:
~/.config/atk-mcp/policy.yaml(用户覆盖)src/default_policy.yaml(内置默认)
如果两者都不存在,或任一文件解析失败,服务器将以 default_action: allow 和空的用户规则启动。
策略只在启动时加载一次——重启服务器后才能生效变更。
完整 schema 和示例参见 docs/policy.md。
Nix 环境
依赖全部由 shell.nix 管理。没有 uv,没有 virtualenv。
主要软件包:
python313— 运行时python313Packages.pyatspi— ATK 树访问python313Packages.pygobject3— GI 内省python313Packages.mcp— MCP SDK v2python313Packages.pydantic-settings— 策略配置python313Packages.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.Atspi的桌面根节点故障关闭(fail-closed):子进程隔离防止在无 AT-SPI 总线时 GLib abort 导致服务器崩溃
每个节点采集:
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)。
开发
开发指南参见 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限制
无 AT-SPI 的 Wayland 应用:部分 Wayland 原生 GTK 应用不暴露 AT-SPI 接口。这些应用对
get_tree_for_app返回[]。这是预期行为,不是 bug。不支持热重载:策略只在启动时加载一次。
需要 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.
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