Skip to main content
Glama
tool-groups.ts4.14 kB
/** * Tool Groups Configuration * * This file defines the groups of tools and provides utilities to determine * which tools should be enabled based on environment variables. */ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js'; import { log } from './logger.js'; // Tool group definitions export enum ToolGroup { // Workflow-based groups // Project/target discovery and analysis PROJECT_DISCOVERY = 'XCODEBUILDMCP_GROUP_PROJECT_DISCOVERY', // iOS Simulator development workflow IOS_SIMULATOR_WORKFLOW = 'XCODEBUILDMCP_GROUP_IOS_SIMULATOR_WORKFLOW', // iOS Device development workflow IOS_DEVICE_WORKFLOW = 'XCODEBUILDMCP_GROUP_IOS_DEVICE_WORKFLOW', // macOS application development workflow MACOS_WORKFLOW = 'XCODEBUILDMCP_GROUP_MACOS_WORKFLOW', // Swift Package Manager workflow SWIFT_PACKAGE_WORKFLOW = 'XCODEBUILDMCP_GROUP_SWIFT_PACKAGE_WORKFLOW', // Simulator device management SIMULATOR_MANAGEMENT = 'XCODEBUILDMCP_GROUP_SIMULATOR_MANAGEMENT', // Application deployment tools APP_DEPLOYMENT = 'XCODEBUILDMCP_GROUP_APP_DEPLOYMENT', // Logging and diagnostics DIAGNOSTICS = 'XCODEBUILDMCP_GROUP_DIAGNOSTICS', // UI testing and automation UI_TESTING = 'XCODEBUILDMCP_GROUP_UI_TESTING', } // Map tool registration functions to their respective groups and individual env var names export interface ToolRegistration { register: (server: McpServer) => void; groups: ToolGroup[]; envVar: string; } // Check if selective tool registration is enabled by checking if any tool or group env vars are set export function isSelectiveToolsEnabled(): boolean { // Check if any tool-specific environment variables are set const hasToolEnvVars = Object.keys(process.env).some( (key) => key.startsWith('XCODEBUILDMCP_TOOL_') && process.env[key] === 'true', ); // Check if any group-specific environment variables are set const hasGroupEnvVars = Object.keys(process.env).some( (key) => key.startsWith('XCODEBUILDMCP_GROUP_') && process.env[key] === 'true', ); const isEnabled = hasToolEnvVars || hasGroupEnvVars; return isEnabled; } // Check if a specific tool should be enabled export function isToolEnabled(toolEnvVar: string): boolean { // If selective tools mode is not enabled, all tools are enabled by default if (!isSelectiveToolsEnabled()) { return true; } const isEnabled = process.env[toolEnvVar] === 'true'; return isEnabled; } // Check if a tool group should be enabled export function isGroupEnabled(group: ToolGroup): boolean { // If selective tools mode is not enabled, all groups are enabled by default if (!isSelectiveToolsEnabled()) { return true; } // In selective mode, group must be explicitly enabled const isEnabled = process.env[group] === 'true'; return isEnabled; } // Check if a tool should be registered based on its groups and individual env var export function shouldRegisterTool(toolReg: ToolRegistration): boolean { // If selective tools mode is not enabled, register all tools if (!isSelectiveToolsEnabled()) { return true; } // Check if the tool is enabled individually if (isToolEnabled(toolReg.envVar)) { return true; } // Check if any of the tool's groups are enabled const enabledByGroup = toolReg.groups.some((group) => isGroupEnabled(group)); return enabledByGroup; } // List all enabled tool groups (for debugging purposes) export function listEnabledGroups(): string[] { if (!isSelectiveToolsEnabled()) { return Object.values(ToolGroup); } return Object.values(ToolGroup).filter((group) => isGroupEnabled(group as ToolGroup)); } // Helper to register a tool if it's enabled export function registerIfEnabled(server: McpServer, toolReg: ToolRegistration): void { const shouldRegister = shouldRegisterTool(toolReg); if (shouldRegister) { if (process.env.XCODEBUILDMCP_DEBUG === 'true') { log('debug', `Registering tool: ${toolReg.envVar}`); } toolReg.register(server); } else { if (process.env.XCODEBUILDMCP_DEBUG === 'true') { log('debug', `Skipping tool: ${toolReg.envVar} (not enabled)`); } } }

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