This is a personal proof-of-concept project. It is not intended for production use. Please refrain from using it.
Skip to content

IDE & MCP

Upliftr is AI debugging agents, and it ships an MCP server, so the agents show up as a tool inside Cursor and Claude Code (and any MCP-capable editor like VS Code). Your editor's agent can drive a real headless browser to reproduce a bug or walk a flow in plain English, re-run saved checks, and confirm expectations, without leaving the chat. Everything is read-only by design: the agents investigate and diagnose, they never mutate your code, data, or infrastructure. "Debug this URL" becomes a one-liner.

This is the front door to the agents right where you work: you build in your IDE, and the agents debug your app right there.

The four tools

ToolWhat it does
upliftr_root_cause(url, instructions)Deep backend root cause. Reproduces a failing flow in a real browser, captures the failing request's trace_id, queries the configured server logs (Loki / Datadog / Elasticsearch / HTTP / file), and synthesizes the server-side cause + a suggested fix. Not "the UI failed" — "the 500 in the pricing service behind it". Configure a log backend via env; with none set it still reports the failing request and how to enable tracing.
upliftr_test(url, instructions)Ad-hoc test. Opens url headless, splits instructions into plain-English steps (one per line, or sentence-split), and lets Claude drive each step in a real browser. Returns whether it worked, which step broke, the final URL/page text, and any backend root cause.
upliftr_run_suite(suite_path)Run a saved suite. Runs a *.upliftr.yaml suite end-to-end in one shared browser session. Returns the summary plus per-case pass/fail with the reason and any filed root cause.
upliftr_check(url, expect)Check one expectation. Opens url headless and decides whether a plain-English expect holds. Obvious URL/text shapes are checked deterministically (no model call); anything subjective is adjudicated against the page text + a screenshot. Returns PASS / FAIL / INCONCLUSIVE.

All four use Claude as the brain and a headless Playwright Chromium as the hands, so the server needs ANTHROPIC_API_KEY in its environment (it falls back to the key saved in the dashboard's Settings).

Install

bash
cd mcp-server
uv venv && uv pip install -e .
uv run playwright install chromium    # if not already installed

Verify it's wired up, offline, no browser or key needed:

bash
uv run python smoke_test.py
# -> OK, all 4 expected tools registered.

By default the server speaks MCP over stdio (for local editors). To run it directly:

bash
ANTHROPIC_API_KEY=sk-ant-... uv run upliftr-mcp

upliftr-mcp is a console script equivalent to uv run python -m upliftr_mcp.server.

Remote / HTTP transport (agentic platforms)

For a remote agentic platform (e.g. the GitLab Duo Agent Platform) that consumes MCP over HTTP rather than stdio, run the same server as a streamable-HTTP service:

bash
UPLIFTR_MCP_TRANSPORT=http \
UPLIFTR_MCP_HOST=0.0.0.0 UPLIFTR_MCP_PORT=8930 \
ANTHROPIC_API_KEY=sk-ant-... uv run upliftr-mcp
EnvValuesDefault
UPLIFTR_MCP_TRANSPORTstdio | http (streamable-http) | ssestdio
UPLIFTR_MCP_HOST / UPLIFTR_MCP_PORTbind address / port (http & sse)0.0.0.0 / 8930

The MCP server and the browser automation are fully cross-platform (Windows / macOS / Linux).

Register in Claude Code

One command (set the directory to your absolute mcp-server path):

bash
claude mcp add upliftr \
  --env ANTHROPIC_API_KEY=sk-ant-... \
  -- uv run --directory /ABS/PATH/TO/Upliftr/mcp-server upliftr-mcp

…or commit a project .mcp.json (one ships in the repo root, approve the upliftr server when prompted):

json
{
  "mcpServers": {
    "upliftr": {
      "command": "uv",
      "args": ["run", "--directory", "/ABS/PATH/TO/Upliftr/mcp-server", "upliftr-mcp"],
      "env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
    }
  }
}

Register in Cursor

Create .cursor/mcp.json in your project (one ships in the repo), then open Cursor Settings → MCP and confirm upliftr is connected with its 4 tools:

json
{
  "mcpServers": {
    "upliftr": {
      "command": "uv",
      "args": ["run", "--directory", "/ABS/PATH/TO/Upliftr/mcp-server", "upliftr-mcp"],
      "env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
    }
  }
}

Register in VS Code

VS Code (with MCP support, e.g. Copilot agent mode) reads .vscode/mcp.json:

json
{
  "servers": {
    "upliftr": {
      "command": "uv",
      "args": ["run", "--directory", "/ABS/PATH/TO/Upliftr/mcp-server", "upliftr-mcp"],
      "env": { "ANTHROPIC_API_KEY": "sk-ant-..." }
    }
  }
}

Example prompts (once registered)

  • "Use upliftr_root_cause on https://example.com/checkout — click Pay and tell me the backend reason it fails, not just the UI symptom."
  • "Use upliftr_test on https://example.com/login to log in with user@example.com / hunter2 and confirm it lands on the dashboard."
  • "Run the suite at backend/data/suites/checkout.upliftr.yaml with upliftr_run_suite."
  • "With upliftr_check, verify https://example.com/pricing shows the word 'Enterprise'."

Test it with MCP Inspector

To poke the server outside an editor, use the official MCP Inspector:

bash
npx @modelcontextprotocol/inspector \
  uv run --directory /ABS/PATH/TO/Upliftr/mcp-server upliftr-mcp

The Inspector launches the server over stdio and gives you a UI to list the four tools, inspect their schemas, and invoke them with arguments, handy for confirming the connection and trying upliftr_check against a URL before wiring it into your editor.

Layout

mcp-server/
├── pyproject.toml          # package + deps (mcp SDK, anthropic, playwright, …)
├── smoke_test.py           # offline check: server imports + 4 tools registered
└── upliftr_mcp/
    ├── engine.py           # puts backend/app/engine on sys.path; lazy import
    └── server.py           # FastMCP app + the 4 tools

Next: gate your PRs in CI, or learn the suite format.

Upliftr · AI-native, self-healing E2E testing. Terms · Privacy · Legal Notice