# sidebutton
> Open-source AI agent platform providing browser automation, workflow engine, and knowledge packs through an MCP server with 40+ tools for web control and automation.
Canonical: https://www.mcpfolio.com/servers/sidebutton
Last updated: 2026-10-28
## Catalog record

- Publisher: sidebutton
- Categories: productivity, web-scraping, communication, design

## Website

https://sidebutton.com/

## Repository

https://github.com/sidebutton/sidebutton

## Transports

stdio

## Authentication

No credentials were configured; the tested read-only tool “list_workflows” succeeded in an isolated environment. Other tools may have additional requirements.

## Tools

- **run_workflow**: Execute a workflow automation by ID. Returns a run_id for tracking execution status.
- **get_run_log**: Retrieve the execution log for a completed workflow run.
- **list_workflows**: List all available workflow automations.
- **get_workflow**: Get detailed information about a specific workflow.
- **list_run_logs**: List recent workflow execution logs.
- **publish_artifact**: Publish a piece of evidence (a screenshot, a design mockup, an RCA/coverage report) to the portal RIGHT NOW, mid-session, and get back a paste-ready snippet to cite in your ONE resolution comment on the ticket. The file is uploaded, attached to the ticket automatically, and given a tokenized no-login download link — the snippet contains that link plus the Jira inline-attachment reference. Use this the moment you have evidence worth showing, instead of waiting for the end of the session (nothing you save after your comment is written can be cited in it). Works on a dispatched job and for every turn of a live app editing session; on a ticketless/chat job it returns a download link only. Files must be ≤ 25 MB and live under your home directory. On any failure the file is left on disk and still uploads at session end, so save deliverables under artifacts/ as a fallback.
- **get_browser_status**: Check if the browser extension is connected.
- **capture_page**: Capture selectors and interactive elements from the current page.
- **navigate**: Navigate the connected browser tab to a URL.
- **snapshot**: Capture accessibility snapshot of the current page. Returns YAML with element refs for use with click/type. Use includeContent=true to also include visible text content as markdown. Note: taking a snapshot may dismiss inline modals or popups — use screenshot instead if you need to verify modal content.
- **click**: Click an element on the page.
- **type**: Type text into an input element.
- **press_key**: Press a key on the keyboard. Use this for keyboard shortcuts, Tab navigation, Enter, Escape, arrow keys, etc. Supports key combinations like "Ctrl+A" or "Shift+Tab".
- **scroll**: Scroll the page.
- **extract**: Extract text content from an element.
- **screenshot**: Capture a screenshot of the current page. Prefer cropping to a specific area instead of capturing the full viewport — use ref (from snapshot), selector (CSS), or region (manual rect) to save context tokens. Full viewport is fine for first visit to a new page; after that, crop to the relevant section. Pass path to write the PNG to a file instead of returning image bytes — that is what you want for docs screenshots and QA evidence, since the file can then be published with publish_artifact and never enters your context.
- **select_option**: Select an option from a native <select> dropdown element. Use this instead of click for <select> elements, as native dropdowns cannot be controlled via click events.
- **fill**: Fill a form field by setting its value programmatically. Unlike "type" (which simulates keystrokes), "fill" sets the value directly and triggers React/Vue/Angular change events. Use this for framework-controlled inputs where "type" doesn't work.
- **wait**: Wait for an element to appear on the page. Blocks until the element matching the selector exists in the DOM, or throws after timeout.
- **exists**: Check if an element exists on the page. Returns true/false without throwing. Useful for conditional logic.
- **extract_all**: Extract text from all elements matching a selector, joined by a separator. Useful for getting lists of items, table columns, or repeated elements.
- **extract_map**: Extract structured data from repeated elements. For each element matching the outer selector, extracts named fields using sub-selectors. Returns JSON array of objects.
- **scroll_into_view**: Scroll a specific element into the viewport. More precise than "scroll" — targets an exact element.
- **hover**: Hover over an element (positions cursor for scroll targeting).
- **inject_css**: Inject a CSS rule into the current page. The main use is pre-capture redaction: blur or hide sensitive elements, then screenshot to a file, so no unredacted image ever exists. Pass an id to make the injection replaceable — injecting the same id again swaps the rule rather than stacking a second one.
- **evaluate**: Execute JavaScript in the browser page context and return the result. Useful for reading page state, checking values, or performing calculations.
- **browser_batch**: Run a SEQUENCE of browser actions in ONE call instead of one round trip per action. Each step is the same shape you would pass to the individual tool, plus a "cmd" field naming which tool to run.

A batch is a DETERMINISTIC run: actions you already know the selectors for, executed top to bottom, halting at the first failure (unless on_error:"continue"). By default it ends by returning a fresh accessibility snapshot of the resulting page, so you can decide the next move in the same turn. The moment you need to SEE something before choosing an action, end the batch and read the returned snapshot.

Guidance:
- Prefer CSS selectors over refs inside a batch. Refs come from a prior snapshot and go stale the instant a step re-renders the page; selectors survive.
- After a navigate (or an action that loads new content), add a { "cmd": "wait", "selector": "..." } step before interacting with the new content.
- Add "optional": true to a step whose failure should not halt the batch.
- Add "return
- **set_basic_auth**: Provide HTTP Basic Auth credentials so the browser logs in silently instead of showing the native username/password modal, which would otherwise block the page and hang automation. Applies to the connected tab. Omit "origin" to use the credentials for any site that challenges; pass "origin" (e.g. "https://staging.example.com") to scope them to one site. When a challenge has no matching credentials it is dismissed so the page never hangs.
- **clear_basic_auth**: Remove stored HTTP Basic Auth credentials. Omit "origin" to clear all stored credentials; pass "origin" to clear just that site.

## Sources

- [MCP.Directory public profile](https://mcp.directory/servers/sidebutton)
- [Linked publisher repository](https://github.com/sidebutton/sidebutton)
- [npm registry metadata](https://registry.npmjs.org/sidebutton)
- [maintainer_or_vendor_tool_documentation](https://docs.sidebutton.com/mcp/tools.html)

## Setup

Use the interactive setup panel on [the detail page](https://www.mcpfolio.com/servers/sidebutton) to view instructions for each supported client.