A Model Context Protocol MCP server for capturing website screenshots with full page, element, and device size features.
- Full-page screenshot capture with automatic scrolling
- Element-specific screenshots using CSS selectors
- Multiple device presets (mobile, tablet, desktop)
- Custom viewport configurations
- Advanced wait conditions (CSS selectors, network idle, custom delays)
- Error handling and validation for secure operation
- Rate limiting to prevent resource exhaustion
- Clone or download this project
- Move to the directory:
cd /path/to/ScreenshotMCP - rename
.env.exampleto.env - Install dependencies:
npm install - Start Server:
npm start
You can use Screenshot MCP directly within the Claude Code CLI or Claude Desktop to capture screenshots as part of your development workflow.
For Claude Code CLI:
Add to your ~/.config/claude/mcp_servers.json:
{
"screenshot-full-page-mcp": {
"command": "node",
"args": ["/path/to/screenshot-full-page-mcp/index.js"]
}
}or
claude mcp add screenshot-full-page-mcp node ./index.js
For Claude Desktop:
Add to your claude_desktop_config.json:
{
"mcpServers": {
"screenshot-full-page-mcp": {
"command": "node",
"args": ["/path/to/screenshot-full-page-mcp/index.js"]
}
}
}You can use Screenshot MCP directly within the Cursor IDE to capture screenshots as part of your development workflow.
-
Open Cursor.
-
Go to Settings > MCP Servers.
-
Add a new MCP server entry for Screenshot MCP:
{ "mcpServers": { "screenshot-full-page-mcp": { "command": "node", "args": ["/path/to/screenshot-full-page-mcp/index.js"] } } } -
Save your settings.
Once configured, you can use natural language commands with Claude Code:
"Take a screenshot of https://example.com"
"Capture a mobile screenshot of https://myapp.com"
"Screenshot https://myapp.com at 1024x768 resolution"
"Take a screenshot of https://example.com after the loading spinner disappears"
"Capture just the navigation bar from https://example.com"
Captures a full-page screenshot with advanced configuration options.
Parameters:
url(required): The webpage URL to screenshotviewport: Viewport configurationpreset: Device preset (mobile,tablet,desktop)width: Custom width in pixels (100-5000)height: Custom height in pixels (100-5000)deviceScaleFactor: Scale factor (0.1-3)isMobile: Mobile device emulationhasTouch: Touch support emulation
waitFor: Wait conditionstype:selector,function,timeout, ornetworkidlevalue: CSS selector, function, or timeout valuetimeout: Wait timeout in milliseconds
delay: Additional delay before screenshotwaitUntil: Navigation completion condition
Captures a screenshot of a specific page element.
Parameters:
url(required): The webpage URLselector(required): CSS selector for the target elementviewport: Viewport configuration (same as above)
Lists all available device presets with their configurations.
| Preset | Width | Height | Scale | Mobile | Touch |
|---|---|---|---|---|---|
| mobile | 375px | 667px | 2x | Yes | Yes |
| tablet | 768px | 1024px | 2x | Yes | Yes |
| desktop | 1920px | 1080px | 1x | No | No |
Environment variables can be set in the .env file:
# Browser Configuration
BROWSER_HEADLESS=true
BROWSER_TIMEOUT=30000
MAX_CONCURRENT_SCREENSHOTS=5
# Screenshot Defaults
DEFAULT_VIEWPORT_WIDTH=1920
DEFAULT_VIEWPORT_HEIGHT=1080
DEFAULT_WAIT_TIMEOUT=10000
# Security
RATE_LIMIT_REQUESTS=100
RATE_LIMIT_WINDOW=60000
# Debug
DEBUG=false
LOG_LEVEL=info- URL validation (HTTP/HTTPS only)
- CSS selector sanitization
- Rate limiting for concurrent requests
- Sandboxed browser execution
- Input validation and error handling
- Node.js 18+
- Chrome/Chromium browser (installed automatically with Puppeteer)
- Minimum 2GB RAM
- 500MB disk space
-
Browser launch fails:
- Ensure sufficient system resources
- Check if Chrome/Chromium is properly installed
- Try setting
BROWSER_HEADLESS=falsefor debugging
-
Screenshot timeout:
- Increase
BROWSER_TIMEOUTin.env - Check if the target website loads properly
- Use appropriate
waitUntilconditions
- Increase
-
Memory issues:
- Reduce
MAX_CONCURRENT_SCREENSHOTS - Restart the MCP server periodically
- Monitor system memory usage
- Reduce
Enable debug mode by setting DEBUG=true in .env file for detailed logging.
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
MIT License - see LICENSE file for details.
For issues and questions:
- Open an issue on GitHub
- Check the troubleshooting section
- Review the MCP documentation
