Skip to main content

MCP server for Deepin desktop application automated testing via AT-SPI

Project description

Deepin MCP

MCP (Model Context Protocol) 服务器,用于通过 AT-SPI 对 Deepin 桌面应用进行自动化测试。

Features

  • AT-SPI 应用检测 — 自动发现运行中的桌面应用及其控件树
  • UI 控件操作 — 通过 AT-SPI 对按钮、输入框、菜单等控件执行点击、输入等操作
  • 菜单 Comb 操作 — 支持 DTK 主菜单和右键菜单的 hover-crawl 操作
  • D-Bus 调用 — 直接通过 D-Bus 接口与应用交互
  • 编排式测试 — 支持 YAML/JSON 格式的测试用例定义和执行
  • 截图诊断 — 操作过程中自动截图辅助调试

Architecture

三层隔离架构:

层级 组件 职责
检测层 TreeWalker, MenuScanner, Monitor, Snapshot 只读的控件发现与状态监控
执行层 ElementActor, InputController, MenuOperator, DBusExecutor 精准的控件操作执行
编排层 Parser, Runner, Assertions 测试用例解析与执行编排

Prerequisites

  • Python >= 3.10
  • 桌面 Linux 环境(Deepin / UOS),依赖 AT-SPI 和 xdotool

系统依赖(必须先安装)

PyGObject 需要系统级头文件和 GIR 数据才能编译:

sudo apt install libgirepository1.0-dev gcc libcairo2-dev pkg-config python3-dev gir1.2-atspi-2.0

安装 uv(推荐)

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# 或使用 pip
pip install uv

Installation

# 使用 uv 安装(推荐)
uv tool install deepin-mcp

# 或使用 pip
pip install deepin-mcp

Usage

作为 MCP 服务器运行(stdio 模式,默认)

deepin-mcp

作为 MCP 服务器运行(HTTP 模式)

DEEPIN_MCP_TRANSPORT=http deepin-mcp

远程访问时可指定监听地址和端口:

DEEPIN_MCP_TRANSPORT=http DEEPIN_MCP_HOST=0.0.0.0 DEEPIN_MCP_PORT=8000 deepin-mcp
环境变量 默认值 说明
DEEPIN_MCP_TRANSPORT stdio 传输模式,可选 stdiohttp
DEEPIN_MCP_HOST 127.0.0.1 HTTP 模式监听地址,远程访问设为 0.0.0.0
DEEPIN_MCP_PORT 8000 HTTP 模式监听端口

运行测试用例

# test_case.yaml
name: "Calculator addition"
app: "deepin-calculator"
steps:
  - name: "Click 5"
    action: element_action
    selector: {name: "5"}
  - name: "Click +"
    action: element_action
    selector: {name: "+"}
  - name: "Click 3"
    action: element_action
    selector: {name: "3"}
  - name: "Click ="
    action: element_action
    selector: {name: "="}
  - name: "Verify result"
    assert:
      - type: element_text
        selector: {role: "text"}
        contains: "8"

Development

# 安装开发依赖
uv sync --group dev

# 运行测试
uv run pytest

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

deepin_mcp-0.2.3.tar.gz (37.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

deepin_mcp-0.2.3-py3-none-any.whl (47.9 kB view details)

Uploaded Python 3

File details

Details for the file deepin_mcp-0.2.3.tar.gz.

File metadata

  • Download URL: deepin_mcp-0.2.3.tar.gz
  • Upload date:
  • Size: 37.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Deepin","version":"25","id":"crimson","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for deepin_mcp-0.2.3.tar.gz
Algorithm Hash digest
SHA256 0f6e96037b73a63a1b0a956f5be534621b06d9ddd87a9fbcbb9684e1772531e1
MD5 5653cd8ff64570a49a43299e80dfc76a
BLAKE2b-256 be52e9cfdf0dda123335c030190e77690186558c1accc6dad50f71ac8b811b96

See more details on using hashes here.

File details

Details for the file deepin_mcp-0.2.3-py3-none-any.whl.

File metadata

  • Download URL: deepin_mcp-0.2.3-py3-none-any.whl
  • Upload date:
  • Size: 47.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Deepin","version":"25","id":"crimson","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for deepin_mcp-0.2.3-py3-none-any.whl
Algorithm Hash digest
SHA256 ed9c141fff1b76436753f7333a769a10ad32fafc7053abe89f8822f663b72ab8
MD5 9538029858a2c339ccc408bef286483e
BLAKE2b-256 f2a5e7258ef5840fce808a641ce4322cabdafc2ec9db07ac5fa27c06c738d2d2

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page