testit-mcp-server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@testit-mcp-server list work items for project 'Mobile App'"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
TestIT MCP
Production-ready MCP server for TestIT focused on WorkItems, TestRuns, and TestPlans.
Features
Simple API Key authentication via
PrivateTokenorBearerscheme.Project-aware tools with optional default project via
TESTIT_PROJECT_ID.Project resolution by
projectId(UUID) orprojectName.Support for TestIT v2 API.
stdiotransport for local MCP clients (npxor local build).
Related MCP server: TestRail MCP Server
Tool Coverage
Projects: list, search, get, create, update, delete
Work Items: list, search, get, create, update, delete, history, versions, restore, attachments
Test Runs: list, get, create, start, stop, delete, results
Test Results: get, search, create, update
Test Plans: list, get, create, update, delete
Shared Steps: list, get (as specialized work items)
Configurations: list, get, create, update
Analytics: project analytics, test plan analytics, test run analytics
Authentication
This server uses the TestIT API Key:
Use your user-generated API Secret Key in
TESTIT_TOKEN.Server uses
Authorization: PrivateToken {token}by default.If token starts with
Bearer, it uses it as is.
Environment Variables
TESTIT_URL=https://testit.instance.com/
TESTIT_TOKEN=your-api-token
# Optional default project (UUID):
# TESTIT_PROJECT_ID=550e8400-e29b-41d4-a716-446655440000TESTIT_URLrequiredTESTIT_TOKENrequiredTESTIT_PROJECT_IDoptionalTESTIT_READ_ONLYoptional (true/1): expose only read-only tools (list/get/search)TESTIT_TOOLSETSoptional: comma-separated toolsets to expose (default:default) —projects,work-items,sections,test-runs,test-results,test-plans,test-suites,autotests,analytics,shared-steps,configurations,configuration-parameters,attachments,dictionaries; opt-in (hidden unless listed):admin(custom attributes, templates, webhooks, workflows, notifications, project settings),bulk(mass delete/restore/purge). Keywords:default= all non-opt-in toolsets,all= everything. Example:TESTIT_TOOLSETS=default,admin. Fewer tools = less model context.
Every tool carries MCP annotations (readOnlyHint, destructiveHint, idempotentHint), so clients can ask for confirmation before destructive calls (delete/purge and full-replacement update_*).
Run Locally
Prerequisites
Node.js v18+ and npm
Step-by-step
Clone the repository:
git clone https://github.com/iampopovich/testit-mcp-server.git
cd testit-mcp-serverInstall dependencies:
npm installCreate your local environment file from the example and fill required values:
cp .env.example .envBuild the project:
npm run buildStart the MCP server:
npm startMCP Client Setup
{
"mcpServers": {
"testit": {
"command": "npx",
"args": ["-y", "testit-mcp-server"],
"env": {
"TESTIT_URL": "https://{testit-instance-address}",
"TESTIT_TOKEN": "{your-api-token}",
"TESTIT_PROJECT_ID": "{TestIT-project-uuid}"
}
}
}
}Available Tools
130 toolsassign_test_points_testerAIdempotent
Assign a tester (user UUID) to the given test points of a test plan. TestIT has no user list API: take user ids from existing entities (createdById, testerId). Returns the affected point ids.
Inputs: id (required), userId (required), testPointIds (required).
complete_test_runAIdempotent
Complete a test run (InProgress/Stopped -> Completed).
Inputs: id (required).
create_autotestA
Create an autotest. Linking it to test cases (workItemIds) makes those cases automated, which is required to create test runs from a test plan. Results are later sent by externalId (submit_test_run_results). Extra AutoTestCreateApiModel fields can go into "payload".
Inputs: name (required), externalId (required), tags, setup, +10 more.
create_configurationC
Create a configuration (environment such as browser/OS). Extra ConfigurationPostModel fields can go into "payload".
Inputs: name (required), payload, isDefault, projectId, +3 more.
create_configuration_parameterC
Create a configuration parameter with allowed values.
Inputs: name (required), values (required), projectId, projectIds, +1 more.
create_projectB
Create a new project (payload: CreateProjectApiModel, at least name). Cloud instances may answer 402 when the plan's project limit is reached.
Inputs: payload (required).
create_sectionB
Create a section. parentId defaults to the project's root section (TestIT rejects parentId=null).
Inputs: name (required), parentId, projectId, projectName, +2 more.
create_test_planB
Create a test plan (status New). Extra CreateTestPlanApiModel fields can be passed in "payload".
Inputs: name (required), tags, build, endDate, +7 more.
create_test_plan_cloneA
Clone a test plan (copy named " (1)", status New). Returns the new plan.
Inputs: id (required).
create_test_runB
Create an empty test run in a project (state NotStarted). Extra CreateEmptyTestRunApiModel fields (attachments, links) can be passed in "payload".
Inputs: name, tags, payload, projectId, +3 more.
create_test_run_from_autotestsA
Create a test run (not bound to a test plan) pre-filled with one result per autotest x configuration. Fill results via submit_test_run_results by autoTestExternalId.
Inputs: configurationIds (required), autoTestExternalIds (required), name, tags, +4 more.
create_test_run_from_test_pointsB
Create a test run inside a test plan from explicit selectors: for each configuration, the work items whose test points to include. Like create_test_run_from_work_items, only AUTOMATED test points are accepted.
Inputs: testPlanId (required), testPointSelectors (required), name, tags, +3 more.
create_test_run_from_work_itemsA
Create a test run inside a test plan for the given work items x configurations (the plan becomes InProgress). Only AUTOMATED work items are accepted (linked to an autotest, see link_autotest_work_item); TestIT rejects manual ones. Results are pre-created and filled via submit_test_run_results; the run completes when all results are in.
Inputs: testPlanId (required), workItemIds (required), configurationIds (required), name, +5 more.
create_test_suiteA
Create a test suite in a test plan (top-level, or nested under parentId). Then fill it with set_test_suite_work_items.
Inputs: name (required), testPlanId (required), type, parentId.
create_work_itemA
Create a test case, checklist or shared step. Defaults: entityTypeName=TestCases, state=NotReady, priority=Medium, duration=60000 ms (always 0 for SharedSteps — required by TestIT). Extra CreateWorkItemApiModel fields can be passed in "payload".
Inputs: name (required), tags, state, steps, +12 more.
create_work_item_commentC
Add a comment to a work item.
Inputs: text (required), workItemId (required).
delete_attachmentADestructiveIdempotent
Delete an attachment that is not linked to any entity (TestIT returns 422 for linked ones).
Inputs: id (required).
delete_autotestADestructiveIdempotent
Delete (archive) an autotest. Archived autotests return 404 from get_autotest and can only be found via search_autotests with isDeleted=true; the API has no restore or purge for autotests.
Inputs: id (required).
delete_configurationADestructiveIdempotent
Delete (archive) a configuration. Use restore_configuration to undo or purge_configuration to remove it for good.
Inputs: id (required).
delete_configuration_parameterCDestructiveIdempotent
Delete a configuration parameter.
Inputs: id (required).
delete_projectCDestructiveIdempotent
Delete a project by ID.
Inputs: id (required).
delete_sectionADestructiveIdempotent
Delete (archive) a section together with its subsections and work items.
Inputs: id (required).
delete_test_planADestructiveIdempotent
Delete (archive) a test plan. Use restore_test_plan to undo or purge_test_plan to remove it for good.
Inputs: id (required).
delete_test_result_attachmentCDestructiveIdempotent
Delete an attachment from a test result.
Inputs: id (required), attachmentId (required).
delete_test_runADestructiveIdempotent
Delete (archive) a test run by ID. Use restore_test_run to undo or purge_test_run to remove permanently.
Inputs: id (required).
delete_test_suiteADestructiveIdempotent
Delete a test suite with its nested suites and test points.
Inputs: id (required).
delete_work_itemCDestructiveIdempotent
Delete a work item by ID (UUID).
Inputs: id (required).
delete_work_item_commentCDestructiveIdempotent
Delete a work item comment.
Inputs: commentId (required).
get_attachmentBRead-only
Download an attachment; content is returned base64-encoded.
Inputs: id (required).
get_attachment_metadataCRead-only
Attachment metadata: name, type, size, author, dates.
Inputs: id (required).
get_autotestCRead-only
Get an autotest by UUID.
Inputs: id (required).
get_autotest_average_durationBRead-only
Average duration (ms) of passed and failed results of an autotest.
Inputs: id (required).
get_autotest_results_historyBRead-only
Results of an autotest across test runs (status, outcome, run, plan, configuration, duration), newest first.
Inputs: id (required), page, size, skip, +8 more.
get_configurationBRead-only
Get a configuration by ID.
Inputs: id (required).
get_configuration_parameterBRead-only
Get a configuration parameter with its values and projects.
Inputs: id (required).
get_projectBRead-only
Get a project by ID.
Inputs: id (required).
get_project_analyticsBRead-only
Get analytics for all test plans in a project.
Inputs: page, size, skip, take, +5 more.
get_sectionBRead-only
Get a section with its precondition/postcondition steps.
Inputs: id (required), isDeleted.
get_test_planCRead-only
Get a test plan by ID.
Inputs: id (required).
get_test_plan_analyticsCRead-only
Get analytics for a specific test plan.
Inputs: id (required).
get_test_plan_historyCRead-only
Change history of a test plan.
Inputs: id (required), page, size, skip, +4 more.
get_test_plan_summaryBRead-only
Test plan totals: test points (total/manual/automated/completed), defects, planned and spent duration.
Inputs: id (required).
get_test_point_work_itemCRead-only
The work item (test case) a test point represents.
Inputs: id (required).
get_test_resultCRead-only
Get a test result by ID.
Inputs: id (required).
get_test_result_attachmentARead-only
Download a test result attachment; content is returned base64-encoded.
Inputs: id (required), attachmentId (required).
get_test_result_rerunsARead-only
All attempts of a test result (original + reruns) with runNumber, outcome and status. The original result keeps its status; later attempts are separate results.
Inputs: id (required).
get_test_results_statisticsBRead-only
Counts of test results by status (passed/failed/skipped/blocked/...) and failure category for a filter, e.g. one or more test runs.
Inputs: name, filter, className, namespace, +3 more.
get_test_runCRead-only
Get a test run by ID.
Inputs: id (required).
get_test_run_resultsCRead-only
Get test results for a test run.
Inputs: id (required).
get_test_run_statisticsBRead-only
Get test result statistics for a specific test run, optionally filtered.
Inputs: id (required), filter.
get_test_suiteCRead-only
Get a test suite by ID.
Inputs: id (required).
get_work_itemCRead-only
Get a work item by ID (UUID).
Inputs: id (required).
get_work_item_historyCRead-only
Get work item history.
Inputs: id (required), page, size, skip, +4 more.
get_work_item_test_results_historyBRead-only
Test results of a work item across test runs/plans (newest first), with optional filters.
Inputs: id (required), to, from, page, +10 more.
get_work_item_versionsCRead-only
Get all versions of a work item.
Inputs: id (required).
link_autotest_work_itemAIdempotent
Link an autotest to a work item; the work item becomes automated.
Inputs: id (required), workItemId (required).
list_autotest_test_runsCRead-only
Test runs that contain the autotest.
Inputs: id (required).
list_autotest_work_itemsCRead-only
List work items (test cases) linked to an autotest.
Inputs: id (required).
list_configurationsBRead-only
List configurations for a project. Every project has a default one ("Any"); test points and results are always bound to a configuration.
Inputs: projectId, projectName.
list_project_attributesBRead-only
List custom attributes of a project (id, name, type, isRequired, options). Use attribute ids as keys of "attributes" when creating work items or test plans.
Inputs: isDeleted, projectId, projectName.
list_project_autotest_namespacesBRead-only
Autotest namespaces of a project with their classes (for filtering search_autotests).
Inputs: projectId, projectName.
list_projectsBRead-only
List projects, optionally filtered by name, archive or favorite flag.
Inputs: name, page, size, skip, +6 more.
list_sectionsARead-only
List all sections (folders) of a project as a flat list with parentId. The root section has parentId=null. Use section IDs as sectionId when creating work items.
Inputs: page, size, skip, take, +5 more.
list_tagsARead-only
List tags. With projectId/projectName: tags used by that project's work items (plain names). Without: all tags in the instance (search with searchValue).
Inputs: page, size, skip, take, +5 more.
list_test_plan_configurationsCRead-only
Configurations used by the test points of a test plan.
Inputs: id (required).
list_test_plansBRead-only
List test plans for a project.
Inputs: isDeleted, projectId, projectName.
list_test_plan_tagsCRead-only
Tags used by test plans (instance-wide).
Inputs: page, size, skip, take, +3 more.
list_test_plan_test_runsBRead-only
List test runs of a test plan, optionally filtered by state.
Inputs: id (required), page, size, skip, +8 more.
list_test_plan_test_suitesARead-only
Get the test suite tree of a test plan (suites with nested children).
Inputs: testPlanId (required).
list_test_point_test_runsCRead-only
Test runs that include a test point.
Inputs: id (required).
list_test_result_attachmentsARead-only
List attachments of a test result (id, name, type, size).
Inputs: id (required).
list_test_runsCRead-only
List test runs for a project.
Inputs: page, size, skip, take, +12 more.
list_test_statusesARead-only
List test result statuses (system and custom): code, name, type. Use "code" as statusCode in submit_test_run_results / set_test_result (codes are case-insensitive, e.g. PASSED, FAILED, BLOCKED).
Inputs: no named parameters.
list_test_suite_configurationsCRead-only
Configurations of a test suite.
Inputs: id (required).
list_test_suite_test_pointsARead-only
List test points of a test suite (work item x configuration, with status and tester).
Inputs: id (required).
list_test_suite_test_resultsCRead-only
Test results of all test points in a test suite (latest attempts, with autotest and configuration).
Inputs: id (required).
list_work_item_autotestsCRead-only
Autotests linked to a work item.
Inputs: id (required).
list_work_item_commentsCRead-only
List comments of a work item.
Inputs: id (required).
list_work_itemsCRead-only
List work items (test cases, checklists, shared steps) of a project, with optional filters.
Inputs: name, page, size, skip, +13 more.
move_sectionAIdempotent
Move a section (with its work items and subsections) under another parent. Optionally place it before nextSectionId.
Inputs: id (required), parentId (required), nextSectionId.
move_work_itemBIdempotent
Move a work item to another section (optionally before nextWorkItemId).
Inputs: id (required), sectionId (required), nextWorkItemId.
purge_configurationADestructiveIdempotent
Permanently delete an archived configuration. Irreversible; delete (archive) it first.
Inputs: id (required).
purge_test_planADestructiveIdempotent
Permanently delete an archived test plan. Irreversible; delete (archive) it first.
Inputs: id (required).
purge_test_runADestructiveIdempotent
Permanently delete an archived test run. Irreversible; delete (archive) it first.
Inputs: id (required).
purge_work_itemADestructiveIdempotent
Permanently delete an archived work item. Irreversible; the item must be deleted (archived) first.
Inputs: id (required).
rename_sectionCIdempotent
Rename a section.
Inputs: id (required), name (required).
rerun_test_run_resultsA
Re-run autotest results of a run: each selected result gets a new pending attempt and the run goes back to InProgress. Submit new results via submit_test_run_results; attempts are listed by get_test_result_reruns.
Inputs: id (required), testResultIds (required).
reset_test_pointsADestructiveIdempotent
Reset the given test points of a test plan back to NoResults (their results are discarded).
Inputs: id (required), testPointIds (required).
restore_configurationBIdempotent
Restore an archived configuration.
Inputs: id (required).
restore_test_planAIdempotent
Restore an archived (deleted) test plan.
Inputs: id (required).
restore_test_runAIdempotent
Restore an archived (deleted) test run.
Inputs: id (required).
restore_work_itemAIdempotent
Restore an archived (deleted) work item by ID.
Inputs: id (required).
search_autotestsBRead-only
Search autotests. Typed fields are merged over an optional raw "filter" (AutoTestFilterApiModel). projectIds defaults to the current project.
Inputs: name, page, size, skip, +14 more.
search_configuration_parametersBRead-only
List configuration parameters (e.g. browser, os) with their values and projects. Defaults to the current project; name filters by substring.
Inputs: name, projectId, projectName.
search_configurationsBRead-only
Search configurations by name substring across projects (default: current project).
Inputs: name, page, size, skip, +7 more.
search_projectsCRead-only
Search projects by filter.
Inputs: query (required), page, size, skip, +4 more.
search_test_pointsBRead-only
Search test points across test plans/suites. Typed fields are merged with an optional raw "filter" (TestPointFilterRequestModel).
Inputs: name, page, size, skip, +10 more.
search_test_resultsBRead-only
Search test results. Typed fields are merged with an optional raw "query" (TestResultsFilterApiModel) for advanced fields.
Inputs: name, page, size, skip, +9 more.
search_test_runsBRead-only
Search test runs (across projects if no project given). Typed fields are merged over an optional raw "filter" (TestRunFilterApiModel). projectIds defaults to the current project.
Inputs: name, page, size, skip, +10 more.
search_work_itemsBRead-only
Search work items across projects. Typed filter fields are combined with an optional raw "filter" object (TestIT WorkItemFilterApiModel) for advanced fields.
Inputs: name, page, size, skip, +15 more.
set_autotestAIdempotent
Partially update an autotest (JSON Patch): only name, title, description, namespace, classname you pass change. externalId is the result-matching key and is not editable here.
Inputs: id (required), name, title, classname, +2 more.
set_autotests_flakyAIdempotent
Mark (value=true) or unmark (value=false) autotests as flaky by id.
Inputs: value (required), autoTestIds (required).
set_configurationAIdempotent
Partially update a configuration: only the given fields change (JSON Patch). Prefer this over update_configuration.
Inputs: id (required), name, isDefault, parameters, +1 more.
set_projectAIdempotent
Partially update a project (JSON Patch): only name/description you pass change.
Inputs: id (required), name, description.
set_test_plan_stateAIdempotent
Change test plan status: start (-> InProgress), pause (-> Paused), complete (-> Completed).
Inputs: id (required), action (required).
set_test_resultAIdempotent
Change selected fields of a test result (JSON Patch) without touching the others. To change the result status use statusCode (patching outcome is ignored by TestIT). Raw RFC 6902 operations can be added via "operations".
Inputs: id (required), trace, comment, message, +3 more.
set_test_runBIdempotent
Partially update a test run (JSON Patch): only name, description, tags you pass change.
Inputs: id (required), name, tags, description.
set_test_suiteAIdempotent
Rename a test suite (JSON Patch on name).
Inputs: id (required), name (required).
set_test_suite_configurationsBIdempotent
Set the configurations of a test suite (replaces the current list).
Inputs: id (required), configurationIds (required).
set_test_suite_work_itemsAIdempotent
Set the work items of a test suite. REPLACES the current list; test points are created for each work item x suite configuration (the default configuration if none set).
Inputs: id (required), workItemIds (required).
set_work_itemAIdempotent
Partially update a work item: only the given fields change (JSON Patch), each call creates a new version. Prefer this over update_work_item (full replacement). Use move_work_item to change section.
Inputs: id (required), name, tags, state, +2 more.
start_test_runBIdempotent
Start a test run.
Inputs: id (required).
stop_test_runCIdempotent
Stop a test run.
Inputs: id (required).
submit_test_run_resultsA
Send autotest results into a test run (POST /testRuns/{id}/testResults). Each result needs an existing autotest externalId and a configurationId. Returns created test result IDs.
Inputs: id (required), results (required).
unassign_test_points_testerBDestructiveIdempotent
Remove the tester from the given test points of a test plan. Returns the affected point ids.
Inputs: id (required), testPointIds (required).
unlink_autotest_work_itemBDestructiveIdempotent
Remove the link between an autotest and a work item.
Inputs: id (required), workItemId (required).
unlink_work_item_autotestsADestructiveIdempotent
Remove ALL autotest links of a work item; it becomes manual (isAutomated=false). To drop one link use unlink_autotest_work_item.
Inputs: id (required).
update_configurationADestructiveIdempotent
Replace a configuration (PUT, ConfigurationPutModel with id). Fields not sent are cleared; use set_configuration for partial changes.
Inputs: payload (required).
update_configuration_parameterADestructiveIdempotent
Replace a configuration parameter (PUT): name, the FULL list of values and projects. Values not sent are removed.
Inputs: id (required), name (required), values (required), projectId, +2 more.
update_projectADestructiveIdempotent
Replace a project (PUT, full model with id); fields not sent are cleared. Prefer set_project.
Inputs: payload (required).
update_test_planADestructiveIdempotent
Replace a test plan (PUT). Requires id, name, projectId in payload; fields not sent are cleared.
Inputs: payload (required).
update_test_resultADestructiveIdempotent
Replace a test result (PUT). WARNING: this is a full replacement — fields not sent (comment, message, links, step results...) are cleared. Prefer set_test_result for partial changes.
Inputs: id (required), trace, comment, message, +4 more.
update_work_itemADestructiveIdempotent
Replace a work item (PUT, full model with id). Fields not sent are cleared; prefer set_work_item.
Inputs: payload (required).
update_work_item_commentCDestructiveIdempotent
Replace the text of a work item comment.
Inputs: text (required), commentId (required).
upload_attachmentA
Upload a file to TestIT and get its attachment id/metadata. Pass the id in attachmentIds of create_work_item to attach it.
Inputs: filename (required), contentType (required), contentBase64 (required).
upload_test_result_attachmentB
Attach a file (screenshot, log) to a test result. Returns the new attachment id.
Inputs: id (required), filename (required), contentType (required), contentBase64 (required).
upload_work_item_attachmentC
Upload an attachment to a work item.
Inputs: id (required), filename (required), contentType (required), contentBase64 (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 130 tools
Most tools target a distinct resource and action, and descriptions explicitly disambiguate close pairs such as list vs search, set vs update, and the multiple create_test_run_from_* variants. However, the 130-tool surface includes several near-duplicate patterns and lifecycle variants that can still cause misselection under load.
Names consistently use snake_case verb_noun phrasing (list_, get_, create_, set_, delete_, restore_, purge_) across all resources. Minor variants like create_test_plan_clone and rerun_test_run_results remain readable and follow the same convention.
130 tools far exceeds the 3-15 range appropriate for an MCP server and the 25+ threshold for 'too many'; even for a broad test-management API, this volume creates significant selection and context burden.
The surface covers CRUD and lifecycle operations for projects, work items, sections, test plans, suites, runs, results, autotests, configurations, attachments, comments, shared steps, tags, and analytics. Stated API limitations (e.g. no user list, no autotest restore/purge) are documented rather than hidden gaps.
Maintenance
Related MCP Connectors
Create and manage test cases, test runs and results in Testiny from your AI assistant.
Bug tracking and test management: issues, test cases, sprints, runs, requirements and KB.
ComplexQA projects, cases, bugs, and autotest runs for an external agent.
Laviya project management: read and update tasks, wikis, sprints and test cases.
Related MCP Servers
- AlicenseAqualityCmaintenanceEnables to interact with Jira AIO Test Case Management System, allowing retrieval of test cases, projects, folders, and search functionality.7Apache 2.0
- AlicenseBqualityDmaintenanceEnables AI assistants to interact with TestRail test management system, supporting full CRUD operations on projects, suites, sections, test cases, runs, results, plans, and milestones.35327 npm1MIT
- AlicenseAqualityDmaintenanceEnables interaction with Xray Cloud and Data Center for test management, including authentication, GraphQL queries, test execution/plan management, and result import via MCP.911 npmMIT
- AlicenseBqualityDmaintenanceEnables management of TestRail projects, suites, test cases, runs, and results through natural language.426,221 npmMIT