chromium-mcp
Click on "Install 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., "@chromium-mcpfetch https://example.com as markdown"
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.
Chromium MCP
MCP server for web fetching and automation using Chromium headless browser.
Reason behind this repository
I didn't wanna waste my "limited" tokens on Z.ai coding plan, therefore I made my own MCP to interact with the web, feel free to propose enhancements or new features.
Related MCP server: mcp-page-capture
Features
fetch_page: Fetch web pages and convert to markdown/HTML
screenshot: Take screenshots of web pages or specific elements
interact: Automate browser interactions (click, fill, scroll, wait)
extract_data: Extract structured data using CSS selectors
get_link: Get link information and follow redirects
Installation
From Git Repository
# Clone the repository
git clone https://github.com/gzigurella/chromium-mcp.git
cd chromium-mcp
# Create virtual environment
python3 -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install the package
pip install -e .
# Install Chromium browser (required)
playwright install chromiumWith uv (recommended)
# Clone and enter directory
git clone https://github.com/gzigurella/chromium-mcp.git
cd chromium-mcp
# Install with uv
uv pip install -e .
# Install Chromium
playwright install chromiumIntegration
OpenCode
Add to your ~/.config/opencode/opencode.json:
{
"mcpServers": {
"chromium-fetch": {
"type": "local",
"command": [
"/path/to/chromium-mcp/venv/bin/python",
"-m",
"chromium_mcp"
],
"enabled": true
}
}
}Claude Desktop
Add to your Claude Desktop config:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"chromium-fetch": {
"command": "/path/to/chromium-mcp/venv/bin/python",
"args": ["-m", "chromium_mcp"]
}
}
}Generic MCP Client
For any MCP-compatible client:
# Start the server directly
/path/to/venv/bin/python -m chromium_mcpThe server communicates via stdio using the MCP protocol.
Tools
fetch_page
Fetch a web page and return content as markdown or HTML.
Parameter | Type | Required | Default | Description |
url | string | Yes | - | URL to fetch |
format | string | No | "markdown" | Output format: "markdown" or "html" |
timeout | integer | No | 30 | Timeout in seconds |
wait_for | string | No | null | CSS selector to wait for |
{
"url": "https://example.com",
"format": "markdown",
"timeout": 30,
"wait_for": ".main-content"
}screenshot
Take a screenshot of a web page.
Parameter | Type | Required | Default | Description |
url | string | Yes | - | URL to screenshot |
format | string | No | "png" | Image format: "png" or "jpeg" |
quality | integer | No | 80 | JPEG quality (1-100) |
full_page | boolean | No | false | Capture full page |
selector | string | No | null | CSS selector for element |
timeout | integer | No | 30 | Timeout in seconds |
{
"url": "https://example.com",
"format": "png",
"full_page": true
}interact
Interact with web page elements sequentially.
Parameter | Type | Required | Default | Description |
url | string | Yes | - | URL to interact with |
actions | array | Yes | - | List of actions |
timeout | integer | No | 30 | Timeout in seconds |
Action Types:
click: Click element by selectorfill: Fill input fieldselect: Select dropdown optionscroll: Scroll pagewait: Wait for element
{
"url": "https://example.com/search",
"actions": [
{"type": "fill", "selector": "input[name='q']", "value": "test search"},
{"type": "click", "selector": "button[type='submit']"},
{"type": "wait", "selector": ".results", "milliseconds": 2000}
]
}extract_data
Extract structured data using CSS selectors.
Parameter | Type | Required | Default | Description |
url | string | Yes | - | URL to extract from |
selectors | array | Yes | - | List of extraction rules |
timeout | integer | No | 30 | Timeout in seconds |
{
"url": "https://example.com/products",
"selectors": [
{"name": "titles", "selector": "h2.product-title", "multiple": true},
{"name": "prices", "selector": ".price", "multiple": true},
{"name": "links", "selector": "a.product-link", "attribute": "href", "multiple": true}
]
}get_link
Get link href and text, optionally following navigation.
Parameter | Type | Required | Default | Description |
url | string | Yes | - | URL of page containing link |
selector | string | Yes | - | CSS selector for anchor |
click | boolean | No | false | Follow the link |
timeout | integer | No | 30 | Timeout in seconds |
{
"url": "https://example.com",
"selector": "a.download",
"click": true
}Configuration
Environment Variables
Variable | Default | Description |
CHROMIUM_PATH | auto | Path to Chromium executable |
HEADLESS | true | Run browser in headless mode |
TIMEOUT | 30 | Default operation timeout |
DEBUG | false | Enable debug logging |
# Example
export TIMEOUT=60
export HEADLESS=false
python -m chromium_mcpDevelopment
Running Tests
source venv/bin/activate
pytest
# With coverage
pytest --cov=src --cov-report=htmlProject Structure
chromium-mcp/
├── src/chromium_mcp/
│ ├── __init__.py
│ ├── __main__.py
│ ├── server.py
│ └── tools/
│ ├── __init__.py
│ ├── fetch_page.py
│ ├── screenshot.py
│ ├── interact.py
│ ├── extract_data.py
│ └── get_link.py
├── tests/
├── pyproject.toml
└── README.mdTroubleshooting
Browser Not Found
playwright install chromiumPermission Issues (Linux)
sudo sysctl -w kernel.shmmax=268435456Timeout Errors
export TIMEOUT=60Security
file://URLs are blockedCredentials are never logged
Browser processes are always cleaned up
All operations have configurable timeouts
License
MIT
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- 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/gzigurella/chromium-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server