MCP-Browse logo

MCP-Browse

by tylergannon

MCP-Browse provides a streamlined interface for controlling browser interactions through a remote protocol. It's focused on e-commerce site interactions like navigation, clicking elements, and entering form data.

View on GitHub

Last updated: N/A

MCP-Browse

A browser control protocol for automation and e-commerce site interaction.

Overview

MCP-Browse provides a clean, streamlined interface for controlling browser interactions through a remote protocol. It's particularly focused on common e-commerce site interactions like:

  • Navigation to pages
  • Clicking on elements
  • Entering form data
  • Downloading images and files
  • Executing JavaScript

All operations use protocol buffers for efficient, typed communication.

Protocol Design

The protocol is designed around "gestures" that represent user interactions with a browser:

  1. Navigate - Visit a URL with optional redirect handling
  2. Click - Click on elements using ID or CSS selectors
  3. Input - Enter values in form fields (text, checkboxes, select dropdowns)
  4. Download - Retrieve images or files
  5. ExecuteScript - Run JavaScript on the page and get results

Browser gesture operations (Navigate, Click, Input) return streamed responses that include:

  • Zero or more redirect events
  • Page content or error information
  • A completion event

Utility operations (Download, ExecuteScript) return a single response with the requested data.

Example Usage

// Create a client
// client := NewMCPBrowserServiceClient(...)

// Navigate to a product page
navigateReq := apiv1.NavigateRequest_builder{
    Url: stringPtr("https://example-shop.com/products"),
    AllowRedirects: boolPtr(true),
}.Build()

// Process the response stream
// stream, err := client.Navigate(context.Background(), navigateReq)
// handleResponseStream(stream)

// Click on a product
clickReq := apiv1.ClickRequest_builder{
    CssSelector: stringPtr(".product-item"),
}.Build()

// Process the response stream
// stream, err = client.Click(context.Background(), clickReq)
// handleResponseStream(stream)

// Add to cart
clickReq = apiv1.ClickRequest_builder{
    CssSelector: stringPtr(".add-to-cart-button"),
}.Build()

// Process the response stream
// stream, err = client.Click(context.Background(), clickReq)
// handleResponseStream(stream)

Building and Running

Prerequisites

  • Go 1.18+
  • Protocol Buffers compiler

Setup

  1. Clone the repository
  2. Install dependencies:
    go mod download
    
  3. Generate Protocol Buffer code:
    buf generate
    

Run Tests

go test ./...

License

MIT License