Skip to main content
Glama

Update Manual Test Case

update_manual_test_case
Destructive

Modify an existing manual test case by sending only the fields you want to change in the updates object; requires write permission.

Instructions

Modify an existing manual test case. Send only the fields you want to change inside the updates object — omit everything else. Requires write permission. IMPORTANT: steps is a full replacement — passing a steps array overwrites all existing steps. Always call get_manual_test_case() first to read current steps before modifying them. Files cannot be added or removed over MCP — tell the user to use the TestDino UI. To add comments, pass updates.comments as an array of comment-body strings — each is appended as a new comment (PAT owner is author). Cap of 20 comments/case is enforced. To link issues, pass updates.issues as an array of ticket keys (e.g. ["PROJ-123","ENG-9"]). Every key is looked up in the project's connected trackers (Jira and/or Linear) and must resolve in exactly one — the whole call fails with 409 INTEGRATION_NOT_CONNECTED when neither is connected (tell the user to connect Jira or Linear in Settings → Integrations), 400 naming a key that exists in both trackers (pass that entry as { "provider": "jira" | "linear", "displayId": "KEY" } instead of a bare string), or 400 naming the keys that do not resolve. Nothing is written unless all keys resolve. Duplicate displayIds on the case are skipped.

Input Schema

NameRequiredDescriptionDefault
caseIdYesInternal _id or "TC-123" style ID
updatesYesFields to update: title (alias: name), description, preconditions, postconditions, status, steps, priority, severity, type, layer, behavior, automationStatus, tags, flags, customFields, comments (array of strings to append), issues (array of ticket keys to link, resolved against the connected Jira / Linear)…
projectIdYesProject ID

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed1 schema field changedv2.2.3
    • changedInput schema / properties / updates / description
      Previous value: -"Fields to update: title (alias: name), description, preconditions, postconditions, status, steps, priority, severity, type, layer, behavior, automationStatus, tags, flags, attachments {add, remove}, customFields, comments (array of strings to append), issues (array of ticket keys to link, resolved against the connected Jira / Linear)…"New value: +"Fields to update: title (alias: name), description, preconditions, postconditions, status, steps, priority, severity, type, layer, behavior, automationStatus, tags, flags, customFields, comments (array of strings to append), issues (array of ticket keys to link, resolved against the connected Jira / Linear)…"
  2. Changed7 schema fields changedv2.2.0
    • addedInput schema / $schema
      Added value: +"http://json-schema.org/draft-07/schema#"
    • addedInput schema / additionalProperties
      Added value: +false
    • changedInput schema / properties / caseId / description
      Previous value: -"Test case ID (Required). Can be internal _id or human-readable ID like 'TC-123'."New value: +"Internal _id or \"TC-123\" style ID"
    • changedInput schema / properties / projectId / description
      Previous value: -"Project ID (Required). The TestDino project identifier."New value: +"Project ID"
    • addedInput schema / properties / updates / additionalProperties
      Added value: +{}
    • changedInput schema / properties / updates / description
      Previous value: -"Object containing the fields to update. Can include: title (or name), description, steps, status, priority, severity, type, layer, behavior, preconditions, postconditions, automationStatus, tags, flags, attachments, customFields, etc."New value: +"Fields to update: title (alias: name), description, preconditions, postconditions, status, steps, priority, severity, type, layer, behavior, automationStatus, tags, flags, attachments {add, remove}, customFields, comments (array of strings to append), issues (array of ticket keys to link, resolved against the connected Jira / Linear)…"
    • removedInput schema / properties / updates / properties
      Removed value: -{
      -  "attachments": {
      -    "description": "Add or remove attachments (up to 10MB each).",
      -    "properties": {
      -      "add": {
      -        "description": "Array of attachment URLs or file paths to add.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      },
      -      "remove": {
      -        "description": "Array of attachment IDs or URLs to remove.",
      -        "items": {
      -          "type": "string"
      -        },
      -        "type": "array"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "automationStatus": {
      -    "description": "Updated automation status.",
      -    "enum": [
      -      "Manual",
      -      "Automated",
      -      "To be automated"
      -    ],
      -    "type": "string"
      -  },
      -  "behavior": {
      -    "description": "Updated behavior.",
      -    "enum": [
      -      "positive",
      -      "negative",
      -      "destructive",
      -      "Not set"
      -    ],
      -    "type": "string"
      -  },
      -  "comments": {
      -    "description": "Array of comment bodies to append to the test case. Each string becomes a new comment with the PAT owner as the author. The server enforces a cap of 20 comments per case; entries past the cap are rejected.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "customFields": {
      -    "additionalProperties": {
      -      "type": "string"
      -    },
      -    "description": "Updated custom fields as key-value pairs. Only available if custom fields are configured in test case management settings.",
      -    "type": "object"
      -  },
      -  "description": {
      -    "description": "Updated description.",
      -    "type": "string"
      -  },
      -  "flags": {
      -    "description": "Updated automation flags/checklist options.",
      -    "items": {
      -      "enum": [
      -        "To be Automated",
      -        "Is flaky",
      -        "Muted"
      -      ],
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "issues": {
      -    "description": "Array of Jira ticket keys to link to the test case (e.g. ['PROJ-123', 'ENG-45']). The server resolves each key against the project's connected Jira: tickets that are found are saved with title and URL; tickets that aren't found (or if no Jira is connected) are saved as plain text stubs — same fallback as the UI's add-issue flow. Duplicate links for the same ticket are silently skipped.",
      -    "items": {
      -      "type": "string"
      -    },
      -    "type": "array"
      -  },
      -  "layer": {
      -    "description": "Updated layer.",
      -    "enum": [
      -      "e2e",
      -      "api",
      -      "unit",
      -      "not set"
      -    ],
      -    "type": "string"
      -  },
      -  "name": {
      -    "description": "Updated test case title (or name). `title` is the rename-safe primary field; `name` is accepted as an alias.",
      -    "type": "string"
      -  },
      -  "postconditions": {
      -    "description": "Updated postconditions.",
      -    "type": "string"
      -  },
      -  "preconditions": {
      -    "description": "Updated preconditions.",
      -    "type": "string"
      -  },
      -  "priority": {
      -    "description": "Updated priority.",
      -    "enum": [
      -      "high",
      -      "medium",
      -      "low",
      -      "Not set"
      -    ],
      -    "type": "string"
      -  },
      -  "severity": {
      -    "description": "Updated severity.",
      -    "enum": [
      -      "Blocker",
      -      "critical",
      -      "major",
      -      "Normal",
      -      "minor",
      -      "trivial",
      -      "Not set"
      -    ],
      -    "type": "string"
      -  },
      -  "status": {
      -    "description": "Updated status.",
      -    "enum": [
      -      "Active",
      -      "Draft",
      -      "Deprecated"
      -    ],
      -    "type": "string"
      -  },
      -  "steps": {
      -    "description": "Updated test steps array. For Classic format: action, expectedResult, and optional data. For Gherkin format: event and stepDescription. Each top-level step can include attachments as URLs or local file paths.",
      -    "items": {
      -      "oneOf": [
      -        {
      -          "properties": {
      -            "action": {
      -              "description": "The action to perform in this step (Classic format).",
      -              "type": "string"
      -            },
      -            "attachments": {
      -              "description": "Optional top-level step attachments as URLs or local file paths.",
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "data": {
      -              "description": "Optional test data for this step (Classic format).",
      -              "type": "string"
      -            },
      -            "expectedResult": {
      -              "description": "The expected outcome of this action (Classic format).",
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "action",
      -            "expectedResult"
      -          ]
      -        },
      -        {
      -          "properties": {
      -            "attachments": {
      -              "description": "Optional top-level step attachments as URLs or local file paths.",
      -              "items": {
      -                "type": "string"
      -              },
      -              "type": "array"
      -            },
      -            "event": {
      -              "enum": [
      -                "Given",
      -                "When",
      -                "And",
      -                "Then",
      -                "But"
      -              ],
      -              "type": "string"
      -            },
      -            "stepDescription": {
      -              "type": "string"
      -            }
      -          },
      -          "required": [
      -            "event",
      -            "stepDescription"
      -          ]
      -        }
      -      ],
      -      "type": "object"
      -    },
      -    "type": "array"
      -  },
      -  "tags": {
      -    "description": "Updated tags.",
      -    "type": "string"
      -  },
      -  "testStepsDeclarationType": {
      -    "description": "Updated test steps declaration type.",
      -    "enum": [
      -      "Classic",
      -      "Gherkin"
      -    ],
      -    "type": "string"
      -  },
      -  "type": {
      -    "description": "Updated type.",
      -    "enum": [
      -      "functional",
      -      "smoke",
      -      "regression",
      -      "security",
      -      "performance",
      -      "e2e",
      -      "Integration",
      -      "API",
      -      "Unit",
      -      "Accessability",
      -      "Compatibility",
      -      "Acceptance",
      -      "Exploratory",
      -      "Usability",
      -      "Other"
      -    ],
      -    "type": "string"
      -  }
      -}
  3. Changed2 schema fields changedv2.0.2
    • changedInput schema / properties / updates / description
      Previous value: -"Object containing the fields to update. Can include: name, description, steps, status, priority, severity, type, layer, behavior, preconditions, postconditions, automationStatus, tags, flags, attachments, customFields, etc."New value: +"Object containing the fields to update. Can include: title (or name), description, steps, status, priority, severity, type, layer, behavior, preconditions, postconditions, automationStatus, tags, flags, attachments, customFields, etc."
    • changedInput schema / properties / updates / properties / name / description
      Previous value: -"Updated test case name/title."New value: +"Updated test case title (or name). `title` is the rename-safe primary field; `name` is accepted as an alias."
  4. Changed20 schema fields changedv1.0.10
    • changedInput schema / properties / updates / description
      Previous value: -"Object containing the fields to update. Can include: title, description, steps, status, priority, severity, type, layer, behavior, preconditions, postconditions, etc."New value: +"Object containing the fields to update. Can include: name, description, steps, status, priority, severity, type, layer, behavior, preconditions, postconditions, automationStatus, tags, flags, attachments, customFields, etc."
    • addedInput schema / properties / updates / properties / attachments
      Added value: +{
      +  "description": "Add or remove attachments (up to 10MB each).",
      +  "properties": {
      +    "add": {
      +      "description": "Array of attachment URLs or file paths to add.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    },
      +    "remove": {
      +      "description": "Array of attachment IDs or URLs to remove.",
      +      "items": {
      +        "type": "string"
      +      },
      +      "type": "array"
      +    }
      +  },
      +  "type": "object"
      +}
    • addedInput schema / properties / updates / properties / automationStatus
      Added value: +{
      +  "description": "Updated automation status.",
      +  "enum": [
      +    "Manual",
      +    "Automated",
      +    "To be automated"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / updates / properties / behavior / enum
      Previous value: -[
      -  "positive",
      -  "negative",
      -  "destructive"
      -]New value: +[
      +  "positive",
      +  "negative",
      +  "destructive",
      +  "Not set"
      +]
    • addedInput schema / properties / updates / properties / comments
      Added value: +{
      +  "description": "Array of comment bodies to append to the test case. Each string becomes a new comment with the PAT owner as the author. The server enforces a cap of 20 comments per case; entries past the cap are rejected.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / updates / properties / customFields
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Updated custom fields as key-value pairs. Only available if custom fields are configured in test case management settings.",
      +  "type": "object"
      +}
    • addedInput schema / properties / updates / properties / flags
      Added value: +{
      +  "description": "Updated automation flags/checklist options.",
      +  "items": {
      +    "enum": [
      +      "To be Automated",
      +      "Is flaky",
      +      "Muted"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / updates / properties / issues
      Added value: +{
      +  "description": "Array of Jira ticket keys to link to the test case (e.g. ['PROJ-123', 'ENG-45']). The server resolves each key against the project's connected Jira: tickets that are found are saved with title and URL; tickets that aren't found (or if no Jira is connected) are saved as plain text stubs — same fallback as the UI's add-issue flow. Duplicate links for the same ticket are silently skipped.",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / updates / properties / layer / enum
      Previous value: -[
      -  "e2e",
      -  "api",
      -  "unit"
      -]New value: +[
      +  "e2e",
      +  "api",
      +  "unit",
      +  "not set"
      +]
    • addedInput schema / properties / updates / properties / name
      Added value: +{
      +  "description": "Updated test case name/title.",
      +  "type": "string"
      +}
    • changedInput schema / properties / updates / properties / priority / enum
      Previous value: -[
      -  "critical",
      -  "high",
      -  "medium",
      -  "low"
      -]New value: +[
      +  "high",
      +  "medium",
      +  "low",
      +  "Not set"
      +]
    • changedInput schema / properties / updates / properties / severity / enum
      Previous value: -[
      -  "critical",
      -  "major",
      -  "minor",
      -  "trivial"
      -]New value: +[
      +  "Blocker",
      +  "critical",
      +  "major",
      +  "Normal",
      +  "minor",
      +  "trivial",
      +  "Not set"
      +]
    • changedInput schema / properties / updates / properties / status / enum
      Previous value: -[
      -  "actual",
      -  "draft",
      -  "deprecated"
      -]New value: +[
      +  "Active",
      +  "Draft",
      +  "Deprecated"
      +]
    • changedInput schema / properties / updates / properties / steps / description
      Previous value: -"Updated test steps array."New value: +"Updated test steps array. For Classic format: action, expectedResult, and optional data. For Gherkin format: event and stepDescription. Each top-level step can include attachments as URLs or local file paths."
    • addedInput schema / properties / updates / properties / steps / items / oneOf
      Added value: +[
      +  {
      +    "properties": {
      +      "action": {
      +        "description": "The action to perform in this step (Classic format).",
      +        "type": "string"
      +      },
      +      "attachments": {
      +        "description": "Optional top-level step attachments as URLs or local file paths.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "data": {
      +        "description": "Optional test data for this step (Classic format).",
      +        "type": "string"
      +      },
      +      "expectedResult": {
      +        "description": "The expected outcome of this action (Classic format).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "action",
      +      "expectedResult"
      +    ]
      +  },
      +  {
      +    "properties": {
      +      "attachments": {
      +        "description": "Optional top-level step attachments as URLs or local file paths.",
      +        "items": {
      +          "type": "string"
      +        },
      +        "type": "array"
      +      },
      +      "event": {
      +        "enum": [
      +          "Given",
      +          "When",
      +          "And",
      +          "Then",
      +          "But"
      +        ],
      +        "type": "string"
      +      },
      +      "stepDescription": {
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "event",
      +      "stepDescription"
      +    ]
      +  }
      +]
    • removedInput schema / properties / updates / properties / steps / items / properties
      Removed value: -{
      -  "action": {
      -    "type": "string"
      -  },
      -  "data": {
      -    "type": "string"
      -  },
      -  "expectedResult": {
      -    "type": "string"
      -  }
      -}
    • addedInput schema / properties / updates / properties / tags
      Added value: +{
      +  "description": "Updated tags.",
      +  "type": "string"
      +}
    • addedInput schema / properties / updates / properties / testStepsDeclarationType
      Added value: +{
      +  "description": "Updated test steps declaration type.",
      +  "enum": [
      +    "Classic",
      +    "Gherkin"
      +  ],
      +  "type": "string"
      +}
    • removedInput schema / properties / updates / properties / title
      Removed value: -{
      -  "description": "Updated test case title.",
      -  "type": "string"
      -}
    • changedInput schema / properties / updates / properties / type / enum
      Previous value: -[
      -  "functional",
      -  "smoke",
      -  "regression",
      -  "security",
      -  "performance",
      -  "e2e"
      -]New value: +[
      +  "functional",
      +  "smoke",
      +  "regression",
      +  "security",
      +  "performance",
      +  "e2e",
      +  "Integration",
      +  "API",
      +  "Unit",
      +  "Accessability",
      +  "Compatibility",
      +  "Acceptance",
      +  "Exploratory",
      +  "Usability",
      +  "Other"
      +]
  5. First observed

TDQS

A4.9/5.0
Behavior5/5

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

Although annotations already mark the tool as destructive, the description adds critical behavior beyond them: steps are a full replacement, comments are appended with a 20-comment cap, issue linking is all-or-nothing, and specific failure modes are documented (409 INTEGRATION_NOT_CONNECTED, 400 ambiguous/unresolved keys). This is unusually transparent for a mutation tool.

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 front-loaded with the operation and partial-update rule, then moves to the most dangerous behavior (steps replacement) and finally edge cases. It is dense and fairly long, especially the issue-linking paragraph, but nearly every sentence carries actionable information.

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?

For a destructive nested-update mutation with no output schema, the description covers the essential safety prerequisites, partial-update model, destructive field behavior, integration failure modes, and unsupported operations. An agent has enough information to call this correctly without opening the schema.

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 already 100%, but the description adds semantics the schema does not: partial updates via only-changed fields, steps replacement rather than merge, comments-as-strings append behavior, issue-key resolution rules, and the provider/displayId object format for ambiguous keys. This materially improves correct invocation 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?

The description opens with a specific verb and resource: 'Modify an existing manual test case.' It implicitly distinguishes the tool from create_manual_test_case and get_manual_test_case, and the partial-update instruction clarifies exactly what this operation does.

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?

It gives explicit when-to-use guidance: send only changed fields, call get_manual_test_case() first, use the TestDino UI for file changes, and use updates.comments or updates.issues for comments/issue links. It also names alternatives and workarounds for unsupported operations rather than leaving them ambiguous.

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