@smartbear/mcp 0.8.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +29 -4
  2. package/dist/api-hub/client/api.js +239 -10
  3. package/dist/api-hub/client/configuration.js +5 -0
  4. package/dist/api-hub/client/index.js +1 -0
  5. package/dist/api-hub/client/portal-types.js +126 -0
  6. package/dist/api-hub/client/registry-types.js +8 -0
  7. package/dist/api-hub/client/tools.js +78 -15
  8. package/dist/api-hub/client/user-management-types.js +24 -0
  9. package/dist/api-hub/client.js +34 -0
  10. package/dist/bugsnag/client/api/CurrentUser.js +12 -49
  11. package/dist/bugsnag/client/api/Error.js +29 -142
  12. package/dist/bugsnag/client/api/Project.js +52 -113
  13. package/dist/bugsnag/client/api/api.js +3743 -0
  14. package/dist/bugsnag/client/api/base.js +97 -34
  15. package/dist/bugsnag/client/api/configuration.js +26 -0
  16. package/dist/bugsnag/client/api/index.js +2 -0
  17. package/dist/bugsnag/client/filters.js +28 -0
  18. package/dist/bugsnag/client.js +104 -155
  19. package/dist/collaborator/client.js +364 -0
  20. package/dist/common/server.js +73 -23
  21. package/dist/common/types.js +6 -1
  22. package/dist/index.js +9 -1
  23. package/dist/pactflow/client/prompt-utils.js +2 -1
  24. package/dist/pactflow/client/tools.js +4 -4
  25. package/dist/pactflow/client/utils.js +5 -4
  26. package/dist/pactflow/client.js +10 -9
  27. package/dist/qmetry/client/api/client-api.js +21 -16
  28. package/dist/qmetry/client/api/error-handler.js +329 -0
  29. package/dist/qmetry/client/auto-resolve.js +96 -0
  30. package/dist/qmetry/client/handlers.js +33 -2
  31. package/dist/qmetry/client/issues.js +123 -0
  32. package/dist/qmetry/client/project.js +73 -0
  33. package/dist/qmetry/client/requirement.js +76 -0
  34. package/dist/qmetry/client/testcase.js +122 -6
  35. package/dist/qmetry/client/testsuite.js +272 -0
  36. package/dist/qmetry/client/tools/index.js +17 -0
  37. package/dist/qmetry/client/tools/issue-tools.js +545 -0
  38. package/dist/qmetry/client/tools/project-tools.js +348 -0
  39. package/dist/qmetry/client/tools/requirement-tools.js +530 -0
  40. package/dist/qmetry/client/tools/testcase-tools.js +526 -0
  41. package/dist/qmetry/client/tools/testsuite-tools.js +772 -0
  42. package/dist/qmetry/client/tools/types.js +1 -0
  43. package/dist/qmetry/client/utils.js +16 -0
  44. package/dist/qmetry/client.js +27 -17
  45. package/dist/qmetry/config/constants.js +28 -0
  46. package/dist/qmetry/config/rest-endpoints.js +30 -0
  47. package/dist/qmetry/types/common.js +599 -9
  48. package/dist/qmetry/types/issues.js +16 -0
  49. package/dist/qmetry/types/project.js +17 -0
  50. package/dist/qmetry/types/requirements.js +19 -0
  51. package/dist/qmetry/types/testcase.js +20 -0
  52. package/dist/qmetry/types/testsuite.js +44 -0
  53. package/dist/reflect/client.js +7 -6
  54. package/dist/zephyr/client.js +7 -1
  55. package/dist/zephyr/common/api-client.js +8 -0
  56. package/dist/zephyr/common/auth-service.js +1 -0
  57. package/dist/zephyr/common/rest-api-schemas.js +5173 -0
  58. package/dist/zephyr/tool/project/get-project.js +39 -0
  59. package/dist/zephyr/tool/project/get-projects.js +7 -13
  60. package/dist/zephyr/tool/test-cycle/get-test-cycles.js +72 -0
  61. package/package.json +1 -1
  62. package/dist/bugsnag/client/api/filters.js +0 -167
  63. package/dist/bugsnag/client/configuration.js +0 -10
  64. package/dist/bugsnag/client/index.js +0 -2
  65. package/dist/qmetry/client/tools.js +0 -222
  66. package/dist/zephyr/common/types.js +0 -35
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,16 @@
1
+ import { QMETRY_DEFAULTS } from "../config/constants.js";
2
+ /**
3
+ * Shared utility functions for QMetry client modules
4
+ */
5
+ /**
6
+ * Resolves default values for baseUrl and project parameters
7
+ * @param baseUrl - Optional base URL, defaults to QMETRY_DEFAULTS.BASE_URL
8
+ * @param project - Optional project key, defaults to QMETRY_DEFAULTS.PROJECT_KEY
9
+ * @returns Object with resolved baseUrl and project values
10
+ */
11
+ export function resolveDefaults(baseUrl, project) {
12
+ return {
13
+ resolvedBaseUrl: baseUrl || QMETRY_DEFAULTS.BASE_URL,
14
+ resolvedProject: project || QMETRY_DEFAULTS.PROJECT_KEY,
15
+ };
16
+ }
@@ -1,7 +1,8 @@
1
+ import { autoResolveViewIdAndFolderPath, findAutoResolveConfig, } from "./client/auto-resolve.js";
1
2
  import { QMETRY_HANDLER_MAP } from "./client/handlers.js";
2
3
  import { getProjectInfo } from "./client/project.js";
3
- import { TOOLS } from "./client/tools.js";
4
- import { QMETRY_DEFAULTS, QMetryToolsHandlers } from "./config/constants.js";
4
+ import { TOOLS } from "./client/tools/index.js";
5
+ import { QMETRY_DEFAULTS } from "./config/constants.js";
5
6
  export class QmetryClient {
6
7
  name = "QMetry";
7
8
  prefix = "qmetry";
@@ -49,31 +50,40 @@ export class QmetryClient {
49
50
  register(tool, (args) => handleAsync(async () => {
50
51
  const a = args;
51
52
  const { baseUrl, projectKey } = resolveContext(a);
52
- // handling for FETCH_TEST_CASES to auto-resolve viewId and folderPath
53
- if (tool.handler === QMetryToolsHandlers.FETCH_TEST_CASES) {
54
- let viewId = a.viewId;
55
- let folderPath = a.folderPath;
56
- if (!viewId || folderPath === undefined) {
53
+ // Dynamic auto-resolve for modules that support viewId, folderPath, and folderID
54
+ const autoResolveConfig = findAutoResolveConfig(tool.handler);
55
+ if (autoResolveConfig) {
56
+ // Check if we need to auto-resolve viewId, folderPath, or folderID
57
+ const needsViewIdResolve = !a.viewId && autoResolveConfig.viewIdPath;
58
+ const needsFolderPathResolve = a.folderPath === undefined;
59
+ const needsFolderIdResolve = autoResolveConfig.folderIdField &&
60
+ !a[autoResolveConfig.folderIdField];
61
+ // Explicit condition for auto-resolving tcFolderID for Create Test Case
62
+ const needsTcFolderIdAutoResolve = autoResolveConfig.folderIdField === "tcFolderID" && !a.tcFolderID;
63
+ // Explicit condition for auto-resolving parentFolderId for Create Test Suite
64
+ const needsParentFolderIdAutoResolve = autoResolveConfig.folderIdField === "parentFolderId" &&
65
+ !a.parentFolderId;
66
+ if (needsViewIdResolve ||
67
+ needsFolderPathResolve ||
68
+ needsFolderIdResolve ||
69
+ needsTcFolderIdAutoResolve ||
70
+ needsParentFolderIdAutoResolve) {
57
71
  let projectInfo;
58
72
  try {
59
73
  projectInfo = (await getProjectInfo(this.token, baseUrl, projectKey));
60
74
  }
61
75
  catch (err) {
62
- throw new Error(`Failed to auto-resolve viewId/folderPath for project ${projectKey}. ` +
76
+ throw new Error(`Failed to auto-resolve viewId/folderPath/folderID for ${autoResolveConfig.moduleName} in project ${projectKey}. ` +
63
77
  `Please provide them manually or check project access. ` +
64
78
  `Error: ${err instanceof Error ? err.message : String(err)}`);
65
79
  }
66
- if (!viewId && projectInfo?.latestViews?.TC?.viewId) {
67
- viewId = projectInfo.latestViews.TC.viewId;
68
- }
69
- if (folderPath === undefined) {
70
- folderPath = "";
71
- }
80
+ // Apply auto-resolution using the dynamic configuration
81
+ Object.assign(a, autoResolveViewIdAndFolderPath(a, projectInfo, autoResolveConfig));
72
82
  }
73
- a.viewId = viewId;
74
- a.folderPath = folderPath;
75
83
  }
76
- const result = await handlerFn(this.token, baseUrl, projectKey, a);
84
+ // Extract projectKey and baseUrl from arguments to prevent them from being sent in request body
85
+ const { projectKey: _, baseUrl: __, ...cleanArgs } = a;
86
+ const result = await handlerFn(this.token, baseUrl, projectKey, cleanArgs);
77
87
  // Use custom formatter if available, otherwise return JSON
78
88
  const formatted = tool.formatResponse
79
89
  ? tool.formatResponse(result)
@@ -3,10 +3,38 @@ export const QMETRY_DEFAULTS = {
3
3
  PROJECT_KEY: "default",
4
4
  };
5
5
  export const QMetryToolsHandlers = {
6
+ FETCH_PROJECTS: "getProjects",
6
7
  SET_PROJECT_INFO: "setProjectInfo",
7
8
  FETCH_PROJECT_INFO: "getProjectInfo",
9
+ FETCH_RELEASES_CYCLES: "getReleasesCycles",
10
+ FETCH_BUILDS: "getBuilds",
11
+ FETCH_PLATFORMS: "getPlatforms",
12
+ CREATE_TEST_CASE: "createTestCases",
13
+ UPDATE_TEST_CASE: "updateTestCase",
8
14
  FETCH_TEST_CASES: "getTestCases",
9
15
  FETCH_TEST_CASE_DETAILS: "getTestCaseDetails",
10
16
  FETCH_TEST_CASE_VERSION_DETAILS: "getTestCaseVersionDetails",
11
17
  FETCH_TEST_CASE_STEPS: "getTestCaseSteps",
18
+ FETCH_TEST_CASE_EXECUTIONS: "getTestCaseExecutions",
19
+ LINK_REQUIREMENT_TO_TESTCASE: "linkRequirementToTestCase",
20
+ FETCH_REQUIREMENTS: "getRequirements",
21
+ FETCH_REQUIREMENT_DETAILS: "getRequirementDetails",
22
+ FETCH_TESTCASES_LINKED_TO_REQUIREMENT: "getTestCasesLinkedToRequirement",
23
+ FETCH_REQUIREMENTS_LINKED_TO_TESTCASE: "getRequirementsLinkedToTestCase",
24
+ CREATE_TEST_SUITE: "createTestSuite",
25
+ UPDATE_TEST_SUITE: "updateTestSuite",
26
+ FETCH_TEST_SUITES: "getTestSuites",
27
+ FETCH_TESTSUITES_FOR_TESTCASE: "getTestSuitesForTestCase",
28
+ FETCH_TESTCASES_BY_TESTSUITE: "getTestCasesByTestSuite",
29
+ FETCH_EXECUTIONS_BY_TESTSUITE: "getExecutionsByTestSuite",
30
+ FETCH_TESTCASE_RUNS_BY_TESTSUITE_RUN: "getTestCaseRunsByTestSuiteRun",
31
+ FETCH_LINKED_ISSUES_BY_TESTCASE_RUN: "getLinkedIssuesByTestCaseRun",
32
+ FETCH_ISSUES_LINKED_TO_TESTCASE: "getIssuesLinkedToTestCase",
33
+ LINK_TESTCASES_TO_TESTSUITE: "linkTestCasesToTestSuite",
34
+ REQUIREMENTS_LINKED_TESTCASES_TO_TESTSUITE: "reqLinkedTestCasesToTestSuite",
35
+ CREATE_ISSUE: "createIssue",
36
+ UPDATE_ISSUE: "updateIssue",
37
+ FETCH_ISSUES: "getIssues",
38
+ LINK_ISSUES_TO_TESTCASE_RUN: "linkIssuesToTestcaseRun",
39
+ LINK_PLATFORMS_TO_TESTSUITE: "linkPlatformsToTestSuite",
12
40
  };
@@ -1,11 +1,41 @@
1
1
  export const QMETRY_PATHS = {
2
2
  PROJECT: {
3
+ GET_PROJECTS: "/rest/admin/project/list",
3
4
  GET_INFO: "/rest/admin/project/getinfo",
5
+ GET_RELEASES_CYCLES: "/rest/admin/scope/tree",
6
+ GET_BUILD: "/rest/admin/drop/list",
7
+ GET_PLATFORMS: "/rest/admin/platform/list",
4
8
  },
5
9
  TESTCASE: {
6
10
  GET_TC_LIST: "/rest/testcases/list/viewColumns",
7
11
  GET_TC_DETAILS: "/rest/testcases/getVersionDetail",
8
12
  GET_TC_DETAILS_BY_VERSION: "/rest/testcases/list",
9
13
  GET_TC_STEPS: "/rest/testcases/steps/list",
14
+ GET_TC_EXECUTIONS: "/rest/testcases/execution",
15
+ GET_TC_LINKED_TO_RQ: "/rest/testcases/list/forRQ",
16
+ CREATE_UPDATE_TC: "/rest/testcases",
17
+ LINKED_RQ_TO_TC: "/rest/testcases/link/requirements",
18
+ },
19
+ REQUIREMENT: {
20
+ GET_RQ_LIST: "/rest/requirements/list/viewColumns",
21
+ GET_RQ_DETAILS: "/rest/requirements/detail/data",
22
+ GET_RQ_LINKED_TO_TC: "/rest/requirements/list/forTC",
23
+ },
24
+ TESTSUITE: {
25
+ CREATE_UPDATE_TS: "/rest/testsuites",
26
+ GET_TS_LIST_FOR_TC: "/rest/testsuites/list/forTC",
27
+ GET_TS_LIST: "/rest/testsuites/list/viewColumns",
28
+ GET_TESTCASES_BY_TESTSUITE: "/rest/testcases/list/forTS",
29
+ LINKED_TESTCASES_TO_TESTSUITE: "/rest/testsuites/dolink/TCs",
30
+ GET_EXECUTIONS_BY_TESTSUITE: "/rest/execution/list/platformHome",
31
+ GET_TESTCASE_RUNS_BY_TESTSUITE_RUN: "/rest/execution/list/viewColumns",
32
+ GET_LINKED_ISSUES_BY_TESTCASE_RUN: "/rest/execution/issue/list/forTCRun",
33
+ LINK_PLATFORMS_TO_TESTSUITE: "/rest/testsuites/link/platforms",
34
+ },
35
+ ISSUES: {
36
+ GET_ISSUES_LIST: "/rest/issues/list/viewColumns",
37
+ CREATE_UPDATE_ISSUE: "/rest/issues",
38
+ GET_ISSUES_LINKED_TO_TC: "/rest/issues/list/ForTC",
39
+ LINK_ISSUES_TO_TESTCASE_RUN: "/rest/execution/link/issue",
10
40
  },
11
41
  };