Skip to main content
Glama
register-tools.ts14.7 kB
// Import macOS build tools import { registerMacOSBuildWorkspaceTool, registerMacOSBuildProjectTool, registerMacOSBuildAndRunWorkspaceTool, registerMacOSBuildAndRunProjectTool, } from '../tools/build_macos.js'; // Import iOS simulator build tools import { registerIOSSimulatorBuildByNameWorkspaceTool, registerIOSSimulatorBuildByNameProjectTool, registerIOSSimulatorBuildByIdWorkspaceTool, registerIOSSimulatorBuildByIdProjectTool, registerIOSSimulatorBuildAndRunByNameWorkspaceTool, registerIOSSimulatorBuildAndRunByNameProjectTool, registerIOSSimulatorBuildAndRunByIdWorkspaceTool, registerIOSSimulatorBuildAndRunByIdProjectTool, } from '../tools/build_ios_simulator.js'; // Import iOS device build tools import { registerIOSDeviceBuildTools } from '../tools/build_ios_device.js'; // Import app path tools import { registerGetMacOSAppPathWorkspaceTool, registerGetMacOSAppPathProjectTool, registerGetiOSDeviceAppPathWorkspaceTool, registerGetiOSDeviceAppPathProjectTool, registerGetSimulatorAppPathByNameWorkspaceTool, registerGetSimulatorAppPathByNameProjectTool, registerGetSimulatorAppPathByIdWorkspaceTool, registerGetSimulatorAppPathByIdProjectTool, } from '../tools/app_path.js'; // Import build settings and scheme tools import { registerShowBuildSettingsWorkspaceTool, registerShowBuildSettingsProjectTool, registerListSchemesWorkspaceTool, registerListSchemesProjectTool, } from '../tools/build_settings.js'; // Import simulator tools import { registerListSimulatorsTool, registerBootSimulatorTool, registerOpenSimulatorTool, registerInstallAppInSimulatorTool, registerLaunchAppInSimulatorTool, registerLaunchAppWithLogsInSimulatorTool, registerSetSimulatorAppearanceTool, registerSetSimulatorLocationTool, registerResetSimulatorLocationTool, registerSetNetworkConditionTool, registerResetNetworkConditionTool, } from '../tools/simulator.js'; // Import bundle ID tools import { registerGetMacOSBundleIdTool, registerGetiOSBundleIdTool } from '../tools/bundleId.js'; // Import swift package tools import { registerBuildSwiftPackageTool } from '../tools/build-swift-package.js'; import { registerTestSwiftPackageTool } from '../tools/test-swift-package.js'; import { registerRunSwiftPackageTool, registerStopSwiftPackageTool, registerListSwiftPackageTool, registerCleanSwiftPackageTool, } from '../tools/run-swift-package.js'; // Import clean tool import { registerCleanWorkspaceTool, registerCleanProjectTool } from '../tools/clean.js'; // Import launch tools import { registerLaunchMacOSAppTool } from '../tools/launch.js'; // Import project/workspace discovery tool import { registerDiscoverProjectsTool } from '../tools/discover_projects.js'; // Import log capture tools import { registerStartSimulatorLogCaptureTool, registerStopAndGetSimulatorLogTool, } from '../tools/log.js'; // Import axe tools import { registerAxeTools } from '../tools/axe.js'; // Import screenshot tool import { registerScreenshotTool } from '../tools/screenshot.js'; // Import diagnostic tool import { registerDiagnosticTool } from '../tools/diagnostic.js'; // Import scaffold tool import { registerScaffoldTools } from '../tools/scaffold.js'; // Import MCP server import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; // Import tool group utilities import { ToolGroup, registerIfEnabled } from './tool-groups.js'; // Define tool registrations with their workflow-based groups const toolRegistrations = [ // Project Discovery and Information tools { register: registerDiscoverProjectsTool, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_DISCOVER_PROJECTS', }, { register: registerListSchemesWorkspaceTool, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_LIST_SCHEMES_WORKSPACE', }, { register: registerListSchemesProjectTool, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_LIST_SCHEMES_PROJECT', }, { register: registerListSimulatorsTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_LIST_SIMULATORS', }, { register: registerShowBuildSettingsWorkspaceTool, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_SHOW_BUILD_SETTINGS_WORKSPACE', }, { register: registerShowBuildSettingsProjectTool, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_SHOW_BUILD_SETTINGS_PROJECT', }, // Clean tools { register: registerCleanWorkspaceTool, groups: [ ToolGroup.MACOS_WORKFLOW, ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.IOS_DEVICE_WORKFLOW, ], envVar: 'XCODEBUILDMCP_TOOL_CLEAN_WORKSPACE', }, { register: registerCleanProjectTool, groups: [ ToolGroup.MACOS_WORKFLOW, ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.IOS_DEVICE_WORKFLOW, ], envVar: 'XCODEBUILDMCP_TOOL_CLEAN_PROJECT', }, // Swift Package tools { register: registerBuildSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_BUILD', }, { register: registerTestSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_TEST', }, { register: registerRunSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_RUN', isWriteTool: true, }, { register: registerStopSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_STOP', isWriteTool: true, }, { register: registerListSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_LIST', }, { register: registerCleanSwiftPackageTool, groups: [ToolGroup.SWIFT_PACKAGE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_SWIFT_PACKAGE_CLEAN', }, // macOS build tools { register: registerMacOSBuildWorkspaceTool, groups: [ToolGroup.MACOS_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_MACOS_BUILD_WORKSPACE', }, { register: registerMacOSBuildProjectTool, groups: [ToolGroup.MACOS_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_MACOS_BUILD_PROJECT', }, { register: registerMacOSBuildAndRunWorkspaceTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_MACOS_BUILD_AND_RUN_WORKSPACE', }, { register: registerMacOSBuildAndRunProjectTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_MACOS_BUILD_AND_RUN_PROJECT', }, // iOS Simulator build tools { register: registerIOSSimulatorBuildByNameWorkspaceTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_BY_NAME_WORKSPACE', }, { register: registerIOSSimulatorBuildByNameProjectTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_BY_NAME_PROJECT', }, { register: registerIOSSimulatorBuildByIdWorkspaceTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_BY_ID_WORKSPACE', }, { register: registerIOSSimulatorBuildByIdProjectTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_BY_ID_PROJECT', }, { register: registerIOSSimulatorBuildAndRunByNameWorkspaceTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_AND_RUN_BY_NAME_WORKSPACE', }, { register: registerIOSSimulatorBuildAndRunByNameProjectTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_AND_RUN_BY_NAME_PROJECT', }, { register: registerIOSSimulatorBuildAndRunByIdWorkspaceTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_AND_RUN_BY_ID_WORKSPACE', }, { register: registerIOSSimulatorBuildAndRunByIdProjectTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_IOS_SIMULATOR_BUILD_AND_RUN_BY_ID_PROJECT', }, // iOS Device build tools { register: registerIOSDeviceBuildTools, groups: [ToolGroup.IOS_DEVICE_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_IOS_DEVICE_BUILD_TOOLS', }, // App path tools { register: registerGetMacOSAppPathWorkspaceTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_GET_MACOS_APP_PATH_WORKSPACE', }, { register: registerGetMacOSAppPathProjectTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_GET_MACOS_APP_PATH_PROJECT', }, { register: registerGetiOSDeviceAppPathWorkspaceTool, groups: [ToolGroup.IOS_DEVICE_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_GET_IOS_DEVICE_APP_PATH_WORKSPACE', }, { register: registerGetiOSDeviceAppPathProjectTool, groups: [ToolGroup.IOS_DEVICE_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_GET_IOS_DEVICE_APP_PATH_PROJECT', }, { register: registerGetSimulatorAppPathByNameWorkspaceTool, groups: [ ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY, ], envVar: 'XCODEBUILDMCP_TOOL_GET_SIMULATOR_APP_PATH_BY_NAME_WORKSPACE', }, { register: registerGetSimulatorAppPathByNameProjectTool, groups: [ ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY, ], envVar: 'XCODEBUILDMCP_TOOL_GET_SIMULATOR_APP_PATH_BY_NAME_PROJECT', }, { register: registerGetSimulatorAppPathByIdWorkspaceTool, groups: [ ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY, ], envVar: 'XCODEBUILDMCP_TOOL_GET_SIMULATOR_APP_PATH_BY_ID_WORKSPACE', }, { register: registerGetSimulatorAppPathByIdProjectTool, groups: [ ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY, ], envVar: 'XCODEBUILDMCP_TOOL_GET_SIMULATOR_APP_PATH_BY_ID_PROJECT', }, // Simulator management tools { register: registerBootSimulatorTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_BOOT_SIMULATOR', }, { register: registerOpenSimulatorTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_OPEN_SIMULATOR', }, { register: registerSetSimulatorAppearanceTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT], envVar: 'XCODEBUILDMCP_TOOL_SET_SIMULATOR_APPEARANCE', }, { register: registerSetSimulatorLocationTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT], envVar: 'XCODEBUILDMCP_TOOL_SET_SIMULATOR_LOCATION', }, { register: registerResetSimulatorLocationTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT], envVar: 'XCODEBUILDMCP_TOOL_RESET_SIMULATOR_LOCATION', }, { register: registerSetNetworkConditionTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT], envVar: 'XCODEBUILDMCP_TOOL_SET_NETWORK_CONDITION', }, { register: registerResetNetworkConditionTool, groups: [ToolGroup.SIMULATOR_MANAGEMENT], envVar: 'XCODEBUILDMCP_TOOL_RESET_NETWORK_CONDITION', }, // App installation and launch tools { register: registerInstallAppInSimulatorTool, groups: [ToolGroup.APP_DEPLOYMENT, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_INSTALL_APP_IN_SIMULATOR', }, { register: registerLaunchAppInSimulatorTool, groups: [ToolGroup.APP_DEPLOYMENT, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_LAUNCH_APP_IN_SIMULATOR', }, { register: registerLaunchAppWithLogsInSimulatorTool, groups: [ToolGroup.APP_DEPLOYMENT, ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.DIAGNOSTICS], envVar: 'XCODEBUILDMCP_TOOL_LAUNCH_APP_WITH_LOGS_IN_SIMULATOR', }, // Bundle ID tools { register: registerGetMacOSBundleIdTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_GET_MACOS_BUNDLE_ID', }, { register: registerGetiOSBundleIdTool, groups: [ ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.IOS_DEVICE_WORKFLOW, ToolGroup.APP_DEPLOYMENT, ToolGroup.PROJECT_DISCOVERY, ], envVar: 'XCODEBUILDMCP_TOOL_GET_IOS_BUNDLE_ID', }, // Launch tools { register: registerLaunchMacOSAppTool, groups: [ToolGroup.MACOS_WORKFLOW, ToolGroup.APP_DEPLOYMENT], envVar: 'XCODEBUILDMCP_TOOL_LAUNCH_MACOS_APP', }, // Log capture tools { register: registerStartSimulatorLogCaptureTool, groups: [ToolGroup.DIAGNOSTICS, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_START_SIMULATOR_LOG_CAPTURE', }, { register: registerStopAndGetSimulatorLogTool, groups: [ToolGroup.DIAGNOSTICS, ToolGroup.IOS_SIMULATOR_WORKFLOW], envVar: 'XCODEBUILDMCP_TOOL_STOP_AND_GET_SIMULATOR_LOG', }, // UI automation tools { register: registerUIAutomationTools, groups: [ToolGroup.UI_TESTING], envVar: 'XCODEBUILDMCP_TOOL_UI_AUTOMATION_TOOLS', }, // Screenshot tool { register: registerScreenshotTool, groups: [ToolGroup.IOS_SIMULATOR_WORKFLOW, ToolGroup.UI_TESTING], envVar: 'XCODEBUILDMCP_TOOL_SCREENSHOT', }, // Scaffold tool { register: registerScaffoldTools, groups: [ToolGroup.PROJECT_DISCOVERY], envVar: 'XCODEBUILDMCP_TOOL_SCAFFOLD_PROJECT', }, ]; // Registers the UI automation tools (will be split into individual tools in the future) function registerUIAutomationTools(server: McpServer): void { registerAxeTools(server); } // Diagnostic tool const diagnosticTool = { register: registerDiagnosticTool, groups: [ToolGroup.DIAGNOSTICS], envVar: 'XCODEBUILDMCP_DEBUG', }; export function registerTools(server: McpServer): void { // Register all tools using the new system for (const toolReg of toolRegistrations) { registerIfEnabled(server, toolReg); } // Register diagnostic tool - conditionally based on debug env var if (process.env.XCODEBUILDMCP_DEBUG) { registerIfEnabled(server, diagnosticTool); } }

Implementation Reference

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SampsonKY/XcodeBuildMCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server