orca
Orca — ATK 접근성 MCP 서버
실행 중인 GTK 애플리케이션에서 ATK(Accessibility Toolkit) 위젯 트리를 캡처하여 ARIA 역할/유형으로 정규화하고, 구성 가능한 선언적 보안 정책을 적용한 다음, 결과를 모든 표준 MCP 클라이언트(Claude, Cursor, Windsurf 등)에 MCP 도구로 노출합니다.
빠른 시작
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: claude-workman
아키텍처
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 glob) |
|
|
|
| 없음 | 최상위 앱 객체(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— ATK 트리 접근python314Packages.pygobject3— GI 인트로스펙션python314Packages.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.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).
개발
개발 가이드는 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제한 사항
AT-SPI가 없는 Wayland 앱: 일부 Wayland 네이티브 GTK 앱은 AT-SPI 인터페이스를 노출하지 않습니다.
get_tree_for_app은 이러한 앱에 대해[]를 반환합니다. 예상된 동작이며 버그가 아닙니다.핫 리로드 불가: 정책은 시작 시 한 번만 로드됩니다.
AT-SPI 버스 필요: 실행 중인 접근성 버스(예:
at-spi-bus-launcher)가 없으면 ATK 모듈은 오류 없이 빈[]를 반환합니다.Python 3.14+:
typing-extensions의존성이 없습니다.
License
MIT
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.
An authenticated remote MCP server for user-owned devices and one-shot capability invocation.
Managed MCP gateway with OAuth, per-agent permissions, shared accounts and activity logs.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables browser automation through the MCP protocol, allowing AI agents to control a real browser using accessibility snapshots and natural language commands.-
- 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
- -licenseNot gradedqualityCmaintenanceStandalone MCP server for desktop GUI automation on macOS and Windows, exposing a unified tool for accessibility-tree snapshots, input, app control, and browser CDP fast path, driven by any MCP host.-
- FlicenseNot gradedqualityBmaintenanceEnables MCP clients to discover and invoke WebMCP tools registered in pages open in Orca's embedded browser, without extensions or bridges.1-