UNPKG

xc-mcp

Version:

MCP server that wraps Xcode command-line tools for iOS/macOS development workflows

171 lines (145 loc) 5.14 kB
import { McpError, ErrorCode } from '@modelcontextprotocol/sdk/types.js'; import { idbInstallTool } from '../install.js'; import { idbUninstallTool } from '../uninstall.js'; import { idbLaunchTool } from '../launch.js'; import { idbTerminateTool } from '../terminate.js'; // ============================================================================ // PUBLIC API // ============================================================================ /** * Unified IDB app lifecycle management. * * Routes IDB app operations (install, uninstall, launch, terminate) to * specialized handlers while maintaining modular code organization. * * @param args App operation and parameters * @returns Tool result with operation status * @throws McpError for invalid operation or execution failure */ export async function idbAppTool(args) { const typedArgs = args; try { return await routeOperation(typedArgs); } catch (error) { if (error instanceof McpError) { throw error; } throw new McpError(ErrorCode.InternalError, `idb-app failed: ${error instanceof Error ? error.message : String(error)}`); } } // ============================================================================ // OPERATION ROUTING // ============================================================================ /** * Route IDB app operation to appropriate handler based on operation type. * * Each operation validates its required parameters and delegates to * specialized implementation for execution. */ async function routeOperation(args) { const { operation } = args; switch (operation) { case 'install': if (!args.appPath) { throw new McpError(ErrorCode.InvalidRequest, 'appPath is required for install operation'); } return idbInstallTool({ appPath: args.appPath, udid: args.udid }); case 'uninstall': if (!args.bundleId) { throw new McpError(ErrorCode.InvalidRequest, 'bundleId is required for uninstall operation'); } return idbUninstallTool({ bundleId: args.bundleId, udid: args.udid }); case 'launch': if (!args.bundleId) { throw new McpError(ErrorCode.InvalidRequest, 'bundleId is required for launch operation'); } return idbLaunchTool({ bundleId: args.bundleId, udid: args.udid, arguments: args.arguments, environment: args.environment, streamOutput: args.streamOutput, }); case 'terminate': if (!args.bundleId) { throw new McpError(ErrorCode.InvalidRequest, 'bundleId is required for terminate operation'); } return idbTerminateTool({ bundleId: args.bundleId, udid: args.udid }); default: throw new McpError(ErrorCode.InvalidRequest, `Unknown operation: ${operation}. Valid operations: install, uninstall, launch, terminate`); } } // ============================================================================ // DOCUMENTATION // ============================================================================ export const IDB_APP_DOCS = ` # idb-app Unified IDB app lifecycle management - install, uninstall, launch, terminate. ## Overview Single tool for IDB-based app management. Routes to specialized handlers while maintaining clean operation semantics. ## Operations ### install Install iOS app via IDB. **Parameters:** - \`appPath\` (string): Path to .app bundle - \`udid\` (string, optional): Target device UDID **Example:** \`\`\`typescript await idbAppTool({ operation: 'install', appPath: '/path/to/MyApp.app' }) \`\`\` --- ### uninstall Uninstall iOS app via IDB. **Parameters:** - \`bundleId\` (string): App bundle ID - \`udid\` (string, optional): Target device UDID **Example:** \`\`\`typescript await idbAppTool({ operation: 'uninstall', bundleId: 'com.example.MyApp' }) \`\`\` --- ### launch Launch iOS app via IDB. **Parameters:** - \`bundleId\` (string): App bundle ID - \`udid\` (string, optional): Target device UDID - \`arguments\` (string[], optional): Command-line arguments - \`environment\` (object, optional): Environment variables - \`streamOutput\` (boolean, optional): Stream app output **Example:** \`\`\`typescript await idbAppTool({ operation: 'launch', bundleId: 'com.example.MyApp', arguments: ['--debug'], streamOutput: true }) \`\`\` --- ### terminate Terminate running iOS app via IDB. **Parameters:** - \`bundleId\` (string): App bundle ID - \`udid\` (string, optional): Target device UDID **Example:** \`\`\`typescript await idbAppTool({ operation: 'terminate', bundleId: 'com.example.MyApp' }) \`\`\` --- ## Related Tools - \`idb-targets\`: List and manage IDB targets - \`idb-ui-tap\`, \`idb-ui-input\`, \`idb-ui-gesture\`: UI automation - \`simctl-app\`: Simctl-based app management `; export const IDB_APP_DOCS_MINI = 'Manage IDB apps (install/launch/etc). Use rtfm({ toolName: "idb-app" }) for docs.'; //# sourceMappingURL=index.js.map