get_manual_run
Retrieve complete details of a manual test run including status, environment, test statistics, contributors, attachments, and linked issues by providing project ID and run ID.
Instructions
Get the full details of one manual test run: name, status, environment, linked release, test stats (total/passed/failed/blocked/untested), contributors, attachments, linked issues. runId accepts either the internal _id or a counter-style ID like 'RUN-12'.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID (required). | |
| runId | Yes | Internal _id or counter-style ID (required). |
Implementation Reference
- The handler function `handleGetManualRun` that executes the tool logic: gets API key, validates args, builds URL via endpoint helper, makes API request, and returns JSON response.
export async function handleGetManualRun(args?: GetManualRunArgs) { const token = getApiKey(args); if (!token) { throw new Error( "Missing TESTDINO_PAT environment variable. Configure it in your .cursor/mcp.json under 'env'." ); } if (!args?.projectId) throw new Error("projectId is required"); if (!args?.runId) throw new Error("runId is required"); try { const url = endpoints.getManualRun({ projectId: args.projectId, runId: args.runId, }); const response = await apiRequestJson<unknown>(url, { headers: { Authorization: `Bearer ${token}` }, }); return { content: [{ type: "text", text: JSON.stringify(response, null, 2) }], }; } catch (error) { const msg = error instanceof Error ? error.message : String(error); throw new Error(`Failed to get manual run: ${msg}`); } } - The `GetManualRunArgs` interface and `getManualRunTool` object defining input schema with required fields: projectId (string) and runId (string).
interface GetManualRunArgs { projectId: string; runId: string; } export const getManualRunTool = { name: "get_manual_run", description: "Get the full details of one manual test run: name, status, environment, linked release, test stats (total/passed/failed/blocked/untested), contributors, attachments, linked issues. runId accepts either the internal _id or a counter-style ID like 'RUN-12'.", inputSchema: { type: "object", properties: { projectId: { type: "string", description: "Project ID (required)." }, runId: { type: "string", description: "Internal _id or counter-style ID (required).", }, }, required: ["projectId", "runId"], }, }; - src/index.ts:301-304 (registration)The main server handler registration that routes the tool name 'get_manual_run' to the `handleGetManualRun` function.
if (name === "get_manual_run") { return await handleGetManualRun( args as Parameters<typeof handleGetManualRun>[0] ); - src/index.ts:119-120 (registration)The tool is listed in the `tools` array of the server capabilities.
listManualRunsTool, getManualRunTool, - src/lib/endpoints.ts:404-412 (helper)The `getManualRun` endpoint helper that constructs the URL: GET /api/mcp/manual-runs/:projectId/:runId
/** * Get a single manual test run * GET /api/mcp/manual-runs/:projectId/:runId */ getManualRun: (params: { projectId: string; runId: string }): string => { const baseUrl = getBaseUrl(); const { projectId, runId } = params; return `${baseUrl}/api/mcp/manual-runs/${projectId}/${runId}`; },