@smartbear/mcp
Version:
MCP server for interacting SmartBear Products
59 lines (58 loc) • 2.33 kB
JavaScript
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);
}
}
}