notte

by nottelabs

Not rated
GitHub

About

Browser automation in your terminal.

Details

Author
nottelabs
Categories
Web Scraping, Automation, Other

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.

No reviews yet — be the first

Sign in to leave a review

Use Google, GitHub, or an email account so ratings stay tied to real people.

Email sign in

No reviews posted yet.