Skip to main content
Glama
byreshb

testing-toolkit-mcp

by byreshb

Lint Java tests for weak assertions

tql.lint
Read-onlyIdempotent

Run test-quality linter to catch tautological assertions, missing assertions, hard-coded sleeps, and swallowed exceptions. Returns findings with rule id, severity, location, and fix hints for actionable improvements.

Instructions

Runs test-quality-linter over test sources and returns findings with rule id, severity, location, message and fix hint. Catches tautological or constant assertions, tests with no assertion, assertions on stubs, hard-coded sleeps, swallowed exceptions, duplicate bodies and more. Paths are relative to the repository.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
repoNoRepository root to run in; defaults to TOOLKIT_REPO
pathsNoFiles or directories to lint, relative to the repository
configNoPath to a .tql.yaml configuration file
failOnNoSeverity at which the linter reports failure (its exit code), if any

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
filesYes
failedYes
summaryYes
findingsYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv1.1.1-SNAPSHOT

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and idempotentHint, so the description's job is reduced. It adds value by detailing the output structure (rule id, severity, location, message, fix hint) and the categories of issues detected, which helps the agent understand what to expect without contradicting the annotations.

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, zero fluff. The primary action and output are front-loaded in the first sentence, and the second sentence enumerates concrete examples of what the linter catches. Every word earns its place.

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, the description need not detail return values. It covers the core behavior, output fields, and relative path nuance. It doesn't explain config or failOn, but these are fully documented in the schema, so nothing critical is missing.

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. The description adds a key clarification: 'Paths are relative to the repository,' which directly aids correct invocation of the 'paths' parameter. It also implies the default scope (test sources) aligns with the default 'src/test/java'.

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 verb 'runs' a linter, the resource 'test sources', and the output format. It also lists specific issue categories it catches, making the purpose unambiguous and distinct from generic linting tools. While it doesn't explicitly contrast with siblings like tql.rules, the specificity is enough to differentiate.

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 this is the tool to lint Java tests but does not explicitly mention when to use it versus tql.rules or tql.explain. It provides no exclusions or alternative routing, leaving the agent to infer based on context. A stronger definition would note that tql.rules lists rules and tql.explain explains them.

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