使用 FastMCP 2.0 和干净架构构建的现代 iOS 自动化服务器
一个使用 FastMCP 2.0 构建的生产就绪的 iOS 自动化 MCP 服务器,具有干净模块化架构和完全的平台隔离。准备好进行跨平台扩展,iOS 特定组件和共享组件已适当分离。
🎬 观看完整演示:移动自动化 iOS MCP 服务器演示
使用 Railway 上托管的版本 - 不需要本地设置:
{
"mcpServers": {
"ios-automation-railway": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://mcp-server-demo-production.up.railway.app/sse/"
]
}
}
}
先决条件
安装
git clone https://github.com/iHackSubhodip/mcp-server-demo.git
cd mcp-server-demo
# 使用 uv(推荐)
uv sync
# 或使用 pip(旧版)
pip install -e .
Claude Desktop 配置
{
"mcpServers": {
"ios-automation-local": {
"command": "uv",
"args": ["run", "python", "mobile-automation-mcp-server/fastmcp_server.py"],
"cwd": "/path/to/mcp-server-demo"
}
}
}
移动自动化 iOS MCP 服务器具有干净、模块化架构,通过全面的六阶段重构实现了完整的平台隔离。这种设计使维护性最大化,无代码重复,并且可以无缝地进行跨平台扩展。
🎯 完整的平台隔离
shared/ 包中platforms/ios/ 包中platforms/android/🔄 应用 DRY 原则
🛡️ 维护性和可扩展性
mobile-automation-mcp-server/
├── fastmcp_server.py # 🚀 FastMCP 2.0 服务器(主入口)
├── config/
│ └── settings.py # 🔧 统一配置接口
├── shared/ # 🌐 跨平台工具及配置
│ ├── utils/ # 🛠️ 平台无关工具
│ │ ├── logger.py # 📝 带表情符号的彩色日志记录
│ │ ├── exceptions.py # ⚠️ 异常层次结构
│ │ └── command_runner.py # 💻 命令执行
│ └── config/ # ⚙️ 基础配置类
│ └── base_settings.py # 📋 AppiumConfig, ServerConfig
├── platforms/ios/ # 🍎 iOS 特定平台代码
│ ├── automation/ # 🤖 iOS 自动化服务
│ │ ├── appium_client.py # 📱 iOS 自动化客户端
│ │ ├── screenshot_service.py # 📸 截图处理
│ │ └── simulator_manager.py # 🎮 模拟器管理
│ ├── tools/ # 🔨 iOS 特定 MCP 工具
│ │ ├── appium_tap_type_tool.py # ⌨️ 文本字段自动化
│ │ ├── find_and_tap_tool.py # 👆 高级元素查找
│ │ ├── launch_app_tool.py # 🚀 应用启动
│ │ └── screenshot_tool.py # 📷 截图捕获
│ └── config/ # ⚙️ iOS 特定配置
│ └── ios_settings.py # 🍎 iOSConfig (XCUITest, iPhone)
├── screenshots/ # 📁 截图存储
├── Dockerfile # 🐳 容器部署
├── Procfile # 🚂 Railway 部署
└── pyproject.toml # 📦 依赖项及项目配置
| 方面 | 重构前 | 重构后 |
|---|---|---|
| 结构 | 混合 iOS/共享代码 | 清晰的平台隔离 |
| 维护性 | 单体 | 模块化且自包含 |
| 可扩展性 | iOS 专用 | 跨平台准备 |
| 代码重用 | 重复可能 | 所有平台共享工具 |
| 配置 | 单个设置文件 | 模块化配置层次 |
| 组织 | 平坦结构 | 专业企业结构 |
take_screenshot捕获 iOS 模拟器截图
{
"filename": "optional_name.png",
"device_id": "booted"
}
launch_app启动 iOS 应用程序
{
"bundle_id": "com.apple.mobilesafari",
"device_id": "booted"
}
find_and_tap智能自动化查找并点击 UI 元素
{
"accessibility_id": "submitButton",
"take_screenshot": true,
"dismiss_after_screenshot": false
}
appium_tap_and_type增强的文本输入与元素查找
{
"text": "Hello World!",
"element_type": "textField",
"timeout": 10
}
list_simulators列出可用的 iOS 模拟器
{}
get_server_status检查服务器和 Appium 状态
{}
# 本地运行 FastMCP 服务器(使用 uv)
uv run python mobile-automation-mcp-server/fastmcp_server.py
# 安装依赖项(如果需要)
uv sync
# 开发模式(带开发依赖项)
uv sync --dev
# 安装 Appium
npm install -g appium
appium driver install xcuitest
# 启动 Appium 服务器
appium server --port 4723
# 模块化结构使得开发更容易:
# 工作于共享工具(影响所有平台)
cd shared/utils/
# 工作于 iOS 特定功能
cd platforms/ios/
# 工作于配置
cd config/
# 添加新平台(未来)
mkdir platforms/android/
该服务器部署在 Railway 并可通过以下方式访问:
https://mcp-server-demo-production.up.railway.app/https://mcp-server-demo-production.up.railway.app/sse/云部署模拟 iOS 自动化响应以供演示目的。
| 功能 | 传统 MCP | FastMCP 2.0 + 清洁架构 |
|---|---|---|
| 设置 | 复杂配置 | 简单的 Python 装饰器 |
| 架构 | 单体 | 模块化平台隔离 |
| 代码重用 | 手动复制 | 共享工具包 |
| 类型安全 | 手动验证 | 内置 Pydantic 模型 |
| 错误处理 | 基本的 try-catch | 丰富的上下文和日志记录 |
| 部署 | 仅本地 | 通过 Railway 的云就绪 |
| 可扩展性 | 难以扩展 | 易于添加平台 |
| 维护性 | 复杂 | 清晰的职责分离 |
# 列出可用的模拟器
xcrun simctl list devices
# 启动模拟器
xcrun simctl boot "iPhone 16 Pro"
# 检查 Appium 状态
curl http://localhost:4723/status
# 重启 Appium
pkill -f appium && appium server --port 4723
核心依赖项通过 pyproject.toml 管理:
fastmcp>=2.9.2 - FastMCP 2.0 框架mcp>=1.0.0 - 传统 MCP 协议aiohttp>=3.9.0 - 自动化的 HTTP 客户端appium-python-client>=3.0.0 - iOS 自动化pydantic>=2.4.0 - 数据验证安装方法:
# 使用 uv(推荐)
uv sync
# 或使用 pip
pip install -e .
shared/platforms/{platform}/得益于清洁架构,添加新平台非常简单:
# 添加 Android 平台(示例)
mkdir -p platforms/android/{automation,tools,config}
# 重用共享工具
from shared.utils import get_logger, AutomationMCPError
from shared.config import AppiumConfig, ServerConfig
# 创建 Android 特定配置
from platforms.android.config import AndroidConfig
本项目根据 MIT 许可证发布 - 查看 LICENSE 文件获取详情。