steel-mcp-server
by: steel-dev
MCP Server for interacting with a Steel web browser
📌Overview
Purpose: The Steel MCP Server is designed to enable large language models (LLMs) like Claude to navigate the web using browser automation for effective task completion.
Overview: This Model Context Protocol (MCP) server harnesses the capabilities of Puppeteer-based tools and Steel, allowing LLMs to perform standard web actions, including clicking, scrolling, typing, and capturing screenshots. It provides a robust framework for automating various web interactions, streamlining tasks for users.
Key Features:
-
Browser Automation: Leverages Puppeteer for automating browser tasks, allowing for interaction with web pages seamlessly.
-
Steel Integration: Facilitates browser session management, ensuring efficient handling of user interactions and resources.
-
Visual Element Identification: Enhances usability through numbered labels that simplify the selection of interactive elements on pages.
-
Basic Web Interaction: Supports fundamental actions such as navigation, clicking, form filling, and scrolling, making it versatile for various web tasks.
-
Screenshot Capabilities: Includes functions to capture and save screenshots, which can be referenced later for verification or records.
-
Local and Remote Support: Configurable to run in either local (self-hosted) or cloud modes, providing flexibility based on user needs.
Steel MCP Server
A Model Context Protocol (MCP) server that enables LLMs like Claude to navigate the web through Puppeteer-based tools and Steel. Based on the Web Voyager framework, it provides tools for all standard web actions: clicking, scrolling, typing, taking screenshots, etc.
Ask Claude to assist with tasks like:
- Search for a recipe and save the ingredients list
- Track a package delivery status
- Find and compare prices for a specific product
- Fill out an online job application
🚀 Quick Start
Run Steel Voyager inside Claude Desktop. Adjust environment options to switch between Steel Cloud and local/self-hosted instances.
Prerequisites
- Latest versions of Git and Node.js installed
- Claude Desktop installed
- (Optional) Steel Docker image running locally for self-host
- (Optional) Steel Cloud API key
A) Quick Start (Steel Cloud)
-
Clone and build the project:
git clone https://github.com/steel-dev/steel-mcp-server.git cd steel-mcp-server npm install npm run build
-
Configure Claude Desktop (path:
~/Library/Application Support/Claude/claude_desktop_config.json
) by adding a server entry:{ "mcpServers": { "steel-puppeteer": { "command": "node", "args": ["path/to/steel-voyager/dist/index.js"], "env": { "STEEL_LOCAL": "false", "STEEL_API_KEY": "YOUR_STEEL_API_KEY_HERE", "GLOBAL_WAIT_SECONDS": "1" } } } }
- Replace
"YOUR_STEEL_API_KEY_HERE"
with your Steel API key. - Ensure
"STEEL_LOCAL"
is set to"false"
for cloud mode.
- Replace
-
Start Claude Desktop; it will launch this MCP server in Cloud mode.
-
Optionally manage active Steel Browser sessions in your Steel dashboard.
B) Quick Start (Local / Self-Hosted Steel)
-
Ensure your local or self-hosted Steel service is running (e.g., with Steel Docker image).
-
Clone and build the project (if not done):
git clone https://github.com/steel-dev/steel-mcp-server.git cd steel-mcp-server npm install npm run build
-
Configure Claude Desktop for local mode:
{ "mcpServers": { "steel-puppeteer": { "command": "node", "args": ["path/to/steel-voyager/dist/index.js"], "env": { "STEEL_LOCAL": "true", "STEEL_BASE_URL": "http://localhost:3000", "GLOBAL_WAIT_SECONDS": "1" } } } }
- Set
"STEEL_LOCAL": "true"
. - Adjust
"STEEL_BASE_URL"
to your hosted Steel URL if not localhost.
- Set
-
Start Claude Desktop, connecting it to your local Steel instance.
-
Optionally view sessions locally via your self-hosted dashboard or logs.
Once Claude Desktop starts, it will orchestrate the MCP server and enable web automation through Steel Voyager.
For more info or troubleshooting, see MCP setup docs: https://modelcontextprotocol.io/quickstart/user
Components
Tools
-
navigate
Navigate to any URL
Inputs:url
(string, required): URL to visit
-
search
Google search by navigating tohttps://www.google.com/search?q=encodedQuery
Inputs:query
(string, required): Search text
-
click
Click elements by numbered labels
Inputs:label
(number, required): Element label
-
type
Type text into input fields by label
Inputs:label
(number, required): Input field labeltext
(string, required): Text to typereplaceText
(boolean, optional): Replace existing text if true
-
scroll_down
Scroll down the page
Inputs:pixels
(integer, optional): Amount to scroll; defaults to one page
-
scroll_up
Scroll up the page
Inputs:pixels
(integer, optional): Amount to scroll; defaults to one page
-
go_back
Navigate back in browser history (no inputs needed) -
wait
Wait up to 10 seconds, useful for slow-loading content
Inputs:seconds
(number, required): Seconds to wait (0–10)
-
save_unmarked_screenshot
Capture current page without overlays and save as resource
Inputs:resourceName
(string, optional): Name for the screenshot
Resources
- Screenshots
Saved screenshots accessible via MCP resource URIs in the formscreenshot://RESOURCE_NAME
.
Console logs are collected for debugging but are not exposed as retrievable MCP resources.
Key Features
- Browser automation with Puppeteer
- Steel integration for session management
- Visual element identification with numbered labels
- Screenshot capturing
- Basic web interactions (navigation, clicking, typing)
- Lazy-loading support via scrolling
- Support for local and remote Steel instances
Understanding Bounding Boxes
Steel Puppeteer overlays visual indicators on interactive elements:
- Each element (e.g., buttons, inputs) has a unique numbered label
- Colored boxes outline element boundaries
- Labels help identify elements for click or type commands
Configuration
Steel Voyager runs in two modes controlled by environment variables:
Variable | Default | Description |
---|---|---|
STEEL_LOCAL | "false" | Runs Steel Voyager in local (true ) or cloud (false ) mode |
STEEL_API_KEY | (none) | Required for cloud mode; authenticates requests |
STEEL_BASE_URL | "https://api.steel.dev" | Base URL for Steel API; overridden when self-hosting locally or on custom domains |
GLOBAL_WAIT_SECONDS | (none) | Optional wait time after tool actions for slow-loading pages |
Local Mode
STEEL_LOCAL="true"
- Optionally set
STEEL_BASE_URL
to your hosted Steel URL; defaults tohttp://localhost:3000
- No API key required
- Puppeteer connects via
ws://0.0.0.0:3000
Example:
export STEEL_LOCAL="true"
export STEEL_BASE_URL="http://localhost:3000" # if overriding default
Cloud Mode
STEEL_LOCAL="false"
- Set
STEEL_API_KEY
for authentication STEEL_BASE_URL
defaults tohttps://api.steel.dev
unless overridden- Puppeteer connects via
wss://connect.steel.dev?sessionId=…&apiKey=…
Example:
export STEEL_LOCAL="false"
export STEEL_API_KEY="YOUR_STEEL_API_KEY_HERE"
Claude Desktop Configuration Example
Modify claude_desktop_config.json
:
{
"mcpServers": {
"steel-puppeteer": {
"command": "node",
"args": ["path/to/steel-puppeteer/dist/index.js"],
"env": {
"STEEL_LOCAL": "false",
"STEEL_API_KEY": "your_api_key_here"
}
}
}
}
- For local/self-hosted, use
"STEEL_LOCAL": "true"
and optionally set"STEEL_BASE_URL"
- For cloud, set
"STEEL_LOCAL": "false"
and provide your API key
This config enables Claude Desktop to start Steel Voyager in the intended mode.
Installation & Running
Installing via Smithery
Install Steel MCP Server for Claude Desktop automatically:
npx -y @smithery/cli install @steel-dev/steel-mcp-server --client claude
Local Development
-
Clone the repository
-
Install dependencies:
npm install
-
Build the project:
npm run build
-
Start the server:
npm start
Troubleshooting
- Verify Steel API key for cloud mode; ensure local Steel instance is running and reachable.
- Add delay using
GLOBAL_WAIT_SECONDS
if pages render improperly. - Confirm pages fully load; check viewport size and system memory.
- Manual session cleanup may be necessary.
- Clear, well-crafted prompts improve Claude's performance.
- Use session viewer to diagnose model interruptions.
- Expect some latency after 15-20 browser actions due to context window filling.
Contributing
This project is experimental and under active development. Contributions are welcome!
- Fork the repository
- Create a feature branch
- Submit a pull request with clear descriptions, motivation, and documentation updates
Disclaimer
⚠️ Experimental project based on Web Voyager codebase. Use in production at your own risk.