UNPKG

@smartbear/mcp

Version:

MCP server for interacting SmartBear Products

59 lines (58 loc) 2.33 kB
import z from "zod"; import { ApiClient } from "./common/api-client.js"; import { GetEnvironments } from "./tool/environment/get-environments.js"; import { GetPriorities } from "./tool/priority/get-priorities.js"; import { GetProject } from "./tool/project/get-project.js"; import { GetProjects } from "./tool/project/get-projects.js"; import { GetStatuses } from "./tool/status/get-statuses.js"; import { GetTestCase } from "./tool/test-case/get-test-case.js"; import { GetTestCases } from "./tool/test-case/get-test-cases.js"; import { GetTestCycle } from "./tool/test-cycle/get-test-cycle.js"; import { GetTestCycles } from "./tool/test-cycle/get-test-cycles.js"; import { GetTestExecution } from "./tool/test-execution/get-test-execution.js"; import { GetTestExecutions } from "./tool/test-execution/get-test-executions.js"; const BASE_URL_DEFAULT = "https://api.zephyrscale.smartbear.com/v2"; const ConfigurationSchema = z.object({ api_token: z.string().describe("Zephyr Scale API token for authentication"), base_url: z .string() .url() .optional() .describe("Zephyr Scale API base URL") .default(BASE_URL_DEFAULT), }); export class ZephyrClient { apiClient; name = "Zephyr"; toolPrefix = "zephyr"; configPrefix = "Zephyr"; config = ConfigurationSchema; async configure(_server, config, _cache) { this.apiClient = new ApiClient(config.api_token, config.base_url || BASE_URL_DEFAULT); return true; } getApiClient() { if (!this.apiClient) throw new Error("Client not configured"); return this.apiClient; } registerTools(register, _getInput) { const apiClient = this.getApiClient(); const tools = [ new GetProjects(apiClient), new GetProject(apiClient), new GetTestCycles(apiClient), new GetTestCycle(apiClient), new GetPriorities(apiClient), new GetStatuses(apiClient), new GetTestCases(apiClient), new GetEnvironments(apiClient), new GetTestCase(apiClient), new GetTestExecution(apiClient), new GetTestExecutions(apiClient), ]; for (const tool of tools) { register(tool.specification, tool.handle); } } }