📱 iOS模拟器的MCP服务器

一种模型上下文协议(MCP)服务器,使LLM能够通过自然语言命令与iOS模拟器进行交互。
ℹ️ 概述
此MCP服务器在大型语言模型(LLM)和iOS模拟器之间提供了一座桥梁,通过自然语言命令提供全面的控制。以下是它可以做的事情:
有关详细用法,请参阅安装指南和支持的命令部分。您可以通过直接MCP集成或作为独立库使用此服务器。
查看架构部分,了解组件如何协同工作,以实现iOS模拟器的自然语言控制。
🎮 模拟器控制
- 创建和管理模拟器会话
- 启动、关闭和监控模拟器状态
- 列出可用和正在运行的模拟器
- 聚焦模拟器窗口
📱 应用程序管理
- 安装和管理iOS应用程序
- 启动、终止和卸载应用程序
- 监控应用程序状态并验证安装
- 处理应用程序权限和配置
🖱️ UI交互和测试
- 与模拟器UI交互
- 执行点击、滑动和按钮按压操作
- 输入文本和按键序列
- 访问UI测试的可访问性元素
- 录制用户界面交互视频
🛠️ 开发与调试
- 捕获屏幕截图和系统日志
- 实时调试应用程序
- 监控和分析碰撞日志
- 安装动态库并管理应用程序数据
⚡ 高级功能
- 其他功能包括:
- 位置模拟 - 介质注入 - URL方案处理 - 联系人数据库管理 - 钥匙扣操作
有关详细用法,请参阅安装指南和支持的命令部分。您可以通过直接MCP集成或作为独立库使用此服务器。
查看架构部分,了解组件如何协同工作,以实现iOS模拟器的自然语言控制。
📋 需求
- macOS:需要iOS模拟器支持
- Node.js:v14.0.0或更高版本
- 家酿:安装依赖项时需要
- 介绍:安装了iOS模拟器
🚀 安装
安装此服务器的最简单方法是通过Cline:
- 只需询问Cline:
Add this mcp to cline https://github.com/InditexTech/mcp-server-simulator-ios-idb- Cline将自动处理安装过程,包括依赖关系管理和配置。
或者,您可以手动安装它:
# Clone the repository
git clone https://github.com/InditexTech/mcp-server-simulator-ios-idb.git
cd mcp-server-simulator-ios-idb
# Create and activate Python virtual environment
python3 -m venv venv
source venv/bin/activate # On Unix/macOS
# Install dependencies
npm install
# Build the project
npm run build
# Start the project
npm start
# Run tests
npm test安装过程将自动执行以下操作:
- 检查您是否运行macOS
- 通过Homebrew安装idb伴侣
- 在虚拟环境中通过pip安装fb-idb
注意:使用服务器时,请确保虚拟环境保持激活状态。如果您关闭终端并稍后返回,则需要使用重新激活虚拟环境 source venv/bin/activate 运行前的命令 npm start.
🔌 MCP集成
要将此服务器与Claude或其他LLM助手一起使用:
- 将服务器添加到Claude Desktop中的MCP设置中:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}- LLM现在可以使用自然语言命令来控制iOS模拟器:
create a simulator session with iPhone 14
install app /path/to/my-app.ipa
launch app com.example.myapp
tap at 100, 200
take a screenshot📚 作为图书馆使用
您还可以在自己的项目中将此包用作库:
🔰 基本用法
import { createMCPServer } from 'mcp-server-simulator-ios-idb';
async function main() {
// Create an instance of the MCP server
const { orchestrator } = createMCPServer();
// Process natural language commands
// Create a simulator session
const sessionResult = await orchestrator.processInstruction('create session');
console.log(`Session created: ${sessionResult.data}`);
// Interact with the simulator
await orchestrator.processInstruction('tap at 100, 200');
// Capture a screenshot
const screenshotResult = await orchestrator.processInstruction('take screenshot');
console.log(`Screenshot saved at: ${screenshotResult.data}`);
}
main().catch(console.error);🚀 高级用法
您还可以直接使用各个组件:
import {
IDBManager,
NLParser,
MCPOrchestrator,
ParserToOrchestrator,
OrchestratorToIDB
} from 'mcp-server-simulator-ios-idb';
// Create instances
const idbManager = new IDBManager();
const parser = new NLParser();
const orchestrator = new MCPOrchestrator(parser, idbManager);
// Use the components directly
const sessionId = await idbManager.createSimulatorSession({
deviceName: 'iPhone 12',
platformVersion: '15.0'
});
await idbManager.tap(sessionId, 100, 200);🏗️ 项目结构
mcp-server-simulator-ios-idb/
├── src/ # Source code
│ ├── adapters/ # Adapter components
│ ├── idb/ # IDB manager implementation
│ ├── mcp/ # MCP server implementation
│ ├── orchestrator/ # Command orchestrator
│ ├── parser/ # Natural language parser
│ └── index.ts # Main entry point
├── types/ # TypeScript type definitions
├── scripts/ # Installation scripts
├── package.json # Project configuration
└── tsconfig.json # TypeScript configuration🎯 支持的命令
NLParser支持以下自然语言命令:
🎮 模拟器管理
| 命令 | 描述 | 示例 |
|---|---|---|
| 创建会话 | 创建新的模拟器会话 | “创建会话”,“创建模拟器iPhone 12” |
| 终止会话 | 终止当前会话 | “终止会话”,“关闭模拟器” |
| 列出模拟器 | 列出可用模拟器 | “列出模拟器”,“显示模拟器” |
| 列出已启动模拟器 | 列出正在运行的模拟器 | “列出已启动的模拟器”,“显示正在运行的模拟程序” |
| 引导模拟器 | 通过UDID引导模拟器 | “引导模拟器5A321B8F-4D85-4267-9F79-2F5C91D142C2” |
| 关机模拟器 | 关闭模拟器 | “关机模拟器5A321B8F-4D85-4267-9F79-2F5C91D142C2” |
| 聚焦模拟器 | 将模拟器窗口带到前面 | “聚焦模拟器”,“将模拟器带到前面” |
| 列出模拟器会话 | 列出活动模拟器会话 | “列出模拟器会话”,“显示活动会话” |
📱 应用程序管理
| 命令 | 描述 | 示例 |
|---|---|---|
| 安装应用 | 在模拟器上安装应用 | “安装app/path/to/app.ipa” |
| 启动应用 | 在模拟器上启动应用 | “启动app com.example.app” |
| 终止应用程序 | 终止正在运行的应用程序 | “终止应用程序com.example.app” |
| 卸载应用 | 卸载应用 | “卸载应用com.example.app” |
| 列出应用程序 | 列出已安装的应用程序 | “列出应用程序”,“显示已安装应用程序” |
| 检查是否安装了应用程序 | 检查是否安装应用程序 | “是否安装了app com.example.app” |
🖱️ UI交互
| 命令 | 描述 | 示例 |
|---|---|---|
| 点击 | 点击特定坐标 | “点击100、200” |
| 滑动 | 执行滑动手势 | “从100、200滑动到300、400” |
| 按下按钮 | 按下设备按钮 | “按下HOME按钮”、“按下SIRI按钮” |
| 输入文本 | 键入文本 | “输入文本Hello World” |
| 按键 | 按代码按键 | “按4键” |
| 按键顺序 | 按一系列按键 | “按键顺序4 5 6” |
♿ 无障碍
| 命令 | 描述 | 示例 |
|---|---|---|
| 描述元素 | 列出所有辅助功能元素 | “描述所有元素”,“显示辅助功能元素” |
| 描述点 | 描述坐标处的元素 | “描述点100、200”,“150、300处是什么” |
📸 捕获和日志
| 命令 | 描述 | 示例 |
|---|---|---|
| 截图 | 截图 | “截图”,“截图” |
| 录制视频 | 录制屏幕活动 | “录制视频/路径/输出.mp4” |
| 停止录制 | 停止视频录制 | “停止录制”,“停止视频录制” |
| 获取日志 | 检索系统或应用程序日志 | “获取日志”,“获取com.example.app的日志” |
🐛 调试
| 命令 | 描述 | 示例 |
|---|---|---|
| 启动调试 | 启动调试会话 | “debug app.example.app”,“启动debug com.example.app” |
| 停止调试 | 停止调试会话 | “停止调试”、“终止调试会话” |
| 调试状态 | 获取调试会话状态 | “调试状态”,“显示调试信息” |
💥 崩溃日志
| 命令 | 描述 | 示例 |
|---|---|---|
| 列出崩溃日志 | 列出可用的崩溃日志 | “列出崩溃日志”,“显示崩溃日志” |
| 显示崩溃日志 | 显示崩溃日志的内容 | “显示崩溃日志crash_2023-01-01” |
| 删除崩溃日志 | 删除崩溃日志 | '删除崩溃日志','清除崩溃日志' |
🔧 附加命令
| 命令 | 描述 | 示例 |
|---|---|---|
| 安装dylib | 安装动态库 | “安装dylib/path/to/library.dylib” |
| 打开URL | 在模拟器中打开URL | “打开URLhttps://example.com" |
| 清除钥匙扣 | 清除模拟器的钥匙扣 | “清除钥匙扣” |
| 设置位置 | 设置模拟器的位置 | “设置位置37.7749,-122.4194” |
| 添加媒体 | 将媒体添加到相机胶卷 | “添加媒体/path/to/image.jpg” |
| 批准权限 | 批准应用程序权限 | “批准权限com.example.app照片相机” |
| 更新联系人 | 更新联系人数据库 | “更新联系人/path/to/contacts.sqlite” |
该界面支持idb CLI工具中可用的所有命令,为iOS模拟器自动化提供了一套全面的操作。
🔍 建筑
服务器由三个主要组件组成:
- IDB经理:通过idb直接与iOS模拟器交互的低级组件。
- NLParser:解释自然语言指令并将其转换为结构化命令的组件。
- MCP编排器:协调解析器和IDBManager之间交互的中心组件。
这些组件通过适配器连接:
- ParserToCorchestrator:将解析器结果转换为编排器命令。
- 编排器ToIDB:将编排器命令转换为IDBManager调用。
🔌 MCP集成
要将此服务器与模型上下文协议一起使用,请执行以下操作:
- 将服务器添加到MCP设置中:
{
"mcpServers": {
"ios-simulator": {
"command": "node",
"args": ["/path/to/mcp-server-simulator-ios-idb/dist/index.js"],
"env": {}
}
}
}- 连接到LLM应用程序中的服务器:
const result = await useMcpTool({
serverName: "ios-simulator",
toolName: "process-instruction",
arguments: {
instruction: "create simulator session"
}
});🙏 致谢
如果没有,这个项目是不可能的 脸书/idb,它提供了底层iOS模拟器控制功能。我们衷心感谢Facebook/Meta团队和idb项目的所有贡献者创建和维护了这样一个强大而可靠的工具。
📄 许可证
根据Apache-2.0的条款,此工具可作为开源工具使用。

