Skip to main content
Glama

BrowserStack MCP server

Official
utils.ts3.41 kB
import { uploadApp } from "../native-execution/appautomate.js"; import { AppSDKSupportedTestingFramework, AppSDKSupportedTestingFrameworkEnum, createStep, } from "./index.js"; import { SUPPORTED_CONFIGURATIONS } from "./types.js"; export function isBrowserStackAppUrl(appPath: string): boolean { return appPath.startsWith("bs://"); } export function generateBuildName(baseName: string = "app-automate"): string { const timestamp = new Date().toISOString().slice(0, 19).replace(/[:-]/g, ""); return `${baseName}-${timestamp}`; } export function createError( message: string, context?: Record<string, any>, ): Error { const error = new Error(message); if (context) { (error as any).context = context; } return error; } // Platform utilities for cross-platform support export const PLATFORM_UTILS = { isWindows: process.platform === "win32", isMac: process.platform === "darwin", isAppleSilicon: process.platform === "darwin" && process.arch === "arm64", getPlatformLabel: () => { switch (process.platform) { case "win32": return "Windows"; case "darwin": return "macOS"; default: return "macOS"; } }, }; export async function getAppUploadInstruction( appPath: string, username: string, accessKey: string, detectedTestingFramework: AppSDKSupportedTestingFramework, ): Promise<string> { if ( detectedTestingFramework === AppSDKSupportedTestingFrameworkEnum.nightwatch || detectedTestingFramework === AppSDKSupportedTestingFrameworkEnum.webdriverio || detectedTestingFramework === AppSDKSupportedTestingFrameworkEnum.cucumberRuby ) { const app_url = await uploadApp(appPath, username, accessKey); if (app_url) { return createStep( "Updating app_path with app_url", `Replace the value of app_path in your configuration with: ${app_url}`, ); } } return ""; } export type SupportedFramework = keyof typeof SUPPORTED_CONFIGURATIONS; type SupportedLanguage = keyof (typeof SUPPORTED_CONFIGURATIONS)[SupportedFramework]; type SupportedTestingFramework = string; export function validateSupportforAppAutomate( framework: SupportedFramework, language: SupportedLanguage, testingFramework: SupportedTestingFramework, ) { const frameworks = Object.keys( SUPPORTED_CONFIGURATIONS, ) as SupportedFramework[]; if (!SUPPORTED_CONFIGURATIONS[framework]) { throw new Error( `Unsupported framework '${framework}'. Supported frameworks: ${frameworks.join(", ")}`, ); } const languages = Object.keys( SUPPORTED_CONFIGURATIONS[framework], ) as SupportedLanguage[]; if (!SUPPORTED_CONFIGURATIONS[framework][language]) { throw new Error( `Unsupported language '${language}' for framework '${framework}'. Supported languages: ${languages.join(", ")}`, ); } const testingFrameworks = SUPPORTED_CONFIGURATIONS[framework][ language ] as string[]; if (testingFrameworks.length === 0) { throw new Error( `No testing frameworks are supported for language '${language}' and framework '${framework}'.`, ); } if (!testingFrameworks.includes(testingFramework)) { throw new Error( `Unsupported testing framework '${testingFramework}' for language '${language}' and framework '${framework}'. Supported testing frameworks: ${testingFrameworks.join(", ")}`, ); } }

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/browserstack/mcp-server'

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