termux-puppeteer-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@termux-puppeteer-mcp Take a screenshot of example.com"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Termux Puppeteer MCP Server
A Puppeteer MCP (Model Context Protocol) server that works on Android Termux by running Chromium inside an Alpine Linux container via proot-distro.
Why This Exists
Standard Puppeteer MCP servers don't work on Android/Termux because:
No ARM build of Chrome exists
Puppeteer requires a Chromium-based browser
This solution uses Alpine Linux in a containerized environment to run Chromium, while the MCP server runs in Termux and bridges commands to Alpine.
Related MCP server: MCP-pptr
Quick Setup
Automated installation (recommended):
bash setup.shThe script will automatically:
Install proot-distro
Install Alpine Linux
Install Chromium and Node.js in Alpine
Install Puppeteer in Alpine
Set up the MCP server in Termux
Create configuration files
No device root required!
Takes about 5-10 minutes depending on your connection.
Manual Setup
If already set up or prefer manual installation:
✅ Alpine Linux installed via
proot-distro✅ Chromium installed in Alpine
✅ Node.js and npm in both Termux and Alpine
✅ Puppeteer installed in Alpine
Available Tools
The server provides these Puppeteer tools via MCP:
puppeteer_navigate - Navigate to a URL and get page content/title
puppeteer_screenshot - Take screenshots (returns base64)
puppeteer_pdf - Generate PDFs from URLs (returns base64)
puppeteer_evaluate - Execute JavaScript in page context
puppeteer_click - Click elements on pages
Usage with Claude Code
Add this to your Claude Code MCP settings:
{
"mcpServers": {
"puppeteer": {
"command": "node",
"args": ["/data/data/com.termux/files/home/termux-puppeteer-mcp/index.js"]
}
}
}Or use the absolute path to node:
{
"mcpServers": {
"puppeteer": {
"command": "/data/data/com.termux/files/usr/bin/node",
"args": ["/data/data/com.termux/files/home/termux-puppeteer-mcp/index.js"]
}
}
}Testing
You can test the server using the MCP inspector or by running:
node index.jsThe server communicates via stdio using the MCP protocol.
How It Works
MCP server runs in Termux (native Android environment)
When a tool is called, it generates Puppeteer JavaScript code
Code is executed inside Alpine Linux using
proot-distro login alpineChromium runs in Alpine with appropriate flags (
--no-sandbox, etc.)Results are returned back through the MCP protocol
Example Commands
From Claude Code:
"Take a screenshot of example.com"
"Get the title of google.com"
"Generate a PDF of github.com"
"Click the login button on example.com"
Notes
No device root required (proot works without root)
Chromium runs in headless mode
Screenshots are compressed JPEG (quality 60%, 800x600) to fit MCP token limits
PDFs are returned as base64
The proot warning about sanitizing bindings is normal and can be ignored
Files
setup.sh- Automated installation scriptindex.js- MCP server implementationpackage.json- Node.js dependencies.mcp.json- MCP server configuration for Claude CodeREADME.md- This fileSETUP.md- Detailed setup guide
Sharing
To share this setup online:
The
setup.shscript contains all installation stepsUsers can run it on any Termux installation
Works on ARM64 Android devices without root
License
MIT - Feel free to use and modify
Available Tools
9 toolsclose_sessionA
Close a browser session and free up resources. Sessions auto-close after timeout, but explicit closing is recommended.
Inputs: sessionId (required).
create_sessionA
Create a new browser session for multi-step workflows. Returns a sessionId that persists state between calls. Sessions auto-expire after 5 minutes of inactivity.
Inputs: metadata.
get_page_contentB
Get the HTML content of the current page. Requires sessionId.
Inputs: sessionId (required).
list_sessionsA
List all active browser sessions with their status
Inputs: no named parameters.
puppeteer_clickC
Click an element on the current page. Requires sessionId to maintain state after navigation.
Inputs: selector (required), sessionId (required), waitForNavigation.
puppeteer_evaluateB
Execute JavaScript in the page context and return the result. Requires sessionId.
Inputs: script (required), sessionId (required).
puppeteer_screenshotB
Take a screenshot of the current page state and return as base64 JPEG. If sessionId provided, screenshots the current state. Otherwise navigates to URL first.
Inputs: url, sessionId, width, height, +2 more.
puppeteer_screenshot_debugA
Take a screenshot and save it to a file, then open with termux-open for debugging. Works with sessionId to capture current state.
Inputs: url, sessionId, width, height, +2 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 9 tools
Most tools are distinct, but puppeteer_screenshot and puppeteer_screenshot_debug overlap in purpose (both take screenshots), and get_page_content and puppeteer_navigate both return page content. This could cause confusion for an agent.
Naming is inconsistent: some tools use verb_noun snake_case (close_session, create_session), while others use a 'puppeteer_' prefix with lowercase verb (puppeteer_click, puppeteer_navigate). This mixed pattern reduces predictability.
9 tools is well-scoped for a browser automation server, covering essential session management and page interaction actions without excess.
Basic operations are covered (navigate, click, evaluate, screenshot, get content), but common actions like form filling and element waiting are missing, leaving notable gaps for complex workflows.
Maintenance
Related MCP Connectors
Programmatic headless browser sessions: create, interact, browse, and extract - rendered in a real
Official Browserless MCP server: browser automation, scraping, screenshots and PDFs for AI agents.
Automate cloud Chrome—navigate, click, type, screenshot, run code, record screen video
A cloud Linux desktop for your AI: browse, click, type, read the screen and run commands.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceReal browser automation for Termux/Android. Runs Firefox or Chromium on Xvfb on your phone with a persistent daemon for sub-second commands.22MIT
- AlicenseNot gradedqualityDmaintenanceProvides browser automation and DevTools capabilities via Puppeteer, with Docker support for consistent environments.2,684 npmMIT
- AlicenseNot gradedqualityBmaintenanceA lightweight browser automation MCP server using raw Chrome DevTools Protocol, enabling web navigation, screenshots, and DOM interaction without heavy dependencies, and working on Termux/Android.1,374 npmMIT
- AlicenseNot gradedqualityCmaintenanceEnables AI assistants to automate web interactions such as navigating pages, clicking elements, filling forms, querying the DOM, evaluating JavaScript, and inspecting network/console logs — all from a Termux terminal without Chromium, root, or proot.1MIT