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.2.tar.gz (36.6 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.2-py3-none-any.whl (47.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: deepin_mcp-0.2.2.tar.gz
  • Upload date:
  • Size: 36.6 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.2.tar.gz
Algorithm Hash digest
SHA256 49d5a20d141331b58f6b4a2f097b45836e4abf0451e3e9b17e8892921fb159e8
MD5 21fdb893dcece04b47339085eec1fb6a
BLAKE2b-256 b91bbdbc442c44d12c61f5a98cfceedfb53494256fd5cf6353b0b2b508f80dc5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: deepin_mcp-0.2.2-py3-none-any.whl
  • Upload date:
  • Size: 47.3 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.2-py3-none-any.whl
Algorithm Hash digest
SHA256 3286df4cb1be13d530abaf7b1b0e9caf831210befe24f3d96d47ea1c6b0e5532
MD5 dc47bbbd2dbe7a7eda97fecc9207556e
BLAKE2b-256 0dddaa0fc5358428a05a1f64afcbb2ea1f655795330f707c54ba37e7bed89036

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