ff-mcp
ff-mcp
ff-mcp даёт локальным MCP-клиентам контролируемый доступ к вашему профилю Firefox. Он состоит из WebExtension Firefox на базе Manifest V3 и Python-хоста Native Messaging, который предоставляет MCP через Streamable HTTP на 127.0.0.1.
Расширение, а не процесс на localhost, является финальной границей авторизации. Перечисление метаданных вкладок не предоставляет доступа к содержимому страниц. Чтение, взаимодействие и скриншоты требуют независимых, отзываемых возможностей.
Текущие возможности
Перечислять метаданные вкладок без доступа к странице.
Запрашивать
READ,INTERACT,SCRIPTиSCREENSHOTдля конкретной вкладки.Выдавать доступ однократно, на время документа, на время сессии вкладки или постоянно для хоста.
Читать ограниченные сериализованные снимки и результаты CSS-запросов. Живые DOM-объекты никогда не пересекают мост.
Выполнять клики, ввод, прокрутку и навигацию через структурированные операции.
Захватывать вкладку только при отдельном разрешении
SCREENSHOT.Выполнять произвольный JavaScript в изолированном мире пользовательских скриптов или в основном мире страницы только при отдельном разрешении
SCRIPTи необязательном разрешении FirefoxuserScripts.Сопоставлять сохраняемые политики с предикатами
host,glob,regexиscheme, объединяемыми операторамиAND,ORиNOT.Аудировать решения об авторизации и чувствительные операции внутри Firefox.
Привязывать MCP только к loopback, требовать сгенерированный bearer-токен и отклонять HTTP-источники по умолчанию.
Related MCP server: gecko-mcp
Требования
Firefox 150 или новее.
Python 3.14 (пакет зафиксирован на минорной ветке 3.14).
Для установки рекомендуется
uv.
Разовое выполнение SCRIPT требует Firefox 153 или новее, поскольку в этом выпуске появился userScripts.execute(). Остальные возможности поддерживаются начиная с Firefox 150.
Установка из рабочей копии
Установите нативный вспомогательный компонент как постоянный инструмент, затем зарегистрируйте его в Firefox:
uv tool install .
ff-mcp install-nativeДля разработки загрузите extension/manifest.json через about:debugging → Этот Firefox → Временная загрузка дополнения.
Откройте всплывающее окно ff-mcp на панели инструментов и нажмите Запуск. При первом запуске создаётся приватный файл конфигурации со случайным токеном:
Linux:
$XDG_CONFIG_HOME/ff-mcp/config.jsonили~/.config/ff-mcp/config.jsonmacOS:
~/.config/ff-mcp/config.jsonWindows:
%APPDATA%\ff-mcp\config.json
Всплывающее окно показывает и позволяет скопировать типовой объект подключения:
{
"url": "http://127.0.0.1:8765/mcp",
"headers": {
"Authorization": "Bearer YOUR_GENERATED_TOKEN"
}
}Настройте указанные значения в MCP-клиенте, поддерживающем Streamable HTTP и произвольные заголовки. Эндпоинт существует только пока расширение удерживает открытым своё соединение Native Messaging.
Процедура выдачи прав
Вызовите
browser_tabsи выберите идентификатор вкладки.Вызовите
browser_request_accessс одной или несколькими возможностями.Одобрите запрос в панели инструментов Firefox.
Вызовите инструмент чтения, взаимодействия или снимка экрана.
Отзовите доступ из панели инструментов или с помощью
browser_revoke.
READ по умолчанию разрешён только для localhost, поддоменов .localhost, 127.0.0.0/8 и ::1. Это не включает по умолчанию взаимодействие, скриптинг или скриншоты.
Правила политик
Страница параметров содержит визуальный редактор политик. Каждое новое правило начинается с основного контейнера AND, внутри которого находится группа разрешения OR и группа исключевания NAND. Добавляйте условия host, шаблона URL, regex или scheme; при необходимости вкладывайте дополнительные контейнеры AND, OR, NAND или NOR; затем выбирайте возможности, которые предоставляет подходящее правило.
Пустые неотрицательные контейнеры не соответствуют ничему. Пустые отрицательные контейнеры соответствуют всему, поэтому новое правило остаётся неактивным, пока в его группе разрешения не появится хотя бы одно условие. Постоянно включённое правило READ для localhost отображается отдельно и не может быть изменено или удалено.
Существующие правила на основе выражений переносятся в визуальное дерево при открытии страницы параметров. Для обратной совместимости формат выражений остаётся хранимым представлением.
Регекс-шаблоны ограничены по длине и не допускают обратные ссылки, опережающие/ретроспективные проверки и явные вложенные квантификаторы. Это безопасное подмножество, а не полная реализация RE2.
Разработка
UV_CACHE_DIR=/tmp/ff-mcp-uv-cache uv sync --group dev
UV_CACHE_DIR=/tmp/ff-mcp-uv-cache uv run pytest -q
# Opt-in: launches the installed Firefox headlessly with a fresh temporary profile.
FF_MCP_RUN_FIREFOX_TESTS=1 UV_CACHE_DIR=/tmp/ff-mcp-uv-cache uv run pytest -q tests/test_firefox_integration.py
UV_CACHE_DIR=/tmp/ff-mcp-uv-cache uv run ruff check .
UV_CACHE_DIR=/tmp/ff-mcp-uv-cache uv run ruff format --check .
node tests/policy.test.js
node tests/rule-model.test.js
node tests/background.test.js
node tests/content.test.js
node --check extension/background.js
node --check extension/content.js
node --check extension/options.js
node --check scripts/check-web-ext-lint.jsЗадайте FIREFOX_BINARY для устанавливает, которые Selenium не может обнаружить автоматически. Интеграционный тест распознаёт стандартное расположение Linux Snap без дополнительной конфигурации.
Расширение Firefox не имеет сторонних зависимостей времени выполнения или шага сборки.
Релизы
Теги с именами vX.Y.Z запускают пайплайн релиза. Версия тега должна совпадать и с project.version в pyproject.toml, и с version в extension/manifest.json. Пайплайн запрашивает у Mozilla Add-ons подпись расширения в канале unlisted, проверяет полученный XPI и прикрепляет подписанный XPI с его контрольной суммой SHA-256 к релизу GitHub. Сгенерированные артефакты остаются неотслеживаемыми.
Настройте эти секреты в окружении release репозитория перед запуском тега:
AMO_JWT_ISSUER— эмитент из учётных данных API AMO.AMO_JWT_SECRET— соответствующий секрет API AMO.
Учётные данные создаются на странице ключей API AMO. Подпись в канале unlisted не публикует расширение в поиске или списках AMO.
Ограничения безопасности
Расширение, очевидно, запрашивает широкий доступ к сайтам, чтобы поддерживать произвольные вкладки и использовать API Firefox для снимков фоновых вкладок. Поэтому внутренние проверки его возможностей критически важны.
Одобренные метаданные браузера, содержимое веб-сайтов и их активность передаются локальному собственному хосту и MCP-клиенту. AMO объявляет эти категории данных обязательными при установке.
Ограниченные Firefox страницы, такие как
about:и магазин дополнений, не могут быть прочитаны контентными скриптами.Доступ на время сессии вкладки намеренно переживает навигацию в этой вкладке; доступ на время документа — нет.
Идентичность MCP-клиента всего лишь описательна в пределах единого домена доверия bearer-токена. Если взаимно не доверяющим локальным клиентам требунома изоляция, используйте отдельную конфигурацию и токен.
Структурированные клики и ввод всё равно могут вызывать поведение страницы. Давайте право
INTERACTс осторожностью.SCRIPTпо сути является полным контролем над страницей. Во время одобрения Firefox запрашивает для него необязательное разрешениеuserScripts, а ff-mcp также требует отдельную возможность на вкладку. Скрипты в миреMAINмогут получать и изменять состояние JavaScript, принадлежащее странице. Выдавайте право такого скриптинга только клиентам и сайтам, которым доверяете.
См. firefox_mcp_extension_findings.html для дизайн-исследования, предшествующего этой реализации.
Лицензия
MIT. См. LICENSE и THIRD_PARTY.md.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server paired with a Firefox extension that enables LLM clients to control the user's browser, supporting tab management, history search, and content reading.13314MIT
- AlicenseAqualityAmaintenanceDrive Firefox-based browsers (Floorp, LibreWolf, Zen, Waterfox, Mullvad, Firefox) from any MCP client — read pages, screenshot, click, fill forms and manage tabs in your real session, over Marionette/WebDriver. OS input & JS eval locked by default.41681MIT
- AlicenseBqualityCmaintenanceA local Firefox bridge for MCP agents that enables tab control, DOM interaction, mouse/keyboard actions, and screenshots.24MIT
- AlicenseNot gradedqualityCmaintenanceA local MCP server for Firefox that gives AI agents full control over the browser via a Unix socket, enabling automation of tabs, pages, cookies, and more without exposing any network ports.241MIT
Related MCP Connectors
Browser MCP for logged-in tasks. Uses your Chrome — credentials stay local. Zero-token replay.
Remote MCP server for full read/write access to a Zotero library
A MCP server built for developers enabling Git based project management with project and personal…
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/complynx/ff-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server