UNPKG

@smartbear/mcp

Version:

MCP server for interacting SmartBear Products

107 lines (106 loc) 3.79 kB
import { QMetryToolsHandlers } from "../config/constants.js"; /** * Registry of all modules that support auto-resolution * Add new modules here to automatically support viewId/folderPath resolution */ export const AUTO_RESOLVE_MODULES = [ { handler: QMetryToolsHandlers.FETCH_TEST_CASES, viewIdPath: "latestViews.TC.viewId", moduleName: "Test Cases", }, { handler: QMetryToolsHandlers.CREATE_TEST_CASE, folderIdPath: "rootFolders.TC.id", folderIdField: "tcFolderID", moduleName: "Test Cases", }, { handler: QMetryToolsHandlers.FETCH_REQUIREMENTS, viewIdPath: "latestViews.RQ.viewId", moduleName: "Requirements", }, { handler: QMetryToolsHandlers.FETCH_TEST_SUITES, viewIdPath: "latestViews.TS.viewId", moduleName: "Test Suites", }, { handler: QMetryToolsHandlers.FETCH_TESTCASE_RUNS_BY_TESTSUITE_RUN, viewIdPath: "latestViews.TE.viewId", moduleName: "Test Case Run By Test Suite Run", }, { handler: QMetryToolsHandlers.FETCH_EXECUTIONS_BY_TESTSUITE, viewIdPath: "latestViews.TEL.viewId", moduleName: "Executions By Test Suites", }, { handler: QMetryToolsHandlers.FETCH_TESTSUITES_FOR_TESTCASE, viewIdPath: "latestViews.TSFS.viewId", folderIdPath: "rootFolders.TS.id", folderIdField: "tsFolderID", moduleName: "Test Suites", }, { handler: QMetryToolsHandlers.CREATE_TEST_SUITE, folderIdPath: "rootFolders.TS.id", folderIdField: "parentFolderId", moduleName: "Test Suites", }, { handler: QMetryToolsHandlers.FETCH_ISSUES, viewIdPath: "latestViews.IS.viewId", moduleName: "Issues", }, ]; /** * Helper function to safely get nested property value using dot notation * @param obj - Object to traverse * @param path - Dot notation path (e.g., 'latestViews.TC.viewId') * @returns The value at the path or undefined if not found */ export function getNestedProperty(obj, path) { return path.split(".").reduce((current, key) => current?.[key], obj); } /** * Generic auto-resolve function for viewId, folderPath, and folderID * @param args - Tool arguments that may contain viewId/folderPath/folderID * @param projectInfo - Project information from QMetry API * @param config - Module configuration for this specific handler * @returns Updated args with resolved values */ export function autoResolveViewIdAndFolderPath(args, projectInfo, config) { const updatedArgs = { ...args }; let viewId = updatedArgs.viewId; const folderPath = updatedArgs.folderPath; // Auto-resolve viewId if not provided and config has viewIdPath if (!viewId && config.viewIdPath) { viewId = getNestedProperty(projectInfo, config.viewIdPath); if (viewId) { updatedArgs.viewId = viewId; } } // Auto-resolve folderPath if not provided (defaults to root) if (folderPath === undefined) { updatedArgs.folderPath = ""; } // Auto-resolve folder ID if not provided and config has folderIdPath if (config.folderIdPath && config.folderIdField && !updatedArgs[config.folderIdField]) { const folderId = getNestedProperty(projectInfo, config.folderIdPath); if (folderId) { updatedArgs[config.folderIdField] = folderId; } } return updatedArgs; } /** * Find the auto-resolve configuration for a given handler * @param handler - The handler name to find config for * @returns Module configuration or undefined if not found */ export function findAutoResolveConfig(handler) { return AUTO_RESOLVE_MODULES.find((module) => module.handler === handler); }