safari-browser-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| tabs_listA | List every open Safari tab with its id, title and URL. |
| tabs_createA | Open a new Safari tab (optionally at a URL) and make it active. |
| tabs_selectC | Bring a tab to the front. |
| tabs_closeC | Close a tab. |
| navigateA | Load a URL in a tab, or pass "back" / "forward" / "reload". |
| get_page_textB | Get the readable text of the page (main/article first, else body). |
| read_pageB | Read the page as an outline. Interactive elements get [ref_N] ids usable with click / form_input / scroll. |
| findB | Find visible elements whose role/name/text contains the query. Returns up to 20 refs. |
| clickB | Click an element by ref (from read_page/find) or CSS selector. |
| form_inputB | Set the value of an input, textarea, select, checkbox or contenteditable. Optionally submit its form. |
| press_keyA | Send real key presses to Safari, e.g. "Return", "Tab", "cmd+l", "shift+tab". Needs Accessibility permission. |
| scrollB | Scroll the page by ticks in a direction, or scroll an element (ref) into view. |
| javascriptA | Run JavaScript in the page. Write a function body and |
| screenshotA | Screenshot the Safari window (brings it to the front). Needs Screen Recording permission. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 14 tools
Tab lifecycle tools (tabs_*) are cleanly separated from page-interaction tools, and click/find/read_page have clear distinct roles. Minor overlaps exist: get_page_text vs read_page both return page content, find returns refs like read_page does, and tabs_create can open a URL that navigate also handles, but descriptions make the intended split reasonably clear.
Everything is snake_case, with a coherent noun_verb grouping for tab operations (tabs_list, tabs_create, tabs_select, tabs_close). The rest are bare verbs (navigate, click, find, scroll, screenshot), which is a deviation from the verb_noun pattern but is a systematic and readable split between tab management and page actions.
14 tools is squarely in the well-scoped range for a browser automation server. Each tool maps to a distinct capability (tab control, navigation, reading, interaction, scripting, capture) with no obvious redundancy.
Covers the full loop of tab management, navigation, reading (text/outline/find), interaction (click, form_input, press_key, scroll), JS execution, and screenshots. Minor gaps remain: no explicit wait-for-load tool, no hover, and no history/cookie or window management, though javascript can work around some of these.