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.1.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.1-py3-none-any.whl (47.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: deepin_mcp-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 56c45020b126617ea417384b0883236dc775096f43158c8168f61afd579013c5
MD5 c744ca89f619abf12e3ca956f45b5210
BLAKE2b-256 9565faa29537a49c19420ab7e3b0fdc59b3a9743f1c3b28c843d673026a29be4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: deepin_mcp-0.2.1-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.1-py3-none-any.whl
Algorithm Hash digest
SHA256 e59166e2a821b94784afb7306330208025846c60bd9cdaf4252e42635bf120de
MD5 582efda11bd2d70f481f81c13b6ef87b
BLAKE2b-256 aef8c386763b887d7157b1b9603273b197d1e01600293e1971a9b08e890f3ef1

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