Skip to main content
Glama
CoolTea001
by CoolTea001

Cool Test MCP

An automated testing MCP (Model Context Protocol) server. It is lightweight — no extra runtime dependencies, single entry point, instant to start — and plugs into any MCP-capable agent (Claude Desktop, Cursor, opencode, etc.) with a few lines of config.

Features

  • Lightweight & easy to adapt — no extra runtime deps, runnable via npx, one-line config to connect to your agent tools

  • Conversion — turn test cases in any format into a fixed JSON template (.cooltest/)

  • Case-by-case testing — read / test / write cases one by one through MCP tools, avoiding direct JSON file I/O that wastes tokens

  • Review flow — cases that cannot be tested or judged are automatically set to review, left for human review

  • Visual report — a local web page shows all case results and supports editing status and notes

Related MCP server: Vision QA MCP

Requirements

  • Node.js 18 or newer

  • Claude Desktop, Cursor, opencode, or any other MCP client

Getting started

No local install needed — the server runs directly via npx. Register it in your agent's MCP configuration.

Standard config works in most of the tools:

{
  "mcpServers": {
    "cool-test": {
      "command": "npx",
      "args": [
        "-y",
        "cool-test-mcp@latest"
      ],
      "cwd": "/absolute/path/to/your/project"
    }
  }
}

cwd points to your project root; .cooltest/ will be created there. For clients without a per-server cwd, the folder is created in the MCP process's working directory.

Go to Cursor Settings -> MCP -> Add new MCP Server. Name it to your liking, use command type with the command npx -y cool-test-mcp@latest. Alternatively, add to .cursor/mcp.json:

{
  "mcpServers": {
    "cool-test": {
      "command": "npx",
      "args": [
        "-y",
        "cool-test-mcp@latest"
      ]
    }
  }
}

Create a .trae/mcp.json file in your project root (Cursor-compatible mcpServers schema):

{
  "mcpServers": {
    "cool-test": {
      "command": "npx",
      "args": ["-y", "cool-test-mcp@latest"]
    }
  }
}

For more information, see the Trae MCP documentation.

Zed uses the context_servers key (not mcpServers). Add to ~/.config/zed/settings.json:

{
  "context_servers": {
    "cool-test": {
      "command": "npx",
      "args": ["-y", "cool-test-mcp@latest"]
    }
  }
}

For more information, see the Zed MCP documentation.

Follow the MCP Servers documentation. For example in ~/.config/opencode/opencode.json:

{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "cool-test": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "cool-test-mcp@latest"
      ],
      "enabled": true
    }
  }
}

The MCP configs for each agent tool above have not all been individually verified. If you find any issues or missing configs, we welcome PRs to add or fix them.

Usage

Trigger the full test flow

Use Cool Test for <test case address>

The LLM will: check whether your agent has browser automation capability (Playwright MCP etc.) → convert the cases → test case by case → open the report.

View the report

Use Cool Test to view <address>

MCP Tools

Tool

Purpose

cooltest_init_suite

Generate a .cooltest JSON (does not overwrite by default; overwrite:true rebuilds)

cooltest_append_cases

Append one or more new cases to a suite in a single batch

cooltest_list_suites

List existing suites

cooltest_list_cases

Case summary list (id/title/status/priority)

cooltest_get_case

Read a single case's full content

cooltest_update_case

Update an existing case's status/notes/evidence/lastRunAt; lastRunAt is auto-recorded when set to passed/failed

cooltest_get_stats

Suite status statistics

cooltest_open_report

Start the local report server and open the page

Contributing

Contributions are welcome. To set up a local environment:

# Clone
git clone https://github.com/CoolTea001/cool-test-mcp.git
cd cool-test-mcp

# Install
npm install

# Build (compile TS + copy the report script to dist)
npm run build

# Test (end-to-end check, full tool flow via MCP client)
node test-e2e.mjs <temp dir>

Test the local build as an MCP server

To try your un-published changes in an actual MCP client, point the server at the local dist/index.js instead of the npm package. Rebuild first (npm run build) so dist/ is up to date, then register it.

Generic mcpServers config (Claude Desktop, Cursor, Trae, etc.):

{
  "mcpServers": {
    "cool-test": {
      "command": "node",
      "args": ["/absolute/path/to/cool-test-mcp/dist/index.js"],
      "cwd": "/absolute/path/to/your/project"
    }
  }
}

opencode (~/.config/opencode/opencode.json):

{
  "mcp": {
    "cool-test": {
      "type": "local",
      "command": ["node", "/absolute/path/to/cool-test-mcp/dist/index.js"]
    }
  }
}

Notes for local testing:

  • Set the working directory to the project you want to test against — .cooltest/ is created in the MCP process's current working directory.

  • After rebuilding, restart the MCP client / reconnect the server for the new dist/ to take effect.

  • The published package runs the same code via npx -y cool-test-mcp@latest; only the entry point differs.

License

MIT

Available Tools

7 tools
cooltest_get_caseA

Read a single case's full content (including steps/expected/evidence). Use by id when testing case by case.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesCase id, required
suiteNoSuite name or filePath; defaults to the current suite

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations, the description carries the disclosure burden. It clearly states 'Read' indicating a non-mutating operation, and describes the content returned (steps/expected/evidence). This is transparent enough for a read tool, though it doesn't discuss error handling or return format.

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?

The description is one sentence that front-loads the main action and includes meaningful detail. No redundant words or fluff.

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 simple read tool with 100% schema coverage and no output schema, the description adequately covers what the tool does and what it returns. It doesn't specify return format, but the 'full content' phrase gives reasonable clarity. It is complete enough for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with both 'id' and 'suite' documented. The description reinforces usage by id but doesn't add new semantic information beyond the schema, so baseline 3 is appropriate.

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 tool reads a single case's full content, explicitly listing steps/expected/evidence. This distinguishes it from sibling tools like list_cases (listing) and update_case (modification).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description says 'Use by id when testing case by case', providing clear context for when to use it. It doesn't explicitly mention alternatives or when not to use it, but the guidance is sufficient for a simple read tool.

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

cooltest_get_statsA

Suite status statistics (total/passed/failed/review/pending). Use to report progress after testing.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteNoSuite name or filePath; defaults to the current suite

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description is responsible for conveying behavioral aspects. 'Suite status statistics' strongly implies a read-only operation, but it does not explicitly state that it has no side effects or what happens if the suite does not exist. It does usefully disclose the categories of data returned, adding some transparency beyond the name.

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?

The description is two short sentences that front-load the resource and data metrics, followed by a clear usage phrase. Every word earns its place, with no redundancy or irrelevant detail.

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?

The tool is simple (one optional parameter, no output schema) and the description covers the core purpose, the returned metric categories, and a typical usage scenario. It does not explicitly describe the return format, but the list of metrics implies the structure sufficiently for this level of complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully describes the single parameter 'suite' including its default behavior, and the description adds no additional semantic detail about parameters. Since schema description coverage is 100%, the baseline score of 3 is appropriate.

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 explicitly identifies the resource ('suite status statistics') and specifies the exact metrics returned (total/passed/failed/review/pending), making its function clear. It is clearly distinct from sibling tools like get_case or list_cases, which focus on individual test cases or listings rather than aggregate status.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear usage context: 'Use to report progress after testing' which indicates when this tool is appropriate. However, it does not mention when not to use it or name alternative sibling tools, so it lacks explicit exclusions or alternative guidance.

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

cooltest_init_suiteA

Generate a .cooltest JSON from a test case source (first step of the flow, used for "Use Cool Test for"). Does not overwrite an existing suite by default; returns skipped. Set overwrite=true to rebuild. Call this to create the suite, then append cases with cooltest_update_case.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNoSuite name; defaults to the source name
sourceYesTest case source (URL or path), required
overwriteNoWhether to overwrite if it exists; default false

TDQS

A4.6/5.0
Behavior4/5

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

With no annotations, the description carries the transparency burden. It discloses key behavioral details: does not overwrite by default, returns skipped if already exists, and overwrite=true rebuilds. This goes beyond what structured data could convey.

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?

Three sentences, front-loaded with the main purpose, then behavioral details and usage guidance. Every sentence adds unique value with no redundancy or fluff.

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?

The description explains the tool's role in the overall flow and its default behavior, which is sufficient for a simple creation tool. However, it omits what a successful return looks like, a minor gap since no output schema is provided.

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%, but the description adds value by clarifying that the 'name' parameter defaults to the source name, a detail not present in the schema. It also restates the overwrite default, reinforcing usage semantics.

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?

Description uses a specific verb ('Generate') and resource ('.cooltest JSON') and clearly states the input ('test case source'). It is explicitly positioned as 'first step of the flow', distinguishing it from sibling tools like cooltest_update_case.

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?

Provides explicit usage instructions: 'Call this to create the suite, then append cases with cooltest_update_case.' Also details default vs overwrite behavior, giving clear guidance on when to use and what alternatives exist.

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

cooltest_list_casesA

List case summaries for a suite (id/title/status/priority), without steps/evidence to save tokens. Call before testing to get an overview.

ParametersJSON Schema
NameRequiredDescriptionDefault
suiteNoSuite name or filePath; defaults to the current suite
statusNoFilter by status

TDQS

A4.2/5.0
Behavior4/5

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

No annotations are provided, so the description carries the burden. It discloses the output fields and the token-saving omission of steps/evidence, which is useful behavioral context. It could additionally state the read-only nature or return format, but this is adequate.

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?

Single sentence, efficiently combines purpose, scope, and usage hint. No wasted words.

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 simple list tool with two optional params and no output schema, the description covers what is returned, what is omitted, and when to use it. Lacks explicit return format but is acceptable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema covers both parameters (suite and status) with descriptions, including suite's default behavior. The tool description adds no additional parameter semantics beyond the schema, so baseline 3.

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?

Clearly states it lists case summaries for a suite with specific fields (id/title/status/priority), distinguishing from sibling get_case (full details) and list_suites (suites).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

'Call before testing to get an overview' provides explicit when-to-use context. The phrase 'without steps/evidence' implies using get_case for detailed steps, though it doesn't name the alternative explicitly.

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

cooltest_list_suitesA

List existing suites under the project root .cooltest (name/filePath/caseCount/updatedAt). Call first to see which suites exist when working with multiple suites.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses the scope (project root .cooltest), the return fields, and implies a non-destructive read operation via the verb 'List'. This is sufficient for a list tool.

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?

The description is two sentences, front-loaded with the action and scope, and every clause adds value. No wasted words.

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?

Given the tool's simplicity (no parameters, no output schema), the description covers what it does, where it operates, what it returns, and when to use it. This is complete for an AI agent to correctly select and invoke the tool.

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 zero parameters, the baseline is 4. The description adds context about the scope and output, but no parameter explanation is needed since there are none.

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 tool lists existing suites under a specific root, and specifies the fields returned (name/filePath/caseCount/updatedAt). This distinguishes it from sibling tools like cooltest_list_cases and cooltest_init_suite.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call first' to see which suites exist, giving clear context for when to use this tool. It does not explicitly mention alternatives, but the guidance is clear enough for discovery before working with multiple suites.

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

cooltest_open_reportA

Start the local report server (zero-dependency Node single script) and open the visual report page in a browser. Call after testing finishes. Returns the url and port.

ParametersJSON Schema
NameRequiredDescriptionDefault
portNoSpecific port; defaults to a random free port
suiteNoSuite name or filePath; defaults to the current suite

TDQS

A3.8/5.0
Behavior2/5

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

With no annotations provided, the description must disclose side effects. It mentions starting a server and opening a browser but fails to explain whether the server stays running, how to stop it, or if it blocks execution. This is a significant transparency gap for a side-effecting operation.

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, all essential information, and no fluff. The description is front-loaded with the primary action and includes key details about invocation timing and return value.

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 tool with no output schema, it states the return value (url and port) and gives implementation detail ('zero-dependency Node single script'). But it misses lifecycle/cleanup expectations and potential port conflict behavior, which would make it more complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers both parameters with descriptions (100% coverage), so the baseline is 3. The description adds no additional parameter semantics beyond what the schema already provides.

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 uses specific verbs and resources: 'Start the local report server' and 'open the visual report page in a browser.' This clearly distinguishes it from sibling tools that manage test cases, suites, and stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use it: 'Call after testing finishes.' However, it does not mention when not to use it or alternative tools for viewing results programmatically, so it falls short of a 5.

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

cooltest_update_caseA

Update a case's status/notes/evidence/lastRunAt. Write back results after testing; set status to review with a required notes reason when a case cannot be tested or judged. Also used to append new cases after init (provide the full field set each time).

ParametersJSON Schema
NameRequiredDescriptionDefault
idNoCase id, required; for a new case (appended after init) any unused id works
tagsNoTags (when adding a new case)
notesNoNotes (overwrites)
stepsNoTest steps (when adding a new case)
suiteNoSuite name or filePath; defaults to the current suite
titleNoCase title (when adding a new case)
statusNoNew status
evidenceNoAdditional evidence relative paths
expectedNoExpected result (when adding a new case)
priorityNoPriority (when adding a new case, e.g. P1)
lastRunAtNoTest timestamp, ISO string
descriptionNoCase description (when adding a new case)

TDQS

A4.4/5.0
Behavior4/5

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

No annotations provided, so the description carries the burden. It discloses key behavioral rules (review requires notes, append requires full field set) but doesn't cover overwrite behavior or failure responses.

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, front-loaded with the main verb and resource, no unnecessary words. Every sentence 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?

Given no annotations and no output schema, the description covers main use cases but leaves some details to schema (e.g., which fields are append-only). It's reasonably complete for a mutation tool.

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%, but the description adds meaning: full field set for new cases and notes required for review status. This goes beyond what the schema specifies.

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 it updates a case's status/notes/evidence/lastRunAt and also appends new cases after init. This distinguishes it from the read-only sibling tools like cooltest_list_cases and cooltest_get_case.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage context: write back results after testing, set status to review with required notes reason, and append new cases after init with full field set. It doesn't explicitly name alternatives, but workflow context is clear.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 7 tool updatesv0.1.0
    • First observedcooltest_get_case
    • First observedcooltest_get_stats
    • First observedcooltest_init_suite
    • First observedcooltest_list_cases
    • First observedcooltest_list_suites
    • First observedcooltest_open_report
    • First observedcooltest_update_case

TDQS

A4.3/5.0

Scored across 7 tools

Disambiguation5/5

Each tool has a distinct purpose: listing suites vs listing cases, reading a case vs updating it, getting stats, and opening the report. No overlap or ambiguity between tool responsibilities.

Naming Consistency5/5

All tools follow the consistent pattern cooltest_verb_noun (list_cases, get_case, update_case, get_stats, open_report, init_suite, list_suites). The prefix and snake_case naming are uniform throughout.

Tool Count5/5

Seven tools cover the core workflow of initializing, listing, reading, updating, and reporting on test suites. This is a well-scoped set without redundancy or bloat.

Completeness5/5

The tools form a complete lifecycle: init_suite creates a suite, list_suites shows existing ones, list_cases/get_case allow reading, update_case supports writing (including appending cases), get_stats provides status, and open_report produces the final output. No obvious missing operations for the intended workflow.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers