https://github.com/user-attachments/assets/25848033-40ea-4fa4-96f9-83b6153a0212
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 the standard web actions click clicking/scrolling/typing/etc and taking screenshots.
Ask Claude to help you with tasks like:
Below is a streamlined guide to run Steel Voyager inside Claude Desktop. You only need to adjust the environment options to switch between Steel Cloud and a local/self-hosted instance.
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 (~/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"
}
}
}
}
Start Claude Desktop. It will automatically launch this MCP server in Cloud mode.
(Optional) You can view or manage active Steel Browser sessions in your dashboard.
Ensure your local or self-hosted Steel service is running (e.g., using the open-source Steel Docker image).
Clone and build the project (same as above if not done yet):
git clone https://github.com/steel-dev/steel-mcp-server.git
cd steel-mcp-server
npm install
npm run build
Configure Claude Desktop (~/Library/Application Support/Claude/claude_desktop_config.json
) 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"
}
}
}
}
Start Claude Desktop, which will connect to your locally running Steel and launch Steel Voyager in local mode.
(Optional) To view sessions locally, you can visit your self-hosted dashboard (localhost:5173) or logs specific to your Steel runtime environment.
That’s it! Once Claude Desktop starts, it will orchestrate the MCP server behind the scenes and let you interact with the web automation capabilities through Steel Voyager.
For more info on getting set up or if you're having issues, check out the MCP set-up docs: https://modelcontextprotocol.io/quickstart/user
navigate
url
(string, required): URL to navigate to (e.g. "https://example.com").search
query
(string, required): Text to search for on Google.click
label
(number, required): The label number of the element to click.type
label
(number, required): The label number of the input field.text
(string, required): Text to type into the field.replaceText
(boolean, optional): If true, replaces any existing text in the field.scroll_down
pixels
(integer, optional): Number of pixels to scroll down. If not specified, scrolls by one full page.scroll_up
pixels
(integer, optional): Number of pixels to scroll up. If not specified, scrolls by one full page.go_back
wait
seconds
(number, required): Number of seconds to wait (0 to 10).save_unmarked_screenshot
resourceName
(string, optional): Name to store the screenshot under (e.g. "before_login"). If omitted, a generic name is generated automatically.Screenshots:
Each saved screenshot is accessible via an MCP resource URI in the form of:
• screenshot://RESOURCE_NAME
The server stores these screenshots whenever you specify the "save_unmarked_screenshot" tool or when an action concludes (for most tools) with an annotated screenshot. These images can be retrieved through a standard MCP resource retrieval request.
(Note: While console logs are still collected for analysis and debugging, they are not exposed as retrievable resources in this implementation. They appear in the server’s logs but are not served via MCP resource URIs.)
When interacting with pages, Steel Puppeteer adds visual overlays to help identify interactive elements:
Steel Voyager can run in two modes: "Local" or "Cloud". This behavior is controlled by environment variables. Below is a concise overview:
Environment Variable | Default | Description |
---|---|---|
STEEL_LOCAL | "false" | Determines if Steel Voyager runs in local (true) or cloud (false) mode. |
STEEL_API_KEY | (none) | Required only when STEEL_LOCAL = "false". Used to authenticate requests with the Steel endpoint. |
STEEL_BASE_URL | "https://api.steel.dev" | The base URL for the Steel API. Override this if self-hosting the Steel server (either locally or in your own cloud environment). If STEEL_LOCAL = "true" and STEEL_BASE_URL is unset, it defaults to "http://localhost:3000". |
GLOBAL_WAIT_SECONDS | (none) | Optional. Number of seconds to wait after each tool action (for instance, to allow slow-loading pages). |
Example:
export STEEL_LOCAL="true"
export STEEL_BASE_URL="http://localhost:3000" # only if overriding
Example:
export STEEL_LOCAL="false"
export STEEL_API_KEY="YOUR_STEEL_API_KEY_HERE"
To use Steel Voyager with Claude Desktop, add something like this to your config file (often located at ~/Library/Application Support/Claude/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"
}
}
}
}
Adjust the environment variables to match your desired mode:
• If running locally/self hosted, keep "STEEL_LOCAL": "true"
and optionally "STEEL_BASE_URL": "http://localhost:3000"
.
• If running in cloud mode, remove "STEEL_LOCAL": "true"
, add "STEEL_LOCAL": "false"
, and supply "STEEL_API_KEY": "<YourKey>"
This will allow Claude Desktop to start Steel Voyager in the correct mode.
To install Steel MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @steel-dev/steel-mcp-server --client claude
npm install
npm run build
npm start
We asked Claude to impress us with it's new abilities and it decided to research the latest developments with sora then create an interactive visualization to demonstrate the data behind the model and how it works 🤯
https://github.com/user-attachments/assets/8d4293ea-03fc-459f-ba6b-291f5b017ad7
*Sorry for quality, github forces us to keep the videos under 10mb :/
Common issues and solutions:
Verify your Steel API key when using cloud service and ensure your local Steel instance is running. Check that you have proper network connectivity to the service.
If you're having issues with how pages are being rendered or marked up and sent to claude, try to add a delay in your config via the GLOBAL_WAIT_SECONDS
env variable.
Ensure the page has fully loaded and check your viewport size settings. Make sure your system has sufficient available memory for capturing screenshots.
Session clean up isn't the best right now so you may need to manually release sessions as they're spun up to execute tasks.
Prompting claude the right way can go a long way in improving performance and avoiding silly mistakes it may produce.
Leverage the session viewer to analyse where your model may be getting stopped out.
After ~15-20 browser actions claude starts to slow down as it's context window gets filled but with images. It shouldn't be horrible but we've noticed some latency here, especially with the Claude Desktop client lagging behind.
This project is experimental and under active development. Contributions are welcome!
Please include:
⚠️ This project is experimental and based on the Web Voyager codebase. Use in production environments at your own risk.
Seamless access to top MCP servers powering the future of AI integration.