⚡ Chrome extension + MCP server

Give Claude hands in your own browser.

Not a headless clone in a data centre — your Chrome, already signed into your accounts, driven by clicks, drags and keystrokes shaped like a person's. Ask in plain English; watch it happen in the window in front of you. Anything that publishes stops and waits for you.

you → claude code
grab my Stripe test key into .env → opened dashboard.stripe.com (already signed in) → read Developers → API keys → wrote STRIPE_SECRET_KEY to .env ✓
01 / Just ask

Things people actually say to it

No scripts, no selectors, no recording a macro. You type the sentence; Claude finds the buttons. These are real prompts — copy one.

Reply to the new comments on my last LinkedIn post — draft each one and I'll hit Post.
Opens the post, reads the comment thread, and types a reply into the composer for each one. It stops at Post every time — it highlights the button and waits for your click, so nothing goes out in your name that you didn't read.
find_textclick_elementtype_textwait_for_click
Grab my Stripe test keys and put them in .env
Navigates to the dashboard you're already logged into, opens Developers → API keys, reveals the secret, and writes it straight to .env. No copy-paste, no key sitting in your clipboard.
open_pagefind_textwrite_to_env
Walk through our signup flow and screenshot every step into ./docs
Drives the flow like a new user would — fills the form, submits, waits for each screen — and saves a numbered screenshot at every step. Onboarding docs that rebuild themselves whenever the product changes.
fill_formwait_fortake_screenshot
Drag the seat slider to 50 and tell me what it costs
A slider has no button to click. ChromeBoost presses, moves through real intermediate positions, and releases — the same events a hand generates — then reads the price back off the page.
dragget_page_text
Fill this vendor form from our company profile doc
Forty fields of legal name, VAT number and addresses, typed with real keystrokes so React, Monaco, TipTap and contenteditable editors all register the input. Then it shows you the form before submitting.
get_form_fieldsfill_formhighlight_region
Download last month's invoices from the billing portal
Signs in as you, filters the date range, and pulls every PDF down with your real session cookies — the files a logged-out scraper simply can't reach.
click_elementdownload_fileread_attachment
02 / How it moves

It doesn't teleport. It reaches.

A normal automation script jumps a cursor to coordinates and fires a click event. Real people don't do that, and modern sites can tell. ChromeBoost sends the whole gesture through Chrome's own input pipeline — a curved approach, a little tremor before it lands, pressure on the way down. Drag is where the difference is easiest to see:

drag(from_selector: ".card", to_selector: "#done") 1 · press 2 · 24 moves 3 · release
TO DO DONE Write the changelog Ship the extension Fix the cookie banner
A press with no motion before the release is ignored by every drag library on the web — which is why two clicks never move a Kanban card, resize a pane, or set a slider. ChromeBoost emits the in-between positions, so the page sees a hand.

It can hover

Menus that open on mouseenter, row buttons that only appear at opacity: 0 until you're over them, tooltips, chart crosshairs. There's nothing to click until something hovers — so ChromeBoost hovers, and waits.

It can drag

Sliders, canvas and WebGL apps, map panning, sortable lists, resize handles, signature pads. Anything you'd move with a hand rather than tap with a finger.

It types like a person

Keystrokes go through Chrome's real input path, so React, TipTap, ProseMirror, CodeMirror, Monaco and Stripe's contenteditable fields all register them — the editors that silently swallow scripted input.

03 / Getting through

Cookie banners don't stop it

Here's the thing that breaks most browser agents. A page paints a cookie scrim, a modal backdrop, or an invisible catch-all <div> over the button. The click hits that instead — and the agent gets told it worked. It then argues with a button it never actually pressed. ChromeBoost checks what's on top before it clicks.

Everyone elseaim & fire
invisible overlay your button

Blocked. The click never reaches the button — but the agent reports success and carries on.

ChromeBoostlook first, then click
stepped aside, then put back your button

Landed. Same real click, same trusted event — it just isn't aimed at a banner. The page is left exactly as it was found.

01

Aims where it can reach

It looks for a spot on the target that's actually exposed. A button half-hidden behind a sticky footer gets clicked on the half you can still see.

02

Scrolls before it forces

If a fixed header or floating bar is in the way, it scrolls the page so the target moves clear — the same thing you'd do — before trying anything cleverer.

03

Tells you what blocked it

And when something genuinely can't be reached, it names the element in the way instead of claiming success. No more debugging a click that never happened.

04 / Where it stops

You approve anything that matters

An agent with your logins should not be able to publish in your name, move your money, or pass your 2FA on its own — and this one can't. When a step is irreversible, ChromeBoost fills in everything around it, highlights the final button, and hands control back to you.

Publishing

Posts, comments and replies get drafted into the composer. The Post button is highlighted and waits for your actual click. Nothing goes out unread.

Passwords & 2FA

It never types a password or a one-time code. It brings you to the field, points at it, and pauses. Secrets on screen are redacted out of what Claude reads by default.

Payments & captchas

Checkout and card details are yours to confirm. Captchas aren't solved or faked — ChromeBoost reports one is there and steps back.

☕ Free, MIT, no account

ChromeBoost is free and open source, and there's no signup or telemetry anywhere in it. If it saved you an afternoon, you can buy me a coffee.

Buy me a coffee →
05 / The floating window

Your page, your corner

While Claude drives, a small panel sits on the page so you always know a session is in control and which one. Most tools weld that badge to the top-right corner — exactly where sites put their account menu and cart. This one you can move. Drag it by the header, double-click to collapse, × to dismiss. Try it:

ChromeBoost
my-app · port 7970
Filling checkout form
Drag the header · double-click to collapse · Alt + Shift + B toggles it

Move it once

Drop it near an edge and it snaps flush; resize the window and it stays in view. Where you put it is remembered — next page, next session, same corner.

Shrink it or lose it

Collapse to a pill that just shows the session name, or dismiss it completely. Alt+Shift+B brings it back on any page, and the toolbar popup has a Show button if you'd rather click.

It can't get in the way

It lives in a closed shadow root, so no page can restyle it or find it, and only the panel itself takes clicks — never the space around it. It's kept out of screenshots automatically.

06 / Install

Two commands and a folder

ChromeBoost is a Chrome extension plus an MCP server. The plugin ships both — there's nothing to clone, no npm install, no build step. You need Chrome and Claude Code.

1

Add the plugin

In Claude Code, run these one at a time — not as a single paste.

/plugin marketplace add lordamdal/chromeboost
/plugin install chromeboost@chromeboost

Then restart Claude Code so the MCP server starts.

2

Load the extension

This copies the extension to your Downloads folder and opens it, so it's one click away in Chrome's folder picker.

/chromeboost-setup
  1. Paste chrome://extensions into Chrome's address bar chrome:// links can't be clicked from a page.
  2. Turn on Developer mode, top right.
  3. Click Load unpacked and pick ChromeBoost-Extension from Downloads — or just drag the folder onto the page.

Leave that folder where it is. Chrome reads it on every launch, so moving or deleting it breaks the extension. Chrome will also flag it as a developer-mode extension — expected, since ChromeBoost isn't on the Web Store and runs from files you can read.

3

Point it at a window

Click the ChromeBoost icon in the toolbar. Your session shows up with a green dot — hit Use this window to bind the Chrome window you want driven. Then try:

open news.ycombinator.com and give me the top 5 stories
If something goes wrong

The first command opens a dialog asking for a “marketplace source”

It wants the repo on its own, without the /plugin prefix:

lordamdal/chromeboost

Permission denied or host-key error when adding the marketplace

owner/repo shorthand clones over SSH. Use the HTTPS URL instead:

https://github.com/lordamdal/chromeboost.git

Or set CLAUDE_CODE_PLUGIN_PREFER_HTTPS=1 to make shorthand use HTTPS.

No green dot in the popup

The extension is loaded but hasn't connected. Hit the reload arrow on the ChromeBoost card in chrome://extensions — it reconnects on a backoff timer and a reload forces it immediately.

After updating the plugin

Run /chromeboost-setup again — it overwrites the Downloads folder in place, so you only need to hit reload in chrome://extensions.

Rather build from source?

Clone github.com/lordamdal/chromeboost, run npm install && npm run build, and load packages/extension/dist. The local WebSocket bridge takes the first free port in 7970–7980, so several sessions run side by side.

07 / Tool surface

35 tools Claude can call

You won't type any of these — Claude picks them. Listed so you know exactly what it's able to do on your machine.

ToolWhat it's for
hoverPark the cursor so hover-only menus, row actions and tooltips appear
dragPress, move, release — sliders, canvas, map panning, drag-and-drop reordering
probe_pointReport what's actually painted at a spot; diagnoses a click that went nowhere
hudMove, dock, collapse or hide the on-page panel
click_element · click_at_coordinatesTrusted clicks that hit-test first, scroll clear of fixed bars, and get past overlays
fill_input · fill_form · type_textReal keystrokes through React, contenteditable, CodeMirror, Monaco, TipTap
get_page_text · find_text · get_form_fieldsRead the page, including closed shadow DOM; secrets redacted by default
open_page · wait_for · list_tabs · switch_to_tabNavigate, wait for things to appear, work across tabs
take_screenshot · download_file · read_attachmentCapture steps, pull authenticated files, read PDFs and docs
fetch_url · inspect_request_headersRequests with your real cookies, bypassing page CSP
highlight_region · wait_for_clickHand control back to you — 2FA, passwords, payments, anything that publishes
write_to_envPut a captured key straight into .env