@qase/mcp-server 1.0.0-beta.1

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 (107) hide show
  1. package/CHANGELOG.md +165 -0
  2. package/README.md +450 -0
  3. package/build/client/index.d.ts +23 -0
  4. package/build/client/index.d.ts.map +1 -0
  5. package/build/client/index.js +55 -0
  6. package/build/client/index.js.map +1 -0
  7. package/build/index.d.ts +32 -0
  8. package/build/index.d.ts.map +1 -0
  9. package/build/index.js +125 -0
  10. package/build/index.js.map +1 -0
  11. package/build/operations/attachments.d.ts +8 -0
  12. package/build/operations/attachments.d.ts.map +1 -0
  13. package/build/operations/attachments.js +123 -0
  14. package/build/operations/attachments.js.map +1 -0
  15. package/build/operations/authors.d.ts +8 -0
  16. package/build/operations/authors.d.ts.map +1 -0
  17. package/build/operations/authors.js +68 -0
  18. package/build/operations/authors.js.map +1 -0
  19. package/build/operations/cases.d.ts +8 -0
  20. package/build/operations/cases.d.ts.map +1 -0
  21. package/build/operations/cases.js +278 -0
  22. package/build/operations/cases.js.map +1 -0
  23. package/build/operations/configurations.d.ts +8 -0
  24. package/build/operations/configurations.d.ts.map +1 -0
  25. package/build/operations/configurations.js +102 -0
  26. package/build/operations/configurations.js.map +1 -0
  27. package/build/operations/custom-fields.d.ts +8 -0
  28. package/build/operations/custom-fields.d.ts.map +1 -0
  29. package/build/operations/custom-fields.js +167 -0
  30. package/build/operations/custom-fields.js.map +1 -0
  31. package/build/operations/defects.d.ts +8 -0
  32. package/build/operations/defects.d.ts.map +1 -0
  33. package/build/operations/defects.js +219 -0
  34. package/build/operations/defects.js.map +1 -0
  35. package/build/operations/environments.d.ts +8 -0
  36. package/build/operations/environments.d.ts.map +1 -0
  37. package/build/operations/environments.js +149 -0
  38. package/build/operations/environments.js.map +1 -0
  39. package/build/operations/milestones.d.ts +8 -0
  40. package/build/operations/milestones.d.ts.map +1 -0
  41. package/build/operations/milestones.js +150 -0
  42. package/build/operations/milestones.js.map +1 -0
  43. package/build/operations/plans.d.ts +8 -0
  44. package/build/operations/plans.d.ts.map +1 -0
  45. package/build/operations/plans.js +153 -0
  46. package/build/operations/plans.js.map +1 -0
  47. package/build/operations/projects.d.ts +8 -0
  48. package/build/operations/projects.d.ts.map +1 -0
  49. package/build/operations/projects.js +186 -0
  50. package/build/operations/projects.js.map +1 -0
  51. package/build/operations/results.d.ts +8 -0
  52. package/build/operations/results.d.ts.map +1 -0
  53. package/build/operations/results.js +208 -0
  54. package/build/operations/results.js.map +1 -0
  55. package/build/operations/runs.d.ts +8 -0
  56. package/build/operations/runs.d.ts.map +1 -0
  57. package/build/operations/runs.js +211 -0
  58. package/build/operations/runs.js.map +1 -0
  59. package/build/operations/search.d.ts +8 -0
  60. package/build/operations/search.d.ts.map +1 -0
  61. package/build/operations/search.js +138 -0
  62. package/build/operations/search.js.map +1 -0
  63. package/build/operations/shared-parameters.d.ts +8 -0
  64. package/build/operations/shared-parameters.d.ts.map +1 -0
  65. package/build/operations/shared-parameters.js +139 -0
  66. package/build/operations/shared-parameters.js.map +1 -0
  67. package/build/operations/shared-steps.d.ts +8 -0
  68. package/build/operations/shared-steps.d.ts.map +1 -0
  69. package/build/operations/shared-steps.js +155 -0
  70. package/build/operations/shared-steps.js.map +1 -0
  71. package/build/operations/suites.d.ts +8 -0
  72. package/build/operations/suites.d.ts.map +1 -0
  73. package/build/operations/suites.js +164 -0
  74. package/build/operations/suites.js.map +1 -0
  75. package/build/operations/system-fields.d.ts +8 -0
  76. package/build/operations/system-fields.d.ts.map +1 -0
  77. package/build/operations/system-fields.js +40 -0
  78. package/build/operations/system-fields.js.map +1 -0
  79. package/build/operations/users.d.ts +8 -0
  80. package/build/operations/users.d.ts.map +1 -0
  81. package/build/operations/users.js +68 -0
  82. package/build/operations/users.js.map +1 -0
  83. package/build/types/index.d.ts +49 -0
  84. package/build/types/index.d.ts.map +1 -0
  85. package/build/types/index.js +13 -0
  86. package/build/types/index.js.map +1 -0
  87. package/build/utils/errors.d.ts +73 -0
  88. package/build/utils/errors.d.ts.map +1 -0
  89. package/build/utils/errors.js +136 -0
  90. package/build/utils/errors.js.map +1 -0
  91. package/build/utils/qql-helpers.d.ts +59 -0
  92. package/build/utils/qql-helpers.d.ts.map +1 -0
  93. package/build/utils/qql-helpers.js +85 -0
  94. package/build/utils/qql-helpers.js.map +1 -0
  95. package/build/utils/registry.d.ts +97 -0
  96. package/build/utils/registry.d.ts.map +1 -0
  97. package/build/utils/registry.js +132 -0
  98. package/build/utils/registry.js.map +1 -0
  99. package/build/utils/test-helpers.d.ts +32 -0
  100. package/build/utils/test-helpers.d.ts.map +1 -0
  101. package/build/utils/test-helpers.js +81 -0
  102. package/build/utils/test-helpers.js.map +1 -0
  103. package/build/utils/validation.d.ts +107 -0
  104. package/build/utils/validation.d.ts.map +1 -0
  105. package/build/utils/validation.js +104 -0
  106. package/build/utils/validation.js.map +1 -0
  107. package/package.json +84 -0
@@ -0,0 +1,278 @@
1
+ /**
2
+ * Test Cases (Qases) Operations
3
+ *
4
+ * Implements all MCP tools for managing test cases in Qase.
5
+ * Test cases are the core entities representing individual tests.
6
+ */
7
+ import { z } from 'zod';
8
+ import { getApiClient } from '../client/index.js';
9
+ import { toolRegistry } from '../utils/registry.js';
10
+ import { toResultAsync } from '../utils/errors.js';
11
+ import { ProjectCodeSchema, IdSchema } from '../utils/validation.js';
12
+ // ============================================================================
13
+ // SCHEMAS
14
+ // ============================================================================
15
+ /**
16
+ * Schema for listing test cases
17
+ */
18
+ const ListCasesSchema = z.object({
19
+ code: ProjectCodeSchema,
20
+ search: z.string().optional().describe('Search query for test case title or description'),
21
+ milestone_id: z.number().int().positive().optional().describe('Filter by milestone ID'),
22
+ suite_id: z.number().int().positive().optional().describe('Filter by suite ID'),
23
+ severity: z.string().optional().describe('Filter by severity (e.g., "blocker", "critical")'),
24
+ priority: z.string().optional().describe('Filter by priority (e.g., "high", "medium")'),
25
+ type: z.string().optional().describe('Filter by type (e.g., "functional", "smoke")'),
26
+ behavior: z.string().optional().describe('Filter by behavior (e.g., "positive", "negative")'),
27
+ automation: z.string().optional().describe('Filter by automation status'),
28
+ status: z.string().optional().describe('Filter by status (e.g., "actual", "draft")'),
29
+ limit: z.number().int().positive().max(100).optional().describe('Maximum number of items'),
30
+ offset: z.number().int().nonnegative().optional().describe('Number of items to skip'),
31
+ });
32
+ /**
33
+ * Schema for getting a specific test case
34
+ */
35
+ const GetCaseSchema = z.object({
36
+ code: ProjectCodeSchema,
37
+ id: IdSchema,
38
+ });
39
+ /**
40
+ * Schema for test case steps
41
+ */
42
+ const TestStepSchema = z.object({
43
+ action: z.string().describe('Step action description'),
44
+ expected_result: z.string().optional().describe('Expected result for this step'),
45
+ data: z.string().optional().describe('Test data for this step'),
46
+ attachments: z.array(z.string()).optional().describe('Array of attachment hashes'),
47
+ });
48
+ /**
49
+ * Schema for creating a test case
50
+ */
51
+ const CreateCaseSchema = z.object({
52
+ code: ProjectCodeSchema,
53
+ title: z.string().min(1).max(255).describe('Test case title'),
54
+ description: z.string().optional().describe('Test case description'),
55
+ preconditions: z.string().optional().describe('Preconditions for the test'),
56
+ postconditions: z.string().optional().describe('Postconditions after the test'),
57
+ severity: z.string().optional().describe('Test severity (e.g., "blocker", "critical", "major")'),
58
+ priority: z.string().optional().describe('Test priority (e.g., "high", "medium", "low")'),
59
+ type: z.string().optional().describe('Test type (e.g., "functional", "smoke", "regression")'),
60
+ layer: z.string().optional().describe('Test layer (e.g., "api", "ui", "unit")'),
61
+ is_flaky: z.boolean().optional().describe('Mark test case as flaky'),
62
+ suite_id: z.number().int().positive().optional().describe('Suite ID to organize test case'),
63
+ milestone_id: z.number().int().positive().optional().describe('Milestone ID'),
64
+ behavior: z.string().optional().describe('Test behavior (e.g., "positive", "negative")'),
65
+ automation: z.string().optional().describe('Automation status'),
66
+ status: z.string().optional().describe('Test case status (e.g., "actual", "draft")'),
67
+ steps: z.array(TestStepSchema).optional().describe('Array of test steps'),
68
+ tags: z.array(z.string()).optional().describe('Tags for categorization'),
69
+ attachments: z.array(z.string()).optional().describe('Array of attachment hashes'),
70
+ custom_field: z.record(z.any()).optional().describe('Custom field values'),
71
+ });
72
+ /**
73
+ * Schema for updating a test case
74
+ */
75
+ const UpdateCaseSchema = z.object({
76
+ code: ProjectCodeSchema,
77
+ id: IdSchema,
78
+ title: z.string().min(1).max(255).optional().describe('Test case title'),
79
+ description: z.string().optional().describe('Test case description'),
80
+ preconditions: z.string().optional().describe('Preconditions for the test'),
81
+ postconditions: z.string().optional().describe('Postconditions after the test'),
82
+ severity: z.string().optional().describe('Test severity'),
83
+ priority: z.string().optional().describe('Test priority'),
84
+ type: z.string().optional().describe('Test type'),
85
+ layer: z.string().optional().describe('Test layer'),
86
+ is_flaky: z.boolean().optional().describe('Mark test case as flaky'),
87
+ suite_id: z.number().int().positive().optional().describe('Suite ID'),
88
+ milestone_id: z.number().int().positive().optional().describe('Milestone ID'),
89
+ behavior: z.string().optional().describe('Test behavior'),
90
+ automation: z.string().optional().describe('Automation status'),
91
+ status: z.string().optional().describe('Test case status'),
92
+ steps: z.array(TestStepSchema).optional().describe('Array of test steps'),
93
+ tags: z.array(z.string()).optional().describe('Tags for categorization'),
94
+ attachments: z.array(z.string()).optional().describe('Array of attachment hashes'),
95
+ custom_field: z.record(z.any()).optional().describe('Custom field values'),
96
+ });
97
+ /**
98
+ * Schema for deleting a test case
99
+ */
100
+ const DeleteCaseSchema = z.object({
101
+ code: ProjectCodeSchema,
102
+ id: IdSchema,
103
+ });
104
+ /**
105
+ * Schema for bulk creating test cases
106
+ */
107
+ const BulkCreateCasesSchema = z.object({
108
+ code: ProjectCodeSchema,
109
+ cases: z.array(CreateCaseSchema.omit({ code: true })).describe('Array of test cases to create'),
110
+ });
111
+ /**
112
+ * Schema for attaching external issue
113
+ */
114
+ const AttachExternalIssueSchema = z.object({
115
+ code: ProjectCodeSchema,
116
+ id: IdSchema,
117
+ issue_id: z.string().describe('External issue ID (e.g., Jira issue key)'),
118
+ });
119
+ /**
120
+ * Schema for detaching external issue
121
+ */
122
+ const DetachExternalIssueSchema = z.object({
123
+ code: ProjectCodeSchema,
124
+ id: IdSchema,
125
+ issue_id: z.string().describe('External issue ID to detach'),
126
+ });
127
+ // ============================================================================
128
+ // HANDLERS
129
+ // ============================================================================
130
+ /**
131
+ * List all test cases in a project with filtering
132
+ */
133
+ async function listCases(args) {
134
+ const client = getApiClient();
135
+ const { code, ...filters } = args;
136
+ const result = await toResultAsync(client.cases.getCases(code, filters.search, filters.milestone_id, filters.suite_id, filters.severity, filters.priority, filters.type, filters.behavior, filters.automation, filters.status, undefined, // externalIssuesType
137
+ undefined, // externalIssuesIds
138
+ undefined, // include
139
+ filters.limit, filters.offset));
140
+ return result.match((response) => response.data.result, (error) => {
141
+ throw new Error(error);
142
+ });
143
+ }
144
+ /**
145
+ * Get a specific test case
146
+ */
147
+ async function getCase(args) {
148
+ const client = getApiClient();
149
+ const { code, id } = args;
150
+ const result = await toResultAsync(client.cases.getCase(code, id));
151
+ return result.match((response) => response.data.result, (error) => {
152
+ throw new Error(error);
153
+ });
154
+ }
155
+ /**
156
+ * Create a new test case
157
+ */
158
+ async function createCase(args) {
159
+ const client = getApiClient();
160
+ const { code, ...caseData } = args;
161
+ const result = await toResultAsync(client.cases.createCase(code, caseData));
162
+ return result.match((response) => response.data.result, (error) => {
163
+ throw new Error(error);
164
+ });
165
+ }
166
+ /**
167
+ * Update an existing test case
168
+ */
169
+ async function updateCase(args) {
170
+ const client = getApiClient();
171
+ const { code, id, ...updateData } = args;
172
+ const result = await toResultAsync(client.cases.updateCase(code, id, updateData));
173
+ return result.match((response) => response.data.result, (error) => {
174
+ throw new Error(error);
175
+ });
176
+ }
177
+ /**
178
+ * Delete a test case
179
+ */
180
+ async function deleteCase(args) {
181
+ const client = getApiClient();
182
+ const { code, id } = args;
183
+ const result = await toResultAsync(client.cases.deleteCase(code, id));
184
+ return result.match((_response) => ({ success: true, id }), (error) => {
185
+ throw new Error(error);
186
+ });
187
+ }
188
+ /**
189
+ * Bulk create multiple test cases
190
+ */
191
+ async function bulkCreateCases(args) {
192
+ const client = getApiClient();
193
+ const { code, cases } = args;
194
+ const result = await toResultAsync(client.cases.bulk(code, { cases }));
195
+ return result.match((response) => response.data.result, (error) => {
196
+ throw new Error(error);
197
+ });
198
+ }
199
+ /**
200
+ * Attach external issue to a test case
201
+ */
202
+ async function attachExternalIssue(args) {
203
+ const client = getApiClient();
204
+ const { code, id, issue_id } = args;
205
+ const result = await toResultAsync(client.cases.caseAttachExternalIssue(code, {
206
+ id,
207
+ issue_id,
208
+ }));
209
+ return result.match((_response) => ({ success: true, id, issue_id }), (error) => {
210
+ throw new Error(error);
211
+ });
212
+ }
213
+ /**
214
+ * Detach external issue from a test case
215
+ */
216
+ async function detachExternalIssue(args) {
217
+ const client = getApiClient();
218
+ const { code, id, issue_id } = args;
219
+ const result = await toResultAsync(client.cases.caseDetachExternalIssue(code, {
220
+ id,
221
+ issue_id,
222
+ }));
223
+ return result.match((_response) => ({ success: true, id, issue_id }), (error) => {
224
+ throw new Error(error);
225
+ });
226
+ }
227
+ // ============================================================================
228
+ // TOOL REGISTRATION
229
+ // ============================================================================
230
+ toolRegistry.register({
231
+ name: 'list_cases',
232
+ description: 'Get all test cases in a project with optional filtering and pagination',
233
+ schema: ListCasesSchema,
234
+ handler: listCases,
235
+ });
236
+ toolRegistry.register({
237
+ name: 'get_case',
238
+ description: 'Get a specific test case by project code and case ID',
239
+ schema: GetCaseSchema,
240
+ handler: getCase,
241
+ });
242
+ toolRegistry.register({
243
+ name: 'create_case',
244
+ description: 'Create a new test case in a project',
245
+ schema: CreateCaseSchema,
246
+ handler: createCase,
247
+ });
248
+ toolRegistry.register({
249
+ name: 'update_case',
250
+ description: 'Update an existing test case',
251
+ schema: UpdateCaseSchema,
252
+ handler: updateCase,
253
+ });
254
+ toolRegistry.register({
255
+ name: 'delete_case',
256
+ description: 'Delete a test case from a project',
257
+ schema: DeleteCaseSchema,
258
+ handler: deleteCase,
259
+ });
260
+ toolRegistry.register({
261
+ name: 'bulk_create_cases',
262
+ description: 'Create multiple test cases at once in a project',
263
+ schema: BulkCreateCasesSchema,
264
+ handler: bulkCreateCases,
265
+ });
266
+ toolRegistry.register({
267
+ name: 'attach_external_issue',
268
+ description: 'Attach an external issue (e.g., Jira ticket) to a test case',
269
+ schema: AttachExternalIssueSchema,
270
+ handler: attachExternalIssue,
271
+ });
272
+ toolRegistry.register({
273
+ name: 'detach_external_issue',
274
+ description: 'Detach an external issue from a test case',
275
+ schema: DetachExternalIssueSchema,
276
+ handler: detachExternalIssue,
277
+ });
278
+ //# sourceMappingURL=cases.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cases.js","sourceRoot":"","sources":["../../src/operations/cases.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Configurations Operations
3
+ *
4
+ * Implements all MCP tools for managing test configurations in Qase.
5
+ * Configurations represent test environment settings (browser, OS, device, etc.).
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=configurations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configurations.d.ts","sourceRoot":"","sources":["../../src/operations/configurations.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,102 @@
1
+ /**
2
+ * Configurations Operations
3
+ *
4
+ * Implements all MCP tools for managing test configurations in Qase.
5
+ * Configurations represent test environment settings (browser, OS, device, etc.).
6
+ */
7
+ import { z } from 'zod';
8
+ import { getApiClient } from '../client/index.js';
9
+ import { toolRegistry } from '../utils/registry.js';
10
+ import { toResultAsync } from '../utils/errors.js';
11
+ import { ProjectCodeSchema, IdSchema } from '../utils/validation.js';
12
+ // ============================================================================
13
+ // SCHEMAS
14
+ // ============================================================================
15
+ /**
16
+ * Schema for a single configuration item within a group
17
+ */
18
+ const ConfigurationItemSchema = z.object({
19
+ title: z.string().min(1).describe('Configuration item title (e.g., "Chrome", "Windows 10")'),
20
+ });
21
+ /**
22
+ * Schema for listing configurations in a project
23
+ */
24
+ const ListConfigurationsSchema = z.object({
25
+ code: ProjectCodeSchema,
26
+ });
27
+ /**
28
+ * Schema for creating a configuration group
29
+ */
30
+ const CreateConfigurationGroupSchema = z.object({
31
+ code: ProjectCodeSchema,
32
+ title: z.string().min(1).max(255).describe('Configuration group title (e.g., "Browser", "OS")'),
33
+ configurations: z
34
+ .array(ConfigurationItemSchema)
35
+ .min(1)
36
+ .describe('Configuration items in the group'),
37
+ });
38
+ /**
39
+ * Schema for deleting a configuration group
40
+ */
41
+ const DeleteConfigurationGroupSchema = z.object({
42
+ code: ProjectCodeSchema,
43
+ id: IdSchema.describe('Configuration group ID'),
44
+ });
45
+ // ============================================================================
46
+ // HANDLERS
47
+ // ============================================================================
48
+ /**
49
+ * List all configurations in a project
50
+ */
51
+ async function listConfigurations(args) {
52
+ const client = getApiClient();
53
+ const { code } = args;
54
+ const result = await toResultAsync(client.configurations.getConfigurations(code));
55
+ return result.match((response) => response.data.result, (error) => {
56
+ throw new Error(error);
57
+ });
58
+ }
59
+ /**
60
+ * Create a new configuration group
61
+ */
62
+ async function createConfigurationGroup(args) {
63
+ const client = getApiClient();
64
+ const { code, ...groupData } = args;
65
+ const result = await toResultAsync(client.configurations.createConfigurationGroup(code, groupData));
66
+ return result.match((response) => response.data.result, (error) => {
67
+ throw new Error(error);
68
+ });
69
+ }
70
+ /**
71
+ * Delete a configuration group
72
+ */
73
+ async function deleteConfigurationGroup(args) {
74
+ const client = getApiClient();
75
+ const { code, id } = args;
76
+ const result = await toResultAsync(client.configurations.deleteConfigurationGroup(code, id));
77
+ return result.match((_response) => ({ success: true, id }), (error) => {
78
+ throw new Error(error);
79
+ });
80
+ }
81
+ // ============================================================================
82
+ // TOOL REGISTRATION
83
+ // ============================================================================
84
+ toolRegistry.register({
85
+ name: 'list_configurations',
86
+ description: 'Get all configuration groups and their items in a project',
87
+ schema: ListConfigurationsSchema,
88
+ handler: listConfigurations,
89
+ });
90
+ toolRegistry.register({
91
+ name: 'create_configuration_group',
92
+ description: 'Create a new configuration group (e.g., Browser, OS) with items',
93
+ schema: CreateConfigurationGroupSchema,
94
+ handler: createConfigurationGroup,
95
+ });
96
+ toolRegistry.register({
97
+ name: 'delete_configuration_group',
98
+ description: 'Delete a configuration group from a project',
99
+ schema: DeleteConfigurationGroupSchema,
100
+ handler: deleteConfigurationGroup,
101
+ });
102
+ //# sourceMappingURL=configurations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"configurations.js","sourceRoot":"","sources":["../../src/operations/configurations.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Custom Fields Operations
3
+ *
4
+ * Implements all MCP tools for managing custom fields in Qase.
5
+ * Custom fields extend entities with project-specific data fields.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=custom-fields.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-fields.d.ts","sourceRoot":"","sources":["../../src/operations/custom-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Custom Fields Operations
3
+ *
4
+ * Implements all MCP tools for managing custom fields in Qase.
5
+ * Custom fields extend entities with project-specific data fields.
6
+ */
7
+ import { z } from 'zod';
8
+ import { getApiClient } from '../client/index.js';
9
+ import { toolRegistry } from '../utils/registry.js';
10
+ import { toResultAsync } from '../utils/errors.js';
11
+ import { IdSchema } from '../utils/validation.js';
12
+ // ============================================================================
13
+ // SCHEMAS
14
+ // ============================================================================
15
+ /**
16
+ * Custom field entity types
17
+ */
18
+ const CustomFieldEntityEnum = z.enum(['case', 'run', 'defect', 'result']);
19
+ /**
20
+ * Custom field data types
21
+ */
22
+ const CustomFieldTypeEnum = z.enum([
23
+ 'number',
24
+ 'string',
25
+ 'text',
26
+ 'selectbox',
27
+ 'checkbox',
28
+ 'radio',
29
+ 'multiselect',
30
+ 'url',
31
+ 'user',
32
+ 'datetime',
33
+ ]);
34
+ /**
35
+ * Schema for listing custom fields
36
+ */
37
+ const ListCustomFieldsSchema = z.object({
38
+ limit: z.number().int().positive().max(100).optional().describe('Maximum number of items'),
39
+ offset: z.number().int().nonnegative().optional().describe('Number of items to skip'),
40
+ });
41
+ /**
42
+ * Schema for getting a specific custom field
43
+ */
44
+ const GetCustomFieldSchema = z.object({
45
+ id: IdSchema,
46
+ });
47
+ /**
48
+ * Schema for creating a custom field
49
+ */
50
+ const CreateCustomFieldSchema = z.object({
51
+ title: z.string().min(1).max(255).describe('Custom field title'),
52
+ entity: CustomFieldEntityEnum.describe('Entity type this field applies to'),
53
+ type: CustomFieldTypeEnum.describe('Data type of the field'),
54
+ placeholder: z.string().optional().describe('Placeholder text'),
55
+ default_value: z.string().optional().describe('Default value'),
56
+ is_required: z.boolean().optional().describe('Whether field is required'),
57
+ is_visible: z.boolean().optional().describe('Whether field is visible'),
58
+ projects: z.array(z.string()).optional().describe('Project codes where field is available'),
59
+ });
60
+ /**
61
+ * Schema for updating a custom field
62
+ */
63
+ const UpdateCustomFieldSchema = z.object({
64
+ id: IdSchema,
65
+ title: z.string().min(1).max(255).optional().describe('Custom field title'),
66
+ placeholder: z.string().optional().describe('Placeholder text'),
67
+ default_value: z.string().optional().describe('Default value'),
68
+ is_required: z.boolean().optional().describe('Whether field is required'),
69
+ is_visible: z.boolean().optional().describe('Whether field is visible'),
70
+ });
71
+ /**
72
+ * Schema for deleting a custom field
73
+ */
74
+ const DeleteCustomFieldSchema = z.object({
75
+ id: IdSchema,
76
+ });
77
+ // ============================================================================
78
+ // HANDLERS
79
+ // ============================================================================
80
+ /**
81
+ * List all custom fields
82
+ */
83
+ async function listCustomFields(args) {
84
+ const client = getApiClient();
85
+ const { limit, offset } = args;
86
+ const result = await toResultAsync(client.customFields.getCustomFields(limit, offset));
87
+ return result.match((response) => response.data.result, (error) => {
88
+ throw new Error(error);
89
+ });
90
+ }
91
+ /**
92
+ * Get a specific custom field
93
+ */
94
+ async function getCustomField(args) {
95
+ const client = getApiClient();
96
+ const { id } = args;
97
+ const result = await toResultAsync(client.customFields.getCustomField(id));
98
+ return result.match((response) => response.data.result, (error) => {
99
+ throw new Error(error);
100
+ });
101
+ }
102
+ /**
103
+ * Create a new custom field
104
+ */
105
+ async function createCustomField(args) {
106
+ const client = getApiClient();
107
+ const result = await toResultAsync(client.customFields.createCustomField(args));
108
+ return result.match((response) => response.data.result, (error) => {
109
+ throw new Error(error);
110
+ });
111
+ }
112
+ /**
113
+ * Update an existing custom field
114
+ */
115
+ async function updateCustomField(args) {
116
+ const client = getApiClient();
117
+ const { id, ...updateData } = args;
118
+ const result = await toResultAsync(client.customFields.updateCustomField(id, updateData));
119
+ return result.match((response) => response.data.result, (error) => {
120
+ throw new Error(error);
121
+ });
122
+ }
123
+ /**
124
+ * Delete a custom field
125
+ */
126
+ async function deleteCustomField(args) {
127
+ const client = getApiClient();
128
+ const { id } = args;
129
+ const result = await toResultAsync(client.customFields.deleteCustomField(id));
130
+ return result.match((_response) => ({ success: true, id }), (error) => {
131
+ throw new Error(error);
132
+ });
133
+ }
134
+ // ============================================================================
135
+ // TOOL REGISTRATION
136
+ // ============================================================================
137
+ toolRegistry.register({
138
+ name: 'list_custom_fields',
139
+ description: 'Get all custom field definitions with optional pagination',
140
+ schema: ListCustomFieldsSchema,
141
+ handler: listCustomFields,
142
+ });
143
+ toolRegistry.register({
144
+ name: 'get_custom_field',
145
+ description: 'Get a specific custom field definition by ID',
146
+ schema: GetCustomFieldSchema,
147
+ handler: getCustomField,
148
+ });
149
+ toolRegistry.register({
150
+ name: 'create_custom_field',
151
+ description: 'Create a new custom field for extending entity data',
152
+ schema: CreateCustomFieldSchema,
153
+ handler: createCustomField,
154
+ });
155
+ toolRegistry.register({
156
+ name: 'update_custom_field',
157
+ description: 'Update an existing custom field definition',
158
+ schema: UpdateCustomFieldSchema,
159
+ handler: updateCustomField,
160
+ });
161
+ toolRegistry.register({
162
+ name: 'delete_custom_field',
163
+ description: 'Delete a custom field definition',
164
+ schema: DeleteCustomFieldSchema,
165
+ handler: deleteCustomField,
166
+ });
167
+ //# sourceMappingURL=custom-fields.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-fields.js","sourceRoot":"","sources":["../../src/operations/custom-fields.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAElD,+EAA+E;AAC/E,UAAU;AACV,+EAA+E;AAE/E;;GAEG;AACH,MAAM,qBAAqB,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAE1E;;GAEG;AACH,MAAM,mBAAmB,GAAG,CAAC,CAAC,IAAI,CAAC;IACjC,QAAQ;IACR,QAAQ;IACR,MAAM;IACN,WAAW;IACX,UAAU;IACV,OAAO;IACP,aAAa;IACb,KAAK;IACL,MAAM;IACN,UAAU;CACX,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;IAC1F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;CACtF,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,EAAE,EAAE,QAAQ;CACb,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAChE,MAAM,EAAE,qBAAqB,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IAC3E,IAAI,EAAE,mBAAmB,CAAC,QAAQ,CAAC,wBAAwB,CAAC;IAC5D,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IACvE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;CAC5F,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,QAAQ;IACZ,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;IAC3E,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;IAC/D,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,eAAe,CAAC;IAC9D,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACzE,UAAU,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;CACxE,CAAC,CAAC;AAEH;;GAEG;AACH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,EAAE,EAAE,QAAQ;CACb,CAAC,CAAC;AAEH,+EAA+E;AAC/E,WAAW;AACX,+EAA+E;AAE/E;;GAEG;AACH,KAAK,UAAU,gBAAgB,CAAC,IAA4C;IAC1E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;IAE/B,MAAM,MAAM,GAAG,MAAM,aAAa,CAChC,MAAM,CAAC,YAAY,CAAC,eAAe,CAAC,KAAY,EAAE,MAAa,CAAC,CACjE,CAAC;IAEF,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAClC,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,cAAc,CAAC,IAA0C;IACtE,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3E,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAClC,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAA6C;IAC5E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAE9B,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,IAAW,CAAC,CAAC,CAAC;IAEvF,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EAClC,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAA6C;IAC5E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,IAAI,CAAC;IAEnC,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,UAAiB,CAAC,CAAC,CAAC;IAEjG,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,QAAa,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,EACvC,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,iBAAiB,CAAC,IAA6C;IAC5E,MAAM,MAAM,GAAG,YAAY,EAAE,CAAC;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;IAEpB,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;IAE9E,OAAO,MAAM,CAAC,KAAK,CACjB,CAAC,SAAc,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,EAC3C,CAAC,KAAK,EAAE,EAAE;QACR,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,CAAC,CACF,CAAC;AACJ,CAAC;AAED,+EAA+E;AAC/E,oBAAoB;AACpB,+EAA+E;AAE/E,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,oBAAoB;IAC1B,WAAW,EAAE,2DAA2D;IACxE,MAAM,EAAE,sBAAsB;IAC9B,OAAO,EAAE,gBAAgB;CAC1B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,kBAAkB;IACxB,WAAW,EAAE,8CAA8C;IAC3D,MAAM,EAAE,oBAAoB;IAC5B,OAAO,EAAE,cAAc;CACxB,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,qDAAqD;IAClE,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,4CAA4C;IACzD,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAC;AAEH,YAAY,CAAC,QAAQ,CAAC;IACpB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,kCAAkC;IAC/C,MAAM,EAAE,uBAAuB;IAC/B,OAAO,EAAE,iBAAiB;CAC3B,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Defects Operations
3
+ *
4
+ * Implements all MCP tools for managing defects in Qase.
5
+ * Defects represent bugs and issues discovered during testing.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=defects.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defects.d.ts","sourceRoot":"","sources":["../../src/operations/defects.ts"],"names":[],"mappings":"AAAA;;;;;GAKG"}