Skip to main content
Glama

Create Manual Test Case

create_manual_test_case

Creates a new manual test case in an exact existing suite, with Classic or Gherkin steps and optional metadata; verify the suite name first.

Instructions

Create a new manual test case. Requires write permission. MANDATORY FIRST STEP: always call list_manual_test_suites() before this tool to get the exact suite name — suiteName must be an exact match, not approximate. Steps default to Classic format (action + expectedResult). Set testStepsDeclarationType="Gherkin" if using Given/When/Then steps. Classic step shape: { action, expectedResult, data }. Gherkin step shape: { event: "Given"|"When"|"And"|"Then"|"But", stepDescription }. Files cannot be added over MCP — tell the user to upload them in the TestDino UI.

Input Schema

NameRequiredDescriptionDefault
tagsNo
typeNoType. Values come from Project Settings → Test Case Properties. Defaults: Smoke, Regression, Functional, Integration, E2E, API, Unit, Performance, Security, Accessibility, Usability, Compatibility, Acceptance, Exploratory, Other.
flagsNoAutomation flags/checklist values.
layerNoLayer. Values come from Project Settings → Test Case Properties. Defaults: E2E, API, Unit, Not Set.
stepsNo
titleYesTest case title
statusNoStatus. Values come from Project Settings → Test Case Properties. Defaults: Active, Draft, Deprecated.
behaviorNoBehavior. Values come from Project Settings → Test Case Properties. Defaults: Positive, Negative, Destructive, Not Set.
priorityNoPriority. Values come from Project Settings → Test Case Properties. Defaults: Critical, High, Medium, Low, Not Set.
severityNoSeverity. Values come from Project Settings → Test Case Properties. Defaults: Blocker, Critical, Major, Normal, Minor, Trivial, Not Set.
projectIdYesProject ID
suiteNameYesTarget suite name
attachmentsNoNot supported over MCP: any value is refused with a 400. Tell the user to upload files in the TestDino UI.
descriptionNo
customFieldsNoValues keyed by custom field name. Every required field must be set; the error names any that are missing.
preconditionsNo
postconditionsNo
automationStatusNoAutomation status. Values come from Project Settings → Test Case Properties. Defaults: Manual, Automated.
testStepsDeclarationTypeNo

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changedv2.2.3
    • changedInput schema / properties / attachments / description
      Previous value: -"Whole-test-case attachments as URLs, local paths, or file data objects. Suggestion: attaching files via the hosted MCP can be token-expensive (the base64 payload flows through the LLM context). For lower token usage, consider the TestDino UI or the local `testdino-mcp` npm package, which read the file locally without sending bytes through the model."New value: +"Not supported over MCP: any value is refused with a 400. Tell the user to upload files in the TestDino UI."
    • removedInput schema / properties / attachments / items
      Removed value: -{
      -  "$ref": "#/properties/steps/items/properties/attachments/items"
      -}
    • removedInput schema / properties / attachments / type
      Removed value: -"array"
    • changedInput schema / properties / steps / items / additionalProperties
      Previous value: -falseNew value: +true
    • removedInput schema / properties / steps / items / properties / attachments
      Removed value: -{
      -  "items": {
      -    "additionalProperties": true,
      -    "properties": {
      -      "_id": {
      -        "type": "string"
      -      },
      -      "blobUrl": {
      -        "type": "string"
      -      },
      -      "containerName": {
      -        "type": "string"
      -      },
      -      "fileContent": {
      -        "type": "string"
      -      },
      -      "fileName": {
      -        "type": "string"
      -      },
      -      "fileSize": {
      -        "type": "number"
      -      },
      -      "mimeType": {
      -        "type": "string"
      -      },
      -      "originalFileName": {
      -        "type": "string"
      -      },
      -      "uploadedAt": {
      -        "type": "string"
      -      },
      -      "uploadedBy": {
      -        "type": "string"
      -      },
      -      "url": {
      -        "type": "string"
      -      }
      -    },
      -    "type": "object"
      -  },
      -  "type": "array"
      -}
    • addedInput schema / properties / steps / maxItems
      Added value: +100
  2. Changed34 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 / attachments / description
      Previous value: -"Array of attachment URLs or file paths (up to 10MB each)."New value: +"Whole-test-case attachments as URLs, local paths, or file data objects. Suggestion: attaching files via the hosted MCP can be token-expensive (the base64 payload flows through the LLM context). For lower token usage, consider the TestDino UI or the local `testdino-mcp` npm package, which read the file locally without sending bytes through the model."
    • addedInput schema / properties / attachments / items / $ref
      Added value: +"#/properties/steps/items/properties/attachments/items"
    • removedInput schema / properties / attachments / items / type
      Removed value: -"string"
    • changedInput schema / properties / automationStatus / description
      Previous value: -"Automation status of the test case."New value: +"Automation status. Values come from Project Settings → Test Case Properties. Defaults: Manual, Automated."
    • removedInput schema / properties / automationStatus / enum
      Removed value: -[
      -  "Manual",
      -  "Automated",
      -  "To be automated"
      -]
    • changedInput schema / properties / behavior / description
      Previous value: -"Test behavior type."New value: +"Behavior. Values come from Project Settings → Test Case Properties. Defaults: Positive, Negative, Destructive, Not Set."
    • removedInput schema / properties / behavior / enum
      Removed value: -[
      -  "positive",
      -  "negative",
      -  "destructive",
      -  "Not set"
      -]
    • removedInput schema / properties / customFields / additionalProperties / type
      Removed value: -"string"
    • changedInput schema / properties / customFields / description
      Previous value: -"Custom fields as key-value pairs. Only available if custom fields are configured in test case management settings."New value: +"Values keyed by custom field name. Every required field must be set; the error names any that are missing."
    • removedInput schema / properties / description / description
      Removed value: -"Detailed description of what this test case validates."
    • changedInput schema / properties / flags / description
      Previous value: -"Automation flags/checklist options."New value: +"Automation flags/checklist values."
    • changedInput schema / properties / layer / description
      Previous value: -"Test layer."New value: +"Layer. Values come from Project Settings → Test Case Properties. Defaults: E2E, API, Unit, Not Set."
    • removedInput schema / properties / layer / enum
      Removed value: -[
      -  "e2e",
      -  "api",
      -  "unit",
      -  "not set"
      -]
    • removedInput schema / properties / postconditions / description
      Removed value: -"Expected state or cleanup actions after executing this test case."
    • removedInput schema / properties / preconditions / description
      Removed value: -"Prerequisites or setup required before executing this test case."
    • changedInput schema / properties / priority / description
      Previous value: -"Test case priority level."New value: +"Priority. Values come from Project Settings → Test Case Properties. Defaults: Critical, High, Medium, Low, Not Set."
    • removedInput schema / properties / priority / enum
      Removed value: -[
      -  "high",
      -  "medium",
      -  "low",
      -  "Not set"
      -]
    • changedInput schema / properties / projectId / description
      Previous value: -"Project ID (Required). The TestDino project identifier."New value: +"Project ID"
    • changedInput schema / properties / severity / description
      Previous value: -"Test case severity level."New value: +"Severity. Values come from Project Settings → Test Case Properties. Defaults: Blocker, Critical, Major, Normal, Minor, Trivial, Not Set."
    • removedInput schema / properties / severity / enum
      Removed value: -[
      -  "Blocker",
      -  "critical",
      -  "major",
      -  "Normal",
      -  "minor",
      -  "trivial",
      -  "Not set"
      -]
    • changedInput schema / properties / status / description
      Previous value: -"Test case status."New value: +"Status. Values come from Project Settings → Test Case Properties. Defaults: Active, Draft, Deprecated."
    • removedInput schema / properties / status / enum
      Removed value: -[
      -  "Active",
      -  "Draft",
      -  "Deprecated"
      -]
    • removedInput schema / properties / steps / description
      Removed value: -"Array of test steps. 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 / steps / items / additionalProperties
      Added value: +false
    • removedInput schema / properties / steps / items / oneOf
      Removed 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": {
      -        "description": "Gherkin event keyword (Gherkin format).",
      -        "enum": [
      -          "Given",
      -          "When",
      -          "And",
      -          "Then",
      -          "But"
      -        ],
      -        "type": "string"
      -      },
      -      "stepDescription": {
      -        "description": "The step description (Gherkin format).",
      -        "type": "string"
      -      }
      -    },
      -    "required": [
      -      "event",
      -      "stepDescription"
      -    ]
      -  }
      -]
    • addedInput schema / properties / steps / items / properties
      Added value: +{
      +  "action": {
      +    "type": "string"
      +  },
      +  "attachments": {
      +    "items": {
      +      "additionalProperties": true,
      +      "properties": {
      +        "_id": {
      +          "type": "string"
      +        },
      +        "blobUrl": {
      +          "type": "string"
      +        },
      +        "containerName": {
      +          "type": "string"
      +        },
      +        "fileContent": {
      +          "type": "string"
      +        },
      +        "fileName": {
      +          "type": "string"
      +        },
      +        "fileSize": {
      +          "type": "number"
      +        },
      +        "mimeType": {
      +          "type": "string"
      +        },
      +        "originalFileName": {
      +          "type": "string"
      +        },
      +        "uploadedAt": {
      +          "type": "string"
      +        },
      +        "uploadedBy": {
      +          "type": "string"
      +        },
      +        "url": {
      +          "type": "string"
      +        }
      +      },
      +      "type": "object"
      +    },
      +    "type": "array"
      +  },
      +  "data": {
      +    "type": "string"
      +  },
      +  "event": {
      +    "enum": [
      +      "Given",
      +      "When",
      +      "And",
      +      "Then",
      +      "But"
      +    ],
      +    "type": "string"
      +  },
      +  "expectedResult": {
      +    "type": "string"
      +  },
      +  "keyword": {
      +    "enum": [
      +      "Given",
      +      "When",
      +      "And",
      +      "Then",
      +      "But"
      +    ],
      +    "type": "string"
      +  },
      +  "stepDescription": {
      +    "type": "string"
      +  },
      +  "text": {
      +    "type": "string"
      +  }
      +}
    • changedInput schema / properties / suiteName / description
      Previous value: -"Test suite name (Required). The suite where this test case will be created. Use list_manual_test_suites to find suite names."New value: +"Target suite name"
    • removedInput schema / properties / tags / description
      Removed value: -"Tags to add to your test cases."
    • removedInput schema / properties / testStepsDeclarationType / description
      Removed value: -"Type of test steps declaration format."
    • changedInput schema / properties / title / description
      Previous value: -"Test case title (Required). A clear, descriptive title for the test case."New value: +"Test case title"
    • changedInput schema / properties / type / description
      Previous value: -"Test case type."New value: +"Type. Values come from Project Settings → Test Case Properties. Defaults: Smoke, Regression, Functional, Integration, E2E, API, Unit, Performance, Security, Accessibility, Usability, Compatibility, Acceptance, Exploratory, Other."
    • removedInput schema / properties / type / enum
      Removed value: -[
      -  "functional",
      -  "smoke",
      -  "regression",
      -  "security",
      -  "performance",
      -  "e2e",
      -  "Integration",
      -  "API",
      -  "Unit",
      -  "Accessability",
      -  "Compatibility",
      -  "Acceptance",
      -  "Exploratory",
      -  "Usability",
      -  "Other"
      -]
  3. Changed19 schema fields changedv1.0.10
    • addedInput schema / properties / attachments
      Added value: +{
      +  "description": "Array of attachment URLs or file paths (up to 10MB each).",
      +  "items": {
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • addedInput schema / properties / automationStatus
      Added value: +{
      +  "description": "Automation status of the test case.",
      +  "enum": [
      +    "Manual",
      +    "Automated",
      +    "To be automated"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / behavior / enum
      Previous value: -[
      -  "positive",
      -  "negative",
      -  "destructive"
      -]New value: +[
      +  "positive",
      +  "negative",
      +  "destructive",
      +  "Not set"
      +]
    • addedInput schema / properties / customFields
      Added value: +{
      +  "additionalProperties": {
      +    "type": "string"
      +  },
      +  "description": "Custom fields as key-value pairs. Only available if custom fields are configured in test case management settings.",
      +  "type": "object"
      +}
    • addedInput schema / properties / flags
      Added value: +{
      +  "description": "Automation flags/checklist options.",
      +  "items": {
      +    "enum": [
      +      "To be Automated",
      +      "Is flaky",
      +      "Muted"
      +    ],
      +    "type": "string"
      +  },
      +  "type": "array"
      +}
    • changedInput schema / properties / layer / enum
      Previous value: -[
      -  "e2e",
      -  "api",
      -  "unit"
      -]New value: +[
      +  "e2e",
      +  "api",
      +  "unit",
      +  "not set"
      +]
    • changedInput schema / properties / priority / enum
      Previous value: -[
      -  "critical",
      -  "high",
      -  "medium",
      -  "low"
      -]New value: +[
      +  "high",
      +  "medium",
      +  "low",
      +  "Not set"
      +]
    • changedInput schema / properties / severity / enum
      Previous value: -[
      -  "critical",
      -  "major",
      -  "minor",
      -  "trivial"
      -]New value: +[
      +  "Blocker",
      +  "critical",
      +  "major",
      +  "Normal",
      +  "minor",
      +  "trivial",
      +  "Not set"
      +]
    • addedInput schema / properties / status
      Added value: +{
      +  "description": "Test case status.",
      +  "enum": [
      +    "Active",
      +    "Draft",
      +    "Deprecated"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / steps / description
      Previous value: -"Array of test steps. Each step should have action, expectedResult, and optional data fields."New value: +"Array of test steps. 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 / 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": {
      +        "description": "Gherkin event keyword (Gherkin format).",
      +        "enum": [
      +          "Given",
      +          "When",
      +          "And",
      +          "Then",
      +          "But"
      +        ],
      +        "type": "string"
      +      },
      +      "stepDescription": {
      +        "description": "The step description (Gherkin format).",
      +        "type": "string"
      +      }
      +    },
      +    "required": [
      +      "event",
      +      "stepDescription"
      +    ]
      +  }
      +]
    • removedInput schema / properties / steps / items / properties
      Removed value: -{
      -  "action": {
      -    "description": "The action to perform in this step.",
      -    "type": "string"
      -  },
      -  "data": {
      -    "description": "Optional test data for this step.",
      -    "type": "string"
      -  },
      -  "expectedResult": {
      -    "description": "The expected outcome of this action.",
      -    "type": "string"
      -  }
      -}
    • removedInput schema / properties / steps / items / required
      Removed value: -[
      -  "action",
      -  "expectedResult"
      -]
    • removedInput schema / properties / suiteId
      Removed value: -{
      -  "description": "Test suite ID (Required). The suite where this test case will be created. Use list_manual_test_suites to find suite IDs.",
      -  "type": "string"
      -}
    • addedInput schema / properties / suiteName
      Added value: +{
      +  "description": "Test suite name (Required). The suite where this test case will be created. Use list_manual_test_suites to find suite names.",
      +  "type": "string"
      +}
    • addedInput schema / properties / tags
      Added value: +{
      +  "description": "Tags to add to your test cases.",
      +  "type": "string"
      +}
    • addedInput schema / properties / testStepsDeclarationType
      Added value: +{
      +  "description": "Type of test steps declaration format.",
      +  "enum": [
      +    "Classic",
      +    "Gherkin"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / 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"
      +]
    • changedInput schema / required
      Previous value: -[
      -  "projectId",
      -  "title",
      -  "suiteId"
      -]New value: +[
      +  "projectId",
      +  "title",
      +  "suiteName"
      +]
  4. First observed

TDQS

A4.5/5.0
Behavior4/5

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

Annotations only declare readOnlyHint=false and destructiveHint=false, so the description carries extra weight and does add real context: write permission required, exact-match suite resolution, default step format, and the MCP attachment restriction. It stops short of describing what happens on duplicate titles or what the response returns, which keeps it below a 5.

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?

Content is front-loaded — purpose first, then the mandatory prerequisite, then format details and the attachment caveat — and every clause conveys actionable information. The dense run-on formatting and all-caps emphasis make it slightly harder to scan than an ideal entry, but nothing is filler.

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 19-parameter mutation tool with no output schema, the description covers the highest-risk gaps: suite resolution, step encoding, permission requirement, and the attachment dead end. It does not explain how to obtain projectId or what the created test case identifier looks like on return, which an agent would otherwise have to discover.

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?

With 68% schema coverage across 19 parameters, the description meaningfully compensates: it documents the two distinct step object shapes ({action, expectedResult, data} vs {event, stepDescription}) that the schema leaves ambiguous via additionalProperties, and explains when to set testStepsDeclarationType="Gherkin". It only lightly covers the many property-style fields (priority, severity, layer), which the schema already enumerates.

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 opening sentence gives a specific verb and resource ("Create a new manual test case"), which cleanly separates it from sibling tools like update_manual_test_case and create_manual_test_suite. The rest of the text reinforces the create semantics by specifying the payload shapes that must be supplied.

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 states an explicit prerequisite — "MANDATORY FIRST STEP: always call list_manual_test_suites()" — plus the reason (suiteName must be an exact match), and it redirects out-of-scope work to the UI when attachments are needed. That is unusually concrete when-to-use and when-not guidance.

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