Skip to main content
Glama
qase-tms

Qase MCP Server

Official
by qase-tms

qase_case_upsert

Create a new test case or update an existing one by ID in Qase. Handles classic or Gherkin steps, shared steps, and normalizes enum labels or IDs.

Instructions

Create or update a single test case. With id it updates that case, without id it creates a new one. Enum fields (priority, severity, type, layer, behavior, automation) accept either a label such as "high" or "blocker" or the project's numeric ID — the server normalizes both. Steps can be classic action/expected pairs or Gherkin, and may reference shared steps by hash. Writing more than one case? Use qase_case_bulk_create instead: it takes a list and sends one request. If the project has "Test case review" enabled, direct writes may need to go through a review — run qase_discover_tools with "review" for those tools. Cost: one API call, about 0.6s to create and 0.4s to update. Ten sequential calls measured 5.6s against 1.2s for one qase_case_bulk_create writing the same ten, so a loop is roughly four times slower.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
idNoCase ID — if provided, updates the case; if omitted, creates a new one
codeYesProject code (2-10 uppercase letters, numbers, or underscores)
tagsNo
typeNoType label or numeric ID
layerNoLayer label or numeric ID
stepsNo
titleYesTest case title
statusNoStatus label or numeric ID
behaviorNoBehavior label or numeric ID
is_flakyNo
priorityNoPriority label or numeric ID (0=not set, 1=high, 2=medium, 3=low)
severityNoSeverity label or numeric ID
suite_idNo
automationNoAutomation status (label, slug, or numeric ID: 0=Manual / is-not-automated, 1=To be automated, 2=Automated)
steps_typeNo
attachmentsNoAttachment hashes from qase_attachment_upload
descriptionNo
custom_fieldNo
milestone_idNo
preconditionsNo
postconditionsNo

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed3 schema fields changedv2.2.1
    • addedInput schema / properties / attachments / description
      Added value: +"Attachment hashes from qase_attachment_upload"
    • changedInput schema / properties / steps / items / properties / attachments / description
      Previous value: -"Attachment hashes"New value: +"Attachment hashes from qase_attachment_upload"
    • changedInput schema / properties / steps / items / properties / steps / items / properties / attachments / description
      Previous value: -"Attachment hashes"New value: +"Attachment hashes from qase_attachment_upload"
  2. Changed6 schema fields changedv2.0.3
    • changedInput schema / properties / steps / items / properties / action / description
      Previous value: -"Step action (classic steps)"New value: +"Step action (classic steps). Not needed when `shared` is set."
    • addedInput schema / properties / steps / items / properties / shared
      Added value: +{
      +  "description": "Hash of an existing shared step to insert at this position, from `qase_shared_step_upsert`. The step then reuses that shared step instead of defining its own content, so `action` can be omitted. Reading the case back reports the link as `shared_step_hash`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / steps / items / properties / shared_step_hash
      Added value: +{
      +  "description": "Alias for `shared` — the name used when reading a case. Sent to the API as `shared`.",
      +  "type": "string"
      +}
    • changedInput schema / properties / steps / items / properties / steps / items / properties / action / description
      Previous value: -"Step action (classic steps)"New value: +"Step action (classic steps). Not needed when `shared` is set."
    • addedInput schema / properties / steps / items / properties / steps / items / properties / shared
      Added value: +{
      +  "description": "Hash of an existing shared step to insert at this position, from `qase_shared_step_upsert`. The step then reuses that shared step instead of defining its own content, so `action` can be omitted. Reading the case back reports the link as `shared_step_hash`.",
      +  "type": "string"
      +}
    • addedInput schema / properties / steps / items / properties / steps / items / properties / shared_step_hash
      Added value: +{
      +  "description": "Alias for `shared` — the name used when reading a case. Sent to the API as `shared`.",
      +  "type": "string"
      +}
  3. Addedv2.0.0

TDQS

A4.7/5.0
Behavior4/5

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

Annotations mark this as a write operation (readOnlyHint=false, destructiveHint=false without idempotency), but the description adds meaningful behavior: enums normalize labels vs numeric IDs, steps can be classic or Gherkin, shared-step references resolve to shared_step_hash on read, and the review workflow may intercept direct writes. It doesn't spell out error semantics or whether update is partial or full, but the write path is well disclosed.

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?

The description is compact for 21 parameters, front-loaded with the create/update decision and alternatives. Every sentence adds useful guidance. The only waste is the measured timing detail ('Ten sequential calls measured 5.6s...') — it supports the bulk-create recommendation but is more evidence than need for an agent decision.

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?

With 21 parameters, 52% schema coverage, nested objects, no output schema, and a complex upsert flow, this description covers all critical aspects: the id branch, enum values, shared steps, review-mode caveat, and the bulk alternative. Nothing an agent needs to invoke it correctly is missing from the core decision path.

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?

Schema coverage is only 52%, and this description compensates for the largest gap by explaining the core branching parameter semantics: id selects update vs create. It also gives meaning to enum fields collectively, and clarifies the steps object structure including the alias shared_step_hash for shared. That's exactly the kind of meaning the raw schema lacks.

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 states the exact verb-resource relationship: 'Create or update a single test case' and immediately clarifies the id-based branching. This differentiates it from qase_case_bulk_create by name and by role. The first sentence alone gives an agent everything needed to decide whether this tool applies.

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?

The description explicitly says when to use qase_case_bulk_create instead: 'Writing more than one case? Use qase_case_bulk_create instead.' It also instructs running qase_discover_tools with 'review' when the project has Test case review enabled, directing the agent to alternatives when direct writes may be blocked. That's excellent routing guidance, not just description.

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

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/qase-tms/qase-mcp-server'

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