Skip to main content
Glama

QA Sphere MCP Server

IMPORTANT

This repository is archived and no longer maintained.

QA Sphere now serves an MCP server directly — there is no need to run this standalone package. The hosted server is always up to date with the QA Sphere API, exposes the full set of tools allowed by your role, and needs nothing installed locally.

Recommended setup: in QA Sphere go to Settings ⚙️ → MCP Server, pick your assistant and access level, add an API key, and follow the setup instructions shown there. See the QA Sphere documentation for details.

The instructions below are kept for reference only. While running the standalone server, it points this out once per session; set QASPHERE_MCP_HIDE_MIGRATION_NOTICE=1 to silence that.

A Model Context Protocol server for the QA Sphere test management system.

This integration enables Large Language Models (LLMs) to interact directly with QA Sphere test cases, allowing you to discover, summarize, and chat about test cases. In AI-powered IDEs that support MCP, you can reference specific QA Sphere test cases within your development workflow.

Prerequisites

  • Node.js (>=22)

  • QA Sphere account with API access

  • API key from QA Sphere (Settings ⚙️ → API Keys → Add API Key)

  • Your company's QA Sphere URL (e.g., example.eu2.qasphere.com)

Related MCP server: MCP RAG Agent Server

Setup Instructions

This server is compatible with any MCP client. Configuration instructions for popular clients are provided below.

Claude Desktop

  1. Navigate to ClaudeSettingsDeveloperEdit Config

  2. Open claude_desktop_config.json

  3. Add the QA Sphere configuration to the mcpServers dictionary

Cursor

Option 1: Manual Configuration

  1. Go to Settings...Cursor settingsAdd new global MCP server

  2. Add the QA Sphere configuration

Option 2: Quick Install

Click the button below to automatically install and configure the QA Sphere MCP server:

Install MCP Server

5ire

  1. Open 'Tools' and press 'New'

  2. Complete the form with:

    • Tool key: qasphere

    • Command: npx -y qasphere-mcp

    • Environment variables (see below)

Configuration Template

For any MCP client, use the following configuration format:

{
  "mcpServers": {
    "qasphere": {
      "command": "npx",
      "args": ["-y", "qasphere-mcp"],
      "env": {
        "QASPHERE_TENANT_URL": "your-company.region.qasphere.com",
        "QASPHERE_API_KEY": "your-api-key"
      }
    }
  }
}

Replace the placeholder values with your actual QA Sphere URL and API key.

License

This project is licensed under the MIT License - see the LICENSE file for details.

Support

If you encounter any issues or need assistance, please file an issue on the GitHub repository.

Available Tools

15 tools
create_test_caseCreate Test CaseB

Create a new test case in QA Sphere. Supports both standalone and template test cases with various options like steps, tags, requirements, and parameter values for templates.

ParametersJSON Schema
NameRequiredDescriptionDefault
posNoPosition within the folder (0-based index)
tagsNoList of tag titles
typeYesType of test case. A 'template' test case uses `${var}` placeholders in its title, precondition, and step fields; each entry in `parameterValues` substitutes those placeholders to generate one filled test case.
linksNoAdditional links relevant to the test case
stepsNoList of test case steps
titleYesTest case title. In template test cases, may contain `${var}` placeholders that are substituted via `parameterValues` to produce filled test case titles.
commentNoTest case precondition (HTML format). DEPRECATED — prefer the `precondition` object
isDraftNoWhether to create as draft
folderIdYesID of the folder where the test case will be placed. Use upsert_folders tool to create new folders or get existing folders.
priorityYesTest case priority
projectCodeYesProject code identifier (e.g., BDI)
customFieldsNoCustom field values. Keys are custom field system names. Custom fields must exist in the project (created via the web UI).
preconditionNoTest case precondition: either `{sharedPreconditionId}` to reference a shared one, or `{text}` for a standalone precondition
requirementsNoTest case requirements
parameterValuesNoOne set of parameter substitutions per filled test case to generate from the template. Applies only when `type` is `template`; ignored for standalone test cases. A placeholder with no matching key is left untouched (e.g., `${action}` with no `action` value stays literal).
filledTCaseTitleSuffixParamsNoParameter names whose substituted values are appended to each filled test case title for disambiguation (e.g., pass `["env"]` to suffix titles with the `env` value).

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique identifier of the created test case
seqYesSequence number of the test case in the project

TDQS

B3.4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden for behavioral disclosure. It only states the creation action and lists options, but does not reveal side effects, authorization needs, idempotency, or constraints like folder existence.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the core purpose. No extraneous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's high complexity (16 params, nested objects, templates), the description is too brief. It lacks guidance on parameter interdependencies (e.g., type=template requires parameterValues) and prerequisites like folder existence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add extra parameter meaning beyond the schema's detailed descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action ('Create') and resource ('test case in QA Sphere'), distinguishes between standalone and template types, and mentions key options. It is distinct from sibling tools like update_test_case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives compared to siblings. The mention of standalone vs template provides some usage context, but no guidance on prerequisites or when to use update_test_case instead.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_projectGet ProjectA

Get a project information from QA Sphere using a project code (e.g., BDI). You can extract PROJECT_CODE from URLs https://acme-corp.eu2.qasphere.com/project/%PROJECT_CODE%/...

ParametersJSON Schema
NameRequiredDescriptionDefault
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique identifier of the project
codeYesProject code (e.g., BDI)
linksYesProject links
titleYesProject title
createdAtYesProject creation time (ISO 8601)
updatedAtYesProject last-update time (ISO 8601)
archivedAtYesProject archival time (ISO 8601); null if the project is not archived
overviewTitleYesProject overview title
overviewDescriptionYesProject overview description (HTML)

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must carry burden. Implies a read-only, safe operation but does not explicitly mention authentication needs, error responses, or side effects. Adequate for a simple lookup but could be more transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero wasted words. First sentence states purpose, second gives practical usage hint. Perfectly front-loaded and concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complete for a simple lookup tool with output schema present. No need to describe return format. Provides enough context given the sibling list of 15 tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Parameter 'projectCode' is fully defined in schema with pattern and description. The description adds value by explaining how to extract the code from URLs, going beyond schema. No additional parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states verb 'Get' and resource 'project information', specifies the unique identifier 'project code' (e.g., BDI), and provides a practical derivation from URLs. Distinguishes from siblings like list_projects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs when to use (when you have a project code) and gives URL extraction method. Could be improved by contrasting with list_projects for discovering codes, but the guidance is already clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shared_preconditionGet Shared PreconditionA

Fetch details for a single shared precondition by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectCodeYesProject code identifier (e.g., BDI)
sharedPreconditionIdYesIdentifier of the shared precondition

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesID of the precondition
textYesPrecondition text (HTML format)
typeYesType of the precondition. Known values: "standalone" | "shared"
titleNoTitle of the precondition (only for shared preconditions)
versionYesVersion of the precondition
isLatestYesWhether the precondition's version is the latest
createdAtYesPrecondition creation time (ISO 8601)
deletedAtNoPrecondition deletion time (ISO 8601)
projectIdYesProject id the precondition belongs to
updatedAtYesPrecondition last-update time (ISO 8601)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. 'Fetch' implies read-only, which is adequate but minimal. Does not mention error handling or authorization needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence with 8 words, extremely concise and front-loaded. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Simple fetch operation with output schema present. Description is sufficient for the tool's complexity, though lacks context on how to obtain precondition IDs.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters (projectCode, sharedPreconditionId). Description adds no additional parameter context, so baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the action (Fetch details), the resource (shared precondition), and the method (by ID). It distinguishes from sibling tools like list_shared_preconditions which list all.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit guidance on when to use this tool vs alternatives, such as list_shared_preconditions. Context is implied but not stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_shared_stepGet Shared StepB

Fetch details for a single shared step by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectCodeYesProject code identifier (e.g., BDI)
sharedStepIdYesIdentifier of the shared step

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique identifier of the step
typeYesType of the step. Known values: "standalone" | "shared" | "shared_sub_step"
titleNoTitle of the step (only for shared steps)
versionYesVersion of the step
expectedNoExpected result from the step (HTML; only for standalone and shared_sub_step)
isLatestYesWhether this is the latest version of the step
subStepsNoSub-steps of a shared step, each with type 'shared_sub_step' (present only on shared steps)
deletedAtNoDate the step was deleted on (ISO 8601)
descriptionNoDetails of the step (HTML; only for standalone and shared_sub_step)

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations and a minimal description, the tool's behavior is implied as a read operation, but no details are given about error handling, authentication, or side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that immediately conveys the action and resource, with no superfluous words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description adequately covers the basic fetch operation for a simple tool with an output schema, but it lacks context on potential errors or what happens if the step does not exist.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so the baseline is 3. The description adds no additional meaning beyond what the schema already provides for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Fetch details' with the resource 'shared step' and specifies retrieval by ID, clearly differentiating from the sibling tool 'list_shared_steps' which lists multiple steps.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives (e.g., list_shared_steps). The agent must infer usage from the name and description.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_test_caseGet Test CaseA

Get a test case from QA Sphere using a marker in the format PROJECT_CODE-SEQUENCE (e.g., BDI-123). You can use URLs like: https://acme-corp.eu2.qasphere.com/project/%PROJECT_CODE%/tcase/%SEQUENCE%?any Extract %PROJECT_CODE% and %SEQUENCE% from the URL and use them as the marker.

ParametersJSON Schema
NameRequiredDescriptionDefault
markerYesTest case marker in format PROJECT_CODE-TEST_CASE_SEQUENCE (e.g., BDI-123)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idYesUnique identifier of the test case
posYesOrdered position (0-based) of the test case in its folder
seqYesSequence number of the test case within its project (assigned incrementally)
tagsNoList of test case tags
typeYesType of the test case. Known values: "standalone" | "template" | "filled"
filesYesList of files attached to the test case
linksYesAdditional links relevant to the test case
stepsNoList of test case steps
titleYesTitle of the test case
commentYesTest case precondition text (HTML). DEPRECATED — prefer the `precondition` object
isDraftYesWhether the test case is still in draft state
isEmptyYesWhether the test case is empty (has no precondition and steps)
versionYesVersion of the test case. Updates (except folder/pos) create a new version
authorIdYesUnique identifier of the user who added the test case
folderIdYesIdentifier of the folder where the test case is placed
legacyIdYesLegacy identifier of the test case (empty string if none is set)
priorityYesPriority of the test case. Known values: "high" | "medium" | "low"
createdAtYesTest case creation time (ISO 8601)
updatedAtYesTest case last-update time (ISO 8601)
customFieldsNoCustom field values
preconditionNoTest case precondition object (may be a shared or standalone precondition)
requirementsNoTest case requirements
isLatestVersionYesWhether this is the latest version of the test case
numFilledTCasesNoNumber of corresponding filled test cases (only for template test cases)
parameterValuesNoParameter substitutions for filled test cases (only for template test cases)
templateTCaseIdNoCorresponding template test case ID (only for filled test cases)
filledTCaseTitleSuffixParamsNoParameter names whose substituted values are appended to each filled test case title for disambiguation (only for template test cases).

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description bears full burden. Clearly a read operation (Get), no side effects implied. Does not mention authentication or rate limits, but for a simple get tool this is acceptable. The output schema exists, so return behavior is documented externally.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences. First states purpose, second provides critical usage nuance (URL conversion). No wasted words; every sentence earned its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple tool (1 param, output schema present), description fully covers how to identify the test case. No gaps – the agent has all needed info to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Single parameter (marker) with schema coverage 100%. Description adds significant value beyond schema by explaining the format and providing a real-world URL extraction example, making it easy for the agent to construct the parameter correctly.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states 'Get a test case' with specific resource (test case) and verb (get). Distinguishes from siblings like create/update/list_test_cases by focusing on retrieval by marker. Includes the exact marker format and URL extraction, leaving no ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes how to use (via marker or URL), implicitly indicating when to use (when you have a marker) vs. alternatives for listing/searching. Lacks explicit exclusion statements but the specific retrieval context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_custom_fieldsList Custom FieldsA

List all custom fields available for a project. Useful when creating or updating test cases with custom field values — use the systemName property as the key on the customFields parameter of create_test_case / update_test_case. Only enabled fields should be used. Custom fields allow you to extend test cases with additional metadata specific to your organization's needs.

ParametersJSON Schema
NameRequiredDescriptionDefault
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
customFieldsYesList of custom fields defined in the project

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so description carries full burden. It describes listing all custom fields for a project but doesn't disclose whether disabled fields are included or if there's any filtering/pagination. The note about 'only enabled fields should be used' suggests the list may contain disabled ones, which is ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise (3 sentences) and front-loaded with main action. Every sentence adds value: purpose, usage, and a constraint. No fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given simple single-parameter tool with output schema, description covers core usage and ties back to sibling tools. Could be slightly improved by clarifying list behavior regarding disabled fields, but sufficient for the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% (projectCode has a description). Description adds usage context for the parameter's purpose but doesn't elaborate on the parameter itself beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it lists custom fields for a project, and distinguishes itself from sibling tools like list_folders by focusing on custom fields. It specifies the resource ('custom fields') and the scope ('for a project').

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (when creating/updating test cases) and provides usage guidance (use systemName as key, only enabled fields). Lacks explicit 'when not to use' or alternative tools, but context is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_foldersList FoldersA

List folders for test cases within a specific QA Sphere project. Allows pagination and sorting.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of folders to return (0-5000, defaults to 20). Use 0 to fetch only the total count
offsetNoNumber of folders to skip before returning results (defaults to 0)
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending)
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesList of folders
limitYesLimit applied to the query
totalYesTotal number of items available
offsetYesOffset applied to the query

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It does disclose pagination and sorting behavior, which is useful context. However, it does not explicitly state that the operation is read-only, whether it returns only folders at the top level or all nested folders, or any other side-effect relevant behavior. For a simple list operation, the disclosure is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences with no filler. The main action and scope are in the first sentence, and capability highlights are in the second. Every word adds value, and it front-loads the most important information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists and the input schema has 100% parameter coverage, the description is largely complete for a straightforward listing tool. It communicates the scope (within a project), the core operation (list folders), and the key features (pagination, sorting). The only shortfall is the lack of explicit guidance on when to use this over related listing tools, but that is a minor gap for such a simple tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, and the input schema already documents all five parameters with clear descriptions, defaults, and constraints. The description's mention of pagination and sorting adds no meaning beyond what the schema provides. Baseline 3 is appropriate because the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: list folders within a QA Sphere project. It also adds the pagination and sorting capabilities, but it does not explicitly distinguish itself from sibling tools by name. The resource 'folders' is unique among the listed siblings, which makes the purpose reasonably clear.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'within a specific QA Sphere project' implies that projectCode is required, and the mention of pagination and sorting hints at when the optional parameters matter. However, there is no explicit guidance about when to choose this tool over alternatives like list_test_cases or upsert_folders, and no exclusions or when-not-to-use guidance are provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_projectsList ProjectsB

Get a list of all projects from current QA Sphere TMS account (qasphere.com)

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
projectsYesList of projects

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It implies a read-only operation but does not explicitly confirm safety (no side effects, authentication needs, or rate limits). For a zero-parameter list tool, the behavioral disclosure is minimal and insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with 16 words. It contains no redundancy and every word adds value. It is optimally concise for the simplicity of the tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters and an output schema exists, the description adequately states the return type (list of all projects) and source (current account). However, it could mention filtering or ordering if applicable, but the existing completeness is acceptable for a simple list.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters (input schema empty, schema description coverage 100%). The description correctly does not need to add parameter details. Baseline for zero parameters is 4, and the description fulfills this without overcomplicating.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Get' and identifies the resource 'list of all projects' from 'current QA Sphere TMS account'. It clearly states the action and object, but does not differentiate from sibling tools like 'get_project' (single project) or other list tools, missing an opportunity to clarify when to use this one.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description does not provide any guidance on when to use this tool versus alternatives, nor does it mention any prerequisites, limitations, or context. It merely states what the tool does, leaving the agent without decision support.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_requirementsList RequirementsA

List requirements linked to test cases in a project. Requirements are references to external documentation or specifications (like Jira issues) that test cases verify. Use this tool to find requirement IDs when you need to filter test cases by requirement using list_test_cases with the requirementIds parameter.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoInclude optional fields like the number of test cases linked to each requirement
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending). Requires sortField.
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
requirementsYesList of requirements defined in the project

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description does not mention permissions, pagination, rate limits, or whether results are limited to requirements with linked test cases.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences that convey purpose and usage with zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Includes practical context about external references and linkage to test cases for filtering. With output schema present, minimal gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with clear descriptions for each parameter. Description adds no extra meaning to parameters beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States 'List requirements linked to test cases in a project' with specific verb and resource, and distinguishes requirements as external documentation references.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells when to use: 'to find requirement IDs when you need to filter test cases by requirement using list_test_cases with the requirementIds parameter.'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_shared_preconditionsList Shared PreconditionsB

List reusable shared preconditions for a project. Supports sorting by title or creation date and can include test case usage counts. Use the returned id as sharedPreconditionId when referencing a shared precondition from create_test_case / update_test_case.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoInclude optional fields like the number of test cases referencing each precondition
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending). Requires sortField.
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
sharedPreconditionsYesList of shared preconditions defined in the project

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It does not disclose pagination, result limits, permissions, or default behavior. The only behavioral hint is the sorting and include option, but critical aspects are missing.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences. The first states purpose and features, the second provides a practical usage tip. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the existence of an output schema, return values are not needed. However, the description lacks information on pagination, defaults (e.g., sort order), and differentiation from siblings, making it somewhat incomplete for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% description coverage. The description reinforces the sorting and include feature but adds little new meaning beyond the schema. The usage tip about 'id' is helpful but not parameter-specific.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool lists shared preconditions for a project, and mentions sorting and optional fields. However, it does not explicitly distinguish from sibling 'get_shared_precondition' for single items, relying on the verb 'list' vs 'get'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a usage tip for using the returned id in other tools, but lacks explicit guidance on when to use this tool versus alternatives like get_shared_precondition or list_shared_steps. No mention of prerequisites beyond projectCode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_shared_stepsList Shared StepsA

List reusable shared steps for a project. Supports sorting by title or creation date and can include test case usage counts. Use the returned id as sharedStepId when referencing a shared step from create_test_case / update_test_case.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoInclude optional fields like the number of test cases referencing each shared step
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending). Requires sortField.
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
sharedStepsYesList of shared steps defined in the project

TDQS

A3.5/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present. The description does not disclose behavioral traits such as authentication requirements, rate limits, or whether the list is paginated. For a read operation, minimal risk is implied but not stated.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences front-load the purpose and concisely add key details. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With an output schema present and 100% parameter documentation, the description adequately covers the tool's functionality. It could mention pagination or default ordering, but the core user needs are addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers all parameters. The description adds meaning by explaining the `include` parameter (for test case usage counts) and the `sortField` parameter (sort by title or creation date), enhancing understanding beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists reusable shared steps for a project, specifying optional sorting and inclusion of test case usage counts. It does not explicitly distinguish from sibling tools like list_shared_preconditions, but the purpose is distinct.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Describes how to use the returned `id` as `sharedStepId` in other tools, providing some usage context. However, it lacks guidance on when to choose this tool over alternatives like get_shared_step or list_shared_preconditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_test_casesList Test CasesB

List test cases from a project in QA Sphere. Supports pagination and various filtering options. Usually it makes sense to call get_project tool first to get the project context.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoFilter by tag IDs
draftNoFilter draft vs published test cases
limitNoMaximum number of test cases to return (0-5000, defaults to 20). Use 0 to fetch only the total count
typesNoFilter by test case type
offsetNoNumber of test cases to skip before returning results (defaults to 0)
searchNoSearch term to filter test cases
foldersNoFilter by folder IDs
includeNoRelated data to include in the response (not present by default)
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending). Requires sortField.
prioritiesNoFilter by priority levels
projectCodeYesProject code identifier (e.g., BDI)
customFieldsNoFilter by custom field values. Keys are custom field system names (without the `cf_` prefix); values are arrays of allowed values.
requirementIdsNoFilter by requirement IDs
templateTCaseIdsNoFilter filled test cases by their parent template test case IDs

Output Schema

ParametersJSON Schema
NameRequiredDescription
dataYesList of test cases
limitYesLimit applied to the query
totalYesTotal number of filtered test cases
offsetYesOffset applied to the query

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It conveys the essential read-only listing behavior and mentions pagination and filtering, but these facts mostly restate what the schema already documents (limit, offset, filter parameters), and it does not disclose defaults such as whether draft test cases are returned by default or how multiple filters combine. The low-risk nature of a read-only list tool partially offsets this thinness.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three short sentences (~30 words) with the purpose front-loaded and no filler. The second sentence is slightly redundant with the schema's pagination/filter parameters, but it aids quick capability scanning, and the get_project hint earns its place as cross-tool guidance.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 15-parameter tool with nested objects and an output schema present, the description delivers adequate high-level orientation and a useful sequencing hint, and return shapes are covered by the output schema. However, it lacks guidance on how filters combine and does not route users to get_test_case for single-case lookups, which would be valuable at this complexity level. Some additional orientation would push this higher.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% and the parameter descriptions are rich (e.g., 'Use 0 to fetch only the total count', the customFields format caveat, sortOrder requiring sortField). The description adds only the generic phrase 'various filtering options,' which does not exceed what the schema provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('List') and resource ('test cases from a project in QA Sphere'), and the phrase 'Supports pagination and various filtering options' clarifies the listing scope. It does not explicitly differentiate from siblings like get_test_case or list_test_cases_tags, which prevents a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The closing sentence provides actionable sequencing guidance: 'Usually it makes sense to call get_project tool first to get the project context.' This is genuine usage advice, but there is no when-not-to-use guidance or explicit comparison with alternatives such as get_test_case for a single case or list_test_cases_tags for tag-focused listing, so routing between siblings is left to inference.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_test_cases_tagsList Test Case TagsA

List all tags defined within a specific QA Sphere project.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoInclude optional fields like the number of test cases using each tag
sortFieldNoField to sort results by
sortOrderNoSort direction (ascending or descending). Requires sortField.
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
tagsYesList of tags defined in the project

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'List all tags' without addressing pagination, authentication, side effects, or rate limits, leaving significant gaps for an agent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that clearly states the tool's purpose with no extraneous information, earning its place efficiently.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with a known output schema (not shown), the description is mostly complete. It could mention optional fields like sorting or inclusion of test case counts, but the schema compensates. Still, it lacks context about the output structure.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, so the baseline is 3. The tool description adds no additional meaning beyond what the schema provides for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'list' and resource 'tags' with a clear scope ('within a specific QA Sphere project'), effectively distinguishing it from sibling tools like list_test_cases or list_folders.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies that the tool requires a project code by saying 'within a specific QA Sphere project', but it does not explicitly state when to use it versus alternatives or provide any exclusions or context for use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

update_test_caseUpdate Test CaseA

Update an existing test case in QA Sphere. Only users with role User or higher are allowed to update test cases. Optional fields can be omitted to keep the current value.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoList of tag titles
linksNoAdditional links relevant to the test case
stepsNoList of test case steps
titleNoTest case title. In template test cases, may contain `${var}` placeholders that are substituted via `parameterValues` to produce filled test case titles.
commentNoTest case precondition (HTML format). DEPRECATED — prefer the `precondition` object
isDraftNoTo publish a draft test case. A published test case cannot be converted to draft
priorityNoTest case priority
projectCodeYesProject code identifier (e.g., BDI)
customFieldsNoCustom field values to update. Only the specified keys are modified; others remain unchanged.
preconditionNoTest case precondition: either `{sharedPreconditionId}` to reference a shared one, or `{text}` for a standalone precondition
requirementsNoTest case requirements
parameterValuesNoFull replacement of the template test case parameter values. Applies only when the target is a template test case: entries with `tcaseId` update the corresponding filled test case; entries without `tcaseId` generate a new one; any existing filled test case whose `tcaseId` is not present in this array will be deleted. To preserve existing filled test cases while appending, include their current `{tcaseId, values}` pairs.
tcaseOrLegacyIdYesTest case identifier (can be one of test case UUID, sequence or legacy ID). Note: when the target is a `filled` test case, only `priority` can be updated directly; to change other fields, update the parent template or use `parameterValues`.
filledTCaseTitleSuffixParamsNoParameter names whose substituted values are appended to each filled test case title for disambiguation (e.g., pass `["env"]` to suffix titles with the `env` value). Applies only to template test cases.

Output Schema

ParametersJSON Schema
NameRequiredDescription
messageYesSuccess message

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, description discloses authorization and optional field behavior, but lacks detail on side effects (e.g., template test case parameter handling). Adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Complex tool (14 params, nested objects) but description is simplistic; lacks guidance on template test cases, parameterValues, and return value.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

100% schema coverage means schema does heavy lifting; description adds minimal extra meaning beyond restating that optional fields can be omitted.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states the verb ('update') and resource ('existing test case in QA Sphere'), and distinguishes from siblings like create_test_case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides role-based usage constraint and mentions optional field behavior, but no explicit when-not or alternatives beyond implied context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

upsert_foldersUpsert FoldersA

Creates or updates multiple folders in a single request using folder path hierarchies. Automatically creates nested folder structures and updates existing folders' comments. Returns an array of folder ID arrays, each representing the full folder path hierarchy as an array of folder IDs.

ParametersJSON Schema
NameRequiredDescriptionDefault
foldersYesArray of folder requests to create or update
projectCodeYesProject code identifier (e.g., BDI)

Output Schema

ParametersJSON Schema
NameRequiredDescription
idsYesOne folder-ID array per input folder, representing the full path hierarchy

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description fully carries the burden. It discloses creation/update, automatic nested structure creation, comment updates, and the return format. It does not cover potential side effects like permissions, but it is fairly transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, no extraneous information. Front-loaded with the primary action ('Creates or updates multiple folders'). Every sentence is necessary and well-structured.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with no annotations and an output schema, the description covers the operation, behavior (nested creation, comment update), and return value. It could mention uniqueness of paths or error handling, but it is largely complete given the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds value by explaining how path hierarchies work and that comments apply to leaf folders, which goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool creates or updates multiple folders using folder path hierarchies, which distinguishes it from sibling tools like list_folders. The verb 'upsert' and resource 'folders' are specific and unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for batch folder operations, but does not explicitly state when to use alternatives (e.g., single folder creation) or when not to use it. It mentions 'multiple folders in a single request,' which provides some guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 2 tool updatesv0.5.0
    • Changedlist_folders11 fields changed
      • changedInput schema / properties / limit / default
        Previous value: -100New value: +20
      • changedInput schema / properties / limit / description
        Previous value: -"Number of items per page"New value: +"Maximum number of folders to return (0-5000, defaults to 20). Use 0 to fetch only the total count"
      • addedInput schema / properties / limit / maximum
        Added value: +5000
      • addedInput schema / properties / limit / minimum
        Added value: +0
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Number of folders to skip before returning results (defaults to 0)",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / page
        Removed value: -{
        -  "description": "Page number for pagination",
        -  "type": "number"
        -}
      • changedOutput schema / properties / limit / description
        Previous value: -"Number of items per page"New value: +"Limit applied to the query"
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Offset applied to the query",
        +  "type": "number"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "total",
        -  "page",
        -  "limit",
        -  "data"
        -]New value: +[
        +  "total",
        +  "offset",
        +  "limit",
        +  "data"
        +]
    • Changedlist_test_cases10 fields changed
      • changedInput schema / properties / limit / description
        Previous value: -"Number of items per page"New value: +"Maximum number of test cases to return (0-5000, defaults to 20). Use 0 to fetch only the total count"
      • addedInput schema / properties / limit / maximum
        Added value: +5000
      • addedInput schema / properties / limit / minimum
        Added value: +0
      • changedInput schema / properties / limit / type
        Previous value: -"number"New value: +"integer"
      • addedInput schema / properties / offset
        Added value: +{
        +  "default": 0,
        +  "description": "Number of test cases to skip before returning results (defaults to 0)",
        +  "maximum": 9007199254740991,
        +  "minimum": 0,
        +  "type": "integer"
        +}
      • removedInput schema / properties / page
        Removed value: -{
        -  "description": "Page number for pagination",
        -  "type": "number"
        -}
      • changedOutput schema / properties / limit / description
        Previous value: -"Number of test cases per page"New value: +"Limit applied to the query"
      • addedOutput schema / properties / offset
        Added value: +{
        +  "description": "Offset applied to the query",
        +  "type": "number"
        +}
      • removedOutput schema / properties / page
        Removed value: -{
        -  "description": "Current page number",
        -  "type": "number"
        -}
      • changedOutput schema / required
        Previous value: -[
        -  "total",
        -  "page",
        -  "limit",
        -  "data"
        -]New value: +[
        +  "total",
        +  "offset",
        +  "limit",
        +  "data"
        +]
  2. 16 tool updatesv0.4.1
    • Addedcreate_test_case
    • Changedget_project3 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / projectCode / pattern
        Previous value: -"^[A-Z0-9]+$"New value: +"^[A-Z0-9]{2,5}$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "archivedAt": {
        +      "anyOf": [
        +        {
        +          "type": "string"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Project archival time (ISO 8601); null if the project is not archived"
        +    },
        +    "code": {
        +      "description": "Project code (e.g., BDI)",
        +      "type": "string"
        +    },
        +    "createdAt": {
        +      "description": "Project creation time (ISO 8601)",
        +      "type": "string"
        +    },
        +    "id": {
        +      "description": "Unique identifier of the project",
        +      "type": "string"
        +    },
        +    "links": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "text": {
        +                "description": "Title of the link",
        +                "type": "string"
        +              },
        +              "url": {
        +                "description": "URL of the link",
        +                "format": "uri",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "text",
        +              "url"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Project links"
        +    },
        +    "overviewDescription": {
        +      "description": "Project overview description (HTML)",
        +      "type": "string"
        +    },
        +    "overviewTitle": {
        +      "description": "Project overview title",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Project title",
        +      "type": "string"
        +    },
        +    "updatedAt": {
        +      "description": "Project last-update time (ISO 8601)",
        +      "type": "string"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "code",
        +    "title",
        +    "overviewTitle",
        +    "overviewDescription",
        +    "links",
        +    "createdAt",
        +    "updatedAt",
        +    "archivedAt"
        +  ],
        +  "type": "object"
        +}
    • Addedget_shared_precondition
    • Addedget_shared_step
    • Changedget_test_case4 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedInput schema / properties / marker / description
        Previous value: -"Test case marker in format PROJECT_CODE-SEQUENCE (e.g., BDI-123)"New value: +"Test case marker in format PROJECT_CODE-TEST_CASE_SEQUENCE (e.g., BDI-123)"
      • changedInput schema / properties / marker / pattern
        Previous value: -"^[A-Z0-9]+-\\d+$"New value: +"^[A-Z0-9]{2,5}-\\d+$"
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "definitions": {
        +    "__schema0": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "deletedAt": {
        +          "description": "Date the step was deleted on (ISO 8601)",
        +          "type": "string"
        +        },
        +        "description": {
        +          "description": "Details of the step (HTML; only for standalone and shared_sub_step)",
        +          "type": "string"
        +        },
        +        "expected": {
        +          "description": "Expected result from the step (HTML; only for standalone and shared_sub_step)",
        +          "type": "string"
        +        },
        +        "id": {
        +          "description": "Unique identifier of the step",
        +          "type": "number"
        +        },
        +        "isLatest": {
        +          "description": "Whether this is the latest version of the step",
        +          "type": "boolean"
        +        },
        +        "subSteps": {
        +          "description": "Sub-steps of a shared step, each with type 'shared_sub_step' (present only on shared steps)",
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        "title": {
        +          "description": "Title of the step (only for shared steps)",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Type of the step. Known values: \"standalone\" | \"shared\" | \"shared_sub_step\"",
        +          "type": "string"
        +        },
        +        "version": {
        +          "description": "Version of the step",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "version",
        +        "isLatest",
        +        "type"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "authorId": {
        +      "description": "Unique identifier of the user who added the test case",
        +      "type": "number"
        +    },
        +    "comment": {
        +      "description": "Test case precondition text (HTML). DEPRECATED — prefer the `precondition` object",
        +      "type": "string"
        +    },
        +    "createdAt": {
        +      "description": "Test case creation time (ISO 8601)",
        +      "type": "string"
        +    },
        +    "customFields": {
        +      "additionalProperties": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "isDefault": {
        +            "description": "Whether the value is the default set by the system",
        +            "type": "boolean"
        +          },
        +          "value": {
        +            "description": "Current custom field value",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "value",
        +          "isDefault"
        +        ],
        +        "type": "object"
        +      },
        +      "description": "Custom field values",
        +      "propertyNames": {
        +        "type": "string"
        +      },
        +      "type": "object"
        +    },
        +    "files": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "fileName": {
        +                "description": "Original file name",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "File identifier",
        +                "type": "string"
        +              },
        +              "mimeType": {
        +                "description": "MIME type of the file",
        +                "type": "string"
        +              },
        +              "size": {
        +                "description": "File size in bytes",
        +                "type": "number"
        +              },
        +              "url": {
        +                "description": "URL of the file (missing for files uploaded via older routes)",
        +                "format": "uri",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "fileName",
        +              "mimeType",
        +              "size"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "List of files attached to the test case"
        +    },
        +    "filledTCaseTitleSuffixParams": {
        +      "description": "Parameter names whose substituted values are appended to each filled test case title for disambiguation (only for template test cases).",
        +      "items": {
        +        "type": "string"
        +      },
        +      "type": "array"
        +    },
        +    "folderId": {
        +      "description": "Identifier of the folder where the test case is placed",
        +      "type": "number"
        +    },
        +    "id": {
        +      "description": "Unique identifier of the test case",
        +      "type": "string"
        +    },
        +    "isDraft": {
        +      "description": "Whether the test case is still in draft state",
        +      "type": "boolean"
        +    },
        +    "isEmpty": {
        +      "description": "Whether the test case is empty (has no precondition and steps)",
        +      "type": "boolean"
        +    },
        +    "isLatestVersion": {
        +      "description": "Whether this is the latest version of the test case",
        +      "type": "boolean"
        +    },
        +    "legacyId": {
        +      "description": "Legacy identifier of the test case (empty string if none is set)",
        +      "type": "string"
        +    },
        +    "links": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "text": {
        +                "description": "Title of the link",
        +                "type": "string"
        +              },
        +              "url": {
        +                "description": "URL of the link",
        +                "format": "uri",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "text",
        +              "url"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "Additional links relevant to the test case"
        +    },
        +    "numFilledTCases": {
        +      "description": "Number of corresponding filled test cases (only for template test cases)",
        +      "type": "number"
        +    },
        +    "parameterValues": {
        +      "description": "Parameter substitutions for filled test cases (only for template test cases)",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "tcaseId": {
        +            "description": "ID of the filled test case",
        +            "type": "string"
        +          },
        +          "tcaseVersion": {
        +            "description": "Version of the filled test case",
        +            "type": "number"
        +          },
        +          "values": {
        +            "additionalProperties": {
        +              "type": "string"
        +            },
        +            "description": "Parameter values substituted for this filled test case",
        +            "propertyNames": {
        +              "type": "string"
        +            },
        +            "type": "object"
        +          }
        +        },
        +        "required": [
        +          "tcaseId",
        +          "tcaseVersion",
        +          "values"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "pos": {
        +      "description": "Ordered position (0-based) of the test case in its folder",
        +      "type": "number"
        +    },
        +    "precondition": {
        +      "additionalProperties": false,
        +      "description": "Test case precondition object (may be a shared or standalone precondition)",
        +      "properties": {
        +        "createdAt": {
        +          "description": "Precondition creation time (ISO 8601)",
        +          "type": "string"
        +        },
        +        "deletedAt": {
        +          "description": "Precondition deletion time (ISO 8601)",
        +          "type": "string"
        +        },
        +        "id": {
        +          "description": "ID of the precondition",
        +          "type": "number"
        +        },
        +        "isLatest": {
        +          "description": "Whether the precondition's version is the latest",
        +          "type": "boolean"
        +        },
        +        "projectId": {
        +          "description": "Project id the precondition belongs to",
        +          "type": "string"
        +        },
        +        "text": {
        +          "description": "Precondition text (HTML format)",
        +          "type": "string"
        +        },
        +        "title": {
        +          "description": "Title of the precondition (only for shared preconditions)",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Type of the precondition. Known values: \"standalone\" | \"shared\"",
        +          "type": "string"
        +        },
        +        "updatedAt": {
        +          "description": "Precondition last-update time (ISO 8601)",
        +          "type": "string"
        +        },
        +        "version": {
        +          "description": "Version of the precondition",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "projectId",
        +        "id",
        +        "version",
        +        "isLatest",
        +        "type",
        +        "text",
        +        "createdAt",
        +        "updatedAt"
        +      ],
        +      "type": "object"
        +    },
        +    "priority": {
        +      "description": "Priority of the test case. Known values: \"high\" | \"medium\" | \"low\"",
        +      "type": "string"
        +    },
        +    "requirements": {
        +      "description": "Test case requirements",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Requirement identifier",
        +            "type": "string"
        +          },
        +          "text": {
        +            "description": "Title of the requirement",
        +            "type": "string"
        +          },
        +          "url": {
        +            "anyOf": [
        +              {
        +                "format": "uri",
        +                "type": "string"
        +              },
        +              {
        +                "const": "",
        +                "type": "string"
        +              }
        +            ],
        +            "description": "URL of the requirement"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "text",
        +          "url"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "seq": {
        +      "description": "Sequence number of the test case within its project (assigned incrementally)",
        +      "type": "number"
        +    },
        +    "steps": {
        +      "description": "List of test case steps",
        +      "items": {
        +        "$ref": "#/definitions/__schema0"
        +      },
        +      "type": "array"
        +    },
        +    "tags": {
        +      "description": "List of test case tags",
        +      "items": {
        +        "additionalProperties": false,
        +        "properties": {
        +          "id": {
        +            "description": "Tag identifier",
        +            "type": "number"
        +          },
        +          "title": {
        +            "description": "Tag title",
        +            "type": "string"
        +          }
        +        },
        +        "required": [
        +          "id",
        +          "title"
        +        ],
        +        "type": "object"
        +      },
        +      "type": "array"
        +    },
        +    "templateTCaseId": {
        +      "description": "Corresponding template test case ID (only for filled test cases)",
        +      "type": "string"
        +    },
        +    "title": {
        +      "description": "Title of the test case",
        +      "type": "string"
        +    },
        +    "type": {
        +      "description": "Type of the test case. Known values: \"standalone\" | \"template\" | \"filled\"",
        +      "type": "string"
        +    },
        +    "updatedAt": {
        +      "description": "Test case last-update time (ISO 8601)",
        +      "type": "string"
        +    },
        +    "version": {
        +      "description": "Version of the test case. Updates (except folder/pos) create a new version",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "id",
        +    "legacyId",
        +    "version",
        +    "type",
        +    "title",
        +    "seq",
        +    "folderId",
        +    "pos",
        +    "priority",
        +    "comment",
        +    "files",
        +    "links",
        +    "authorId",
        +    "isDraft",
        +    "isLatestVersion",
        +    "isEmpty",
        +    "createdAt",
        +    "updatedAt"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_custom_fields
    • Addedlist_folders
    • Changedlist_projects2 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "projects": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "archivedAt": {
        +                "anyOf": [
        +                  {
        +                    "type": "string"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Project archival time (ISO 8601); null if the project is not archived"
        +              },
        +              "code": {
        +                "description": "Project code (e.g., BDI)",
        +                "type": "string"
        +              },
        +              "createdAt": {
        +                "description": "Project creation time (ISO 8601)",
        +                "type": "string"
        +              },
        +              "id": {
        +                "description": "Unique identifier of the project",
        +                "type": "string"
        +              },
        +              "links": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "text": {
        +                          "description": "Title of the link",
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "description": "URL of the link",
        +                          "format": "uri",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "text",
        +                        "url"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Project links"
        +              },
        +              "overviewDescription": {
        +                "description": "Project overview description (HTML)",
        +                "type": "string"
        +              },
        +              "overviewTitle": {
        +                "description": "Project overview title",
        +                "type": "string"
        +              },
        +              "title": {
        +                "description": "Project title",
        +                "type": "string"
        +              },
        +              "updatedAt": {
        +                "description": "Project last-update time (ISO 8601)",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "code",
        +              "title",
        +              "overviewTitle",
        +              "overviewDescription",
        +              "links",
        +              "createdAt",
        +              "updatedAt",
        +              "archivedAt"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "List of projects"
        +    }
        +  },
        +  "required": [
        +    "projects"
        +  ],
        +  "type": "object"
        +}
    • Addedlist_requirements
    • Addedlist_shared_preconditions
    • Addedlist_shared_steps
    • Changedlist_test_cases10 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / customFields
        Added value: +{
        +  "additionalProperties": {
        +    "items": {
        +      "type": "string"
        +    },
        +    "type": "array"
        +  },
        +  "description": "Filter by custom field values. Keys are custom field system names (without the `cf_` prefix); values are arrays of allowed values.",
        +  "propertyNames": {
        +    "type": "string"
        +  },
        +  "type": "object"
        +}
      • changedInput schema / properties / include / description
        Previous value: -"Related data to include in the response"New value: +"Related data to include in the response (not present by default)"
      • changedInput schema / properties / include / items / enum
        Previous value: -[
        -  "steps",
        -  "tags",
        -  "project",
        -  "folder",
        -  "path"
        -]New value: +[
        +  "precondition",
        +  "steps",
        +  "tags",
        +  "project",
        +  "folder",
        +  "path",
        +  "requirements",
        +  "customFields",
        +  "parameterValues"
        +]
      • changedInput schema / properties / projectCode / pattern
        Previous value: -"^[A-Z0-9]+$"New value: +"^[A-Z0-9]{2,5}$"
      • addedInput schema / properties / requirementIds
        Added value: +{
        +  "description": "Filter by requirement IDs",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedInput schema / properties / sortOrder / description
        Previous value: -"Sort direction (ascending or descending)"New value: +"Sort direction (ascending or descending). Requires sortField."
      • addedInput schema / properties / templateTCaseIds
        Added value: +{
        +  "description": "Filter filled test cases by their parent template test case IDs",
        +  "items": {
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • addedInput schema / properties / types
        Added value: +{
        +  "description": "Filter by test case type",
        +  "items": {
        +    "enum": [
        +      "standalone",
        +      "template",
        +      "filled"
        +    ],
        +    "type": "string"
        +  },
        +  "type": "array"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "definitions": {
        +    "__schema0": {
        +      "additionalProperties": false,
        +      "properties": {
        +        "deletedAt": {
        +          "description": "Date the step was deleted on (ISO 8601)",
        +          "type": "string"
        +        },
        +        "description": {
        +          "description": "Details of the step (HTML; only for standalone and shared_sub_step)",
        +          "type": "string"
        +        },
        +        "expected": {
        +          "description": "Expected result from the step (HTML; only for standalone and shared_sub_step)",
        +          "type": "string"
        +        },
        +        "id": {
        +          "description": "Unique identifier of the step",
        +          "type": "number"
        +        },
        +        "isLatest": {
        +          "description": "Whether this is the latest version of the step",
        +          "type": "boolean"
        +        },
        +        "subSteps": {
        +          "description": "Sub-steps of a shared step, each with type 'shared_sub_step' (present only on shared steps)",
        +          "items": {
        +            "$ref": "#/definitions/__schema0"
        +          },
        +          "type": "array"
        +        },
        +        "title": {
        +          "description": "Title of the step (only for shared steps)",
        +          "type": "string"
        +        },
        +        "type": {
        +          "description": "Type of the step. Known values: \"standalone\" | \"shared\" | \"shared_sub_step\"",
        +          "type": "string"
        +        },
        +        "version": {
        +          "description": "Version of the step",
        +          "type": "number"
        +        }
        +      },
        +      "required": [
        +        "id",
        +        "version",
        +        "isLatest",
        +        "type"
        +      ],
        +      "type": "object"
        +    }
        +  },
        +  "properties": {
        +    "data": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "authorId": {
        +                "description": "Unique identifier of the user who added the test case",
        +                "type": "number"
        +              },
        +              "comment": {
        +                "description": "Test case precondition text (HTML). DEPRECATED — prefer the `precondition` object",
        +                "type": "string"
        +              },
        +              "createdAt": {
        +                "description": "Test case creation time (ISO 8601)",
        +                "type": "string"
        +              },
        +              "customFields": {
        +                "additionalProperties": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "isDefault": {
        +                      "description": "Whether the value is the default set by the system",
        +                      "type": "boolean"
        +                    },
        +                    "value": {
        +                      "description": "Current custom field value",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "value",
        +                    "isDefault"
        +                  ],
        +                  "type": "object"
        +                },
        +                "description": "Custom field values",
        +                "propertyNames": {
        +                  "type": "string"
        +                },
        +                "type": "object"
        +              },
        +              "files": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "fileName": {
        +                          "description": "Original file name",
        +                          "type": "string"
        +                        },
        +                        "id": {
        +                          "description": "File identifier",
        +                          "type": "string"
        +                        },
        +                        "mimeType": {
        +                          "description": "MIME type of the file",
        +                          "type": "string"
        +                        },
        +                        "size": {
        +                          "description": "File size in bytes",
        +                          "type": "number"
        +                        },
        +                        "url": {
        +                          "description": "URL of the file (missing for files uploaded via older routes)",
        +                          "format": "uri",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "id",
        +                        "fileName",
        +                        "mimeType",
        +                        "size"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "List of files attached to the test case"
        +              },
        +              "filledTCaseTitleSuffixParams": {
        +                "description": "Parameter names whose substituted values are appended to each filled test case title for disambiguation (only for template test cases).",
        +                "items": {
        +                  "type": "string"
        +                },
        +                "type": "array"
        +              },
        +              "folder": {
        +                "additionalProperties": false,
        +                "description": "Folder where the test case is placed",
        +                "properties": {
        +                  "comment": {
        +                    "description": "Additional notes or description (HTML)",
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Unique identifier for the folder",
        +                    "type": "number"
        +                  },
        +                  "parentId": {
        +                    "description": "ID of the parent folder (0 for root folders)",
        +                    "type": "number"
        +                  },
        +                  "pos": {
        +                    "description": "Position of the folder among its siblings",
        +                    "type": "number"
        +                  },
        +                  "projectId": {
        +                    "description": "ID of the project the folder belongs to",
        +                    "type": "string"
        +                  },
        +                  "title": {
        +                    "description": "Name of the folder",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "projectId",
        +                  "id",
        +                  "parentId",
        +                  "pos",
        +                  "title",
        +                  "comment"
        +                ],
        +                "type": "object"
        +              },
        +              "folderId": {
        +                "description": "Identifier of the folder where the test case is placed",
        +                "type": "number"
        +              },
        +              "id": {
        +                "description": "Unique identifier of the test case",
        +                "type": "string"
        +              },
        +              "isDraft": {
        +                "description": "Whether the test case is still in draft state",
        +                "type": "boolean"
        +              },
        +              "isEmpty": {
        +                "description": "Whether the test case is empty (has no precondition and steps)",
        +                "type": "boolean"
        +              },
        +              "isLatestVersion": {
        +                "description": "Whether this is the latest version of the test case",
        +                "type": "boolean"
        +              },
        +              "legacyId": {
        +                "description": "Legacy identifier of the test case (empty string if none is set)",
        +                "type": "string"
        +              },
        +              "links": {
        +                "anyOf": [
        +                  {
        +                    "items": {
        +                      "additionalProperties": false,
        +                      "properties": {
        +                        "text": {
        +                          "description": "Title of the link",
        +                          "type": "string"
        +                        },
        +                        "url": {
        +                          "description": "URL of the link",
        +                          "format": "uri",
        +                          "type": "string"
        +                        }
        +                      },
        +                      "required": [
        +                        "text",
        +                        "url"
        +                      ],
        +                      "type": "object"
        +                    },
        +                    "type": "array"
        +                  },
        +                  {
        +                    "type": "null"
        +                  }
        +                ],
        +                "description": "Additional links relevant to the test case"
        +              },
        +              "numFilledTCases": {
        +                "description": "Number of corresponding filled test cases (only for template test cases)",
        +                "type": "number"
        +              },
        +              "parameterValues": {
        +                "description": "Parameter substitutions for filled test cases (only for template test cases)",
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "tcaseId": {
        +                      "description": "ID of the filled test case",
        +                      "type": "string"
        +                    },
        +                    "tcaseVersion": {
        +                      "description": "Version of the filled test case",
        +                      "type": "number"
        +                    },
        +                    "values": {
        +                      "additionalProperties": {
        +                        "type": "string"
        +                      },
        +                      "description": "Parameter values substituted for this filled test case",
        +                      "propertyNames": {
        +                        "type": "string"
        +                      },
        +                      "type": "object"
        +                    }
        +                  },
        +                  "required": [
        +                    "tcaseId",
        +                    "tcaseVersion",
        +                    "values"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "path": {
        +                "description": "Folder path to the test case",
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "comment": {
        +                      "description": "Additional notes or description (HTML)",
        +                      "type": "string"
        +                    },
        +                    "id": {
        +                      "description": "Unique identifier for the folder",
        +                      "type": "number"
        +                    },
        +                    "parentId": {
        +                      "description": "ID of the parent folder (0 for root folders)",
        +                      "type": "number"
        +                    },
        +                    "pos": {
        +                      "description": "Position of the folder among its siblings",
        +                      "type": "number"
        +                    },
        +                    "projectId": {
        +                      "description": "ID of the project the folder belongs to",
        +                      "type": "string"
        +                    },
        +                    "title": {
        +                      "description": "Name of the folder",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "projectId",
        +                    "id",
        +                    "parentId",
        +                    "pos",
        +                    "title",
        +                    "comment"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "pos": {
        +                "description": "Ordered position (0-based) of the test case in its folder",
        +                "type": "number"
        +              },
        +              "precondition": {
        +                "additionalProperties": false,
        +                "description": "Test case precondition object (may be a shared or standalone precondition)",
        +                "properties": {
        +                  "createdAt": {
        +                    "description": "Precondition creation time (ISO 8601)",
        +                    "type": "string"
        +                  },
        +                  "deletedAt": {
        +                    "description": "Precondition deletion time (ISO 8601)",
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "ID of the precondition",
        +                    "type": "number"
        +                  },
        +                  "isLatest": {
        +                    "description": "Whether the precondition's version is the latest",
        +                    "type": "boolean"
        +                  },
        +                  "projectId": {
        +                    "description": "Project id the precondition belongs to",
        +                    "type": "string"
        +                  },
        +                  "text": {
        +                    "description": "Precondition text (HTML format)",
        +                    "type": "string"
        +                  },
        +                  "title": {
        +                    "description": "Title of the precondition (only for shared preconditions)",
        +                    "type": "string"
        +                  },
        +                  "type": {
        +                    "description": "Type of the precondition. Known values: \"standalone\" | \"shared\"",
        +                    "type": "string"
        +                  },
        +                  "updatedAt": {
        +                    "description": "Precondition last-update time (ISO 8601)",
        +                    "type": "string"
        +                  },
        +                  "version": {
        +                    "description": "Version of the precondition",
        +                    "type": "number"
        +                  }
        +                },
        +                "required": [
        +                  "projectId",
        +                  "id",
        +                  "version",
        +                  "isLatest",
        +                  "type",
        +                  "text",
        +                  "createdAt",
        +                  "updatedAt"
        +                ],
        +                "type": "object"
        +              },
        +              "priority": {
        +                "description": "Priority of the test case. Known values: \"high\" | \"medium\" | \"low\"",
        +                "type": "string"
        +              },
        +              "project": {
        +                "additionalProperties": false,
        +                "description": "Project the test case belongs to",
        +                "properties": {
        +                  "archivedAt": {
        +                    "anyOf": [
        +                      {
        +                        "type": "string"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Project archival time (ISO 8601); null if the project is not archived"
        +                  },
        +                  "code": {
        +                    "description": "Project code (e.g., BDI)",
        +                    "type": "string"
        +                  },
        +                  "createdAt": {
        +                    "description": "Project creation time (ISO 8601)",
        +                    "type": "string"
        +                  },
        +                  "id": {
        +                    "description": "Unique identifier of the project",
        +                    "type": "string"
        +                  },
        +                  "links": {
        +                    "anyOf": [
        +                      {
        +                        "items": {
        +                          "additionalProperties": false,
        +                          "properties": {
        +                            "text": {
        +                              "description": "Title of the link",
        +                              "type": "string"
        +                            },
        +                            "url": {
        +                              "description": "URL of the link",
        +                              "format": "uri",
        +                              "type": "string"
        +                            }
        +                          },
        +                          "required": [
        +                            "text",
        +                            "url"
        +                          ],
        +                          "type": "object"
        +                        },
        +                        "type": "array"
        +                      },
        +                      {
        +                        "type": "null"
        +                      }
        +                    ],
        +                    "description": "Project links"
        +                  },
        +                  "overviewDescription": {
        +                    "description": "Project overview description (HTML)",
        +                    "type": "string"
        +                  },
        +                  "overviewTitle": {
        +                    "description": "Project overview title",
        +                    "type": "string"
        +                  },
        +                  "title": {
        +                    "description": "Project title",
        +                    "type": "string"
        +                  },
        +                  "updatedAt": {
        +                    "description": "Project last-update time (ISO 8601)",
        +                    "type": "string"
        +                  }
        +                },
        +                "required": [
        +                  "id",
        +                  "code",
        +                  "title",
        +                  "overviewTitle",
        +                  "overviewDescription",
        +                  "links",
        +                  "createdAt",
        +                  "updatedAt",
        +                  "archivedAt"
        +                ],
        +                "type": "object"
        +              },
        +              "requirements": {
        +                "description": "Test case requirements",
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "id": {
        +                      "description": "Requirement identifier",
        +                      "type": "string"
        +                    },
        +                    "text": {
        +                      "description": "Title of the requirement",
        +                      "type": "string"
        +                    },
        +                    "url": {
        +                      "anyOf": [
        +                        {
        +                          "format": "uri",
        +                          "type": "string"
        +                        },
        +                        {
        +                          "const": "",
        +                          "type": "string"
        +                        }
        +                      ],
        +                      "description": "URL of the requirement"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "text",
        +                    "url"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "seq": {
        +                "description": "Sequence number of the test case within its project (assigned incrementally)",
        +                "type": "number"
        +              },
        +              "steps": {
        +                "description": "List of test case steps",
        +                "items": {
        +                  "$ref": "#/definitions/__schema0"
        +                },
        +                "type": "array"
        +              },
        +              "tags": {
        +                "description": "List of test case tags",
        +                "items": {
        +                  "additionalProperties": false,
        +                  "properties": {
        +                    "id": {
        +                      "description": "Tag identifier",
        +                      "type": "number"
        +                    },
        +                    "title": {
        +                      "description": "Tag title",
        +                      "type": "string"
        +                    }
        +                  },
        +                  "required": [
        +                    "id",
        +                    "title"
        +                  ],
        +                  "type": "object"
        +                },
        +                "type": "array"
        +              },
        +              "templateTCaseId": {
        +                "description": "Corresponding template test case ID (only for filled test cases)",
        +                "type": "string"
        +              },
        +              "title": {
        +                "description": "Title of the test case",
        +                "type": "string"
        +              },
        +              "type": {
        +                "description": "Type of the test case. Known values: \"standalone\" | \"template\" | \"filled\"",
        +                "type": "string"
        +              },
        +              "updatedAt": {
        +                "description": "Test case last-update time (ISO 8601)",
        +                "type": "string"
        +              },
        +              "version": {
        +                "description": "Version of the test case. Updates (except folder/pos) create a new version",
        +                "type": "number"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "legacyId",
        +              "version",
        +              "type",
        +              "title",
        +              "seq",
        +              "folderId",
        +              "pos",
        +              "priority",
        +              "comment",
        +              "files",
        +              "links",
        +              "authorId",
        +              "isDraft",
        +              "isLatestVersion",
        +              "isEmpty",
        +              "createdAt",
        +              "updatedAt"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "List of test cases"
        +    },
        +    "limit": {
        +      "description": "Number of test cases per page",
        +      "type": "number"
        +    },
        +    "page": {
        +      "description": "Current page number",
        +      "type": "number"
        +    },
        +    "total": {
        +      "description": "Total number of filtered test cases",
        +      "type": "number"
        +    }
        +  },
        +  "required": [
        +    "total",
        +    "page",
        +    "limit",
        +    "data"
        +  ],
        +  "type": "object"
        +}
    • Removedlist_test_cases_folders
    • Changedlist_test_cases_tags6 fields changed
      • removedInput schema / additionalProperties
        Removed value: -false
      • addedInput schema / properties / include
        Added value: +{
        +  "description": "Include optional fields like the number of test cases using each tag",
        +  "enum": [
        +    "tcaseCount"
        +  ],
        +  "type": "string"
        +}
      • changedInput schema / properties / projectCode / pattern
        Previous value: -"^[A-Z0-9]+$"New value: +"^[A-Z0-9]{2,5}$"
      • addedInput schema / properties / sortField
        Added value: +{
        +  "description": "Field to sort results by",
        +  "enum": [
        +    "created_at",
        +    "title"
        +  ],
        +  "type": "string"
        +}
      • addedInput schema / properties / sortOrder
        Added value: +{
        +  "description": "Sort direction (ascending or descending). Requires sortField.",
        +  "enum": [
        +    "asc",
        +    "desc"
        +  ],
        +  "type": "string"
        +}
      • changedOutput schema / (root)
        Previous value: -nullNew value: +{
        +  "$schema": "http://json-schema.org/draft-07/schema#",
        +  "additionalProperties": false,
        +  "properties": {
        +    "tags": {
        +      "anyOf": [
        +        {
        +          "items": {
        +            "additionalProperties": false,
        +            "properties": {
        +              "id": {
        +                "description": "Tag identifier",
        +                "type": "number"
        +              },
        +              "tcaseCount": {
        +                "description": "Number of test cases using this tag (only when `tcaseCount` is included)",
        +                "type": "number"
        +              },
        +              "title": {
        +                "description": "Tag title",
        +                "type": "string"
        +              }
        +            },
        +            "required": [
        +              "id",
        +              "title"
        +            ],
        +            "type": "object"
        +          },
        +          "type": "array"
        +        },
        +        {
        +          "type": "null"
        +        }
        +      ],
        +      "description": "List of tags defined in the project"
        +    }
        +  },
        +  "required": [
        +    "tags"
        +  ],
        +  "type": "object"
        +}
    • Addedupdate_test_case
    • Addedupsert_folders
  3. 6 tool updatesv1.0.0
    • First observedget_project
    • First observedget_test_case
    • First observedlist_projects
    • First observedlist_test_cases
    • First observedlist_test_cases_folders
    • First observedlist_test_cases_tags

TDQS

A3.8/5.0
Disambiguation5/5

Each tool targets a distinct entity and action: projects, folders, test cases, tags, requirements, shared steps, and shared preconditions are all clearly separated. The get/list pairs are unambiguous because one returns details by ID while the other lists collection-level data.

Naming Consistency4/5

Tool names mostly follow a consistent verb_noun pattern like list_projects, get_test_case, create_test_case, and update_test_case. Minor deviations include upsert_folders and list_test_cases_tags, which break the otherwise predictable naming slightly.

Tool Count5/5

At 15 tools, the set is at the upper bound of a well-scoped server but every tool supports a clear purpose in the QA Sphere test case workflow. The count feels justified by the domain breadth rather than padded with redundant operations.

Completeness3/5

The main test case lifecycle is well covered with list, get, create, and update, but delete_test_case is missing, which is a notable gap for full CRUD coverage. Supporting entities like shared steps and preconditions are read-only, leaving no way to manage them through this server.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Hypersequent/qasphere-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server