mcp-master-puppeteer
An advanced MCP server for browser automation using Puppeteer, optimized for minimal token usage while providing comprehensive data when needed.
Install / Use
claude mcp add flrngel -- npx -y github:flrngel/mcp-master-puppeteerIf the server publishes to npm under a different name, use that package instead — check the repo README.
MCP Server
Model Context Protocol server
Quality Score
Category
AutomationSupported Platforms
Tags
Our assessment of mcp-master-puppeteer
mcp-master-puppeteer scores 73/100 on our quality scale, 2620th of 2,857 Automation skills we index.
Its MCP Server is 17 KB long, well organised into 36 sections with 24 code examples: a thorough specification that gives an agent plenty to work with.
It has 3 GitHub stars, so there is little community track record yet; judge it on its content.
Maintenance, license and trust
- The repository was last updated about 12 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
- Our last check on 2026-09-14 found the source still online.
- No license is declared. By default that means all rights are reserved: you can read it, but reusing or redistributing it is not clearly permitted. Ask the author before building on it commercially.
- Its trust signals score 74/100, with 3 cautions from licensing, adoption, age or documentation. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.
Safety scan
No issues foundOur scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful.
AI review by kimi-k2.7-code on 2026-11-01. Automated pattern scan on 2026-11-01. It catches known dangerous patterns, not every risk — read a skill before letting an agent act on it.
mcp-master-puppeteer compared with similar skills
All 4 of these similar skills score higher than mcp-master-puppeteer; compare them before choosing.
| Skill | Score | Stars | Updated | Format |
|---|---|---|---|---|
| mcp-master-puppeteer (this skill)by flrngel | 73 | 3 | 12mo ago | MCP Server |
| Agent-Reachby Panniantong | 100 | 107.3k | 7d ago | CLAUDE.md |
| headroomby headroomlabs-ai | 100 | 78.5k | 1d ago | CLAUDE.md |
| CowAgentby zhayujie | 100 | 47.7k | today | CLAUDE.md |
| Scraplingby D4Vinci | 100 | 91.2k | today | MCP Server |
Frequently asked questions
- How do I install mcp-master-puppeteer?
- Run
claude mcp add flrngel -- npx -y github:flrngel/mcp-master-puppeteer. The install tabs above show the steps for each supported agent. - Which AI agents does mcp-master-puppeteer work with?
- It is written for Claude Code, Claude Desktop and Zed, as a MCP Server file. Other agents that read the same format can often use it too.
- Is mcp-master-puppeteer safe to use?
- Our scan of the whole file found no instruction hijacking, hidden characters, credential access, data exfiltration or destructive commands. An AI review of the same text found nothing harmful. It declares no license and scores 74/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
- Is mcp-master-puppeteer still maintained?
- The repository was last updated about 12 months ago. That is recent enough to be usable, but agent tooling moves fast, so check the instructions against your agent's current version.
Skill content
View source on GitHubMCP Master Puppeteer
claude mcp add mcp-master-puppeteer -- npx -y github:flrngel/mcp-master-puppeteer#main
An advanced MCP (Model Context Protocol) server for browser automation using Puppeteer, optimized for minimal token usage while providing comprehensive data when needed.
Features
🎯 Token-Optimized Returns
Each tool is designed to minimize token usage while maintaining utility:
- Minimal by Default: Only essential data returned unless requested
- No Duplicate Content: Never returns both markdown and HTML
- Smart Defaults: Optimized for agent decision-making
- Optional Enrichment: Use flags to request additional data
🚀 Key Design Principles
- Token Efficiency First: 60-70% reduction in response size
- Smart Selective Returns: Only include data that aids decision-making
- No Redundancy: Eliminated duplicate data and unnecessary metadata
- Progressive Enhancement: Start minimal, add detail as needed
📊 Available Tools
1. puppeteer_navigate_analyze
Navigate to a URL and return page status, title, and optionally content/metadata. Default contentFormat is "none" for fastest response.
Options:
{
url: string; // Required: URL to navigate to
waitUntil?: "load" | "domcontentloaded" | "networkidle0" | "networkidle2"; // Default: "networkidle0"
timeout?: number; // Navigation timeout in ms (default: 30000)
contentFormat?: "markdown" | "html" | "plain-text"; // Default: "markdown"
includeMetadata?: boolean; // Include page metadata (default: false)
includePerformance?: boolean; // Include performance metrics (default: false)
}
Returns:
{
navigationInfo: {
originalUrl: string;
finalUrl: string;
statusCode: number;
statusText: string;
redirectChain: string[];
navigationTimeMs: number;
};
// Always included - minimal essential data
url: string; // Final URL after redirects
statusCode: number;
title: string;
content?: string; // Omitted if contentFormat is "none"
contentFormat: ContentFormat;
// Optional - only if there are errors
errors?: PageError[];
// Optional - only if includeMetadata is true
metadata?: {
redirectChain?: string[];
description?: string;
openGraph?: Record<string, string>;
twitterCard?: Record<string, string>;
};
// Optional - only if includePerformance is true
performance?: {
loadTimeMs: number;
resourceCounts: {
total: number;
images: number;
scripts: number;
stylesheets: number;
};
};
}
2. puppeteer_screenshot_plus
Take screenshots optimized for LLM processing with automatic resizing to stay under dimension limits. Automatically adjusts to Claude.ai's limits: 8000×8000 for single images, 2000×2000 for multiple images.
Options:
{
name: string; // Required: Name for the screenshot(s)
breakpoints?: number[]; // Viewport widths (default: [375, 768, 1280])
selector?: string; // CSS selector for element screenshot
fullPage?: boolean; // Capture full page height (default: true)
format?: "png" | "jpeg" | "webp"; // Image format (default: "jpeg")
quality?: number; // JPEG/WebP quality 0-100 (default: 80)
actions?: PageAction[]; // Actions to perform before screenshot
resizeForLLM?: boolean; // Resize to stay under max dimension (default: true)
maxDimension?: number; // Max width or height. Default: 8000 (single), 2000 (multiple)
resizeStrategy?: "cut" | "resize"; // How to handle oversized images (default: "cut")
}
Returns:
{
screenshots: Array<{
viewport: { width: number; height: number };
dataUrl: string; // Complete data URL ready to use
format: "png" | "jpeg" | "webp";
dimensions: {
width: number;
height: number;
aspectRatio: string; // e.g., "16:9"
};
fullPage: boolean;
}>;
// Optional - only if there are errors
errors?: PageError[];
}
3. puppeteer_extract_content
Extract structured content from the page with format options and detailed metadata.
Options:
{
selector?: string; // CSS selector to extract from (default: full page)
includeHidden?: boolean; // Include hidden elements (default: false)
outputFormat?: "markdown" | "html" | "plain-text" | "structured-json"; // Default: "markdown"
includeAnalysis?: boolean; // Include detailed structure analysis (default: false)
}
Returns:
{
// Always included
content: string; // In requested format
contentFormat: ContentFormat;
wordCount: number;
// Optional - only if includeAnalysis is true
analysis?: {
headings: Array<{
level: 1 | 2 | 3 | 4 | 5 | 6;
text: string;
}>;
links: Array<{
text: string;
url: string;
external: boolean;
}>;
images: Array<{
src: string;
alt?: string;
}>;
tables: number; // Just count
lists: {
ordered: number;
unordered: number;
};
};
}
4. puppeteer_get_page_info
Get comprehensive page metadata, SEO assessment, accessibility metrics, and performance indicators.
Options:
{
sections?: Array<"seo" | "accessibility" | "performance" | "metadata">; // Default: ["seo"]
}
Returns:
{
pageIdentification: {
currentUrl: string;
canonicalUrl?: string;
title: string;
language?: string;
charset?: string;
lastModified?: string;
};
metadataAnalysis: {
metaTags: {
basic: {
description?: string;
keywords?: string;
author?: string;
robots?: string;
viewport?: string;
};
openGraph: Record<string, string>;
twitterCard: Record<string, string>;
dublin: Record<string, string>;
other: Record<string, string>;
};
structuredData: {
hasJsonLd: boolean;
hasMicrodata: boolean;
hasRDFa: boolean;
schemas: string[];
};
};
seoAssessment: {
titleAnalysis: {
exists: boolean;
content: string;
lengthCharacters: number;
isOptimal: boolean; // 30-60 chars
issues: string[];
};
descriptionAnalysis: {
exists: boolean;
content?: string;
lengthCharacters: number;
isOptimal: boolean; // 120-160 chars
issues: string[];
};
headingStructure: {
hasH1: boolean;
h1Count: number;
h1Content: string[];
totalHeadings: number;
isHierarchical: boolean;
issues: string[];
};
canonicalStatus: {
hasCanonical: boolean;
canonicalUrl?: string;
isSelfReferencing: boolean;
issues: string[];
};
crawlability: {
isIndexable: boolean;
robotsDirectives: string[];
sitemapReference?: string;
};
};
accessibilityMetrics: {
documentStructure: {
hasProperDoctype: boolean;
hasLangAttribute: boolean;
declaredLanguage?: string;
hasTitle: boolean;
};
landmarks: {
hasMain: boolean;
hasNav: boolean;
hasHeader: boolean;
hasFooter: boolean;
hasAside: boolean;
landmarkRoles: string[];
skipLinks: boolean;
};
headingAnalysis: {
properHierarchy: boolean;
headingLevels: number[];
missingLevels: number[];
};
imageAccessibility: {
totalImages: number;
imagesWithAlt: number;
imagesWithEmptyAlt: number;
decorativeImages: number;
altTextCoveragePercent: number;
missingAltImages: number;
};
formAccessibility: {
totalForms: number;
formsWithLabels: number;
inputsWithoutLabels: number;
ariaUsage: boolean;
};
};
performanceIndicators: {
pageWeight: {
htmlSizeBytes: number;
totalResourcesBytes?: number;
imageOptimization: "good" | "needs-improvement" | "poor";
};
resourceCounts: {
totalRequests: number;
images: number;
scripts: number;
stylesheets: number;
fonts: number;
other: number;
};
criticalMetrics?: {
hasViewportMeta: boolean;
hasFaviconDefined: boolean;
usesHTTPS: boolean;
hasServiceWorker: boolean;
};
};
pageStructureOutline: string;
}
5. puppeteer_analyze_forms
Analyze all forms on the page with detailed field information and purpose detection.
Options:
// No options - analyzes all forms on the current page
Returns:
{
formCount: number;
forms: FormInfo[]; // Basic form information
summary: {
totalInputs: number;
inputTypes: Record<string, number>;
requiredFields: number;
hasFileUpload: boolean;
hasPasswordField: boolean;
formPurposes: string[]; // Detected purposes
};
}
6. puppeteer_batch_interact
Execute multiple page interactions in sequence with detailed results.
Options:
{
actions: Array<{
type: "click" | "type" | "select" | "hover" | "wait" | "waitForSelector" | "scroll" | "clear" | "press";
selector?: string; // Required for most actions
value?: string; // For select
text?: string; // For type
key?: string; // For press
duration?: number; // For wait (ms)
timeout?: number; // For waitForSelector (ms)
position?: { x: number; y: number }; // For scroll
}>;
stopOnError?: boolean; // Stop on first error (default: false)
}
Returns:
{
results: Array<{
action: PageAction;
success: boolean;
error?: string;
// Only if navigation occurred
pageChanged?: {
newUrl: string;
newTitle: string;
};
}>;
finalState: {
url: string;
title: string;
};
// Optional - only if there are errors
errors?: PageError[];
}
7. puppeteer_click (Simple)
Click an element on the page.
Options:
{
selector: string; // Required: CSS selector
}
8. puppeteer_fill (Simple)
Fill out an input field.
Options:
{
selector: string; // Required: CSS selector
value: string; // Required: Value to fill
}
Common Types
PageError
{
type: "javascript" | "console" | "network" | "security";
level: "error" | "warning" | "info";
message: string;
source?: string;
line?: number;
column?: number;
timestamp: string;
url?: string;
statusCode?: number;
}
ErrorSummary
{
totalErrors: number;
totalWarnings: number;
totalLogs: number;
hasJavaScriptErrors: boolean;
hasNetworkErrors: boolean;
hasConsoleLogs: boolean;
}
Installation
npm install mcp-master-puppeteer
# Or run directly
npx mcp-master-puppeteer
Configuration
Add to your MCP settings:
{
"mcpServers": {
"puppeteer": {
"command": "mcp-master-puppeteer",
"args": [],
"env": {
"PUPPETEER_ARGS": "{\"headless\": false}"
}
}
}
}
Usage Examples
Navigate with Smart Defaults
// Default: no content extraction for fastest response
await puppeteer_navigate_analyze({
url: "https://example.com"
});
// Returns:
// {
// url: "https://example.com",
// statusCode: 200,
// title: "Example Domain",
// contentFormat: "none",
// metadata: {
// description: "Example Domain for use in examples"
// }
// }
// With content extraction
await puppeteer_navigate_analyze({
url: "https://example.com",
contentFormat: "markdown"
});
// Returns with content field populated
// Truly minimal response
await puppeteer_navigate_analyze({
url: "https://example.com",
incl
Truncated for display — read the full file on GitHub.
Related Skills
Agent-Reach
107.3kGive your AI agent eyes to see the entire internet. Read & search Twitter, Reddit, YouTube, GitHub, Bilibili, XiaoHongShu — one CLI, zero API fees.
headroom
78.5kCompress tool outputs, logs, files, and RAG chunks before they reach the LLM. 20% fewer tokens for coding agents, 60-95% fewer tokens for JSON, same answers. Library, proxy, MCP server.
CowAgent
47.7kOpen-source personal AI assistant & Agent Harness. Plans tasks, runs tools and skills, self-evolves with memory and knowledge. Multi-agent, multi-model, multi-channel. Lightweight, extensible, one-line install.
Scrapling
91.2k🕷️ The BEST Web Scraping framework that handles everything from a single request to a full-scale crawl! Don't be shy, join here: https://discord.gg/EMgGbDceNQ and follow here for daily tips and tricks: https://x.com/Scrapling_dev
Languages
Trust signals
From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.
