notte
About
Browser automation in your terminal.
Details
- Author
- nottelabs
- Categories
- Web Scraping, Automation, Other
Jump to
Setup
Install notte in your MCP client (Claude Desktop, Cursor, Windsurf, and others).
Repository: https://github.com/nottelabs/notte-cli
Follow the installation instructions in the repository README, then restart your MCP client.
Control browser sessions and web scraping through intuitiveresource-based commands
→ Read more at:Landing•Console•Docs•X•LinkedIn
The Notte CLI brings the full power ofnotte.ccto your terminal — letting you drive browser sessions and web scraping pipelines from the command line. Pair it with shell scripts, CI/CD pipelines, or AI coding assistants for repeatable, scriptable web automation.
- Browser sessions- headless or headed Chromium/Chrome with full control
- Files- upload and download files to notte.cc
- Output formats- human-readable text or JSON for scripting
- Personas- create and manage digital identities with email, phone, and SMS
- Secure credentials- system keyring for API keys, vaults for website passwords
- Web scraping- structured data extraction with custom schemas
- Functions- schedule and execute repeatable automation tasks
brew tap nottelabs/notte-cli https://github.com/nottelabs/notte-cli.git brew install notte
go install github.com/nottelabs/notte-cli/cmd/notte@latest
git clone https://github.com/nottelabs/notte-cli.git cd notte-cli make build
Specify the API key using one of three methods (checked in priority order):
# 1. Via environment variable (recommended for CI/CD) export NOTTE_API_KEY="your-api-key" # 2. Via system keyring (recommended for local development) notte auth login # 3. Via config file (~/.notte/cli/config.json) # create ~/.notte/cli/config.json and add your API key notte auth status
Sessions are headless by default. Add--headedfor a visible browser, and watch it through theViewerUrlin the output.
notte auth login # Store API key in system keychain notte auth logout # Remove API key from keychain notte auth status # Show authentication status
notte search <query> # Search the web for a query notte search <query> --depth fast|standard|deep # Tune search depth (default: standard) notte search <query> --output-type sourcedAnswer # Get an LLM answer with sources
The query may be quoted (notte search "what is anthropic") or passed as separate words (notte search what is anthropic). Use--output jsonto get the raw API response for scripting.
Note:When you start a session, it automatically becomes the "current" session. All subsequent commands use this session by default. Use--session-id <session-id>only when you need to manage multiple sessions simultaneously or reference a specific session.
notte sessions start \ --browser-type chromium|chrome # Browser type (default: chromium) --headed # Show a browser window (headless is the default) --idle-timeout-minutes <minutes> # Idle timeout (default: 3) --max-duration-minutes <minutes> # Maximum session lifetime (default: 15) --user-agent <string> # Custom user agent --viewport-width <pixels> # Viewport width --viewport-height <pixels> # Viewport height --proxy # Use default proxy rotation --proxy-country <code> # Proxy with specific country (e.g. us, gb, fr) --no-solve-captchas # Turn OFF captcha solving (on by default) --no-file-storage # Detach FileStorage (attached by default). # Disables page download and files --from session --cdp-url <url> # CDP URL of remote session provider --profile-id <id> # Profile ID to use for session --profile-persist # Save browser state to profile on close --screenshot-type <type> # Screenshot type (raw, full, last_action) --chrome-args <args> # Chrome instance arguments (repeatable)
Interact with pages using simplified commands (requires an active session):
notte page observe # Get page state and available actions notte page scrape --instructions "..." # Scrape content from the page notte page click "@B3" # Click an element by ID notte page fill "@I1" "text" # Fill an input field notte page goto "https://example.com" # Navigate to a URL notte page back # Go back in history notte page forward # Go forward in history notte page scroll-down [amount] # Scroll down the page notte page scroll-up [amount] # Scroll up notte page press "Enter" # Press a key notte page screenshot # Take a screenshot notte page select <id> "option" # Select dropdown option notte page check <id> # Check/uncheck checkbox notte page upload <id> --file <name> # Fill a file input. <name> is a file in your # uploads store, not a local path - send it with # notte files upload first notte page download <id> # Download by clicking. The file lands in the # session store; retrieve it with # notte files download <name> --from session notte page new-tab <url> # Open URL in new tab notte page switch-tab <index> # Switch to tab by index notte page close-tab # Close current tab notte page reload # Reload page notte page wait <seconds> # Wait for duration notte page captcha-solve # Solve captcha
notte functions list [--page N] [--page-size N] [--include-deleted] # List functions notte functions create --file workflow.py # Create a new function notte functions show # View current function details notte functions show --function-id <id> # View specific function details (different from current function) notte functions update --file workflow.py # Update current function code notte functions delete # Delete current function notte functions fork # Fork current function to new version notte functions run # Execute current function notte functions runs [--page N] [--page-size N] [--running] # List runs for current function (--running = in-flight only) notte functions run-stop --run-id <id> # Stop a running function execution notte functions run-metadata --run-id <id> # Get run logs and results notte functions schedule --cron "0 9 *" # Schedule current function notte functions unschedule # Remove schedule from current function
Note:When you create a function, it automatically becomes the "current" function. All subsequent commands use this function by default. Use--function-id <function-id>only when you need to manage multiple functions simultaneously or reference a specific function.
notte vaults list [--page N] [--page-size N] [--include-deleted] # List all vaults notte vaults create # Create a new vault notte vaults update --vault-id <id> # Update vault metadata notte vaults delete --vault-id <id> # Delete a vault notte vaults credentials list --vault-id <id> # List all credentials notte vaults credentials add --vault-id <id> # Add credentials notte vaults credentials get --vault-id <id> # Get credentials for URL notte vaults credentials delete --vault-id <id> # Delete credentials
notte personas list [--page N] [--page-size N] [--include-deleted] # List all personas notte personas create # Create a new persona notte personas show --persona-id <id> # View persona details notte personas delete --persona-id <id> # Delete a persona notte personas emails --persona-id <id> # List emails notte personas sms --persona-id <id> # List SMS messages
notte profiles list [--page N] [--page-size N] [--name "..."] [--include-deleted] # List all profiles notte profiles create # Create a new profile notte profiles show --profile-id <id> # View profile details notte profiles delete --profile-id <id> # Delete a profile
notte files upload <path> # Upload a persistent input file notte files list --from uploads # List persistent input files notte files download <filename> --from uploads # Download a persistent input file notte files list --from session [--session-id <id>] # List files produced by a session notte files download <filename> [--session-id <id>] # Download a file produced by a session
notte usage # View API usage statistics notte health # Check API health status notte version # Show CLI version
Human-readable tables with colors and formatting:
$ notte sessions list ID STATUS BROWSER CREATED ses_abc123def456 ACTIVE chromium 2024-01-15 10:30:00 ses_xyz789uvw012 STOPPED chrome 2024-01-15 09:15:00
$ notte sessions list --output json { "sessions": [ { "id": "ses_abc123def456", "status": "ACTIVE", "browser": "chromium", "created_at": "2024-01-15T10:30:00Z" } ] }
Data goes to stdout, errors and progress to stderr for clean piping.
# Start session (automatically becomes the current session) notte sessions start # Navigate to page notte page goto "https://news.ycombinator.com" # Extract structured data notte page scrape --instructions "Extract top 10 stories with title and URL" # Cleanup notte sessions stop
# List functions to find ID notte functions list # Run workflow notte functions run --function-id func_abc123
# Create a vault for production credentials VAULT_ID=$(notte vaults create --name "Production Sites" -o json | jq -r '.id') # Add website credentials notte vaults credentials add --vault-id $VAULT_ID \ --username "admin@example.com" \ --password "$SECURE_PASSWORD" \ --url "https://app.example.com" # List stored credentials notte vaults credentials list --vault-id $VAULT_ID
# Start browser with specific configuration notte sessions start \ --browser-type chrome \ --viewport-width 1920 \ --viewport-height 1080 # Navigate and interact notte page goto "https://example.com" notte page click "#login-button" notte page fill "#username" "user@example.com" # Get current page state with available actions notte page observe # Stop when done notte sessions stop
# Get only active sessions (using built-in filter) notte sessions list --all # Paginate through results notte sessions list --page 2 --page-size 5 # Extract session IDs with jq notte sessions list --output json | jq -r '.sessions[].id'
The simplest approach - just tell your agent to use it:
Use notte to test the login flow. Runnotte --helpto see available commands.
The--helpoutput is comprehensive and most agents can figure it out from there.
Add the skill to your AI coding assistant for richer context:
This works with Claude Code, Cursor, Windsurf, and other MCP-compatible assistants.
For more consistent results, add to your project or global instructions file:
## Browser Automation Use notte for web automation. Run notte --help for all commands. Core workflow: 1. notte sessions start - Start a browser session 2. notte page goto <url> - Navigate to a URL 3. notte page observe - Get interactive elements with IDs (@B1, @B2) 4. notte page click "@B1" / notte page fill "@I1" "text" - Interact using element IDs 5. notte page scrape --instructions "..." - Extract structured data 6. notte sessions stop - Clean up when done
- Viewing sessions: When you start a session, the output includes aViewerUrl- open it to watch the browser live, headless or not
- Session lifetime: sessions close after3 minutes idleor15 minutes totalby default. Raise--idle-timeout-minutes/--max-duration-minutesfor anything slow, or the next command fails withSession closed
- Element selectors: If element IDs fromobserve(like@B1) don't work, use Playwright selectors:#id,.class,button:has-text('Submit')
- Multiple matches: Use>> nth=0suffix to select the first match:button:has-text('OK') >> nth=0
- Closing modals:notte page press "Escape"reliably dismisses most dialogs
For comprehensive documentation including templates and reference guides, see thenotte-skills/plugins/notte-cli/skills/notte-browserfolder (vendored as a submodule fromnottelabs/notte-skills).
API keys are stored securely in your system's keychain:
- macOS: Keychain Access
- Linux: Secret Service (GNOME Keyring, KWallet)
- Windows: Credential Manager
- Never pass API keys on the command line
- Use vaults for website passwords and payment cards
- Rotate API keys regularly from notte.cc dashboard
- Usenotte auth logoutto remove stored keys
Generate shell completions for your preferred shell:
# macOS (Homebrew): notte completion bash > $(brew --prefix)/etc/bash_completion.d/notte # Linux: notte completion bash > /etc/bash_completion.d/notte # Or source directly: source <(notte completion bash)
notte completion zsh > "${fpath[1]}/_notte"
notte completion fish > ~/.config/fish/completions/notte.fish
notte completion powershell | Out-String | Invoke-Expression
This installslefthookpre-commit and pre-push hooks for linting and testing.
This project is licensed under the MIT License.
- Landing
- Console
- Documentation
- Main repository (nottelabs/notte)
MCP server for browser automation via Vercel agent-browser CLI
Convert any URL to LLM-ready Markdown via real Chrome browsers. 3 tools: scrape, crawl, search. Free via MCP, pay-per-use via x402.
An MCP server that allows AI agents to control a web browser using the browser-use library.
Exposes Chrome browser functionality to AI assistants for automation, content analysis, and semantic search via a Chrome extension.
Control a Chrome browser through the Chrome DevTools Protocol (CDP) from MCP clients for browsing, inspection, and automation workflows.
Stealthy, LLM-drivable browser engine — a Python library + 85-tool MCP server on stealth Chromium with full Chrome DevTools Protocol.
Multi-session browser MCP for AI agents — stealth mode, session pooling, humanization, 10x fewer tokens than Playwright
A Go-based MCP server for interacting with the Lightpanda Browser using the Chrome DevTools Protocol (CDP).
A browser automation agent using the Model Context Protocol (MCP) to enable browser interactions.
A browser automation service for capturing console output, useful for tasks like public sentiment analysis.
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.


