Skip to main content
Glama
README.md


# webshot-mcp

[δΈ­ζ–‡ζ–‡ζ‘£](README_zh.md) | English

A MCP (Model Context Protocol) server for generating web page screenshots, implemented with Playwright.

## Features

- 🌐 Support for any web page screenshots
- πŸ“± Support for multiple device types (desktop, mobile, tablet)
- 🎨 Support for multiple image formats (PNG, JPEG, WebP)
- πŸ“ Support for custom dimensions and DPI scaling
- πŸ–ΌοΈ Support for full-page screenshots
- πŸ—œοΈ Support for image quality compression
- ⚑ Asynchronous processing for excellent performance

## Usage

### As MCP Server

#### Method 1: Run directly with uvx (Recommended)

```json
{
  "mcpServers": {
    "webshot": {
      "command": "uvx",
      "args": ["webshot-mcp"]
    }
  }
}
```

#### Method 2: Use with Claude Code

Claude Code can be configured to use this MCP server in two ways:

**Option A: Using the CLI wizard**
```bash
claude mcp add
```
Then follow the prompts to add webshot-mcp.

**Option B: Direct config file editing (Recommended)**

Edit your Claude Code configuration file (`~/.claude.json`) and add:

```json
{
  "mcpServers": {
    "webshot": {
      "type": "stdio",
      "command": "uvx",
      "args": ["webshot-mcp"]
    }
  }
}
```

After editing the config file, restart Claude Code to apply the changes.

#### Method 3: Install with pip and run

```bash
# Install webshot-mcp
pip install webshot-mcp
# Install chromium browser
playwright install chromium
```

Then add to your MCP client configuration:

**For Claude Desktop (`claude_desktop_config.json`):**
```json
{
  "mcpServers": {
    "webshot": {
      "command": "webshot-mcp"
    }
  }
}
```

**For Claude Code (`~/.claude.json`):**
```json
{
  "mcpServers": {
    "webshot": {
      "type": "stdio",
      "command": "webshot-mcp"
    }
  }
}
```

### Tool Parameters

The `webshot` tool supports the following parameters:

#### Required Parameters

- `url` (string): URL of the web page to screenshot
- `output` (string): Path to save the screenshot file

#### Optional Parameters

- `width` (integer): Browser window width, default 1280
- `height` (integer): Browser window height, default 768. Set to 0 for full-page screenshot
- `dpi_scale` (number): DPI scaling ratio, default 2
- `device` (string): Device type, options:
  - `desktop` (default): Desktop device
  - `mobile`: Mobile device (iPhone 13)
  - `tablet`: Tablet device (iPad Pro)
- `format` (string): Image format, options:
  - `png` (default): PNG format
  - `jpeg`: JPEG format
  - `webp`: WebP format
- `quality` (integer): Image quality (0-100), default 100. Only effective for JPEG and WebP formats

### Usage Examples

#### Full-page Screenshot (Long Screenshot) Prompt Reference

```
Please generate a full-page screenshot of www.baidu.com, save it as WebP format to /Users/ben/Downloads/screenshot-baidu-1.webp
```

#### Custom Size Screenshot Prompt Reference

```
Please generate a screenshot of www.baidu.com with dimensions 1280x720, save it as WebP format to /Users/ben/Downloads/screenshot-baidu-2.webp
```

#### Mobile Device Screenshot Prompt Reference

*Note: Mobile and tablet devices will use their actual device dimensions, ignoring custom size parameters*

```
Please generate a mobile screenshot of www.baidu.com, save it as WebP format to /Users/ben/Downloads/screenshot-mobile.webp
```

#### Tablet Device Screenshot Prompt Reference

```
Please generate a tablet screenshot of www.baidu.com, save it as PNG format to /Users/ben/Downloads/screenshot-tablet.png
```

#### Custom Format and Quality Prompt Reference

```
Please generate a screenshot of www.baidu.com, save it as JPEG format with 80% quality to /Users/ben/Downloads/screenshot.jpg
```

#### High-resolution Desktop Screenshot Prompt Reference

```
Please generate a high-resolution screenshot of www.github.com with dimensions 1920x1080, save it as PNG format to /Users/ben/Downloads/github-hd.png
```

#### Batch Screenshots Prompt Reference

```
Please generate screenshots for the following websites and save them to /Users/ben/Downloads/:
1. www.google.com - full page, WebP format, filename: google-full.webp
2. www.github.com - 1280x720 size, JPEG format 90% quality, filename: github.jpg
3. www.stackoverflow.com - mobile view, PNG format, filename: stackoverflow-mobile.png
```

## Development

### Run Tests

```bash
uv run pytest
```

### Code Structure

```
webshot-mcp/
β”œβ”€β”€ src/webshot_mcp/
β”‚   β”œβ”€β”€ __init__.py
β”‚   β”œβ”€β”€ cli.py          # CLI entry point
β”‚   └── server.py       # MCP server implementation
β”œβ”€β”€ tests/
β”‚   └── test_server.py  # Test cases
β”œβ”€β”€ pyproject.toml      # Project configuration
└── README.md
```

### Tech Stack

- **MCP**: Model Context Protocol framework
- **Playwright**: Browser automation and screenshots
- **Pillow**: Image processing and compression
- **asyncio**: Asynchronous programming support

## Publishing

### Build and Publish to PyPI

```bash
# Install build tools
uv add --dev build twine

# Build package
uv run python -m build

# Publish to PyPI
uv run twine upload dist/*
```

## License

MIT License

## Contributing

Issues and Pull Requests are welcome!

## Changelog

### v0.1.0

- Initial release
- Support for basic web page screenshot functionality
- Support for multiple device types and image formats
- Support for image quality compression and size adjustment

TDQS

C2.9/5.0

Scored across 1 tool

Disambiguation5/5

With only one tool, there is no possibility of confusion or overlap between tools. The single tool 'webshot' has a clear and distinct purpose of generating webpage screenshots, leaving no ambiguity for an agent to misselect between multiple options.

Naming Consistency5/5

The naming is perfectly consistent as there is only one tool, 'webshot', which follows a clear and descriptive pattern. There are no other tools to compare against, so no inconsistencies in verb_noun patterns or style mixing can arise.

Tool Count2/5

A single tool is generally too few for most server purposes, as it limits functionality and may indicate an incomplete or overly narrow scope. For a webshot server, one tool might suffice for basic screenshot generation, but it lacks related operations like configuration, batch processing, or image editing, making it feel thin and potentially inadequate for broader use cases.

Completeness2/5

The server is severely incomplete for a webshot domain. While the single tool covers the core action of generating screenshots, there are obvious gaps such as setting parameters (e.g., resolution, timeout), handling errors, or managing multiple screenshots. This minimal surface will likely cause agent failures when more complex tasks are required beyond basic screenshot capture.

Maintenance

ActivityInactive
ResponsivenessNo issues