{"name":"app.tabrunner/tabrunner","slug":"tabrunner","title":"TabRunner","description":"Give browser tasks to TabRunner, an agent in your own Chrome that uses your logins.","url":"https://mcp.market/server/tabrunner","rating":null,"grade":"A","score":86,"certified":false,"status":"active","category":"scraping","tags":["scraping","ai"],"presence":{"score":36,"stars":2,"forks":0,"downloads_week":476,"last_push_at":"2026-10-23T13:57:08.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/tabrunner/tabrunner","website":"https://tabrunner.app","version":"0.15.0","remotes":[],"packages":[{"registryType":"npm","identifier":"tabrunner-mcp","version":"0.15.0","runtimeHint":"bunx","transport":{"type":"stdio"},"environmentVariables":[{"description":"The localhost port the extension connects to. Must match Settings → MCP in TabRunner.","default":"17836","name":"TABRUNNER_BRIDGE_PORT"}]}],"tools":[{"name":"answer","description":"Reply to the question a task stopped on (state: question) and let it continue. TabRunner stops to ask before consequential actions (paying, sending on the user's behalf, deleting or submitting), so relay the question to the user and send THEIR decision, never your own.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_click","description":"Click by ref with a real trusted event, not a synthetic dispatch a site can ignore. Returns the resulting page. Take the ref from the most recent snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_console_messages","description":"The driven tab's console messages and uncaught exceptions since the session attached. When a page misbehaves for no visible reason, the JavaScript error usually names the broken piece.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_end","description":"Close this client's direct-control session and remove its on-page badge. Call it when you're done. Other clients and the panel keep their own tasks. A session left open expires after a few idle minutes.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_evaluate","description":"Run JavaScript in the driven tab's page context and get the result back. Promises are awaited; return only JSON-serializable values, not DOM nodes. For what the other tools cannot do: reading an attribute the tree omits, piercing shadow DOM, calling the page's own functions, fetching an endpoint the page itself uses. Results are bounded and credential-shaped values are stripped. A direct session h","write_action":true,"price_micros":0,"input_schema":null},{"name":"browser_fill","description":"Set the value of a field by ref. Supports text inputs, textareas, selects (by option label or value) and contenteditable. The value is set the way the page's own code notices, so it lands where typed keystrokes don't (pages that swallow key events, focus that won't stick). Pass an empty string to clear a field. Returns the resulting page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_navigate","description":"Navigate the driven tab and return the new page's snapshot.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_network_requests","description":"The requests the driven tab has made since the session attached, with method, URL, status and failures. Tells 'the server answered with an error' apart from 'the page never sent it'. Response bodies are not captured; re-fetch a GET with browser_evaluate when the payload matters.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_press_key","description":"A single key press: \"Enter\" to submit, \"Escape\" to dismiss, \"Tab\" to move on. Returns the resulting page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_scroll","description":"Scroll the driven tab and return what is now in view. Content below the fold is not in a snapshot until you scroll to it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_snapshot","description":"The current page as an accessibility tree with a ref on every interactive element. This is how you see, and where every ref you click comes from. Refs belong to the snapshot that produced them: after anything changes the page, re-read before acting.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_start","description":"","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_switch_tab","description":"Point every later action at another tab. The tab does not need to be on screen: actions work on background tabs too. It comes to the front only while the user is watching the tab you leave; otherwise the work goes on without moving their screen.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_tabs","description":"Open tabs with their id, title and URL. These are all the tabs the user has open, so pass query to get only the ones you need. Find the one you need, then switch.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_type","description":"Type into whatever is focused. Click the field first. Real keystrokes, so a site's own handlers fire. Returns the resulting page.","write_action":false,"price_micros":0,"input_schema":null},{"name":"compact","description":"Summarize this chat's history so far, so every task replays a summary instead of the whole transcript. The raw messages stay in the user's panel; only what the model re-reads changes, and nothing is deleted. Reach for it when a long chat's tasks get slow or one dies on a context-length error. Cannot run while a task is in flight.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_status","description":"Where the current task stands: the plan and the steps taken; when it ends, the answer, the question it stopped on or the error. By default this WAITS for the next change instead of returning immediately, so following a ten-minute task costs one call per real event. Keep calling it until state is done, error, or question.","write_action":false,"price_micros":0,"input_schema":null},{"name":"health","description":"Check that the browser agent is reachable before driving it. Reports whether the TabRunner extension is connected to this bridge, which extension it is, whether it has a provider ready to think with, and what to do when any of that is missing. Call this first, and again after any connection error.","write_action":false,"price_micros":0,"input_schema":null},{"name":"new_conversation","description":"Forget the current chat and start clean. TabRunner keeps a separate chat for each connected client. Each task continues the previous ones, so it remembers the pages it visited and what it found. Reset only when the new task has nothing to do with the old one.","write_action":false,"price_micros":0,"input_schema":null},{"name":"run","description":"Give TabRunner a task to do in the user's real Chrome, with their existing logins and sessions to navigate, read pages, click, type, fill forms and extract data. Describe the goal in plain language, as you would to a person; TabRunner plans and executes the steps itself. Returns immediately: follow the task with get_status. By default the task works in its own background tab (reusing this chat's t","write_action":true,"price_micros":0,"input_schema":null},{"name":"screenshot","description":"A picture of the tab this client's task or direct-control session is driving. Start one with run or browser_start first. It never captures another client's tab or the user's current page as a fallback.","write_action":false,"price_micros":0,"input_schema":null},{"name":"steer","description":"Send a note into a task that is already running, such as a correction, an extra constraint or a change of approach. It lands between tool calls, so the task absorbs it without restarting. Use this instead of stop+run when the goal is still the same.","write_action":true,"price_micros":0,"input_schema":null},{"name":"stop","description":"Stop this client's current task, or pass runId to cancel one of its queued tasks. It cannot stop another client's task. Stopping leaves the browser as it is. Nothing is undone.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":86,"grade":"A","scanned_at":"2026-10-24T16:16:46.139Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-24T16:16:46.125Z","components":{"code":{"score":20,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 1 days ago"]},"identity":{"score":9,"max":10,"notes":["registry namespace matches repository owner","website matches verified namespace"]}},"findings":[{"id":"exec.eval","severity":"medium","component":"code","title":"eval / new Function used","evidence":"dist/tabrunner-mcp.js: …eCode, sch); const makeValidate = new Function(`${names_1.default.self}`, `${names_1.de…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"tabrunner-mcp","version":"0.15.0","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":0,"publishedAt":"2026-10-23T13:58:56.433Z","repositoryUrl":"git+https://github.com/tabrunner/tabrunner.git","weeklyDownloads":476}],"repo":{"found":true,"owner":"tabrunner","repo":"tabrunner","archived":false,"pushedAt":"2026-10-23T13:57:08Z","stars":2,"forks":0,"openIssues":1,"ownerType":"Organization","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/315443179?v=4","ownerCreatedAt":"2026-08-10T15:19:42Z","license":"MIT"},"icon":{"url":"https://raw.githubusercontent.com/tabrunner/tabrunner/main/plugin/assets/logo.png","source":"registry","width":512,"height":512},"presence":{"stars":2,"forks":0,"downloadsWeek":476,"license":"MIT","lastPushAt":"2026-10-23T13:57:08.000Z","score":36}}}},"grade_history":[],"reviews":[]}