Skip to main content
Glama
README.md
# Riddle MCP Server

MCP server that wraps the [Riddle API](https://riddledc.com) for Claude Code integration. Take screenshots, run browser automation, and capture console logs + network HAR data.

## Installation

1. Clone this repo
2. Install dependencies: `npm install`
3. Add to your Claude Code MCP settings (`~/.claude.json` or project `.claude/settings.json`):

```json
{
  "mcpServers": {
    "riddle": {
      "command": "node",
      "args": ["/path/to/riddle-mcp-server/index.js"],
      "env": {
        "RIDDLE_API_KEY": "rdc_live_your_key_here"
      }
    }
  }
}
```

4. Restart Claude Code

## Available Tools

### `riddle_screenshot`
Take a screenshot of any URL. Returns base64-encoded PNG.

```
riddle_screenshot(url: "https://example.com", device: "iphone")
```

Options:
- `url` (required): URL to screenshot
- `device`: "desktop" | "ipad" | "iphone"
- `width`, `height`: Custom viewport (if not using device preset)

### `riddle_batch_screenshot`
Screenshot multiple URLs at once.

```
riddle_batch_screenshot(urls: ["https://site.com", "https://site.com/page2"], device: "desktop")
```

### `riddle_automate`
Run a Playwright script, wait for completion, and get all artifacts including console logs and network HAR.

```
riddle_automate(
  url: "https://example.com",
  script: "await page.click('button'); await page.screenshot({path: 'result.png'});",
  device: "ipad"
)
```

Returns:
- Screenshots saved to `/tmp/`
- Console logs (errors, warnings, last 20 log entries)
- Network HAR summary (total requests, failed requests, last 10 requests)

### `riddle_run_script`
Run a Playwright script asynchronously. Returns job_id to check later.

```
riddle_run_script(
  url: "https://example.com",
  script: "await page.click('button'); await page.screenshot({path: 'result.png'});"
)
```

### `riddle_get_job`
Check status and get artifacts of an async job.

```
riddle_get_job(job_id: "job_abc123")
```

### `riddle_click_and_screenshot`
Simple automation: load URL, click a selector, take screenshot.

```
riddle_click_and_screenshot(url: "https://example.com", click: "button.start", wait_ms: 2000)
```

## Device Presets

| Device  | Width | Height |
|---------|-------|--------|
| desktop | 1280  | 720    |
| ipad    | 820   | 1180   |
| iphone  | 390   | 844    |

## Benefits

- No permission prompts - tools are pre-approved in Claude Code
- Direct image return - Claude can see screenshots immediately
- Console + Network capture - Debug issues without manual browser inspection
- Cleaner workflow - no bash/curl needed

## License

MIT

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation4/5

Most tools have distinct purposes: automate (full sync), batch_screenshot (multiple URLs), click_and_screenshot (interactive), get_job (status check), run_script (async execution), and screenshot (single capture). However, riddle_automate and riddle_run_script both involve running Playwright scripts, which could cause confusion about when to use each, though their sync vs. async nature helps differentiate them.

Naming Consistency5/5

All tool names follow a consistent 'riddle_verb_noun' pattern with snake_case throughout, such as riddle_automate, riddle_batch_screenshot, and riddle_get_job. This predictability makes it easy for agents to understand and select tools without naming confusion.

Tool Count5/5

With 6 tools, the server is well-scoped for its automation and screenshot domain. Each tool serves a clear, non-redundant function, from basic screenshots to complex script execution, making the count appropriate and manageable for agents.

Completeness4/5

The toolset covers core automation workflows: screenshotting (single, batch, interactive), script execution (sync and async), and job status checking. A minor gap is the lack of tools for more advanced automation tasks like form filling or data extraction, but the provided tools allow agents to handle most common scenarios effectively.