Skip to content
Scalekit Docs
Talk to an EngineerDashboard

Testdino MCP connector

OAuth2.1/DCRDeveloper ToolsAnalyticsMonitoring

TestDino is a Playwright test reporting and analytics platform that centralizes test data, detects flaky tests, and provides AI-powered debugging via MCP...

Testdino MCP connector

  1. Terminal window
    npm install @scalekit-sdk/node

    Full SDK reference: Node.js | Python

  2. Add your Scalekit credentials to your .env file. Find values in app.scalekit.com > Developers > API Credentials.

    .env
    SCALEKIT_ENVIRONMENT_URL=<your-environment-url>
    SCALEKIT_CLIENT_ID=<your-client-id>
    SCALEKIT_CLIENT_SECRET=<your-client-secret>
  3. quickstart.ts
    import { ScalekitClient } from '@scalekit-sdk/node'
    import 'dotenv/config'
    const scalekit = new ScalekitClient(
    process.env.SCALEKIT_ENV_URL,
    process.env.SCALEKIT_CLIENT_ID,
    process.env.SCALEKIT_CLIENT_SECRET,
    )
    const actions = scalekit.actions
    const connector = 'testidinomcp'
    const identifier = 'user_123'
    // Generate an authorization link for the user
    const { link } = await actions.getAuthorizationLink({ connectionName: connector, identifier })
    console.log('Authorize Testdino MCP:', link)
    process.stdout.write('Press Enter after authorizing...')
    await new Promise(r => process.stdin.once('data', r))
    // Make your first call
    const result = await actions.executeTool({
    connector,
    identifier,
    toolName: 'testidinomcp_get_run_details',
    toolInput: { projectId: 'YOUR_PROJECTID' },
    })
    console.log(result)

Connect this agent connector to let your agent:

  • Update session, run test case, release — Modify an existing exploratory session
  • Report submit audit — Final step of the TestDino Playwright audit flow — submits a completed audit report
  • List testruns, testcase, sessions — Browse test runs for a project with optional filters
  • Health records — ALWAYS call this first — before any other tool in every session
  • Get testcase details, session, run details — Get full details of a test case — errors, stack traces, steps, console logs, and artifacts
  • Testcase debug — AI-assisted root cause analysis for a failing or flaky test

Use the exact tool names from the Tool list below when you call execute_tool. If you’re not sure which name to use, list the tools available for the current user first.

testidinomcp_create_manual_run#Create a new manual test run. Requires write permission. selectionMode controls which test cases are included: "all" (default — every case in the project) or "selected" (use testCaseIds and/or suiteIds to scope). releaseId attaches the run to a release. note accepts rich HTML. IMPORTANT: tags must be a JSON array of strings — e.g. ["smoke","regression"] — NOT the comma-separated form that list_manual_runs accepts as a filter.15 params

Create a new manual test run. Requires write permission. selectionMode controls which test cases are included: "all" (default — every case in the project) or "selected" (use testCaseIds and/or suiteIds to scope). releaseId attaches the run to a release. note accepts rich HTML. IMPORTANT: tags must be a JSON array of strings — e.g. ["smoke","regression"] — NOT the comma-separated form that list_manual_runs accepts as a filter.

NameTypeRequiredDescription
namestringrequiredRun name.
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
attachmentsarrayoptionalArray of attachment objects or URLs.
environmentstringoptionalEnvironment label, e.g. "Staging".
forecastnumberoptionalNumeric forecast/target for the run.
includeUnsortedbooleanoptionalAlso include cases with no suite when selectionMode="selected".
linkedIssuesarrayoptionalArray of linked-issue objects (same shape as list_manual_runs returns).
linksarrayoptionalArray of link objects with title and url.
notestringoptionalRich HTML note.
releaseIdstringoptionalAttach run to this release.
selectionModestringoptionalDefault "all". Use "selected" with testCaseIds/suiteIds to scope.
statestringoptionalWorkflow state (default "new"). Either canonical ("in_progress") or display ("In Progress") form — server normalizes to lowercase+underscored.
suiteIdsarrayoptionalSuite IDs whose cases are included when selectionMode="selected".
tagsarrayoptionalArray of tag strings, e.g. ["smoke","regression"]. NOT a comma-separated string.
testCaseIdsarrayoptionalCase IDs to include when selectionMode="selected".
testidinomcp_create_manual_test_case#Create a new manual test case. Requires write permission. MANDATORY FIRST STEP: always call list_manual_test_suites() before this tool to get the exact suite name — suiteName must be an exact match, not approximate. Steps default to Classic format (action + expectedResult). Set testStepsDeclarationType="Gherkin" if using Given/When/Then steps. Classic step shape: { action, expectedResult, data, attachments }. Gherkin step shape: { event: "Given"|"When"|"And"|"Then"|"But", stepDescription, attachments }. Use top-level attachments for whole-test-case files, or step.attachments for files tied to a specific step.19 params

Create a new manual test case. Requires write permission. MANDATORY FIRST STEP: always call list_manual_test_suites() before this tool to get the exact suite name — suiteName must be an exact match, not approximate. Steps default to Classic format (action + expectedResult). Set testStepsDeclarationType="Gherkin" if using Given/When/Then steps. Classic step shape: { action, expectedResult, data, attachments }. Gherkin step shape: { event: "Given"|"When"|"And"|"Then"|"But", stepDescription, attachments }. Use top-level attachments for whole-test-case files, or step.attachments for files tied to a specific step.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
suiteNamestringrequiredTarget suite name (exact match required — get from list_manual_test_suites first).
titlestringrequiredTest case title.
attachmentsarrayoptionalWhole-test-case attachments as URLs, local paths, or file data objects.
automationStatusstringoptionalAutomation status. Values come from Project Settings → Test Case Properties. Defaults: Manual, Automated, To Be Automated.
behaviorstringoptionalBehavior. Values come from Project Settings → Test Case Properties. Defaults: Positive, Negative, Destructive, Not Set.
customFieldsobjectoptionalCustom fields defined in project settings.
descriptionstringoptionalTest case description.
flagsarrayoptionalAutomation flags/checklist values.
layerstringoptionalLayer. Values come from Project Settings → Test Case Properties. Defaults: E2E, API, Unit, Not Set.
postconditionsstringoptionalPostconditions for the test case.
preconditionsstringoptionalPreconditions for the test case.
prioritystringoptionalPriority. Values come from Project Settings → Test Case Properties. Defaults: Critical, High, Medium, Low, Not Set.
severitystringoptionalSeverity. Values come from Project Settings → Test Case Properties. Defaults: Blocker, Critical, Major, Normal, Minor, Trivial, Not Set.
statusstringoptionalStatus. Values come from Project Settings → Test Case Properties. Defaults: Active, Draft, Deprecated.
stepsarrayoptionalArray of test steps. Classic shape: { action, expectedResult, data, attachments }. Gherkin shape: { event: "Given"|"When"|"And"|"Then"|"But", stepDescription, attachments }.
tagsstringoptionalComma-separated tag names.
testStepsDeclarationTypestringoptionalStep format: "Classic" (action + expectedResult) or "Gherkin" (Given/When/Then).
typestringoptionalType. Values come from Project Settings → Test Case Properties. Defaults: Smoke, Regression, Functional, Integration, E2E, API, Unit, Performance, Security, Accessibility, Usability, Compatibility, Acceptance, Exploratory, Other.
testidinomcp_create_manual_test_suite#Create a new test suite folder for organizing manual test cases. Requires write permission. Use parentSuiteId to nest it under an existing suite — get the ID from list_manual_test_suites() first.4 params

Create a new test suite folder for organizing manual test cases. Requires write permission. Use parentSuiteId to nest it under an existing suite — get the ID from list_manual_test_suites() first.

NameTypeRequiredDescription
namestringrequiredSuite name.
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
descriptionstringoptionalOptional description for the test suite.
parentSuiteIdstringoptionalID of the parent suite to nest this suite under. Obtain from list_manual_test_suites().
testidinomcp_create_release#Create a new release. Requires write permission. Use parentReleaseId to nest under another release (max 3 levels deep). startDate/endDate are ISO date strings. isStarted/isCompleted are independent flags — startedAt/completedAt are recorded separately. branch/environment/buildTarget/testers describe what build the release ships and who tests it (testers must be org members — pass User _ids).17 params

Create a new release. Requires write permission. Use parentReleaseId to nest under another release (max 3 levels deep). startDate/endDate are ISO date strings. isStarted/isCompleted are independent flags — startedAt/completedAt are recorded separately. branch/environment/buildTarget/testers describe what build the release ships and who tests it (testers must be org members — pass User _ids).

NameTypeRequiredDescription
namestringrequiredRelease name.
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
branchstringoptionalSource branch this release ships from.
buildTargetobjectoptionalBuild the release cuts against: { platform: "web"|"ios"|"android"|"api", version, buildNumber, source, deployUrl }.
completedAtstringoptionalISO datetime when the release was completed.
descriptionstringoptionalOptional description for the release.
endDatestringoptionalEnd date as ISO date string (e.g. 2026-07-31).
environmentstringoptionalEnvironment label this release targets, e.g. "Staging".
isCompletedbooleanoptionalWhether the release is completed.
isStartedbooleanoptionalWhether the release has started.
linkedIssuesarrayoptionalArray of linked-issue objects (same shape as list_releases returns).
notestringoptionalRich HTML note.
parentReleaseIdstringoptionalID of the parent release to nest under (max 3 levels deep).
startDatestringoptionalStart date as ISO date string (e.g. 2026-07-01).
startedAtstringoptionalISO datetime when the release started.
testersarrayoptionalUser _ids assigned as testers. Must be members of the org.
typestringoptionalRelease type. Default options: "release", "version", "sprint", "iteration", "plan", "cycle", "feature" (case-insensitive).
testidinomcp_create_session#Create a new exploratory testing session. Requires write permission. mission accepts rich HTML (the high-level charter). assigneeUserId accepts either a User _id ("user_abc...") or an email address — the email is resolved against TestDino users automatically. estimate is in minutes. Findings are not available via MCP — add them in the UI. IMPORTANT: tags must be a JSON array of strings — e.g. ["exploratory","auth"] — NOT the comma-separated form that list_sessions accepts as a filter.13 params

Create a new exploratory testing session. Requires write permission. mission accepts rich HTML (the high-level charter). assigneeUserId accepts either a User _id ("user_abc...") or an email address — the email is resolved against TestDino users automatically. estimate is in minutes. Findings are not available via MCP — add them in the UI. IMPORTANT: tags must be a JSON array of strings — e.g. ["exploratory","auth"] — NOT the comma-separated form that list_sessions accepts as a filter.

NameTypeRequiredDescription
namestringrequiredSession name.
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
assigneeUserIdstringoptionalUser _id ("user_abc...") OR email address — both accepted. Email is looked up server-side.
attachmentsarrayoptionalArray of attachment objects or URLs.
configstringoptionalSession configuration.
environmentstringoptionalEnvironment label, e.g. "Staging".
estimateintegeroptionalEstimate in minutes.
linkedIssuesarrayoptionalArray of linked-issue objects (same shape as list_sessions returns).
missionstringoptionalRich HTML mission/charter.
releaseIdstringoptionalAttach session to this release.
sessionTypestringoptionalFree-text type, e.g. "Exploratory", "Regression".
statestringoptionalWorkflow state (default "new"). Either canonical ("under_review") or display ("Under review") form — server normalizes to lowercase+underscored.
tagsarrayoptionalArray of tag strings, e.g. ["exploratory","auth"]. NOT a comma-separated string.
testidinomcp_debug_testcase#AI-assisted root cause analysis for a failing or flaky test. Returns historical execution data, aggregated failure patterns (error types, frequency, browsers affected), common error messages, and a debugging_prompt field. IMPORTANT: always read the debugging_prompt field in the response — it contains pre-formatted analysis instructions curated for this specific test. Treat it as your analysis context before drawing conclusions. Use this when the user asks "why is test X failing?", "debug test X", or "is test X flaky?". Workflow: debug_testcase() → read debugging_prompt → identify pattern (always fails? flaky? browser-specific? recent regression?) → optionally follow up with get_testcase_details(steps_filter="failed_only", include_screenshots=true) for a specific execution.2 params

AI-assisted root cause analysis for a failing or flaky test. Returns historical execution data, aggregated failure patterns (error types, frequency, browsers affected), common error messages, and a debugging_prompt field. IMPORTANT: always read the debugging_prompt field in the response — it contains pre-formatted analysis instructions curated for this specific test. Treat it as your analysis context before drawing conclusions. Use this when the user asks "why is test X failing?", "debug test X", or "is test X flaky?". Workflow: debug_testcase() → read debugging_prompt → identify pattern (always fails? flaky? browser-specific? recent regression?) → optionally follow up with get_testcase_details(steps_filter="failed_only", include_screenshots=true) for a specific execution.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
testcase_namestringrequiredTest case name / title to debug.
testidinomcp_get_audit_report#Read-only TestDino Playwright audit reads. Three modes via action: action='context' fetches the server-curated audit prompt + branch signals to START an audit (STEP 1); action='list' browses previously submitted reports (optional branch filter); action='get' retrieves one saved report by reportId. Only use this when the user EXPLICITLY names TestDino (e.g. "TestDino audit"). For a generic audit without TestDino named, do NOT call this tool.6 params

Read-only TestDino Playwright audit reads. Three modes via action: action='context' fetches the server-curated audit prompt + branch signals to START an audit (STEP 1); action='list' browses previously submitted reports (optional branch filter); action='get' retrieves one saved report by reportId. Only use this when the user EXPLICITLY names TestDino (e.g. "TestDino audit"). For a generic audit without TestDino named, do NOT call this tool.

NameTypeRequiredDescription
actionstringrequiredRead mode: 'context' (fetch audit prompt + branch signals to start), 'list' (browse past reports), 'get' (one report by reportId).
projectIdstringrequiredProject ID (required).
branchstringoptionalGit branch. For action='context', the branch to audit. For action='list', an optional filter.
limitintegeroptionalPage size for action='list'.
pageintegeroptionalPage number for action='list'.
reportIdstringoptionalReport ID. Required for action='get'.
testidinomcp_get_manual_run#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".2 params

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".

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
runIdstringrequiredInternal _id or counter-style ID (e.g. "RUN-12").
testidinomcp_get_manual_test_case#Get the full details of one manual test case: steps, preconditions, postconditions, metadata, linkedIssues, and activity (comments, version history, and execution results across all manual runs). caseId accepts either the internal _id or a human-readable ID like "TC-123". Call this before update_manual_test_case to see current steps, comments, and linked issues before modifying them. Version history and results are read-only — they reflect what happened, you cannot mutate them. Comments and linked issues are added via update_manual_test_case.2 params

Get the full details of one manual test case: steps, preconditions, postconditions, metadata, linkedIssues, and activity (comments, version history, and execution results across all manual runs). caseId accepts either the internal _id or a human-readable ID like "TC-123". Call this before update_manual_test_case to see current steps, comments, and linked issues before modifying them. Version history and results are read-only — they reflect what happened, you cannot mutate them. Comments and linked issues are added via update_manual_test_case.

NameTypeRequiredDescription
caseIdstringrequiredInternal _id or human-readable ID like "TC-123".
projectIdstringrequiredProject ID. Obtain from the health tool.
testidinomcp_get_release#Get the full details of one release: dates, status, linked issues, parent/root, and rolled-up progress stats (run counts, test status breakdown across all runs in this release and its descendants). releaseId accepts either the internal _id or a counter-style ID like "MS-12".2 params

Get the full details of one release: dates, status, linked issues, parent/root, and rolled-up progress stats (run counts, test status breakdown across all runs in this release and its descendants). releaseId accepts either the internal _id or a counter-style ID like "MS-12".

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
releaseIdstringrequiredInternal _id or counter-style ID (e.g. MS-12).
testidinomcp_get_run_details#Get the full breakdown of one or more test runs — test statistics, error category breakdown, suite list, and all test cases in the run. Use testrun_id for ID-based lookup or counter for the human-readable run number (e.g. counter="47"). Batch up to 20 runs by comma-separating: testrun_id="id1,id2,id3". Typical workflow: list_testruns() → pick IDs → get_run_details() for the specific run.3 params

Get the full breakdown of one or more test runs — test statistics, error category breakdown, suite list, and all test cases in the run. Use testrun_id for ID-based lookup or counter for the human-readable run number (e.g. counter="47"). Batch up to 20 runs by comma-separating: testrun_id="id1,id2,id3". Typical workflow: list_testruns() → pick IDs → get_run_details() for the specific run.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
counterstringoptionalSingle counter, or comma-separated counters (max 20). Alternative to testrun_id.
testrun_idstringoptionalSingle test run ID, or comma-separated IDs (max 20).
testidinomcp_get_session#Get the full details of one exploratory session: name, mission, status, assignee, linked release, attachments, linked issues, findings. sessionId accepts either the internal _id or a counter-style ID like "SES-12".2 params

Get the full details of one exploratory session: name, mission, status, assignee, linked release, attachments, linked issues, findings. sessionId accepts either the internal _id or a counter-style ID like "SES-12".

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
sessionIdstringrequiredInternal _id or counter-style ID (e.g. "SES-12").
testidinomcp_get_testcase_details#Get full details of a test case — errors, stack traces, steps, console logs, and artifacts. CRITICAL RULE: using by_title alone without by_testrun_id or counter returns ALL executions of that test across every run — this is expensive and usually not what you want. Always pair by_title with by_testrun_id or counter to scope to a specific run. Use testcaseid for the most precise lookup (no other context needed). Always pass steps_filter="failed_only" when debugging — it drops passing setup/hook steps and returns only the erroring step, cutting noise significantly. Use include_history=true + history_limit to see pass/fail patterns over time (useful for flakiness analysis). Use include_screenshots=true or include_traces=true to get artifact URLs for a specific failing execution.24 params

Get full details of a test case — errors, stack traces, steps, console logs, and artifacts. CRITICAL RULE: using by_title alone without by_testrun_id or counter returns ALL executions of that test across every run — this is expensive and usually not what you want. Always pair by_title with by_testrun_id or counter to scope to a specific run. Use testcaseid for the most precise lookup (no other context needed). Always pass steps_filter="failed_only" when debugging — it drops passing setup/hook steps and returns only the erroring step, cutting noise significantly. Use include_history=true + history_limit to see pass/fail patterns over time (useful for flakiness analysis). Use include_screenshots=true or include_traces=true to get artifact URLs for a specific failing execution.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
by_code_snippetstringoptionalFilter by code snippet in the test.
by_error_messagestringoptionalFilter by error message text.
by_fulltitlestringoptionalFilter by full test case title (including suite prefix).
by_statusstringoptionalFilter by test case status.
by_testrun_idstringoptionalFilter to a specific test run ID.
by_testrun_idsstringoptionalComma-separated test run IDs (max 20).
by_testsuite_idstringoptionalFilter by test suite ID.
by_titlestringoptionalFilter by test case title. Always pair with by_testrun_id or counter to scope to a specific run.
get_allbooleanoptionalReturn all results (max 1000).
history_limitintegeroptionalNumber of historical executions to include (1-100).
include_artifactsbooleanoptionalInclude artifact URLs in the response.
include_attachmentsbooleanoptionalInclude attachment URLs in the response.
include_historybooleanoptionalInclude pass/fail history across runs (useful for flakiness analysis).
include_screenshotsbooleanoptionalInclude screenshot URLs in the response.
include_tracesbooleanoptionalInclude trace URLs in the response.
include_videosbooleanoptionalInclude video URLs in the response.
limitintegeroptionalItems per page. Use 0 or -1 for all results (capped at 1000).
offsetintegeroptionalSkip N items (alternative to page).
pageintegeroptional1-indexed page number (default: 1).
sort_bystringoptionalSort results by this field.
sort_orderstringoptionalSort direction.
steps_filterstringoptionalUse "failed_only" to drop passing setup/hook steps and return only the erroring step.
testcaseidstringoptionalExact test case ID(s), comma-separated (max 50).
testidinomcp_health#ALWAYS call this first — before any other tool in every session. Verifies your PAT, returns your account info, and lists every organization and project you can access with their projectId values. Every other tool requires a projectId; this is the only way to get it. Extract the projectId for the project the user is asking about and store it for all subsequent calls. Also call this whenever you get a PROJECT_NOT_FOUND or auth error from another tool — it will tell you which projects are actually accessible.0 params

ALWAYS call this first — before any other tool in every session. Verifies your PAT, returns your account info, and lists every organization and project you can access with their projectId values. Every other tool requires a projectId; this is the only way to get it. Extract the projectId for the project the user is asking about and store it for all subsequent calls. Also call this whenever you get a PROJECT_NOT_FOUND or auth error from another tool — it will tell you which projects are actually accessible.

testidinomcp_list_manual_runs#Browse manual test runs for a project. Filter by status (active|closed), state (new|in_progress|on_hold|done), environment, release (releaseId), tags, or free-text search on name. Default page size 25 (max 200).12 params

Browse manual test runs for a project. Filter by status (active|closed), state (new|in_progress|on_hold|done), environment, release (releaseId), tags, or free-text search on name. Default page size 25 (max 200).

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
environmentstringoptionalFilter by environment label.
isClosedbooleanoptionalFilter by closed state (boolean).
limitintegeroptionalItems per page. Default 25, max 200.
pageintegeroptionalPage number (1-indexed).
releaseIdstringoptionalFilter to runs in this release. Pass "none" to list unlinked runs.
searchstringoptionalMatch by run name.
sortBystringoptionalField to sort results by.
sortOrderstringoptionalSort direction.
statestringoptionalWorkflow state. Either canonical ("new", "in_progress", "on_hold", "done") or display ("In Progress", "On Hold") form.
statusstringoptionalFilter by run status: active or closed.
tagsstringoptionalSingle tag or comma-separated tags.
testidinomcp_list_manual_test_cases#Search and browse manual test cases with filters. Use suiteId to scope to a folder, search to match by title or caseId (e.g. "TC-123"), status for active/draft/deprecated, and tags for comma-separated tag filtering. Default limit is 10 — increase it if you need more results.13 params

Search and browse manual test cases with filters. Use suiteId to scope to a folder, search to match by title or caseId (e.g. "TC-123"), status for active/draft/deprecated, and tags for comma-separated tag filtering. Default limit is 10 — increase it if you need more results.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
automationStatusstringoptionalAutomation status. Values come from Project Settings → Test Case Properties. Defaults: Manual, Automated, To Be Automated.
behaviorstringoptionalBehavior. Values come from Project Settings → Test Case Properties. Defaults: Positive, Negative, Destructive, Not Set.
layerstringoptionalLayer. Values come from Project Settings → Test Case Properties. Defaults: E2E, API, Unit, Not Set.
limitintegeroptionalMaximum results to return (default 10, max 1000).
prioritystringoptionalPriority. Values come from Project Settings → Test Case Properties. Defaults: Critical, High, Medium, Low, Not Set.
searchstringoptionalMatch by title or caseId (e.g. "TC-123").
severitystringoptionalSeverity. Values come from Project Settings → Test Case Properties. Defaults: Blocker, Critical, Major, Normal, Minor, Trivial, Not Set.
statusstringoptionalFilter by test case status.
suiteIdstringoptionalFilter to a specific test suite folder.
tagsstringoptionalSingle tag or comma-separated tags.
timestringoptionalTime filter, e.g. "last 1 hour", "Yesterday", "last 7 days".
typestringoptionalType. Values come from Project Settings → Test Case Properties. Defaults: Smoke, Regression, Functional, Integration, E2E, API, Unit, Performance, Security, Accessibility, Usability, Compatibility, Acceptance, Exploratory, Other.
testidinomcp_list_manual_test_suites#Get the test suite folder hierarchy for a project. Returns suite IDs, names, parent relationships, and child counts. Always call this before create_manual_test_case — you need the exact suiteName (case-sensitive) to create a test case. Pass parentSuiteId to list only the direct children of a specific suite.2 params

Get the test suite folder hierarchy for a project. Returns suite IDs, names, parent relationships, and child counts. Always call this before create_manual_test_case — you need the exact suiteName (case-sensitive) to create a test case. Pass parentSuiteId to list only the direct children of a specific suite.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
parentSuiteIdstringoptionalFilter to direct children of a specific suite.
testidinomcp_list_releases#Browse releases (milestones) for a project. Supports filtering by type, completion status, parent release, and free-text search on name. Pass parentReleaseId to get only the direct children of a release (releases nest up to 3 levels deep). Default page size is 25 (max 200).10 params

Browse releases (milestones) for a project. Supports filtering by type, completion status, parent release, and free-text search on name. Pass parentReleaseId to get only the direct children of a release (releases nest up to 3 levels deep). Default page size is 25 (max 200).

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
isCompletedbooleanoptionalFilter by completion status.
limitintegeroptionalItems per page. Default 25, max 200.
pageintegeroptionalPage number (1-indexed).
parentReleaseIdstringoptionalFilter to direct children of a release.
searchstringoptionalMatch by release name.
sortBystringoptionalField to sort results by.
sortOrderstringoptionalSort direction.
statusstringoptionalRelease status (project-specific).
typestringoptionalRelease type. Default options: "release", "version", "sprint", "iteration", "plan", "cycle", "feature". Projects can customize this list.
testidinomcp_list_run_test_cases#Get the per-case execution records inside a manual run — what the UI shows as rows in the run's test-case table. Each row carries the test case identity (caseKey like "TC-156", title), the current assignee, and the current result/status ("untested", "passed", "failed", etc.). Filter by assignee (email or User _id) or result/status. Use this before update_run_test_case so you have the rtcRef for each case you want to update.10 params

Get the per-case execution records inside a manual run — what the UI shows as rows in the run's test-case table. Each row carries the test case identity (caseKey like "TC-156", title), the current assignee, and the current result/status ("untested", "passed", "failed", etc.). Filter by assignee (email or User _id) or result/status. Use this before update_run_test_case so you have the rtcRef for each case you want to update.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
runIdstringrequiredInternal run _id or counter-style ID (e.g. "RUN-12").
assigneestringoptionalFilter by assignee — User _id OR email (server resolves).
limitintegeroptionalItems per page (default 25, max 200).
pageintegeroptional1-indexed page number.
resultstringoptionalFilter by result/status. Display ("Passed") or canonical ("passed") form.
searchstringoptionalMatch by case title or caseKey.
sortBystringoptionalField to sort by.
sortOrderstringoptionalSort direction.
statusstringoptionalAlias for result. Same normalization rules.
testidinomcp_list_sessions#Browse exploratory sessions for a project. Filter by status (active|closed), state, sessionType, assignee, release (releaseId), tags, or free-text search on name. Default page size 25 (max 200).13 params

Browse exploratory sessions for a project. Filter by status (active|closed), state, sessionType, assignee, release (releaseId), tags, or free-text search on name. Default page size 25 (max 200).

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
assigneeUserIdstringoptionalUser _id (e.g. "user_abc...") OR email address — both are accepted.
isClosedbooleanoptionalFilter to closed sessions.
limitintegeroptionalItems per page (default 25, max 200).
pageintegeroptional1-indexed page number.
releaseIdstringoptionalFilter to sessions in this release. Pass "none" for unlinked.
searchstringoptionalMatch by session name.
sessionTypestringoptionalFilter by session type.
sortBystringoptionalField to sort by.
sortOrderstringoptionalSort direction.
statestringoptionalWorkflow state. Pass canonical ("new", "under_review", "done", "rejected") or display ("Under review") form — server normalizes to lowercase+underscored.
statusstringoptionalFilter by status.
tagsstringoptionalSingle tag or comma-separated tags.
testidinomcp_list_testcase#List and filter test cases across runs. Requires at least one run context: by_testrun_id, counter, by_pages, by_branch, by_time_interval, by_environment, by_author, or by_commit. When you use by_branch, by_time_interval, by_author, or by_commit, this tool resolves the matching runs internally — you do NOT need to call list_testruns first. Combine filters freely: e.g. by_branch="main" + by_status="failed" + by_time_interval="1d" gives you all failures on main today in one call. Batch up to 20 run IDs with by_testrun_id="id1,id2,id3". Use by_error_category to filter by "timeout_issues", "element_not_found", "assertion_failures", or "network_issues". Prefer specific filters over get_all=true.22 params

List and filter test cases across runs. Requires at least one run context: by_testrun_id, counter, by_pages, by_branch, by_time_interval, by_environment, by_author, or by_commit. When you use by_branch, by_time_interval, by_author, or by_commit, this tool resolves the matching runs internally — you do NOT need to call list_testruns first. Combine filters freely: e.g. by_branch="main" + by_status="failed" + by_time_interval="1d" gives you all failures on main today in one call. Batch up to 20 run IDs with by_testrun_id="id1,id2,id3". Use by_error_category to filter by "timeout_issues", "element_not_found", "assertion_failures", or "network_issues". Prefer specific filters over get_all=true.

NameTypeRequiredDescription
projectIdstringrequiredProject ID. Obtain from the health tool.
by_artifactsbooleanoptionalFilter to test cases that have artifacts.
by_attempt_numberintegeroptionalFilter by attempt number.
by_authorstringoptionalFilter by commit author.
by_branchstringoptionalFilter by git branch name.
by_browser_namestringoptionalFilter by browser name, e.g. "webkit", "chromium", "firefox".
by_commitstringoptionalFilter by commit SHA or message.
by_environmentstringoptionalFilter by environment label.
by_error_categorystringoptionalFilter by error category, e.g. "timeout_issues", "element_not_found", "assertion_failures", "network_issues".
by_error_messagestringoptionalFilter by error message text.
by_pagesintegeroptionalTest-run page (1-indexed, 20 runs per page, newest first). Use to walk back through historical runs when no other run filter is given.
by_spec_file_namestringoptionalFilter by spec file name.
by_statusstringoptionalFilter by test case status.
by_tagstringoptionalComma-separated tag names.
by_testrun_idstringoptionalSingle test run ID or comma-separated (max 20).
by_time_intervalstringoptionalTime filter: "1h", "1d", "weekly", "monthly", "last 5 days", or "YYYY-MM-DD,YYYY-MM-DD".
by_total_runtimestringoptionalPer-test duration filter. Numbers are milliseconds by default; suffix with `s` for seconds. Examples: ">5000" (>5s), "<1000ms", ">5s".
counterstringoptionalTest run counter (alternative to by_testrun_id).
get_allbooleanoptionalReturn all results (max 1000).
limitintegeroptionalItems per page. Use 0 or -1 for all results (capped at 1000).
offsetintegeroptionalSkip N items (alternative to page).
pageintegeroptional1-indexed page number (default: 1).
testidinomcp_list_testruns#Browse test runs for a project with optional filters. Returns run-level metadata: pass/fail totals, duration, branch, commit, author, and testrun_id values for follow-up calls. Prefer by_time_interval over get_all to avoid expensive full fetches.8 params

Browse test runs for a project with optional filters. Returns run-level metadata: pass/fail totals, duration, branch, commit, author, and testrun_id values for follow-up calls. Prefer by_time_interval over get_all to avoid expensive full fetches.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
by_authorstringoptionalFilter by commit author.
by_branchstringoptionalFilter by git branch name.
by_time_intervalstringoptionalTime filter: "1h", "1d", "weekly", "monthly", "last 5 days", or "YYYY-MM-DD,YYYY-MM-DD".
get_allbooleanoptionalReturn all results (max 1000).
limitintegeroptionalItems per page. Use 0 or -1 for all results (capped at 1000).
offsetintegeroptionalSkip N items (alternative to page).
pageintegeroptional1-indexed page number (default: 1).
testidinomcp_submit_audit_report#Final step of the TestDino Playwright audit flow — submits a completed audit report. Requires write permission. Call this only AFTER get_audit_report(action='context') and after you have analyzed the local Playwright code and produced findings. score (0-100) and markdownReport are required; include findings, recommendations, reportName, branch, scope, and target as available.9 params

Final step of the TestDino Playwright audit flow — submits a completed audit report. Requires write permission. Call this only AFTER get_audit_report(action='context') and after you have analyzed the local Playwright code and produced findings. score (0-100) and markdownReport are required; include findings, recommendations, reportName, branch, scope, and target as available.

NameTypeRequiredDescription
markdownReportstringrequiredCompleted markdown report (required).
projectIdstringrequiredProject ID (required).
scorenumberrequiredFinal audit score 0-100 (required).
branchstringoptionalGit branch that was audited.
findingsarrayoptionalStructured findings for the completed report.
recommendationsarrayoptionalRecommendation strings for the completed report.
reportNamestringoptionalShort human-readable title for the saved report.
scopestringoptionalAudit scope. Defaults to 'suite'.
targetobjectoptionalStructured target (e.g. feature area, spec path) for scoped audits.
testidinomcp_update_manual_run#Modify an existing manual test run. Send only fields you want to change inside the updates object. Requires write permission. Allowed fields: name, note, environment, releaseId, state, forecast, tags, linkedIssues, attachments, links, selectionMode. Pass updates.status="closed" to close the run (same as the UI "Close run" button: freezes it, snapshots remaining cases). This is not reversible via MCP. IMPORTANT: updates.tags must be a JSON array of strings — e.g. ["smoke","regression"] — NOT a comma-separated string.3 params

Modify an existing manual test run. Send only fields you want to change inside the updates object. Requires write permission. Allowed fields: name, note, environment, releaseId, state, forecast, tags, linkedIssues, attachments, links, selectionMode. Pass updates.status="closed" to close the run (same as the UI "Close run" button: freezes it, snapshots remaining cases). This is not reversible via MCP. IMPORTANT: updates.tags must be a JSON array of strings — e.g. ["smoke","regression"] — NOT a comma-separated string.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
runIdstringrequiredInternal _id or counter-style ID (e.g. "RUN-12").
updatesobjectrequiredFields to update: name, note, environment, releaseId, state, forecast, tags, linkedIssues, attachments, links, selectionMode. status="closed" closes the run.
testidinomcp_update_manual_test_case#Modify an existing manual test case. Send only the fields you want to change inside the updates object — omit everything else. Requires write permission. IMPORTANT: steps is a full replacement — passing a steps array overwrites all existing steps. Always call get_manual_test_case() first to read current steps before modifying them. For attachments use the nested shape: { add: ["url-or-path"], remove: ["attachment-id"] } — you can add and remove in the same call. To add comments, pass updates.comments as an array of comment-body strings — each is appended as a new comment. Cap of 20 comments/case is enforced. To link issues, pass updates.issues as an array of ticket keys (e.g. ["PROJ-123","ENG-9"]).3 params

Modify an existing manual test case. Send only the fields you want to change inside the updates object — omit everything else. Requires write permission. IMPORTANT: steps is a full replacement — passing a steps array overwrites all existing steps. Always call get_manual_test_case() first to read current steps before modifying them. For attachments use the nested shape: { add: ["url-or-path"], remove: ["attachment-id"] } — you can add and remove in the same call. To add comments, pass updates.comments as an array of comment-body strings — each is appended as a new comment. Cap of 20 comments/case is enforced. To link issues, pass updates.issues as an array of ticket keys (e.g. ["PROJ-123","ENG-9"]).

NameTypeRequiredDescription
caseIdstringrequiredInternal _id or human-readable ID like "TC-123".
projectIdstringrequiredProject ID. Obtain from the health tool.
updatesobjectrequiredFields to update: title (alias: name), description, preconditions, postconditions, status, steps (full replacement), priority, severity, type, layer, behavior, automationStatus, tags, flags, attachments {add, remove}, customFields, comments (array of strings to append), issues (array of ticket keys to link via Jira lookup).
testidinomcp_update_release#Modify an existing release. Send only the fields you want to change inside the updates object. Requires write permission. Fields: name, description, note, type, startDate, endDate, isStarted, isCompleted, startedAt, completedAt, linkedIssues, branch, environment, buildTarget, testers, parentReleaseId.3 params

Modify an existing release. Send only the fields you want to change inside the updates object. Requires write permission. Fields: name, description, note, type, startDate, endDate, isStarted, isCompleted, startedAt, completedAt, linkedIssues, branch, environment, buildTarget, testers, parentReleaseId.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
releaseIdstringrequiredInternal _id or counter-style ID (e.g. MS-12).
updatesobjectrequiredFields to update: name, description, note, type, startDate, endDate, isStarted, isCompleted, startedAt, completedAt, linkedIssues, branch, environment, buildTarget ({platform,version,buildNumber,source,deployUrl}), testers (User _ids, org members), parentReleaseId.
testidinomcp_update_run_test_case#Update one test case inside a manual run. Two modes: (1) Quick verdict — pass updates.assigneeUserId and/or updates.result/status to assign and set a result. (2) Detailed result — additionally pass updates.comment, updates.linkedIssues, updates.attachments, or updates.stepResults to log a full result entry. NOTE: combining updates.assigneeUserId with any detailed-result field in one call is rejected — make two separate calls. Requires write permission. rtcRef accepts the caseKey ("TC-156"), the internal tcm_rtc_... RTC ID, or the underlying test case _id. Closed runs reject result writes.4 params

Update one test case inside a manual run. Two modes: (1) Quick verdict — pass updates.assigneeUserId and/or updates.result/status to assign and set a result. (2) Detailed result — additionally pass updates.comment, updates.linkedIssues, updates.attachments, or updates.stepResults to log a full result entry. NOTE: combining updates.assigneeUserId with any detailed-result field in one call is rejected — make two separate calls. Requires write permission. rtcRef accepts the caseKey ("TC-156"), the internal tcm_rtc_... RTC ID, or the underlying test case _id. Closed runs reject result writes.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
rtcRefstringrequiredPer-case record reference — tcm_rtc_... _id, caseKey ("TC-156"), or underlying test case _id.
runIdstringrequiredInternal run _id or counter-style ID (e.g. "RUN-12").
updatesobjectrequiredQuick verdict: assigneeUserId (email or _id), result/status (display or canonical), elapsed (seconds). Detailed result: comment (rich HTML), linkedIssues, attachments, stepResults ([{ order, status, comment }]).
testidinomcp_update_session#Modify an existing exploratory session. Send only fields you want to change inside the updates object. Requires write permission. Allowed fields: name, mission, sessionType, config, environment, releaseId, assigneeUserId, state, estimate, tags, linkedIssues, attachments. Pass updates.status="closed" to close the session (same as the UI "Close session" button: freezes it, snaps state to the project's "Done" option). This is not reversible via MCP. IMPORTANT: updates.tags must be a JSON array of strings — e.g. ["exploratory","auth"] — NOT a comma-separated string.3 params

Modify an existing exploratory session. Send only fields you want to change inside the updates object. Requires write permission. Allowed fields: name, mission, sessionType, config, environment, releaseId, assigneeUserId, state, estimate, tags, linkedIssues, attachments. Pass updates.status="closed" to close the session (same as the UI "Close session" button: freezes it, snaps state to the project's "Done" option). This is not reversible via MCP. IMPORTANT: updates.tags must be a JSON array of strings — e.g. ["exploratory","auth"] — NOT a comma-separated string.

NameTypeRequiredDescription
projectIdstringrequiredProject ID (e.g. project_<id>). Obtain from the health tool.
sessionIdstringrequiredInternal _id or counter-style ID (e.g. "SES-12").
updatesobjectrequiredFields to update: name, mission, sessionType, config, environment, releaseId, assigneeUserId, state, estimate, tags, linkedIssues, attachments. status="closed" closes the session.