create_scenario_folder
Create a folder for organizing test scenarios. Folders can be nested via parentId.
Write Apidog test cases, multi-step scenarios and CI suites from a description instead of clicking through the test editor.
LABSCO SUMMARY
Coverage goes past creating cases: scenarios chain endpoints into a flow, suites group them for CI, and test data arrives as CSV so one case runs across many rows. The update tools read the current state and merge, which matters because the underlying API replaces wholesale — passing one field would otherwise drop everything else. Deletions of cases, scenarios and suites cannot be undone.
A server over Apidog's test management: test cases against endpoints, scenarios that chain several calls, suites for CI, and the CSV-driven data behind data-driven runs. It is an independent project, not an official Apidog integration.
An Apidog account and three settings, all required: APIDOG_ACCESS_TOKEN, APIDOG_PROJECT_ID and APIDOG_BRANCH_ID — the token scopes what you can reach, and the project and branch decide where the tests land. APIDOG_BASE_URL overrides the API base, which defaults to https://api.apidog.com/api/v1. Run it with npx @acabala/apidog-tests-mcp over stdio, from the npm package @acabala/apidog-tests-mcp, currently 0.0.6. For a case to actually execute rather than hit the bare base URL, the create call needs the endpoint path, a parameters.path entry for each route placeholder, a working auth configuration and a valid responseId.
One command plus a key — npx @acabala/apidog-tests-mcp, then supply credentials
USE CASES
Find its apiDetailId in the endpoint tree, then create the positive and negative cases against it.
Create the scenario, then set its steps — each one bound to an endpoint — as a complete list.
Create the suite and set its items as groups of test cases and scenarios.
Attach a CSV test data record — header line, then values — to the case.
Read the case in full, then update just the field that changed — the rest is merged back.
Read the endpoint coverage statistics, then list the cases on the endpoints that look thin.
Counted once with only startup setup. Other versions, modes or optional credentials may expose a different list.
create_scenario_folderCreate a folder for organizing test scenarios. Folders can be nested via parentId.
create_suite_folderCreate a folder for organizing test suites. Folders can be nested via parentId.
create_test_caseCreate a test case for an API endpoint. Requires apiDetailId (from list_api_endpoints) and responseId. Use list_test_case_categories and list_test_case_tags first to get valid categoryId and tagIds.
create_test_cases_bulkCreate multiple test cases at once. Each item follows the same schema as create_test_case.
create_test_dataCreate a test data record for a test case. The data field is CSV-formatted: first line is the column header, subsequent lines are values. Each column needs a matching entry in the columns object. Variables are accessible in test cases as {{columnName}} or via pm.iterationData.get('columnName') in scripts.
create_test_scenarioCreate a new test scenario (multi-step test flow). Use list_test_scenarios first to find valid folderIds and determine ordering.
create_test_suiteCreate a new test suite for CI grouping. Suites can contain test cases and test scenarios.
delete_scenario_folderDelete a test scenario folder by ID. The folder must be empty. This cannot be undone.
delete_test_caseDelete a test case by ID. This cannot be undone.
delete_test_dataDelete a test data record by ID.
delete_test_scenarioDelete a test scenario by ID. This cannot be undone.
delete_test_suiteDelete a test suite by ID. This cannot be undone.
get_endpoint_statisticsGet endpoint test coverage statistics
get_test_caseGet full details of a single test case by its ID, including parameters, request body, and assertions
get_test_dataGet a specific test data record including the CSV data rows and column definitions.
get_test_scenario_stepsGet the steps (API calls) for a test scenario. Each step contains the full httpApiCase with parameters, auth, and request details.
get_test_suiteGet full details of a test suite, including its items (test cases and scenarios).
list_api_endpointsList API endpoints tree with IDs, names, and folder structure. Use this to find apiDetailId values needed for creating test cases. Pass moduleId to filter by a specific service module (reduces response size significantly). Pass search to filter by endpoint name.
list_environmentsList all environments (DEV, TEST, PROD, etc.) with their base URLs
list_runnersList available test runners (self-hosted agents for running tests)
list_test_case_categoriesList test case categories (e.g. Positive, Negative, Edge Case)
list_test_case_tagsList available test case tags for categorizing test cases
list_test_casesList test cases (id, name, type, apiDetailId, categoryId, tagIds). Supports filtering by endpoint and pagination. Use get_test_case for full details of a single case.
list_test_dataList test data records for a test case. Returns metadata (id, environmentId, relatedId) but not the actual data rows — use get_test_data for that.
list_test_scenariosList all test scenarios (compact summary: id, name, folderId, priority, tags, description, ordering, status). Use get_test_scenario_steps for full details.
list_test_suitesList all test suites (compact summary: id, name, folderId, priority, tags, description, ordering, status). Use get_test_suite for full details.
update_test_caseUpdate an existing test case. Pass only the fields you want to change. The tool fetches the current state first and merges your changes, so unspecified fields are preserved.
update_test_dataUpdate an existing test data record. Fetches current state first and merges changes.
update_test_scenario_stepsSet or update the steps in a test scenario. Each step references an API endpoint via bindId (apiDetailId). Steps are fully replaced — pass the complete steps array. Supports 'http' steps (regular API calls) and 'if' conditional blocks (which have children instead of httpApiCase).
update_test_suite_itemsReplace items in a test suite. Each item is a group with a UUID, a type, and a nested array of references. For STATIC_TEST_CASE: provide testCaseIds (array of test case IDs). For STATIC_TEST_SCENARIO: provide testScenarioIds (array of scenario IDs). For DYNAMIC_TEST_CASE / DYNAMIC_TEST_SCENARIO: provide folderId to dynamically include all from that folder. This does a GET-then-merge so existing suite fields are preserved.
BEFORE YOU INSTALL
30 tools when we connected. APIDOG_PROJECT_ID and APIDOG_BRANCH_ID pin every call to one project and branch. Delete tools for test cases, scenarios, suites, test data and folders are included.
The documented client runs the server on your machine.
CONTEXT COST
Rated by the size of the 30 tool definitions that ride along on every turn, not by how many there are
INSTALLATION
npx @acabala/apidog-tests-mcp{
"mcpServers": {
"apidog-tests": {
"command": "npx",
"args": [
"@acabala/apidog-tests-mcp"
],
"env": {
"APIDOG_ACCESS_TOKEN": "<YOUR_APIDOG_ACCESS_TOKEN>",
"APIDOG_PROJECT_ID": "<YOUR_APIDOG_PROJECT_ID>",
"APIDOG_BRANCH_ID": "<YOUR_APIDOG_BRANCH_ID>"
}
}
}
}claude_desktop_config.json — "Add to your MCP client config (e.g. Claude Desktop claude_desktop_config.json)"