get_manual_test_case
Retrieve detailed information of a manual test case, including steps, preconditions, custom fields, and inline activity such as comments, version history, execution results, and linked issues.
Instructions
Retrieve detailed information of a single manual test case, including steps, custom fields, preconditions, and all metadata. Activity is included inline: comments (latest), versions (latest 20 of the version history), results (latest 100 execution results across every manual run that ran this case), and linkedIssues (Jira tickets linked to the case). versions and results are READ-ONLY — they reflect what happened, you cannot mutate them. Use update_manual_test_case to add comments (updates.comments) or link issues (updates.issues).
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| projectId | Yes | Project ID (Required). The TestDino project identifier. | |
| caseId | Yes | Test case ID (Required). Can be internal _id or human-readable ID like 'TC-123'. |
Implementation Reference
- Main handler function that validates args, fetches API token, calls the API endpoint, and returns JSON content
export async function handleGetManualTestCase(args?: GetManualTestCaseArgs) { // Read PAT from environment variable (set in mcp.json) or from args const token = getApiKey(args); if (!token) { throw new Error( "Missing TESTDINO_PAT environment variable. " + "Please configure it in your .cursor/mcp.json file under the 'env' section." ); } // Validate required parameters if (!args?.projectId) { throw new Error("projectId is required"); } if (!args?.caseId) { throw new Error("caseId is required"); } try { const params = { projectId: String(args.projectId), caseId: String(args.caseId), }; const getManualTestCaseUrl = endpoints.getManualTestCase(params); const response = await apiRequestJson<unknown>(getManualTestCaseUrl, { headers: { Authorization: `Bearer ${token}`, }, }); return { content: [ { type: "text", text: JSON.stringify(response, null, 2), }, ], }; } catch (error) { const errorMessage = error instanceof Error ? error.message : String(error); throw new Error(`Failed to get manual test case details: ${errorMessage}`); } } - Tool definition with name, description, and input schema (projectId and caseId strings, both required)
export const getManualTestCaseTool = { name: "get_manual_test_case", description: "Retrieve detailed information of a single manual test case, including steps, custom fields, preconditions, and all metadata. " + "Activity is included inline: `comments` (latest), `versions` (latest 20 of the version history), `results` (latest 100 execution results across every manual run that ran this case), and `linkedIssues` (Jira tickets linked to the case). " + "`versions` and `results` are READ-ONLY — they reflect what happened, you cannot mutate them. " + "Use update_manual_test_case to add comments (updates.comments) or link issues (updates.issues).", inputSchema: { type: "object", properties: { projectId: { type: "string", description: "Project ID (Required). The TestDino project identifier.", }, caseId: { type: "string", description: "Test case ID (Required). Can be internal _id or human-readable ID like 'TC-123'.", }, }, required: ["projectId", "caseId"], }, }; - TypeScript interface defining the args shape for get_manual_test_case
interface GetManualTestCaseArgs { projectId: string; caseId: string; } - src/index.ts:243-247 (registration)Registration routing: dispatches tool call requests to the handler when name matches 'get_manual_test_case'
if (name === "get_manual_test_case") { return await handleGetManualTestCase( args as Parameters<typeof handleGetManualTestCase>[0] ); } - src/index.ts:108-108 (registration)Tool is listed in the tools array passed to ListToolsRequestSchema handler, making it available to clients
getManualTestCaseTool,