@lastest/mcp-server

MCP server for Claude Code, Cursor, Windsurf, Cline, and Claude Desktop. Lets AI agents run visual regression tests, review screenshot diffs, and approve baselines on a Lastest instance through the Model Context Protocol.
Quick start
npx -y @lastest/mcp-server@latest --url https://your-lastest-instance --api-key YOUR_API_KEY
Generate an API key in the Lastest UI: Settings โ Runners & API Access โ Create API Key (shown only once). The server speaks MCP over stdio โ wire it into any compatible client below.
Compatible clients
| Client | Status | Install method |
|---|
| Claude Code | Verified | claude mcp add (see below) |
| Claude Desktop | Verified | claude_desktop_config.json |
| Cursor | Verified | ~/.cursor/mcp.json |
| Windsurf | Verified | MCP config (generic JSON) |
| Cline | Verified | MCP config (generic JSON) |
Any MCP-compliant client that can launch a stdio server with arguments works.
Install โ Claude Code
claude mcp add lastest -- npx -y @lastest/mcp-server@latest \
--url https://your-lastest-instance \
--api-key YOUR_API_KEY
Verify with claude mcp list.
Install โ Claude Desktop / Cursor / Windsurf / Cline
Add to claude_desktop_config.json, ~/.cursor/mcp.json, or your client's MCP config:
{
"mcpServers": {
"lastest": {
"command": "npx",
"args": [
"-y",
"@lastest/mcp-server@latest",
"--url",
"https://your-lastest-instance",
"--api-key",
"YOUR_API_KEY"
]
}
}
}
Restart the client.
What an agent can do
- List repositories, tests, functional areas, builds, and active jobs
- Create AI-authored tests from a URL or natural-language prompt
- Update or delete tests and functional areas
- Self-configure test runtime:
playwrightOverrides, diffOverrides, stabilizationOverrides, viewport, setup wiring
- Manage shared auth: storage states (Playwright
storageState() blobs) and reusable setup scripts
- Trigger test runs (optionally
forceVideoRecording) and read run results
- Inspect visual diffs and approve / reject baselines individually or in bulk
- Heal failing tests with AI based on the latest run
- Publish, list, and revoke public-share links for builds and tests
- Read and update repo-level Playwright settings (browser, viewport, timeouts, parallelism, stabilization)
- Drive the Verify phase: Change Map, step comparisons, per-layer approvals
- Pull QA summaries, build review reports, and coverage stats
The server registers 20 MCP tools (all prefixed lastest_). Every tool returns a structured { status, summary, actionRequired?, details } payload.
Pure CRUD operations are consolidated into resource tools that take an action (or scope) discriminator; workflow verbs stay as standalone tools.
| Tool | action (or scope) values | Purpose |
|---|
lastest_status | health, jobs, job | Instance connectivity + background-job status |
lastest_repo | list, get, create, update, get_settings, update_settings | Repositories + repo-level Playwright settings |
lastest_area | list, create, update, delete, list_tests | Functional areas (test groupings) |
lastest_test | list (filter: all|failing), get, update, delete | Read/update/delete tests |
lastest_storage_state | list, create, delete | Saved Playwright storageState() blobs |
lastest_setup_script | list, get, create, update, delete | Reusable Playwright/API setup blocks |
lastest_get_diffs | scope: single|build | Read visual diffs (one, or all for a build) |
lastest_decide_diff | approve, reject (via diffIds batch or buildId approve-all) | Approve/reject visual diffs & baselines |
lastest_build | list, get, review | Builds: list, status, comprehensive QA review |
lastest_share | list, revoke | List/revoke existing public shares |
lastest_verify | view, change_map | Verify-phase view + build-level Change Map |
lastest_insights | coverage, qa | Repo coverage stats + QA summary |
Workflow verbs (standalone)
| Tool | Purpose |
|---|
lastest_run_tests | Trigger a test build (repo / area / specific tests) |
lastest_create_test | Create a test (direct/AI, browser/API modes) |
lastest_heal_test | AI healer agent auto-fixes a failing test |
lastest_validate_diff | Diff-scoped validation: run only affected tests, return a verdict |
lastest_suggest_app_fix | Advisory application-code fix for a real regression |
lastest_approve_layer | Per-layer approve/reject/snooze on a step comparison |
lastest_publish_share | Publish a /r/<slug> public share for a build/test |
lastest_quickstart | Spin up the productized 2-test demo (returns sessionId) |
lastest_quickstart_status | Poll a QuickStart session |
Self-configuring tests
lastest_test (action: "update") accepts a full override surface so an agent can shape a test without touching the UI:
- Setup wiring โ
setupTestId (use another test as setup, takes precedence) or setupScriptId, plus setupOverrides / teardownOverrides blocks to inject/skip default steps (test | script | storage_state).
- Runtime overrides โ
playwrightOverrides (browser, navigation/action/selector timeouts, error modes, baseUrl, cursor speed), viewportOverride, diffOverrides, stabilizationOverrides.
- Lifecycle โ
quarantined, executionMode (procedural | agent).
Pass null to any override block to clear it. The API validates each referenced id is in the same repo before persisting.
The tool surface was consolidated from ~56 discrete tools to ~21 by folding pure
CRUD into the resource tools above. This is a breaking change for scripts
that called the old per-operation tool names. The workflow verbs and the
QuickStart chain (lastest_quickstart โ lastest_quickstart_status โ
lastest_publish_share) kept their names and signatures. Map any removed names
as follows:
| Removed tool(s) | Now call |
|---|
lastest_health, lastest_list_jobs, lastest_get_job | lastest_status { health | jobs | job } |
lastest_list_repos, lastest_get_repo, lastest_create_repo, lastest_update_repo, lastest_get_repo_settings, lastest_update_repo_settings | lastest_repo { action } |
lastest_list_areas, lastest_create_area, lastest_update_area, lastest_delete_area, lastest_list_area_tests | lastest_area { action } |
lastest_list_tests, lastest_get_test, lastest_update_test, lastest_delete_test, lastest_list_failing_tests | lastest_test { action } |
lastest_list_storage_states, lastest_create_storage_state, lastest_delete_storage_state | lastest_storage_state { action } |
lastest_list_setup_scripts, lastest_get_setup_script, lastest_create_setup_script, lastest_update_setup_script, lastest_delete_setup_script | lastest_setup_script { action } |
lastest_get_diff, lastest_get_build_diffs | lastest_get_diffs { scope } |
lastest_approve_diff, lastest_reject_diff, lastest_approve_build_diffs | lastest_decide_diff { approve | reject } |
lastest_list_builds, lastest_get_build_status, lastest_review_build, lastest_get_test_run | lastest_build { list | get | review } |
lastest_list_build_shares, lastest_list_test_shares, lastest_revoke_share | lastest_share { list | revoke } |
lastest_get_coverage, lastest_get_qa_summary | lastest_insights { coverage | qa } |
lastest_verify_view, lastest_get_change_map | lastest_verify { view | change_map } |
If you need the old names temporarily, pin a 0.2.x release of this package
while you migrate.
CLI
lastest-mcp --url <url> --api-key <key>
The process communicates with the host client over stdio.
| Flag | Default | Meaning |
|---|
--url | (required) | Lastest instance the tools call. |
--api-key | โ | API key. Required for stdio; in http mode it is the fallback for requests that arrive without an Authorization header. |
--transport | stdio | stdio for a local agent, http for a remote Streamable HTTP endpoint. |
--port / --host | 9700 / 127.0.0.1 | Where to listen in http mode. |
--access-level | full | read, write or full โ how much of the tool surface to expose. |
Requirements: Node.js 18+ and a reachable Lastest instance.
Remote (Streamable HTTP)
Most people want the endpoint your Lastest instance already serves:
https://your-lastest-instance/api/mcp
It speaks Streamable HTTP and accepts either an API key or an OAuth 2.1
connection, so an agent platform that only knows a URL (Salesforce Agentforce,
ChatGPT, Claude web) can connect on its own โ it discovers the authorization
server from the WWW-Authenticate header, registers itself, and sends you
through a consent screen. OAuth connections get a read or write subset
of the tools; deleting things, revoking shares and publishing public links stay
behind your own API key.
Run this package as its own HTTP server when you want the MCP endpoint on a
separate host or port:
lastest-mcp --url https://your-lastest-instance --transport http --port 9700
This mode is API-key only; there is no OAuth in the standalone process.
Access levels
--access-level (and, on /api/mcp, the OAuth scope) picks the tool surface:
| Level | Sees |
|---|
read | Projects, tests, builds, diffs, coverage, verification, job status. |
write | Everything in read, plus running tests, creating/updating tests and areas, and approving or rejecting visual changes. |
full | Everything, including deletes, revoking shares and publishing public /r/ links. API key only. |
Tools are filtered at registration, so a restricted connection never sees an
action it cannot call.
Authentication
The server authenticates against Lastest's REST API (/api/v1/*) with a Bearer token. Manage and revoke keys from Settings โ Runners & API Access in the Lastest UI.
Troubleshooting
| Symptom | Fix |
|---|
Failed to connect to Lastest at โฆ | Check the URL is reachable from this machine and that the API key is valid. |
Lastest API error 401 | Token revoked or expired โ generate a new one in Settings. |
| Tools don't appear in Claude Code | Run claude mcp list; if missing re-run claude mcp add. Restart the client. |
| Tools don't appear in Cursor / Windsurf / Cline | Confirm the JSON config is valid and the client was fully restarted. |
Local development
git clone https://github.com/las-team/lastest
cd lastest/packages/mcp-server
pnpm install
pnpm dev -- --url http://localhost:3000 --api-key <key>
Used with
- Lastest โ visual regression testing platform with screenshot diffs and AI test authoring
- @lastest/runner โ self-hosted runner so AI-triggered tests execute on your infra
- Model Context Protocol โ open standard powering tool use in Claude, Cursor, Windsurf, and others
Links
License
FSL-1.1-ALv2 โ see LICENSE.