mcpField
📱
📱 MCP Server for iOS Simulator

📱 MCP Server for iOS Simulator

本地服务
github.com/atom2ueki开发工具4520 周前更新

关于 📱 MCP Server for iOS Simulator

这是一个 MCP 服务,用于控制 iOS 模拟器,基于 appium-ios-simulator 与 MCP TypeScript SDK 构建。适合需要以编程方式管理模拟器的开发者,通过 stdio 传输与 Claude Desktop 等 MCP 客户端配合使用。

主要功能

  1. 01启动、关闭和管理 iOS 模拟器实例
  2. 02通过 UDID 直接控制模拟器
  3. 03安装、启动和终止应用
  4. 04截取模拟器屏幕截图
  5. 05按坐标执行点击操作
  6. 06支持多个并发模拟器会话

适用场景

  1. 01在 Claude Desktop 中启动指定的 iOS 模拟器
  2. 02自动化安装并启动被测应用
  3. 03截取模拟器画面用于检查界面

MCP 相关

该项目以 MCP 服务的形式运行,通过 stdio 传输向 MCP 客户端暴露模拟器管理与交互工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"ios-simulator": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

📱 iOS 模拟器的 MCP 服务

smithery badge

一个为 iOS 模拟器实现 Model Context Protocol(MCP)的服务,基于 appium-ios-simulator 构建,并使用 MCP TypeScript SDK。

iOS Simulator MCP 服务

📋 概述

本项目为 iOS 模拟器与 Model Context Protocol 提供桥接,使其能够与 iOS 模拟器实例进行标准化通信。它支持以编程方式控制 iOS 模拟器,同时利用 MCP 协议在不同环境中提供一致的接口。该服务使用 stdio 作为传输机制,非常适合与 Claude Desktop 和其他兼容 MCP 的客户端集成。

🎬 演示

iOS 模拟器演示

演示如何使用 Claude AI Desktop 启动 iOS 模拟器

🏗️ 架构

该服务由三个主要组件组成:

  1. 🔄 模拟器管理层 - 处理 iOS 模拟器的生命周期和交互
  2. 🔌 MCP 协议实现 - 使用 TypeScript SDK 实现 Model Context Protocol,并采用 stdio 传输
  3. 📊 日志记录组件 - 提供基于文件的日志记录,且不会干扰 stdio 传输
┌─────────────────┐     ┌─────────────────┐     ┌─────────────────┐
│  MCP Protocol   │     │     Stdio       │     │    Simulator    │
│  Implementation │◄────┤    Transport    │◄────┤   Management    │
│                 │     │                 │     │      Layer      │
└─────────────────┘     └─────────────────┘     └─────────────────┘
        ▲                                                ▲
        │                                                │
        ▼                                                ▼
┌─────────────────┐                             ┌─────────────────┐
│   MCP Client    │                             │  iOS Simulator  │
│  (e.g. Claude)  │                             │                 │
└─────────────────┘                             └─────────────────┘

✨ 功能

  • 🚀 启动、停止和管理 iOS 模拟器实例
  • 🔌 启动和关闭模拟器
  • 📲 在模拟器上安装和启动应用
  • 📸 截取模拟器屏幕
  • 👆 在指定坐标执行点击
  • 🔄 支持多个模拟器会话并发运行
  • 📝 全面的基于文件的日志记录,不输出到控制台
  • 🛡️ 具备错误恢复能力

📋 前提条件

  • 🟢 Node.js(v16 或更高版本)
  • 🍎 macOS(iOS 模拟器必需)
  • 🛠️ 已安装 iOS 模拟器的 Xcode
  • 📜 TypeScript 4.5+

🔧 安装

通过 Smithery 安装

通过 Smithery 为 Claude Desktop 自动安装 iOS Simulator Control Server:

npx -y @smithery/cli install @atom2ueki/mcp-server-ios-simulator --client claude
手动安装
# Clone the repository
git clone https://github.com/atom2ueki/mcp-server-ios-simulator.git
cd mcp-server-ios-simulator

# Install dependencies
npm install
🐳 Docker

提供了 Dockerfile,可将该服务打包,用于 Glama MCP 目录及其他容器托管平台。

docker build -t mcp-server-ios-simulator .
docker run --rm -i mcp-server-ios-simulator

注意: iOS 模拟器只能在 macOS 上运行,因此 Linux 容器可以托管 MCP 进程并通过 stdio 响应,但无法驱动真实的模拟器。该容器旨在用于可移植性检查,以及桥接到 macOS 主机的远程 MCP 环境。

⚙️ 配置

通过 src/config.ts 文件进行配置:

const config = {
  simulator: {
    defaultDevice: process.env.SIMULATOR_DEFAULT_DEVICE || 'iPhone 16',
    defaultOS: process.env.SIMULATOR_DEFAULT_OS || '18.2',
    timeout: parseInt(process.env.SIMULATOR_TIMEOUT || '30000', 10),
  }
};

你可以通过设置环境变量自定义这些设置:

SIMULATOR_DEFAULT_DEVICE=iPhone 16
SIMULATOR_DEFAULT_OS=18.2
SIMULATOR_TIMEOUT=30000

🚀 使用方法

🔨 构建和启动服务
# Build the project
npm run build

# Start the server
npm start
🧰 MCP 工具

该服务提供两种不同的 iOS 模拟器控制方式:

📱 直接管理模拟器(推荐)

这些工具直接使用模拟器 UDID,无需维护会话:

  • 📋 list-available-simulators - 列出所有可用模拟器及其 UDID
  • ▶️ boot-simulator-by-udid - 直接使用 UDID 启动模拟器
  • ⏹️ shutdown-simulator-by-udid - 直接使用 UDID 关闭模拟器
  • 📊 list-booted-simulators - 列出所有当前已启动的模拟器

适用场景: 只需直接启动、使用和关闭模拟器时。

📱 基于会话的管理(高级)

这些工具使用会话层,通过自定义会话 ID 跟踪模拟器:

  • 📋 list-simulator-sessions - 列出所有活动的模拟器会话
  • ➕ create-simulator-session - 创建新的模拟器会话
  • ❌ terminate-simulator-session - 终止会话(关闭模拟器并清理)
  • 🔄 create-and-boot-simulator - 创建新的模拟器会话并启动模拟器
  • ▶️ boot-simulator - 为现有会话启动模拟器
  • ⏹️ shutdown-simulator - 为现有会话关闭模拟器

适用场景: 需要跟踪模拟器元数据、使用自定义 ID 引用模拟器,或使用更高级的管理功能时。

📲 应用管理
  • 📥 install-app - 在模拟器上安装应用
  • 🚀 launch-app - 在模拟器上启动应用
  • 🛑 terminate-app - 终止正在运行的应用
🖱️ 交互工具
  • 📷 take-screenshot - 截取模拟器屏幕
  • 👆 tap-coordinate - 在指定坐标处点击
🤖 使用 Claude Desktop 的示例
  1. 配置 Claude Desktop,将此服务作为 MCP 工具使用:

    • 打开 Claude Desktop
    • 前往 Settings > Advanced
    • 在 "MCP Servers" 部分添加以下配置:
    {
      "mcpServers": {
        "simulator": {
          "command": "node",
          "args": [
            "/path/to/your/mcp-server-ios-simulator/dist/index.js"
          ]
        }
      }
    }
    
    • 将 /path/to/your 替换为此仓库的实际安装路径
    • 保存设置并重启 Claude Desktop
  2. 使用提供的工具,直接通过 Claude Desktop 控制 iOS 模拟器:

    直接使用 UDID(推荐):

    1. 首先,让 Claude 列出可用的模拟器:

      "显示所有可用的 iOS 模拟器"
      
    2. 然后使用 UDID 启动指定的模拟器:

      "启动 UDID 为 5272EA61-5796-4372-86FE-3B33831D5CC1 的 iOS 模拟器"
      
    3. 完成后,使用相同的 UDID 关闭模拟器:

      "关闭 UDID 为 5272EA61-5796-4372-86FE-3B33831D5CC1 的模拟器"
      

    对于大多数使用场景,直接使用 UDID 的方式更简单、更可靠。

    基于会话的方式(高级): 只有在需要会话跟踪的高级功能时,才使用此方式:

    "Create a new simulator session for iPhone 16 Pro with iOS 18.2"
    "Boot the simulator for session abc-123"
    "Take a screenshot of the simulator for session abc-123"
    "Terminate the simulator session abc-123"
    

👨‍💻 开发

📁 项目结构
src/
├── simulator/       # Simulator management layer
├── mcp/             # MCP protocol implementation
├── bridge/          # Bridge component
├── utils/           # Utility functions including logger
├── config.ts        # Configuration handling
└── index.ts         # Entry point
🔨 构建项目
# Install development dependencies
npm install

# Run TypeScript compiler
npm run build

📜 许可证

本项目采用 MIT License 授权,详情请参阅 LICENSE 文件。

🙏 致谢

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。