Skip to main content
Glama

Submit TestDino Audit Report

submit_audit_report

Submits a completed Playwright audit report after analysis, requiring findings with severity and recommendations; TestDino derives the score and returns a category breakdown.

Instructions

FINAL STEP of the TestDino Playwright audit flow — submits a completed audit report. Requires write permission. Call this only AFTER get_audit_report(action='context') and after you have analyzed the local Playwright code and produced findings. markdownReport is required; include findings, recommendations, reportName, branch, scope, and target as available. Do NOT compute a score — TestDino derives it from the findings you submit and returns it with a per-category breakdown. orgId is required — resolve it via health() if you do not have it. Every finding MUST include title, summary, and severity (low|medium|high|critical) — incomplete findings are rejected, not stored. category is normalized to a known bucket. target, if sent, accepts only { value, path } as non-empty strings. Use the same branch/scope/target you passed to get_audit_report(action='context') so the report attaches to the right context.

Input Schema

NameRequiredDescriptionDefault
orgIdNoOrganization ID (required to submit). Resolve via health() if you don't have it.
scopeNoAudit scope. Defaults to 'suite'.
scoreNoIgnored. TestDino computes the score from findings; kept so older clients still submit.
branchNoGit branch that was audited.
targetNoOptional scoped-audit target. Only { value, path } (non-empty strings) are stored — the dashboard reads these; any other key is rejected.
findingsNoStructured findings for the completed report
projectIdYesProject ID (required)
outputPathNoRelative file path for the local save (see writeMarkdown). Resolved from TESTDINO_MCP_WORKSPACE. Defaults to TEST-AUDIT.md.
reportNameNoShort human-readable title for the saved report
writeMarkdownNoWhen true, also write the submitted markdown to a local file. Ignored when markdownReportPath was supplied (the file already exists on disk).
markdownReportNoCompleted markdown report (required).
recommendationsNoRecommendation strings for the completed report
markdownReportPathNoPath to a local markdown file to read for submission. Relative from TESTDINO_MCP_WORKSPACE (or an absolute path). Preferred over markdownReport.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed20 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 / branch / description
      Previous value: -"Git branch that was audited. Optional — auto-detected via git if omitted."New value: +"Git branch that was audited."
    • changedInput schema / properties / findings / description
      Previous value: -"Array of findings. Each finding REQUIRES title, summary, and severity (critical/high/medium/low) — a finding missing any of these is rejected, not stored. category must be one of: surface_level_tests, missing_validation, stability_issues, hard_to_maintain, coverage_gaps, organization_ownership, setup_configuration, duplication_overlap, other. Optional: subCategory, recommendation, and evidence (file, lineStart, lineEnd, observation)."New value: +"Structured findings for the completed report"
    • addedInput schema / properties / findings / items / properties
      Added value: +{
      +  "category": {
      +    "description": "Audit category. Prefer one of: surface_level_tests, missing_validation, stability_issues, hard_to_maintain, coverage_gaps, organization_ownership, setup_configuration, duplication_overlap, other. Unknown or missing values normalize to \"other\".",
      +    "type": "string"
      +  },
      +  "evidence": {
      +    "description": "Concrete file:line examples, as strings or {file, lineStart, lineEnd, observation} objects.",
      +    "items": {
      +      "anyOf": [
      +        {
      +          "type": "string"
      +        },
      +        {
      +          "additionalProperties": true,
      +          "properties": {
      +            "file": {
      +              "type": "string"
      +            },
      +            "label": {
      +              "type": "string"
      +            },
      +            "lineEnd": {
      +              "type": "number"
      +            },
      +            "lineStart": {
      +              "type": "number"
      +            },
      +            "observation": {
      +              "type": "string"
      +            }
      +          },
      +          "type": "object"
      +        }
      +      ]
      +    },
      +    "type": "array"
      +  },
      +  "prevalence": {
      +    "description": "Counts, ratios, or scope, e.g. \"7 call sites across 2 files\".",
      +    "type": "string"
      +  },
      +  "recommendation": {
      +    "description": "What to change, where, and the stronger pattern to use.",
      +    "type": "string"
      +  },
      +  "severity": {
      +    "description": "Required. Impact level: low, medium, high, or critical.",
      +    "enum": [
      +      "low",
      +      "medium",
      +      "high",
      +      "critical"
      +    ],
      +    "type": "string"
      +  },
      +  "subCategory": {
      +    "type": "string"
      +  },
      +  "summary": {
      +    "description": "Required. Why confidence is lost — rendered as the finding summary.",
      +    "minLength": 1,
      +    "type": "string"
      +  },
      +  "title": {
      +    "description": "Required. Short issue label.",
      +    "minLength": 1,
      +    "type": "string"
      +  }
      +}
    • addedInput schema / properties / findings / items / required
      Added value: +[
      +  "severity",
      +  "title",
      +  "summary"
      +]
    • changedInput schema / properties / markdownReport / description
      Previous value: -"The complete markdown report content. Prefer markdownReportPath to avoid large tool calls."New value: +"Completed markdown report (required)."
    • changedInput schema / properties / orgId / description
      Previous value: -"Organization ID (Required to submit). Resolve via health() if you don't have it."New value: +"Organization ID (required to submit). Resolve via health() if you don't have it."
    • changedInput schema / properties / projectId / description
      Previous value: -"Project ID (Required). The TestDino project identifier."New value: +"Project ID (required)"
    • changedInput schema / properties / recommendations / description
      Previous value: -"Array of recommendation strings."New value: +"Recommendation strings for the completed report"
    • changedInput schema / properties / reportName / description
      Previous value: -"Short human-readable title for the saved report (e.g. 'Login Flow Tests', 'API Integration Suite')."New value: +"Short human-readable title for the saved report"
    • changedInput schema / properties / scope / description
      Previous value: -"Audit scope. Defaults to 'suite'. Use 'feature' or 'spec_file' when the user names a slice such as auth/login, dashboards, or a specific spec."New value: +"Audit scope. Defaults to 'suite'."
    • changedInput schema / properties / score / description
      Previous value: -"Final audit score (0-100). Required."New value: +"Ignored. TestDino computes the score from findings; kept so older clients still submit."
    • removedInput schema / properties / score / maximum
      Removed value: -100
    • removedInput schema / properties / score / minimum
      Removed value: -0
    • removedInput schema / properties / target / properties / path / description
      Removed value: -"File or spec path the audit was scoped to."
    • addedInput schema / properties / target / properties / path / minLength
      Added value: +1
    • removedInput schema / properties / target / properties / value / description
      Removed value: -"Human-readable target, e.g. a feature area."
    • addedInput schema / properties / target / properties / value / minLength
      Added value: +1
    • changedInput schema / required
      Previous value: -[
      -  "projectId",
      -  "orgId",
      -  "score"
      -]New value: +[
      +  "projectId"
      +]
  2. Changed4 schema fields changedv2.0.2
    • changedInput schema / properties / findings / description
      Previous value: -"Array of findings. Each should have: title, category, severity (critical/high/medium/low), summary, recommendation, and evidence (file, lineStart, lineEnd, observation). category must be one of: surface_level_tests, missing_validation, stability_issues, hard_to_maintain, coverage_gaps, organization_ownership, setup_configuration, duplication_overlap, other. Optional: subCategory."New value: +"Array of findings. Each finding REQUIRES title, summary, and severity (critical/high/medium/low) — a finding missing any of these is rejected, not stored. category must be one of: surface_level_tests, missing_validation, stability_issues, hard_to_maintain, coverage_gaps, organization_ownership, setup_configuration, duplication_overlap, other. Optional: subCategory, recommendation, and evidence (file, lineStart, lineEnd, observation)."
    • changedInput schema / properties / target / additionalProperties
      Previous value: -trueNew value: +false
    • changedInput schema / properties / target / description
      Previous value: -"Structured audit target (e.g. spec path, feature area). Pass this when the audit was scoped to a specific slice."New value: +"Optional scoped-audit target. Only { value, path } (non-empty strings) are stored — the dashboard reads these; any other key is rejected."
    • addedInput schema / properties / target / properties
      Added value: +{
      +  "path": {
      +    "description": "File or spec path the audit was scoped to.",
      +    "type": "string"
      +  },
      +  "value": {
      +    "description": "Human-readable target, e.g. a feature area.",
      +    "type": "string"
      +  }
      +}
  3. Addedv1.0.11

TDQS

A4.7/5.0
Behavior5/5

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

Annotations only cover readOnlyHint=false/destructiveHint=false, so the description carries the real behavioral load and does so: write permission required, incomplete findings are 'rejected, not stored', category is normalized to a known bucket, and score is ignored because TestDino derives it. This is meaningful behavior beyond what the annotations declare.

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?

Front-loaded with the role ('FINAL STEP') and the hard preconditions before the field-level detail, and every sentence carries an actionable constraint. It is dense, but for a 13-parameter nested tool the length is largely earned rather than padding.

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 13 parameters, nested objects, and no output schema, the description covers prerequisites, required fields, rejection behavior, and even the return contract ('returns it with a per-category breakdown'). Full return shape is not described, but the agent has enough to call it correctly.

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 the baseline is 3, but the description adds genuine meaning beyond the schema: it says markdownReport is required, orgId must be resolved via health(), target accepts only {value,path}, findings must include title/summary/severity, and branch/scope/target must match the earlier context call. That is more than a restatement of 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 a specific verb+resource ('submits a completed audit report') and positions it precisely as the 'FINAL STEP of the TestDino Playwright audit flow', which distinguishes it from the read-side sibling get_audit_report. An agent knows exactly what this does and where it sits in the workflow.

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?

Explicit sequencing and prerequisites: 'Call this only AFTER get_audit_report(action='context')' and 'after you have analyzed the local Playwright code'. It also gives a negative instruction ('Do NOT compute a score') and a resolution step for orgId via health(), leaving nothing to inference.

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