mcpField
A
Assert

Assert

Local
github.com/Pixel-FunnelDeveloper Tools0Updated 24w ago

About Assert

Assert is an MCP server for coding agents to create and run Playwright end-to-end tests from plain-English flows. It runs tests in a real Chromium browser and returns step results and failure screenshots.

Key features

  1. 01Generate Markdown test scenarios
  2. 02Run scenarios in a real browser
  3. 03Inspect step results and screenshots
  4. 04List saved scenarios

Use cases

  1. 01Draft a test from a described user flow
  2. 02Run saved or ad-hoc E2E scenarios
  3. 03Review failed steps and screenshots

MCP support

Exposes four tools to MCP clients: generate, run, inspect status, and list Assert scenarios.

Configuration

Local server config is the same for every client. Copy it into your client’s MCP config file.

mcp.json · Universal config
{
"mcpServers": {
"assert-click": {
"command": "npx",
"args": [
"-y",
"@assert-click/mcp"
],
"env": {
"ASSERT_API_KEY": "<ASSERT_API_KEY>"
}
}
}
}
Run commandnpx -y @assert-click/mcp
Environment variables to set
ASSERT_API_KEYSecret

Local servers need a runtime on your machine (e.g. Node.js 18+). Config file locations differ by client; see your client’s docs.

Packages
npm@assert-click/mcp

Tools

4

Saved tool list · updated 2w ago

ParameterTypeRequiredDescription
cursorstringNoOptional. Pagination cursor from previous response.
limitnumberNoOptional. Max results to return. Default 20, max 100.
project_idstringNoOptional. Filter by project ID.

Details

From the project README

@assert-click/mcp

MCP server for Assert — lets your AI coding agent generate, run, and inspect E2E tests without leaving the chat.

Describe a user flow in plain English. Assert generates a Playwright test, executes it in a real browser, and returns step-level results and failure screenshots — all from a single tool call in Cursor, Claude, Windsurf, or any MCP-compatible agent.

Sign up free at assert.click to get your API key and project ID before using this package.

What your agent can do

  • Generate — describe a flow, get back a Markdown scenario ready to save and run
  • Run — execute a saved scenario or ad-hoc Markdown against a real Chromium browser
  • Inspect — fetch step-level pass/fail, error messages, and failure screenshot URLs
  • List — browse saved scenarios visible to the API key

Requirements

  • Node.js >=18.17
  • A project-scoped Assert key — get one at assert.click

Setup

1. Create assert.config.json in your repo:

{
  "projectApiKey": "assert_project_key_here",
  "projectId": "project_123"
}

2. Add the MCP server to your agent config:

{
  "mcpServers": {
    "assert": {
      "command": "npx",
      "args": ["-y", "@assert-click/mcp"],
      "env": {
        "ASSERT_CONFIG": "/absolute/path/to/assert.config.json"
      }
    }
  }
}

That's it. Your agent now has access to all four Assert tools.

Private URLs

Targets such as localhost, 127.0.0.1, and LAN or VPN IP addresses are blocked by default.

Use a public URL unless the machine executing the Assert run is intentionally configured to allow private targets with:

ALLOW_PRIVATE_TARGETS=true

Set that on the machine or process running Assert. Do not put it in assert.config.json.

Environment variables

  • ASSERT_API_KEY: API key (alternative to storing it in assert.config.json)
  • ASSERT_PROJECT_ID: optional default project ID
  • ASSERT_CONFIG: optional path to a config file or directory

Config files

The MCP server will look for these files from the current directory upward:

  • assert.config.json
  • assert.config.local.json

assert.config.local.json is merged on top of assert.config.json.

If you prefer env-based secrets instead of committing the key:

{
  "projectApiKeyEnv": "ASSERT_API_KEY",
  "projectId": "project_123"
}

Tools

assert_generate

Generate a Markdown scenario from a plain-English description.

Input:

  • description: string — what the user should be able to do
  • url: string — the starting URL
  • project_id?: string
  • save?: boolean — save to the project (default: false)

Returns:

{
  "scenario_id": "scenario_123",
  "markdown": "URL: https://example.com/login\nSCENARIO: Login\nPROCESS:\n  - Fill \"email\" with \"[email protected]\"\nEXPECT: Dashboard",
  "saved": true
}
assert_run

Execute a saved scenario or ad-hoc Markdown in a real browser.

Input:

  • scenario_id?: string
  • markdown?: string
  • project_id?: string
  • request_id?: string

Exactly one of scenario_id or markdown must be provided.

Returns:

{
  "run_id": "run_123",
  "status": "queued",
  "estimated_duration_seconds": null
}
assert_status

Fetch step-level results for a run.

Input:

  • run_id: string

Returns:

{
  "run_id": "run_123",
  "status": "passed",
  "duration_ms": 4200,
  "steps": [
    {
      "description": "Fill email",
      "status": "passed",
      "error": null,
      "screenshot_url": null
    }
  ],
  "failure_summary": null,
  "full_log_url": null
}
assert_list

List saved scenarios visible to the API key.

Input:

  • project_id?: string
  • cursor?: string
  • limit?: number

project_id is currently reserved for future filtering support. The current API lists all scenarios visible to the API key.

Returns:

{
  "scenarios": [
    {
      "id": "scenario_123",
      "name": "Login flow",
      "project_id": null,
      "last_run_status": "passed",
      "last_run_at": "2026-03-31T10:00:00.000Z",
      "url": "https://example.com/login"
    }
  ],
  "next_cursor": null
}

Errors

Errors are returned as structured JSON:

{
  "error": {
    "code": "INVALID_API_KEY",
    "message": "The ASSERT_API_KEY is invalid or missing.",
    "field": null
  }
}

Common codes:

  • INVALID_API_KEY
  • SCENARIO_NOT_FOUND
  • RUN_NOT_FOUND
  • VALIDATION_ERROR
  • UPSTREAM_ERROR

License

MIT

Comments

Markdown supported

New to MCP?

From what the protocol is to installing your first server, these answers cover most first questions.

An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.