Endtest MCP

Connect ChatGPT, Claude, Claude Code, and other MCP clients to Endtest through the Model Context Protocol to browse tests, start executions, and manage your team.

Connect AI assistants and agentic tools to Endtest through the Model Context Protocol (MCP).

The Endtest MCP allows an MCP-compatible client to browse your Web Tests and Mobile Tests, inspect test cases and steps, view Scheduler entries and Drive files, retrieve execution results, start test executions, manage team groups and members, manage test-suite collaborators, inspect labels, and check available parallel execution capacity.

Introduction

The Endtest MCP is available at:

https://app.endtest.io/mcp

The recommended authentication method is OAuth. This allows supported AI assistants such as ChatGPT and Claude to connect to Endtest without requiring users to copy or expose their Endtest App ID and App Code.

When OAuth is used, the user signs in to Endtest in the browser and approves the connection. The AI client receives an OAuth access token that represents that Endtest user. The user's existing Endtest team roles, test-suite permissions, and account restrictions continue to apply.

For developer tools and MCP clients that support custom HTTP headers, the existing Endtest API credentials are also supported:

X-Endtest-App-Id: YOUR_APP_ID
X-Endtest-App-Code: YOUR_APP_CODE

This makes the same MCP endpoint usable with OAuth-based clients as well as tools such as Claude Code and MCP Inspector.

The Endtest MCP uses Streamable HTTP.

Connecting to the Endtest MCP

Use this MCP server URL in supported clients:

https://app.endtest.io/mcp

For most users, OAuth is the recommended connection method.

Connect Endtest to ChatGPT

You can connect the Endtest MCP to ChatGPT on the web when custom MCP servers are available for your ChatGPT account or workspace.

  1. Open Plugins in ChatGPT.
  2. Select the + button.
  3. Select Add custom MCP server or Create custom MCP server.
  4. Enter a name such as Endtest.
  5. Set the Server URL to:
https://app.endtest.io/mcp
  1. Select OAuth authentication.
  2. Continue with the connection.

ChatGPT discovers the Endtest OAuth configuration automatically and opens the Endtest authorization page.

If you are already signed in to Endtest, you can review the requested permissions and select Allow.

If you are not signed in, sign in to Endtest first and then continue the authorization flow.

After the connection is created:

  1. Install the Endtest plugin from your personal or workspace Plugins section.
  2. Open a new ChatGPT Work conversation.
  3. Type @ in the prompt box and select Endtest.

Example requests:

List my Endtest web tests.
Show me the test cases and steps from my Checkout Regression suite.
How many parallel execution slots are available?
Run my Checkout Regression test suite.

ChatGPT can use multiple Endtest MCP tools in the same request when a workflow requires it.

Connect Endtest to Claude

You can connect the Endtest MCP as a custom remote connector in Claude.

  1. Open Customize and then Connectors.
  2. Select Add.
  3. Select Custom, then Web.
  4. Enter a name such as Endtest.
  5. Set the remote MCP server URL to:
https://app.endtest.io/mcp
  1. Continue to the authentication settings.
  2. Under Authentication, select Sign in now.
  3. Under OAuth client, select Use Claude's published identity.
  4. Keep Streamable HTTP as the transport.
  5. Select Add.

Claude opens the Endtest authorization page.

If you are already signed in to Endtest, review the requested permissions and select Allow.

Once connected, enable Endtest for the Claude conversation and ask questions such as:

List my Endtest web tests.
Show me the recent failed Endtest executions.
Find my Checkout Regression suite and explain what each test case does.
Run my Checkout Regression suite.

Connect Endtest to Claude Code

Claude Code can also connect directly using your Endtest App ID and App Code.

claude mcp add --transport http endtest https://app.endtest.io/mcp \
  --header "X-Endtest-App-Id: YOUR_APP_ID" \
  --header "X-Endtest-App-Code: YOUR_APP_CODE"

Then start Claude Code:

claude

You can then ask Claude to use your Endtest tests, results, team data, or execution tools.

Treat your App ID and App Code as secrets. Do not commit them to source control or include them in prompts.

Testing the connection with MCP Inspector

MCP Inspector can connect using the existing Endtest API credentials.

Set the credentials as environment variables:

export ENDTEST_APP_ID='YOUR_APP_ID'
export ENDTEST_APP_CODE='YOUR_APP_CODE'

Then list the available tools:

npx @modelcontextprotocol/inspector --cli \
  https://app.endtest.io/mcp \
  --transport http \
  --header "X-Endtest-App-Id: $ENDTEST_APP_ID" \
  --header "X-Endtest-App-Code: $ENDTEST_APP_CODE" \
  --method tools/list

If the connection is successful, the Endtest MCP tools will be returned.

Available tools

The Endtest MCP currently provides the following tools.

list_web_tests

Returns the Web Test suites available to the Endtest account.

The response includes information such as:

  • Test suite ID.
  • Test suite name.
  • Project name.
  • Labels.

Example:

{
  "tests": [
    {
      "id": 58127403916,
      "name": "Checkout Regression - Demo Store",
      "type": "web",
      "project": "All Projects",
      "labels": [
        "Regression"
      ]
    }
  ],
  "count": 1
}

You can optionally search by test suite name or limit the number of returned test suites.

list_mobile_tests

Returns the Mobile Test suites available to the Endtest account.

The response includes the same general information as list_web_tests, including the project name and labels.

Example:

{
  "tests": [
    {
      "id": 48012973542,
      "name": "Android Smoke Tests - Sample App",
      "type": "mobile",
      "project": "All Projects",
      "labels": [
        "Regression"
      ]
    }
  ],
  "count": 1
}

get_test_cases

Returns the active test cases from a Web Test or Mobile Test suite.

Required parameter:

  • test_suite_id - The ID of the test suite.

Example request:

{
  "test_suite_id": 58127403916
}

This tool is useful when the AI assistant needs to inspect the structure of a suite before opening a specific test case.

get_test_case_steps

Returns the active steps from one test case, in execution order.

Required parameter:

  • test_case_id - The ID of the test case.

The response contains the test case information and its steps.

A step can include fields such as:

  • Step name.
  • Step number.
  • Action type.
  • Locator.
  • Parameter 1.
  • Parameter 2.
  • Parameter 3.
  • Skip status.
  • Spare locators and element information.

Example:

{
  "test_case": {
    "id": 76483920155,
    "name": "Checkout Flow",
    "test_suite_id": 58127403916,
    "test_suite_name": "Checkout Regression - Demo Store"
  },
  "steps": [
    {
      "id": 59832471602,
      "step_name": "Go to URL",
      "step_number": 1,
      "type": "GoToUrl",
      "locator": "",
      "parameter1": "https://endtest-demo.io",
      "parameter2": "",
      "parameter3": ""
    }
  ],
  "step_count": 1
}

For security reasons, the Endtest MCP does not resolve stored AWS secret values when reading test steps.

For example, if a test uses a secret reference, the MCP returns the stored reference instead of returning the actual secret value.

get_test_suite_structure

Returns the complete structure of one test suite.

This includes:

  • Test suite information.
  • Project name.
  • Labels.
  • Active test cases.
  • Active test steps for every test case.

Required parameter:

  • test_suite_id - The ID of the test suite.

Example:

{
  "test_suite_id": 58127403916
}

The response has a structure similar to:

{
  "test_suite": {
    "id": 58127403916,
    "name": "Checkout Regression - Demo Store",
    "type": "web",
    "project": "All Projects",
    "labels": [
      "Regression"
    ]
  },
  "test_cases": [
    {
      "id": 76483920147,
      "name": "Initialize Test Data",
      "position": 1,
      "step_count": 4,
      "steps": []
    },
    {
      "id": 76483920155,
      "name": "Checkout Flow",
      "position": 2,
      "step_count": 15,
      "steps": []
    }
  ],
  "test_case_count": 2,
  "step_count": 19
}

This tool is useful when an AI assistant needs to understand or review an entire test suite.

For large test suites, get_test_case_steps should be preferred when only one test case needs to be inspected, because returning an entire suite can produce a large response.

list_scheduler_entries

Returns Scheduler entries visible to the Endtest account.

The tool can optionally filter entries by test suite or project and can limit the number of returned entries.

This can be useful for questions such as:

Show me the scheduled executions for this test suite.

or:

Which tests are currently scheduled to run?

list_drive_files

Returns files available in Endtest Drive.

This includes files owned by the user and team-visible files available to that user.

You can optionally search by file name and limit the number of returned files.

Example requests to an AI assistant:

Show me the CSV files in my Endtest Drive.
Find a Drive file containing "checkout" in its name.

list_test_results

Returns recent Endtest test executions without loading the full execution logs.

The tool can optionally filter by:

  • Test suite.
  • Project.
  • Status.
  • Number of results.

The response includes the execution hash and a link to the Results page.

Example:

{
  "results": [
    {
      "hash": "Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An",
      "test_suite_name": "Checkout Regression - Demo Store",
      "status": "Finished",
      "project": "All Projects",
      "result_url": "https://app.endtest.io/results?hash=Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An"
    }
  ],
  "count": 1
}

get_test_result

Returns one Endtest execution by its execution hash.

Required parameter:

  • hash - The Endtest execution hash.

Optional parameter:

  • detail - light or full.

The default is:

light

Use light when you only need execution information such as the status, configuration, timestamps, passed and failed counts, and test case statuses.

Use full when the detailed JSON execution logs are also needed.

Example:

{
  "hash": "Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An",
  "detail": "light"
}

A response can contain information such as:

{
  "hash": "Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An",
  "test_suite_name": "Checkout Regression - Demo Store",
  "test_suite_id": 58127403916,
  "configuration": "Windows 11 Chrome Latest (v153) 1920 x 1080 San Francisco, US",
  "status": "Finished",
  "total_test_cases": 1,
  "total_passed": 1,
  "total_failed": 0,
  "errors": 0,
  "project": "All Projects",
  "result_url": "https://app.endtest.io/results?hash=Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An"
}

run_web_test

Starts an Endtest Web Test execution.

Required parameter:

  • test_suite_id - The ID of the Web Test suite.

Optional parameters include:

  • platform
  • os
  • browser
  • browser_version
  • resolution
  • geolocation
  • cases
  • notes

If those parameters are not provided, the default configuration is:

Platform: Windows
OS: Windows 11
Browser: Chrome
Browser Version: Latest
Resolution: 1920x1080
Geolocation: San Francisco
Test Cases: All

Example:

{
  "test_suite_id": 58127403916
}

The tool starts the execution and returns the execution hash immediately.

Example response:

{
  "started": true,
  "test_suite_id": 58127403916,
  "hashes": [
    "Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An"
  ],
  "results": [
    {
      "hash": "Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An",
      "result_url": "https://app.endtest.io/results?hash=Df4hiJHj5SD5wr9MK63OmeVHAODklEx0An"
    }
  ]
}

Executions started through the Endtest MCP are recorded in the Endtest activity logs as:

Run test suite (Endtest MCP)

You can use get_test_result with the returned hash to check the execution status and results.

run_mobile_test

Starts an Endtest Mobile Test execution.

Required parameters include:

  • test_suite_id
  • platform
  • device
  • app

Optional parameters include:

  • grid
  • cases
  • notes

Example:

{
  "test_suite_id": 48012973542,
  "platform": "android",
  "device": "DEVICE_NAME",
  "app": "APP_URL_OR_IDENTIFIER"
}

The tool starts the execution and returns its execution hash and Results page URL.

list_groups

Returns the active groups from the current Endtest team.

Optional parameters:

  • search - Filters groups by name.
  • limit - Limits the number of returned groups.

Example response:

{
  "team_id": 48291736,
  "groups": [
    {
      "id": 87,
      "name": "QA Engineers"
    }
  ],
  "count": 1
}

create_group

Creates a new group in the current Endtest team.

Required parameter:

  • name - The group name.

This action requires the Endtest team admin role.

Example:

{
  "name": "Regression Team"
}

list_team_members

Returns the active users from the current Endtest team.

The response includes information such as:

  • User ID.
  • Name.
  • Email address.
  • Blocked status.
  • Whether the user is a team admin.

Optional parameters:

  • search - Searches by name or email address.
  • limit - Limits the number of returned users.

Use this tool before group or collaborator operations when the user ID is not already known.

add_team_member

Adds a user to the current Endtest team by email address.

Required parameter:

  • email - The email address of the user that should be added.

Example:

{
  "email": "qa@example.com"
}

This tool uses the same Endtest team-member behavior as the Endtest UI, including the existing free-trial and paid-team limits.

If the email address does not already have an Endtest account, Endtest can create the account and send the normal invitation email.

If the user already has an Endtest account, the existing Endtest rules for team membership are applied.

remove_team_member

Removes an active user from the current Endtest team.

Required parameter:

  • user_id - The Endtest user ID.

This action requires the team admin role.

The current user cannot remove themselves with this tool.

This action uses the same removal behavior as the Endtest Team page, including deactivating the removed Endtest user according to the current team-removal implementation.

Because this is a destructive operation, an AI assistant should only call it when the user clearly requests the removal.

list_group_members

Returns the active users assigned to one group.

Required parameter:

  • group_id - The Endtest group ID.

The group must belong to the current user's team.

Example:

{
  "group_id": 87
}

add_team_member_to_group

Adds an existing team member to a group.

Required parameters:

  • group_id - The Endtest group ID.
  • user_id - The Endtest user ID.

This action requires the team admin role.

The user must already be an active member of the same Endtest team, and the group must belong to that team.

list_test_suite_collaborators

Returns the current collaborators for one test suite.

A collaborator can be either:

  • A User.
  • A Group.

Each collaborator also has a role:

  • Owner
  • Editor
  • Viewer

Required parameter:

  • test_suite_id - The Endtest test suite ID.

This tool is useful before adding or removing collaborators.

add_collaborator

Adds a User or Group as a collaborator to a test suite.

Required parameters:

  • test_suite_id - The Endtest test suite ID.
  • collaborator_type - user or group.
  • collaborator_id - The Endtest user ID or group ID.
  • role - Owner, Editor, or Viewer.

Example for a user collaborator:

{
  "test_suite_id": 58127403916,
  "collaborator_type": "user",
  "collaborator_id": 91736284,
  "role": "Editor"
}

Example for a group collaborator:

{
  "test_suite_id": 58127403916,
  "collaborator_type": "group",
  "collaborator_id": 87,
  "role": "Viewer"
}

The Endtest user making the request must have Owner access to the test suite, either directly or through a group with the Owner role.

User collaborators must be active members of the current team. Group collaborators must belong to the current team.

The normal Endtest collaborator notifications are used.

remove_collaborator

Removes a User or Group collaborator from a test suite.

Required parameters:

  • test_suite_id - The Endtest test suite ID.
  • collaborator_type - user or group.
  • collaborator_id - The Endtest user ID or group ID.

The user making the request must have Owner access to the test suite.

The current user cannot remove themselves as a user collaborator through this tool.

Existing Endtest safeguards also apply when removing a group that provides the current user's only Owner access.

Because this is a destructive operation, an AI assistant should only call it when the user clearly requests the removal.

get_available_parallel_slots

Returns the number of parallel Endtest execution slots that are currently available.

No parameters are required.

Example response:

{
  "available_parallel_slots": 3
}

For team accounts, the value is based on the team's configured number of parallel slots and the team's currently active executions.

For users without a team, the user's own parallel-slot configuration is used.

list_labels

Returns all active labels available to the current Endtest team.

Labels are called tags in the Endtest backend.

The response includes:

  • Label ID.
  • Name.
  • Description.
  • Color.

Optional parameters:

  • search - Searches labels by name.
  • limit - Limits the number of returned labels.

get_test_suite_labels

Returns the active labels assigned to one test suite.

Required parameter:

  • test_suite_id - The Endtest test suite ID.

The labels assigned to a suite are also included in the responses from:

  • list_web_tests
  • list_mobile_tests
  • get_test_suite_structure

Use get_test_suite_labels when only the label assignments for one suite are needed.

Common workflows

Find and run a Web Test

An AI assistant can first use list_web_tests to identify the correct suite and then use run_web_test to execute it.

For example, you can ask:

Find my Checkout Regression test and run it on Chrome on Windows.

The assistant can:

  1. Call list_web_tests.
  2. Identify the matching test suite.
  3. Call run_web_test.
  4. Return the execution hash and Results page URL.

Run a test and check the result

You can ask:

Run the Checkout Regression test and tell me when it finishes.

The assistant can start the test with run_web_test and use get_test_result with the returned execution hash to check the result.

Inspect one test case

You can ask:

Show me the steps from the Checkout Flow test case.

The assistant can:

  1. Find the suite with list_web_tests.
  2. Get its test cases with get_test_cases.
  3. Open the relevant case with get_test_case_steps.

Review an entire test suite

You can ask:

Show me the complete structure of the Checkout Regression test suite.

or:

Review this test suite and explain what each test case is doing.

The assistant can use get_test_suite_structure to retrieve the complete hierarchy:

Test Suite
  -> Test Cases
      -> Test Steps

Review recent failures

You can ask:

Show me the recent failed executions for this test suite.

The assistant can use list_test_results to find the relevant execution and get_test_result to inspect it in more detail.

Manage a group

You can ask:

Create a group called Regression Team and add Alice to it.

The assistant can:

  1. Call list_team_members to identify Alice's user ID.
  2. Call create_group.
  3. Call list_groups to identify the new group ID if needed.
  4. Call add_team_member_to_group.

The group-management write actions require the Endtest team admin role.

Add a test suite collaborator

You can ask:

Give the Regression Team group Editor access to the Checkout test suite.

The assistant can:

  1. Find the test suite with list_web_tests or list_mobile_tests.
  2. Find the group with list_groups.
  3. Call add_collaborator with collaborator_type set to group.

Check execution capacity

You can ask:

How many parallel test slots do we have available right now?

The assistant can call get_available_parallel_slots.

Inspect labels

You can ask:

Show me all of our labels and tell me which labels are assigned to the Checkout suite.

The assistant can use list_labels and get_test_suite_labels.

Authentication and security

The Endtest MCP supports two authentication methods.

OAuth

OAuth is the recommended method for user-facing AI clients such as ChatGPT and Claude.

With OAuth:

  1. The client discovers Endtest's OAuth configuration.
  2. The user signs in to Endtest.
  3. Endtest shows the permissions requested by the connection.
  4. The user approves or declines the connection.
  5. The client receives an OAuth token associated with that Endtest user.

The user's Endtest password, App ID, and App Code are not exposed to ChatGPT or Claude through this flow.

The Endtest MCP currently defines these OAuth permission scopes:

  • endtest.read - Read tests, test cases, steps, results, Drive files, Scheduler entries, team information, groups, collaborators, labels, and execution capacity.
  • endtest.execute - Start Web Test and Mobile Test executions.
  • endtest.manage - Manage team members, groups, group membership, and test-suite collaborators when the Endtest user's role allows it.

OAuth permissions do not override Endtest permissions.

For example:

  • A non-admin team member cannot remove another team member simply because the client has endtest.manage.
  • A user without Owner access to a test suite cannot change that suite's collaborators.
  • A user can only access tests and results that their Endtest account is allowed to access.

App ID and App Code

For developer tools and MCP clients that support custom request headers, Endtest also accepts the same credentials used by the Endtest API:

X-Endtest-App-Id
X-Endtest-App-Code

These credentials determine the Endtest user for the MCP session.

Store the App ID and App Code securely and do not include them directly in prompts, screenshots, source code, or public configuration files.

OAuth is generally preferable for end users because it does not require copying these credentials into another application.

Stored secrets

When test steps reference stored secrets, the Endtest MCP returns the secret reference but does not resolve and expose the stored secret value.

Permission checks

Team-admin and test-suite permission checks are enforced for MCP management actions.

Creating groups, adding users to groups, and removing team members follow the existing Endtest team-role rules.

Collaborator changes require Owner access to the test suite.

Destructive tools such as remove_team_member and remove_collaborator should only be used after the user has clearly requested the change.

Notes

The Endtest MCP endpoint is:

https://app.endtest.io/mcp

The endpoint supports OAuth for clients such as ChatGPT and Claude and also supports X-Endtest-App-Id and X-Endtest-App-Code headers for compatible developer tools.

The MCP currently supports reading tests, test cases, test steps, complete test suite structures, Scheduler entries, Drive files, test results, team members, groups, collaborators, labels, and available parallel slots.

It also supports starting Web Test and Mobile Test executions, creating groups, adding team members, assigning users to groups, adding and removing test-suite collaborators, and removing team members when the current user has the required permissions.

Additional Endtest functionality can be added to the MCP over time without changing the existing tool workflows.