@smartbear/mcp 0.18.0 → 0.18.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.
@@ -40,7 +40,7 @@ const EXCLUDED_EVENT_FIELDS = /* @__PURE__ */ new Set([
40
40
  // This is searches multiple fields and is more a convenience for humans, we're removing to avoid over-matching
41
41
  ]);
42
42
  const ConfigurationSchema = z.object({
43
- auth_token: z.string().describe("BugSnag personal access token").optional(),
43
+ auth_token: z.string().describe("BugSnag personal access token"),
44
44
  project_api_key: z.string().describe("BugSnag project API key").optional(),
45
45
  endpoint: z.string().url().describe("BugSnag endpoint URL").optional()
46
46
  });
@@ -81,7 +81,7 @@ class ClientRegistry {
81
81
  * @param getConfigValue A function that obtains a configuration value for the given client and requirement name
82
82
  * @returns The number of clients successfully configured
83
83
  */
84
- async configure(server, getConfigValue) {
84
+ async configure(server, getConfigValue, ignoreMissingRequiredConfigs = false) {
85
85
  let configuredCount = 0;
86
86
  entryLoop: for (const entry of this.getAll()) {
87
87
  const config = {};
@@ -90,7 +90,7 @@ class ClientRegistry {
90
90
  if (value !== null) {
91
91
  this.validateAllowedEndpoint(entry.config.shape[configKey], value);
92
92
  config[configKey] = value;
93
- } else if (!isOptionalType(entry.config.shape[configKey])) {
93
+ } else if (!ignoreMissingRequiredConfigs && !isOptionalType(entry.config.shape[configKey])) {
94
94
  continue entryLoop;
95
95
  }
96
96
  }
@@ -282,15 +282,20 @@ async function newServer(req, res) {
282
282
  try {
283
283
  const configuredCount = await withRequestContext(
284
284
  req,
285
- () => clientRegistry.configure(server, (client, key) => {
286
- const headerName = getHeaderName(client, key);
287
- const value = req.headers[headerName] || req.headers[headerName.toLowerCase()];
288
- if (typeof value === "string") {
289
- return value;
290
- }
291
- const envVarName = getEnvVarName(client, key);
292
- return process.env[envVarName] || null;
293
- })
285
+ () => clientRegistry.configure(
286
+ server,
287
+ (client, key) => {
288
+ const headerName = getHeaderName(client, key);
289
+ const value = req.headers[headerName] || req.headers[headerName.toLowerCase()];
290
+ if (typeof value === "string") {
291
+ return value;
292
+ }
293
+ const envVarName = getEnvVarName(client, key);
294
+ return process.env[envVarName] || null;
295
+ },
296
+ true
297
+ // ignoreMissingRequiredConfigs
298
+ )
294
299
  );
295
300
  console.log(
296
301
  `Configured ${configuredCount} clients for new server instance`
@@ -1,4 +1,4 @@
1
- const version = "0.18.0";
1
+ const version = "0.18.1";
2
2
  const config = { "mcpServerName": "SmartBear MCP Server" };
3
3
  const packageJson = {
4
4
  version,
@@ -6,7 +6,7 @@ import { getProjectInfo } from "./client/project.js";
6
6
  import { TOOLS } from "./client/tools/index.js";
7
7
  import { QMETRY_DEFAULTS } from "./config/constants.js";
8
8
  const ConfigurationSchema = zod__default.object({
9
- api_key: zod__default.string().describe("QMetry API key for authentication").optional(),
9
+ api_key: zod__default.string().describe("QMetry API key for authentication"),
10
10
  base_url: zod__default.string().url().optional().describe(
11
11
  "Optional QMetry base URL for custom or region-specific endpoints"
12
12
  )
@@ -19,7 +19,7 @@ import { ListSegments } from "./tool/tests/list-segments.js";
19
19
  import { ListTests } from "./tool/tests/list-tests.js";
20
20
  import { RunTest } from "./tool/tests/run-test.js";
21
21
  const ConfigurationSchema = z.object({
22
- api_token: z.string().describe("Reflect API authentication token").optional()
22
+ api_token: z.string().describe("Reflect API authentication token")
23
23
  });
24
24
  class ReflectClient {
25
25
  _apiToken;
@@ -9,7 +9,7 @@ import "./client/registry-types.js";
9
9
  import { TOOLS } from "./client/tools.js";
10
10
  import "./client/user-management-types.js";
11
11
  const ConfigurationSchema = z.object({
12
- api_key: z.string().describe("Swagger API key for authentication").optional(),
12
+ api_key: z.string().describe("Swagger API key for authentication"),
13
13
  portal_base_path: z.string().optional().describe("Base path for Portal API requests (optional)"),
14
14
  registry_base_path: z.string().optional().describe("Base path for Registry API requests (optional)"),
15
15
  ui_base_path: z.string().optional().describe("Base URL for the SwaggerHub UI (optional)")
@@ -38,7 +38,7 @@ import { UpdateTestExecution } from "./tool/test-execution/update-test-execution
38
38
  import { UpdateTestExecutionSteps } from "./tool/test-execution/update-test-steps.js";
39
39
  const BASE_URL_DEFAULT = "https://api.zephyrscale.smartbear.com/v2";
40
40
  const ConfigurationSchema = zod__default.object({
41
- api_token: zod__default.string().describe("Zephyr Scale API token for authentication").optional(),
41
+ api_token: zod__default.string().describe("Zephyr Scale API token for authentication"),
42
42
  base_url: zod__default.string().url().optional().describe("Zephyr Scale API base URL").default(BASE_URL_DEFAULT)
43
43
  });
44
44
  class ZephyrClient {
@@ -3,12 +3,11 @@ import { CreateTestCaseTestSteps201Response, CreateTestCaseTestStepsParams, Crea
3
3
  class CreateTestSteps extends Tool {
4
4
  specification = {
5
5
  title: "Create Test Case Steps",
6
- summary: "Create steps for a Test Case in Zephyr. Supports inline step definitions or delegating execution to another test case (also known as 'call to test' via UI).",
6
+ summary: "Create steps for a Test Case in Zephyr. Supports inline step definitions or delegating execution to another test case (also known as 'call to test' via UI). Requires a mode: `APPEND` adds steps to the end of the existing list, `OVERWRITE` deletes all existing steps and replaces them with the provided ones. Always ask the user to choose between OVERWRITE or APPEND before calling this tool.",
7
7
  readOnly: false,
8
+ destructive: true,
8
9
  idempotent: false,
9
- inputSchema: CreateTestCaseTestStepsParams.and(
10
- CreateTestCaseTestStepsBody.partial()
11
- ),
10
+ inputSchema: CreateTestCaseTestStepsParams.and(CreateTestCaseTestStepsBody),
12
11
  outputSchema: CreateTestCaseTestSteps201Response,
13
12
  examples: [
14
13
  {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@smartbear/mcp",
3
- "version": "0.18.0",
3
+ "version": "0.18.1",
4
4
  "description": "MCP server for interacting SmartBear Products",
5
5
  "keywords": [
6
6
  "smartbear",