termux-puppeteer-mcp
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.
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
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kevintpeng/termux-puppeteer-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server