Skip to main content
Glama
xuxueyong1

iOS Screenshot MCP Server

by xuxueyong1
README.md
# iOS Appium MCP Server

基于 Appium 的 iOS 设备自动化测试 MCP Server,支持屏幕截图、元素点击和 UI 树获取,可用于 Trae 等支持 MCP 协议的 AI 客户端。

## 安装依赖

```bash
uv sync
```

## 运行方式

### 方式一:Stdio 模式(推荐用于 Trae)

```bash
uv run python mcp_server.py --stdio
```

### 方式二:SSE 模式(用于远程连接)

```bash
uv run python mcp_server.py
```

服务器将在 `http://localhost:8000` 运行。

## Trae MCP 配置

### Stdio 模式(推荐)

将以下 JSON 配置添加到 Trae 的 MCP Servers 配置中:

```json
{
  "name": "iOS Screenshot MCP",
  "type": "stdio",
  "command": "uv run python mcp_server.py --stdio",
  "cwd": "~/mcp-servers/ios-playwright-mcp",
  "enabled": true
}
```

### SSE 模式

先启动服务器:

```bash
cd ~/mcp-servers/ios-playwright-mcp
uv run python mcp_server.py
```

将以下 JSON 配置添加到 Trae 的 MCP Servers 配置中:

```json
{
  "name": "iOS Screenshot MCP",
  "type": "sse",
  "url": "http://localhost:8000/mcp/sse",
  "enabled": true
}
```

## Claude code MCP 配置

```json
"mcpServers": {
        "ios-playwright": {
          "name": "ios-playwright",
          "type": "stdio",
          "command": "bash",
          "args": [
            "-c",
            "source ~/mcp-servers/ios-playwright-mcp/.venv/bin/activate && uv run python ~/mcp-servers/ios-playwright-mcp/mcp_server.py --stdio"
          ],
          "cwd": "~/mcp-servers/ios-playwright-mcp/"
        }
      }
```

## 工具说明

### take_ios_screenshot_tool

截取 iOS 设备屏幕并保存为图片文件。

**参数:**

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| platform_name | str | iOS | 平台名称 |
| automation_name | str | XCUITest | 自动化框架名称 |
| device_name | str | iPhone 16 Pro Max | 设备名称 |
| udid | str | 32EFED52-E30A-4CC8-AAE9-525B5A3A5B6A | 设备唯一标识符 |
| bundle_id | str | com.xue.Demo01 | 应用 Bundle ID |
| appium_server_url | str | http://127.0.0.1:4723 | Appium 服务器地址 |
| output_path | str | screen.png | 截图保存路径 |

**返回值:**

截图文件的完整路径。

### element_click_tool

通过 accessibility_id 点击 iOS 设备上的元素。

**参数:**

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| accessibility_id | str | - | 元素的 accessibility identifier(必填) |
| platform_name | str | iOS | 平台名称 |
| automation_name | str | XCUITest | 自动化框架名称 |
| device_name | str | iPhone 16 Pro Max | 设备名称 |
| udid | str | 32EFED52-E30A-4CC8-AAE9-525B5A3A5B6A | 设备唯一标识符 |
| bundle_id | str | com.xue.Demo01 | 应用 Bundle ID |
| appium_server_url | str | http://127.0.0.1:4723 | Appium 服务器地址 |

**返回值:**

操作结果消息。

### dump_ui_element_tool

获取 iOS 设备当前屏幕的完整 UI 元素树(XML 格式)。

**参数:**

| 参数 | 类型 | 默认值 | 说明 |
|------|------|--------|------|
| platform_name | str | iOS | 平台名称 |
| automation_name | str | XCUITest | 自动化框架名称 |
| device_name | str | iPhone 16 Pro Max | 设备名称 |
| udid | str | 32EFED52-E30A-4CC8-AAE9-525B5A3A5B6A | 设备唯一标识符 |
| bundle_id | str | com.xue.Demo01 | 应用 Bundle ID |
| appium_server_url | str | http://127.0.0.1:4723 | Appium 服务器地址 |

**返回值:**

UI 元素树的 XML 字符串。

## 前置条件

调用截图工具前需要确保:

1. **Appium Server** 已启动在 `http://127.0.0.1:4723`
2. **目标设备/模拟器**已连接
3. **指定的应用**(`bundle_id`)已安装在设备上

## 文件结构

```
.
├── mcp_server.py          # MCP Server 主文件
├── screenshot_service.py  # Appium 服务模块(会话管理、截图、点击、UI树)
├── main.py                # 原始截图脚本
├── pyproject.toml         # 项目配置
└── README.md              # 项目说明
```

## 会话管理

所有工具共享同一个 Appium 会话,避免重复建立连接。会话在首次调用任一工具时创建,保持活跃状态直到服务器停止。

TDQS

B3.2/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The tool's purpose is clearly defined.

Naming Consistency5/5

The single tool name follows a consistent snake_case pattern, which is fine. There is no inconsistency within the set.

Tool Count2/5

One tool is too few for a server dedicated to iOS screenshots. Even though the tool is parameterized, a minimal set would include at least a device listing or connectivity check tool.

Completeness3/5

The core functionality of taking a screenshot is covered, but missing tools for device discovery, status checks, or screenshot management leave notable gaps in the surface.

Maintenance

ActivityStale
ResponsivenessNo issues