
Company News
Free Business Plan Upgrades for Open Source Maintainers
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.
@dominion525/familiar-mcp
Advanced tools
MCP server: drive the user's real macOS Chrome via AppleScript. 32 tools, sidesteps headless / bot detection by operating the actual signed-in browser.
MCP server for familiar — control the user's real macOS Chrome via AppleScript.
An MCP-compatible client (Claude Code, Claude Desktop, Cursor, Codex CLI, etc.) gets 32 tools that drive the user's real Google Chrome on macOS via AppleScript (Apple Events):
list_tabs, new_tab, new_incognito_tab, close_tab, active_tab, window_mode, is_loadingnavigate, get_tab_url, reload, go_back, go_forward, stopwait_for_load, wait_for_selector, wait_for_functionget_html, execute_js, execute_js_fileget_text, get_attribute, get_value, exists, query_allclick, fill, clear, select_option, set_checked, press_key, submit, scroll_into_viewBecause it operates the user's actual signed-in Chrome via Apple Events rather than launching a separate browser instance, pages see a regular Chrome session — no WebDriver or DevTools control channel is added. Site-specific access controls still apply; this does not guarantee access to any given site. No DevTools Protocol, no Playwright, no separate driver.
For per-tool signatures, parameters, return shapes, and selector strategy, see reference-browser.md (control plane) and reference-actions.md (element actions) in the repository.
The npm package is what your MCP client invokes. The client itself is configured in the next section.
npx fetches and runs the latest version on demand:
npx @dominion525/familiar-mcp@latest
This starts the server and waits for JSON-RPC messages on stdin (Ctrl+C to exit). MCP clients spawn this automatically; you do not normally run it by hand.
git clone https://github.com/dominion525/familiar
cd familiar/mcp
npm install
npm run build
The server entry point is mcp/dist/index.js.
All examples below assume npx @dominion525/familiar-mcp@latest. For a local build, replace npx / @dominion525/familiar-mcp@latest with node /absolute/path/to/familiar/mcp/dist/index.js.
claude mcp add familiar -- npx @dominion525/familiar-mcp@latest
Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"familiar": {
"command": "npx",
"args": ["@dominion525/familiar-mcp@latest"]
}
}
}
Edit ~/.cursor/mcp.json:
{
"mcpServers": {
"familiar": {
"command": "npx",
"args": ["@dominion525/familiar-mcp@latest"]
}
}
}
Edit ~/.codex/config.toml:
[mcp_servers.familiar]
command = "npx"
args = ["@dominion525/familiar-mcp@latest"]
Any MCP-compatible client (Cline, Windsurf, Antigravity, VS Code extensions like GitHub Copilot Chat or Continue, etc.) connects via the same JSON shape used in the Cursor and Claude Desktop examples above. Refer to each tool's MCP configuration documentation for the exact location.
Two permissions need to be set up once before the AppleScript-backed tools can talk to Chrome:
| Permission | Where | Why |
|---|---|---|
| Allow JavaScript from Apple Events | Chrome → View → Developer → Allow JavaScript from Apple Events | Required for any tool that runs JavaScript in the page (the read / interaction / content / JS-based wait tools). The bare tab / window / navigation / history / loading-state tools are native AppleScript and do not need this |
| Automation → Google Chrome | System Settings → Privacy & Security → Automation → (the app spawning the MCP server) → Google Chrome | macOS asks the first time osascript talks to Chrome. macOS grants Automation permission to the parent process, not to familiar-mcp itself, so approve it for the app that actually runs your MCP client (typically Terminal, VS Code, Cursor, or Claude Desktop). Approve only MCP hosts you trust to control your signed-in Chrome |
If the OS permission prompt never appears, run this once from the same terminal that spawns the MCP server:
osascript -e 'tell application "Google Chrome" to get version'
That call surfaces the prompt for the current parent process without depending on any open Chrome window. Once approved, subsequent MCP calls work without re-prompting.
| Symptom | Fix |
|---|---|
osascript ... failed (non_zero_exit): ... JavaScript is turned off | Enable "Allow JavaScript from Apple Events" in Chrome → View → Developer |
Not authorized to send Apple events to "Google Chrome" | Grant Automation → Google Chrome to the parent process (Terminal / VS Code / Cursor / etc.) under System Settings → Privacy & Security → Automation |
Tools that take a URL or selector trigger ordinary Chrome browser activity (network requests, cookies sent on the user's behalf, etc.). Crucially, execute_js and execute_js_file run arbitrary JavaScript in the page, so an MCP client granted these tools can:
Treat MCP-client trust as equivalent to giving that client access to your authenticated browser sessions.
dist/familiar.applescript in this npm package; the development source lives at skills/familiar/familiar.applescript and is copied verbatim at build time. Audit it directly to verify exactly what gets sent to Chrome.mcp/src/) and the AppleScript layer is in the repository.MCP client (Claude Code / Cursor / ...)
↓ stdio (JSON-RPC, MCP protocol)
familiar-mcp server (Node.js)
↓ child_process.execFile("osascript", ["familiar.applescript", ACTION, ...args])
AppleScript (Apple Events)
↓ tell application "Google Chrome" / do JavaScript
Google Chrome (the user's actual signed-in browser)
↓
Page DOM
Key design choices:
familiar.applescript file backs both the MCP server and the Claude Code skill. Behavior is identical across both paths.windowId + tabId. The MCP server never relies on Chrome's active tab — safe to use while the user works in other tabs.osascript process (no persistent helper). Simpler to reason about, with the trade-off of per-call process startup overhead.When you want a small, focused tool set that drives the user's actual signed-in Chrome, familiar-mcp is suitable. Adjacent projects with different trade-offs:
As an alternative to running an MCP server, the same 32 actions are available as a Claude Code skill / plugin under skills/familiar/ in the same repository (with SKILL.md driving auto-activation when Claude Code recognizes a matching request). See the repository README for the skill / plugin install path.
MIT — see LICENSE.
FAQs
MCP server: drive the user's real macOS Chrome via AppleScript. 32 tools, sidesteps headless / bot detection by operating the actual signed-in browser.
We found that @dominion525/familiar-mcp demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Company News
Open source maintainers are under more pressure than ever. We're raising our open source program from the Team plan to the Business plan, free.

Security News
The supply chain control that delays freshly published gems now covers lockfile generation and gem vendoring in Ruby projects.

Security News
During a UK cyber test, a Mythos 5 agent used sockpuppets, social engineering, and prompt injection to try to get a maintainer to merge malware.