xcode-mcp
Un servidor MCP (Protocolo de Contexto de Modelo) que proporciona herramientas para operaciones relacionadas con Xcode, lo que facilita el trabajo con proyectos Xcode desde clientes MCP como Claude Desktop. El servidor ofrece diversas utilidades para la gestión de proyectos Xcode, la creación, las pruebas, el archivado, la firma de código y otras herramientas de desarrollo para iOS.
Características
Recuperación de información del proyecto Xcode y listado de esquemas
Capacidades de compilación mejoradas con opciones de salida limpias y personalizadas
Ejecución de pruebas integral con control granular
Archivado de aplicaciones y exportación de IPA para distribución
Gestión de perfiles de aprovisionamiento y firma de código
Integración de Swift Package Manager
Gestión del simulador de iOS mediante simctl
NUEVO: Implementación y lanzamiento de aplicaciones en dispositivos reales con detección automática de instalación de Xcode y administración mejorada de dispositivos
Manejo inteligente de errores de instalación de aplicaciones con reintento automático
Almacenamiento en caché inteligente de información del dispositivo y de Xcode para un mejor rendimiento
Related MCP server: MCP Boilerplate
Instalación
npm install @devyhan/xcode-mcpUso
Uso con Claude Desktop
Abra el archivo de configuración de Claude Desktop:
# macOS open ~/Library/Application\ Support/Claude/claude_desktop_config.jsonAgregue o modifique la siguiente configuración:
{ "mcpServers": { "xcode-mcp": { "command": "npx", "args": [ "@devyhan/xcode-mcp", "-y" ] } } }Reinicie Claude Desktop.
Herramientas disponibles
1. información del proyecto xcode
Recupera información detallada sobre un proyecto o espacio de trabajo de Xcode, incluidos objetivos, configuraciones y esquemas.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeprojSalida de muestra :
{
"project": {
"name": "MyApp",
"targets": ["MyApp", "MyAppTests", "MyAppUITests"],
"configurations": ["Debug", "Release"],
"schemes": ["MyApp"]
}
}2. esquemas de lista de xcode
Proporciona una lista completa de todos los esquemas, objetivos y configuraciones disponibles en un proyecto o espacio de trabajo de Xcode.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeprojSalida de muestra :
Information about project "MyApp":
Targets:
MyApp
MyAppTests
MyAppUITests
Build Configurations:
Debug
Release
Schemes:
MyApp
MyAppTests3. xcode-build
Crea un proyecto o espacio de trabajo de Xcode con opciones mejoradas. Admite compilaciones de proyectos y espacios de trabajo, compilaciones limpias y directorios de salida personalizados.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)scheme(obligatorio): El esquema para construirconfiguration(opcional): Configuración de compilación (por ejemplo, Depuración, Versión)destination(opcional): destino de compilación (por ejemplo, 'plataforma=iOS Simulator,nombre=iPhone 14')extraArgs(opcional): argumentos adicionales de xcodebuild como una matriz de cadenasoutputDir(opcional): directorio de salida de compilación personalizado (SYMROOT)clean(opcional): si se debe realizar una compilación limpia (predeterminado: falso)
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Debug
Destination: platform=iOS Simulator,name=iPhone 14
Clean: true
OutputDir: /Users/username/Desktop/buildComando generado :
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" clean build -configuration "Debug" -destination "platform=iOS Simulator,name=iPhone 14" SYMROOT="/Users/username/Desktop/build"4. prueba de xcode
Ejecuta pruebas para un proyecto o espacio de trabajo de Xcode con amplias opciones. Proporciona un control preciso sobre la ejecución de pruebas, incluyendo la ejecución de pruebas específicas, planes de prueba y diversos modos de prueba.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)scheme(obligatorio): El esquema a probardestination(obligatorio): destino de la prueba (p. ej., 'plataforma=iOS Simulator,nombre=iPhone 14')testPlan(opcional): Nombre del plan de prueba a utilizaronlyTesting(opcional): Matriz de identificadores de prueba específicos para ejecutarskipTesting(opcional): Matriz de identificadores de prueba para omitirresultBundlePath(opcional): Ruta para guardar el paquete de resultados de la pruebabuildForTesting(opcional): compilar solo para probar sin ejecutar pruebastestWithoutBuilding(opcional): ejecuta pruebas sin compilar
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Destination: platform=iOS Simulator,name=iPhone 14
OnlyTesting: ["MyAppTests/LoginTests"]
ResultBundlePath: /Users/username/Desktop/TestResultsComando generado :
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -destination "platform=iOS Simulator,name=iPhone 14" test -only-testing:"MyAppTests/LoginTests" -resultBundlePath "/Users/username/Desktop/TestResults"5. archivo xcode
Crea un archivo (.xcarchive) de un proyecto de Xcode y, opcionalmente, lo exporta a un archivo IPA para su distribución. Compatible con los métodos de distribución de App Store, ad-hoc y empresariales mediante la opción de exportación plist.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)scheme(obligatorio): El esquema a archivarconfiguration(opcional): Configuración de compilación (por ejemplo, versión)archivePath(obligatorio): Ruta para guardar el archivo .xcarchiveexportPath(opcional): Ruta para exportar el archivo (por ejemplo, archivo IPA)exportOptionsPlist(opcional): Ruta al archivo exportOptions.plist
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Configuration: Release
ArchivePath: /Users/username/Desktop/MyApp.xcarchive
ExportPath: /Users/username/Desktop/Export
ExportOptionsPlist: /Users/username/Projects/MyApp/exportOptions.plistComandos generados :
# Archive command
xcodebuild -project "/Users/username/Projects/MyApp/MyApp.xcodeproj" -scheme "MyAppScheme" -configuration "Release" archive -archivePath "/Users/username/Desktop/MyApp.xcarchive"
# Export command (if exportPath and exportOptionsPlist are provided)
xcodebuild -exportArchive -archivePath "/Users/username/Desktop/MyApp.xcarchive" -exportPath "/Users/username/Desktop/Export" -exportOptionsPlist "/Users/username/Projects/MyApp/exportOptions.plist"6. información de diseño de código de xcode
Recupera información completa sobre la firma de código y los perfiles de aprovisionamiento de un proyecto de Xcode. Muestra las identidades de firma de código instaladas, la configuración de firma de código del proyecto y los perfiles de aprovisionamiento en el sistema.
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)target(opcional): nombre del objetivo específico
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Target: MyAppTargetSalida de muestra :
코드 서명 인증서 목록:
1) 01AB2345CD6789EF0123456789ABCDEF01234567 "Apple Development: John Doe (ABC12DEF34)"
2) 9876543210FEDCBA98765432109876543210FEDC "Apple Distribution: Example Corp (XYZ12ABC3)"
프로젝트 코드 서명 설정:
CODE_SIGN_IDENTITY = Apple Development
CODE_SIGN_STYLE = Automatic
DEVELOPMENT_TEAM = ABC123DEF4
PROVISIONING_PROFILE_SPECIFIER =
설치된 프로비저닝 프로파일:
-rw-r--r-- 1 username staff 12345 Feb 1 12:34 01234567-89ab-cdef-0123-456789abcdef.mobileprovision
-rw-r--r-- 1 username staff 23456 Mar 15 09:12 fedcba98-7654-3210-fedc-ba9876543210.mobileprovision7. administrador de paquetes swift
Proporciona acceso a la funcionalidad del Gestor de Paquetes Swift (SPM) para gestionar paquetes Swift. Admite comandos comunes de SPM como init, update, resolve, reset y clean.
Parámetros :
command(obligatorio): comando SPM a ejecutar ("init", "update", "resolve", "reset", "clean")packageDir(obligatorio): Ruta del directorio del paquete SwiftextraArgs(opcional): argumentos SPM adicionales como una matriz de cadenas
Ejemplo :
Command: update
PackageDir: /Users/username/Projects/MySwiftPackage
ExtraArgs: ["--enable-pubgrub-resolver"]Comando generado :
cd "/Users/username/Projects/MySwiftPackage" && swift package update --enable-pubgrub-resolverSalida de muestra :
Resolving dependencies...
Fetching https://github.com/example/example-package.git
Checking out https://github.com/example/example-package.git at 1.2.38. simctl-manager
Proporciona acceso a las funciones de gestión del simulador de iOS mediante la herramienta de línea de comandos simctl . Permite listar, crear, iniciar, instalar aplicaciones y gestionar dispositivos del simulador.
Parámetros :
command(obligatorio): comando SimCtl ("lista", "crear", "arrancar", "apagar", "borrar", "instalar", "iniciar", "eliminar")extraArgs(opcional): argumentos simctl adicionales como una matriz de cadenas
Ejemplo :
Command: list
ExtraArgs: ["devices", "--json"]Comando generado :
xcrun simctl list devices --jsonEjemplo de salida (abreviado) :
{
"devices": {
"com.apple.CoreSimulator.SimRuntime.iOS-17-0": [
{
"name": "iPhone 14",
"udid": "12345678-1234-1234-1234-123456789ABC",
"state": "Booted",
"isAvailable": true
}
]
}
}9. ejecutar en el dispositivo
Crea, instala y ejecuta una aplicación en un dispositivo iOS físico. Admite el nombre del dispositivo (incluidos los nombres en coreano) o UUID para la selección del dispositivo, las variables de entorno y la transmisión de registros. Ahora con especificación directa de bundleId, opción para omitir la compilación y argumentos de lanzamiento adicionales .
Parámetros :
projectPath(obligatorio): ruta al proyecto Xcode (.xcodeproj) o al espacio de trabajo (.xcworkspace)scheme(obligatorio): El esquema para construir y ejecutardevice(obligatorio): identificador o nombre del dispositivo (admite nombres coreanos)configuration(opcional): Configuración de compilación (por ejemplo, Depuración, Versión)streamLogs(opcional): si se deben transmitir los registros del dispositivo después del lanzamientostartStopped(opcional): si se debe iniciar la aplicación en un estado de pausa para adjuntarla al depuradorenvironmentVars(opcional): Variables de entorno para pasar a la aplicación (formato clave1=valor1,clave2=valor2)xcodePath(opcional): ruta de la aplicación Xcode (predeterminado: "/Applications/Xcode-16.2.0.app")listDevices(opcional): muestra todos los dispositivos detectados con sus ID antes de ejecutarseskipBuild(opcional): omite el paso de compilación e instalación para aplicaciones ya instaladasextraLaunchArgs(opcional): argumentos adicionales para pasar al comando de lanzamiento devicectldirectBundleId(opcional): especifica directamente el ID del paquete en lugar de extraerlo del proyecto
Ejemplo :
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj
Scheme: MyAppScheme
Device: "Your-iPhone"
Configuration: Debug
StreamLogs: true
EnvironmentVars: "DEBUG_MODE=1,API_URL=https://test-api.example.com"Proceso :
La herramienta identifica tanto el UDID de Xcode como el UUID de CoreDevice para el dispositivo especificado
Utiliza el UDID de Xcode para crear e instalar la aplicación.
Utiliza el UUID de CoreDevice para iniciar la aplicación con
devicectlRecupera el identificador del paquete de la aplicación.
Si se solicita, transmite los registros del dispositivo.
Mejoras clave en la versión v0.4.0 :
Capacidad de especificar bundleId directamente sin necesidad de un proyecto
Omitir el paso de compilación e instalación para aplicaciones ya instaladas
Compatibilidad con argumentos adicionales del comando de lanzamiento devicectl
Mejor visualización de la información del modelo del dispositivo y de la versión del sistema operativo
Manejo de rutas y registro mejorados para comandos devicectl
Salida de muestra :
// Standard output with build and install
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.
로그 스트리밍이 시작되었습니다. 로그는 터미널에서 확인할 수 있습니다.
// Direct bundle ID usage with skip build
기기 모델: iPhone14,7
기기 OS 버전: 17.0
사용자 지정 번들 ID 사용: com.example.myapp
빌드 및 설치 과정 건너뛰기
앱 실행 결과:
Launched application with com.example.myapp bundle identifier.Ejemplo de escenario: uso con LLM
A continuación se muestra un ejemplo de cómo se podría incentivar a un LLM como Claude a utilizar estas herramientas en secuencia:
Mensaje de usuario a Claude:
I need to inspect my Xcode project, run some tests, and then archive it for distribution.
1. First, use the xcode-list-schemes tool to get all available schemes for my project at /Users/username/Projects/MyApp/MyApp.xcodeproj
2. After you see the schemes, run tests for the first available scheme on the iPhone 14 simulator.
3. Then archive the app for distribution using the Release configuration.Flujo de trabajo esperado:
Claude ejecutará la herramienta
xcode-list-schemespara recuperar todos los esquemas:Project path: /Users/username/Projects/MyApp/MyApp.xcodeprojClaude ejecutará la herramienta
xcode-testcon el esquema identificado:Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj Scheme: [First scheme from output] Destination: platform=iOS Simulator,name=iPhone 14Luego, Claude usará la herramienta
xcode-archivepara crear un archivo:Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj Scheme: [First scheme from output] Configuration: Release ArchivePath: /Users/username/Desktop/MyApp.xcarchive
Este flujo de trabajo demuestra cómo encadenar varias herramientas, utilizando la salida de una herramienta para informar los parámetros de otra.
Ejemplo: Ejecución en un dispositivo real
Mensaje de usuario a Claude:
I need to test my app on a real device:
1. Get the list of available devices (including connected physical devices)
2. Run my app on my connected iPhone Flujo de trabajo esperado:
Claude primero obtendrá la lista de dispositivos:
listDevices: trueClaude identificará su dispositivo físico y ejecutará la aplicación en él:
Project path: /Users/username/Projects/MyApp/MyApp.xcodeproj Scheme: MyApp Device: "Your iPhone" (or the device UUID) StreamLogs: truePara un relanzamiento rápido sin necesidad de reconstruir:
Device: "Your iPhone" DirectBundleId: "com.example.myapp" SkipBuild: true
Consideraciones de seguridad
Esta herramienta puede ejecutar comandos relacionados con Xcode, lo que supone riesgos de seguridad. Nota:
Úselo solo con proyectos Xcode confiables.
Tenga cuidado con los proyectos de fuentes desconocidas.
No incluya información confidencial en los parámetros de compilación.
Desarrollo
Requisitos
Node.js 16 o superior
npm 6 o superior
Xcode 14 o superior (para todas las funciones)
Xcode 16 o superior (necesario para
devicectly funciones del dispositivo real)
Desarrollo y pruebas locales
# Clone the repository
git clone https://github.com/devyhan/xcode-mcp.git
cd xcode-mcp
# Install dependencies
npm install
# Run in development mode
npm run dev
# Build
npm run build
# Test
npm testLicencia
Instituto Tecnológico de Massachusetts (MIT)