Skip to main content

Pixel-perfect website screenshot service exposed as both REST API and MCP server

Project description

Screenshot API

Pixel-perfect website screenshot service that captures any URL as PNG, JPEG, or PDF. Exposed as both a REST API (FastAPI) and an MCP server for use with Claude Desktop, Cursor, and other MCP-compatible clients. Uses Playwright with a pooled Chromium browser for fast, reliable rendering.

Quick Start

Docker (recommended)

docker-compose up -d

The API will be available at http://localhost:8500.

Local Development

python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
bash setup_browsers.sh
python server.py

MCP Installation

Claude Desktop

Add to your claude_desktop_config.json:

{
  "mcpServers": {
    "screenshot": {
      "command": "python",
      "args": ["/path/to/mcp-services/screenshot-api/mcp_server.py"]
    }
  }
}

Cursor

Add to your Cursor MCP settings:

{
  "mcpServers": {
    "screenshot": {
      "command": "python",
      "args": ["/path/to/mcp-services/screenshot-api/mcp_server.py"]
    }
  }
}

Via uvx (after PyPI publish)

{
  "mcpServers": {
    "screenshot": {
      "command": "uvx",
      "args": ["mcp-server-screenshot"]
    }
  }
}

API Documentation

Endpoints

POST /screenshot

Take a screenshot with full control over parameters.

Request body (JSON):

Parameter Type Default Description
url string required URL to capture
viewport_width int 1280 Viewport width (320-3840)
viewport_height int 720 Viewport height (240-2160)
full_page bool false Capture entire scrollable page
format string "png" Output: "png", "jpeg", or "pdf"
wait_for string null CSS selector to wait for
block_cookies bool false Block cookie consent banners
inject_css string null Custom CSS to inject
delay_ms int 0 Extra delay after load (0-10000)

Example:

curl -X POST http://localhost:8500/screenshot \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com", "full_page": true, "format": "png"}' \
  -o screenshot.png

GET /screenshot

Simple GET-based screenshot (no CSS injection support).

curl "http://localhost:8500/screenshot?url=https://example.com&width=1920&height=1080&format=jpeg" -o screenshot.jpg

Query parameters: url, width, height, full_page, format, wait_for, block_cookies, delay_ms

POST /screenshot/base64

Same parameters as POST /screenshot, returns JSON with base64-encoded image.

curl -X POST http://localhost:8500/screenshot/base64 \
  -H "Content-Type: application/json" \
  -d '{"url": "https://example.com"}'

Response:

{
  "url": "https://example.com",
  "format": "png",
  "content_type": "image/png",
  "base64": "iVBORw0KGgo...",
  "size_bytes": 45231
}

GET /health

Health check. Returns {"status": "ok"}.

GET /stats

Cache and usage statistics.

POST /admin/keys

Create API keys (requires X-Admin-Key header matching ADMIN_KEY env var).

curl -X POST "http://localhost:8500/admin/keys?key=my-api-key&tier=pro&owner=alice" \
  -H "X-Admin-Key: your-admin-key"

Authentication

Header Description
X-API-Key Your API key. Omit for free tier.

Response Headers

Header Description
X-Cache-Key Truncated cache key for debugging
X-Rate-Remaining Remaining requests today

MCP Tools

When used as an MCP server, two tools are available:

take_screenshot

Returns the screenshot as a viewable image (ImageContent for PNG/JPEG, TextContent with base64 for PDF).

screenshot_to_base64

Returns the screenshot as a base64 string in a TextContent response, suitable for passing to other tools or embedding.

Both tools accept: url, viewport_width, viewport_height, full_page, format, wait_for, inject_css.

Pricing Tiers

Tier Daily Limit Auth
Free 100/day per IP No key needed
Basic 1,000/day API key
Pro 10,000/day API key
Enterprise 100,000/day API key

Caching

Screenshots are cached using SHA256(url + params) as the key. Default TTL is 1 hour (configurable via CACHE_TTL). Expired entries are cleaned up automatically every 30 minutes.

Self-Hosting

Environment Variables

See .env.example for all options. Key settings:

  • CACHE_DIR - Where cached screenshots are stored (default: /data/cache)
  • CACHE_TTL - Cache duration in seconds (default: 3600)
  • MAX_FREE_DAILY - Free tier daily limit (default: 100)
  • ADMIN_KEY - Secret key for the admin endpoints
  • PORT - API port (default: 8500)

Docker Resource Limits

The default docker-compose.yml limits the container to 2 CPU cores and 2GB RAM. Adjust in the deploy.resources section as needed.

Persistent Storage

The docker-compose file uses a named volume screenshot-data for the cache and SQLite database. To use a host directory instead:

volumes:
  - /path/on/host:/data

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mcp_server_screenshot-0.1.0.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mcp_server_screenshot-0.1.0-py3-none-any.whl (24.2 kB view details)

Uploaded Python 3

File details

Details for the file mcp_server_screenshot-0.1.0.tar.gz.

File metadata

  • Download URL: mcp_server_screenshot-0.1.0.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for mcp_server_screenshot-0.1.0.tar.gz
Algorithm Hash digest
SHA256 a4db3dda2a7d09e4e258d7aa967cdaa1d6a3c3b534da9d6fcdd8b734a585ab79
MD5 027c1bb0685a7c526134a92f8ceabe32
BLAKE2b-256 6480435243736c8e5bbbb49072bdaa6af58c6e8846e00d6622b3e102b8c9946c

See more details on using hashes here.

File details

Details for the file mcp_server_screenshot-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mcp_server_screenshot-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 844e2d68980250f133dc96c0b02d21d1890dd95c56eb72ac09911086c466b1eb
MD5 e81671e1364780981e3d5042b9dfcf64
BLAKE2b-256 150cca843ed1abd0d334324835b2221062bed7b25a285263db2dffe044f3c960

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page