LocalCan

официальный

Предоставляет AI-агентам публичные URL-адреса (туннели) для localhost, просмотр живого HTTP-трафика, публикацию снимков и контроль доступа.

Что можно делать с LocalCan MCP?

  • Просмотр перехваченного трафика — Попросите ассистента вывести список последних обменов с помощью list_traffic или получить полный запрос/ответ через get_exchange в формате markdown, curl или HAR.
  • Управление публичными туннелями — Создавайте, приостанавливайте, возобновляйте или удаляйте публичные URL с помощью таких инструментов, как create_public_url и pause_public_url, включая настройку пользовательских заголовков запросов.
  • Публикация и обновление снимков — Разверните папку как доступный для общего доступа снимок с помощью publish_snapshot, а затем обновите его позже через update_snapshot, чтобы ссылки предпросмотра оставались актуальными.
  • Управление доступом и комментариями — Защитите URL паролем с помощью set_password, просматривайте ветки комментариев через list_comments, а также отвечайте на них или закрывайте их напрямую через ассистента.
  • Проверка статуса туннеля и сервиса — Используйте get_status, чтобы подтвердить, что перехват работает, или list_public_urls, чтобы увидеть, какие ссылки активны, приостановлены или обслуживают снимки.

Документация

MCP-сервер

Запустите сервер Model Context Protocol от LocalCan и подключите его к вашему MCP-хосту, с полным справочником инструментов и параметров.

localcan mcp запускает сервер Model Context Protocol через stdio. MCP-хост (Claude Code, Codex, Cursor, Claude Desktop и другие) запускает его и вызывает инструменты LocalCan для чтения перехваченного трафика, управления публичными URL (туннелями) и публикации снимков (Snapshots). LocalCan должен быть запущен, чтобы инструменты возвращали данные, поэтому сначала откройте десктопное приложение или запустите localcan start -d.

Инструменты

Сервер предоставляет двадцать шесть инструментов. Чтение работает сразу. Шестнадцать инструментов, которые изменяют данные, требуют права на запись, которые по умолчанию отключены (см. параметры ниже). Создание или добавление публичного URL требует активной лицензии. Публикация снимка и защита URL паролем требуют подписки, поэтому бессрочная лицензия не подходит, хотя она всё ещё может открывать публичные URL. Без лицензии ограниченные инструменты возвращают понятное сообщение об активации, при этом приостановка, возобновление и удаление существующих URL продолжают работать.

Трафик:

ИнструментЧто делаетПараметры
get_statusСообщает, включён ли захват и сколько трафика буферизовано.нет
enable_captureВключает захват. Захват по умолчанию выключен и сбрасывается при перезапуске демона.нет
list_trafficПеречисляет последние обмены, сначала новые.last (по умолчанию 20), host подстрока, project id, method, status (точный код или класс, например 5xx)
get_exchangeВозвращает один обмен по id.id обязательно (полный id или любой уникальный префикс), format одно из markdown, curl, http, har, json (по умолчанию markdown), include_response (по умолчанию true)

Обмен — это запрос, который LocalCan переслал вашему бэкенду, а не побайтовая копия исходного запроса клиента. См. Трафик для модели данных.

Публичные URL:

ИнструментЧто делаетПараметры
list_servicesПеречисляет сервисы, которые обслуживает LocalCan, каждый с идентификатором <project>/<service>, локальной целью и количеством конечных точек.нет
list_public_urlsПеречисляет ваши публичные URL, включая приостановленные, каждый с его состоянием (active, paused, error, starting, inactive) и тем, что он обслуживает (live, snapshot, none). Каждая строка также содержит access: none, password, link или имя политики команды. Припаркованный URL, обслуживающий снимок, читается как состояние paused, но обслуживание snapshot, поэтому отвечайте на вопрос «работает ли ссылка?» на основе обслуживания, а не состояния.нет
get_public_url_statusСообщает состояние одного публичного URL, что он обслуживает (live, snapshot, none) и его защиту access, с той же терминологией, что и в списке, плюс его локальную цель и любые правила заголовков запроса.url обязательно
create_public_urlСоздаёт публичный URL для локального порта в новом проекте и возвращает назначенный адрес, например my-app-12.localcan.dev. Занимает несколько секунд. Если туннель отклонён (например, из-за лимита публичных URL вашего плана) или истёк по времени, попытка откатывается и ничего не остаётся. Для ссылки, которая остаётся доступной после отключения вашей машины, добавьте снимок с помощью add_snapshot. Для приложения, обслуживаемого как виртуальный хост, передайте host и правило Host в headers (см. ниже).port обязательно, name необязательно (формирует адрес), protocol http или tcp (по умолчанию http), host необязательно (по умолчанию localhost), headers необязательно (правила заголовков запроса, каждое {name, value, mode?, enabled?})
add_public_urlДобавляет публичный URL к сервису, который вы уже настроили. Протокол следует цели сервиса, поэтому цель tcp:// получает TCP-туннель. Тот же откат при сбое, что и при создании.Идентификатор service обязателен
pause_public_urlПереводит публичный URL в офлайн, сохраняя его адрес, чтобы его можно было возобновить позже. Сгенерированный адрес *.localcan.dev остаётся зарезервированным в течение 7 дней в приостановленном состоянии, пользовательские домены никогда не истекают.url обязательно
resume_public_urlВозвращает приостановленный публичный URL в онлайн по тому же адресу.url обязательно
remove_public_urlНавсегда удаляет публичный URL. Сгенерированный адрес освобождается, пользовательский домен остаётся вашим и может быть добавлен снова. Удаление последней конечной точки сервиса также удаляет опустевший сервис и проект. Чтобы сохранить адрес, но прекратить обслуживание снимка, используйте remove_snapshot. Помечен как разрушительный, поэтому хосты обычно запрашивают подтверждение.url обязательно
set_public_url_headersЗаменяет правила заголовков запроса на публичном URL — заголовки, которые LocalCan устанавливает перед пересылкой вашему приложению. Передайте полный список, пустой список очищает их. get_public_url_status сообщает правила в той же форме (mode set, append или remove, и enabled), поэтому список, прочитанный там, можно отредактировать и записать обратно.url и headers обязательны

Приложение, обслуживаемое как виртуальный хост (сайт Laravel Herd или Valet по адресу myapp.test, nginx server_name), должно видеть своё собственное имя хоста, и LocalCan по умолчанию пересылает публичное имя хоста. Передайте host и правило Host, headers: [{"name": "Host", "value": "{{target_host}}"}], и приложение будет обслуживать правильный сайт. Шаблоны значений — из Заголовки.

Снимки (см. Снимки):

ИнструментЧто делаетПараметры
publish_snapshotПубликует папку как снимок на новом публичном URL, чтобы она оставалась доступной после отключения вашей машины. По возможности указывайте на готовую статическую сборку или на корень проекта, чтобы LocalCan выполнил сборку (зависимости должны быть уже установлены). Возвращает новый адрес. Всегда создаёт новый URL, поэтому для обновления существующего предпросмотра используйте update_snapshot.path обязательно (абсолютный путь), name необязательно (формирует адрес)
add_snapshotДобавляет снимок к уже существующему публичному URL, чтобы существующая ссылка продолжала обслуживаться в офлайне. Указывает на update_snapshot, если у URL уже есть снимок.url и path обязательны
update_snapshotПерепубликовывает снимок на публичном URL. Опустите path, чтобы пересобрать из того же источника, или передайте его, чтобы перенаправить на другую папку. Указывает на add_snapshot, если у URL нет снимка.url обязательно, path необязательно
remove_snapshotУдаляет снимок с публичного URL. URL остаётся зарезервированным и продолжает обслуживать live, пока ваш туннель активен. Помечен как разрушительный.url обязательно
get_snapshot_statusСообщает снимок публичного URL: его исходную папку, время публикации, изменился ли источник с тех пор (stale) и обслуживает ли URL live или снимок прямо сейчас. Также содержит комментарии рецензентов (состояние и количество) и, после включения комментариев, номер версии снимка.url обязательно

Контроль доступа (см. Контроль доступа):

ИнструментЧто делаетПараметры
set_passwordЗащищает публичный URL паролем, чтобы только люди, знающие пароль, могли его открыть. Применяется на серверах LocalCan, поэтому также покрывает снимок на этом URL. Генерирует надёжный пароль, если вы не передадите свой, и возвращает его для передачи. Требуется подписка.url обязательно, password необязательно (опустите для генерации)
clear_accessСнимает защиту паролем, снова делая URL публичным. Не удаляет URL или его снимок. Помечен как разрушительный, поэтому хосты обычно запрашивают подтверждение.url обязательно
get_access_statusСообщает защиту публичного URL и возвращает его текущий пароль, если он защищён паролем. Пароль никогда не возвращается через list_public_urls, только здесь.url обязательно

Комментарии (комментарии рецензентов, оставленные на снимке, см. Комментарии):

ИнструментЧто делаетПараметры
list_commentsПеречисляет ветки комментариев на снимке публичного URL с их ответами. Каждая ветка содержит путь страницы, якорь (CSS-селектор и позицию пина в этом элементе), вьюпорт и браузер рецензента, а также версию снимка, на которой он был оставлен. Никогда не отмечает ничего прочитанным.url обязательно, status open, resolved или all (по умолчанию open), page путь, version число
reply_commentПубликует ответ в ветке от имени вашей учётной записи. Рецензенты ветки получают его по электронной почте, если уведомления об ответах не отключены для команды или они не отписались. Только ответы, новые ветки закрепляются на странице.url, comment_id, body обязательны
resolve_commentОтмечает ветку как решённую, включая ответы.url и comment_id обязательны
reopen_commentОткрывает заново решённую ветку.url и comment_id обязательны
set_commentsПереключает комментарии на снимке: on, paused (существующие ветки остаются читаемыми, новые не создаются) или off. Требует защищённый URL и подписку.url и state обязательны

Цикл обратной связи

Инструменты объединяются в один цикл, который агент может выполнять самостоятельно: list_comments для чтения открытых веток, редактирование исходного кода, update_snapshot для публикации новой версии, затем reply_comment и resolve_comment для каждой ветки. Комментарии переносятся в новую версию, поэтому рецензент видит ответ на том же пине. Сервер сам сообщает агенту об этом. Его инструкции MCP, которые хосты добавляют в промпт агента, описывают цикл, настройку раунда рецензирования (publish_snapshot, set_password, set_comments) и рецепт виртуального хоста. Две вещи, которые агент не может сделать: начать ветку (рецензенты закрепляют их на странице) и отметить ветки прочитанными (непрочитанное — это состояние вашего собственного почтового ящика в приложении).

Подключение агента

Способ подключения зависит от того, как запускается агент. Терминальные агенты (Claude Code, Codex) наследуют PATH вашей оболочки, поэтому работает простая команда localcan. GUI-приложения (Cursor, Claude Desktop, VS Code и другие) не загружают PATH вашей оболочки, поэтому им нужен абсолютный путь к бинарному файлу, например /Users/you/.localcan/bin/localcan. В настройках десктопного приложения можно скопировать готовую конфигурацию с правильным путём, что также является надёжным способом в Windows.

Claude Code

claude mcp add --scope user localcan -- localcan mcp

Флаг --scope user регистрирует сервер для каждого проекта. Уберите его, чтобы зарегистрировать только в текущем проекте.

Codex

codex mcp add localcan -- localcan mcp

Это записывает сервер в ~/.codex/config.toml. Для десктопного приложения Codex или расширения IDE передайте абсолютный путь вместо localcan.

Cursor, Claude Desktop и Windsurf

Они используют один и тот же формат mcpServers:

{
  "mcpServers": {
    "localcan": {
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

Добавьте его в нужный файл, затем перезагрузите:

  • Cursor: ~/.cursor/mcp.json, затем включите сервер в настройках.
  • Claude Desktop: claude_desktop_config.json (Settings, Developer, Edit Config), затем закройте и запустите заново.
  • Windsurf: ~/.codeium/windsurf/mcp_config.json, затем обновите панель MCP.

VS Code

VS Code (режим агента Copilot) использует ключ servers с явным типом. Добавьте это в .vscode/mcp.json в вашем рабочем пространстве:

{
  "servers": {
    "localcan": {
      "type": "stdio",
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

Вы также можете запустить code --add-mcp с тем же объектом сервера.

Zed

Zed использует context_servers в своём settings.json:

{
  "context_servers": {
    "localcan": {
      "source": "custom",
      "command": "/Users/you/.localcan/bin/localcan",
      "args": ["mcp"]
    }
  }
}

Вы также можете добавить его из настроек панели агента.

Доступ агента, редактирование и права на запись

Все три параметра управляются в десктопном приложении в разделе Settings (секция «AI Agents (MCP)») или из терминала: localcan mcp enable / disable для доступа агента, localcan mcp redact <on|off> для редактирования, localcan mcp access <read_only|read_write> для прав на запись и localcan mcp status для просмотра текущего состояния.

  • Доступ агентов включён по умолчанию. Отключите его, чтобы агенты вообще не могли использовать LocalCan. Сервер всё равно запускается, но каждый инструмент возвращает понятное сообщение «доступ отключён», пока вы не включите его снова.
  • Редактирование (удаление чувствительных данных) включено по умолчанию для агентов. Чувствительные заголовки (Authorization, cookies, ключи API) удаляются из ответов инструментов. URL-адреса и тела запросов не редактируются. Отключите эту функцию, чтобы ваш собственный агент получал исходные значения.
  • Запись отключена по умолчанию. Чтение работает и без неё, но инструменты записи возвращают понятное сообщение «только чтение», пока вы не включите запись в приложении («Разрешить агентам создавать и изменять публичные URL-адреса») или с помощью localcan mcp access read_write. Включение доступа агентов не предоставляет доступ на запись. Это отдельные переключатели. Каждый вызов записи регистрируется в диагностическом выводе сервера, который захватывает ваш хост, так что у вас есть запись о том, что изменил агент. Пароль, переданный в set_password, маскируется в этом журнале.

Когда инструмент отказывает

  • Каждый инструмент выдаёт ошибку подключения к демону: LocalCan не запущен. Откройте настольное приложение или выполните localcan start -d.
  • list_traffic ничего не возвращает: захват выключен (он выключен по умолчанию и сбрасывается при перезапуске демона). Выполните localcan traffic enable или позвольте агенту вызвать enable_capture.
  • «Доступ MCP отключён»: доступ агентов выключен. Выполните localcan mcp enable или переключите настройку в приложении.
  • «MCP доступен только для чтения»: инструмент изменяет данные, а запись отключена. Выполните localcan mcp access read_write или включите переключатель в настройках.
  • «Для публичных URL-адресов требуется лицензия»: создание и добавление публичного URL-адреса требует активной лицензии. Активируйте её в приложении или с помощью localcan license activate <key>.
  • «Нужен план подписки»: снимки и контроль доступа доступны только по подписке. Бессрочная лицензия может открывать публичные URL-адреса, но не может публиковать снимок или устанавливать пароль. Оформите подписку на панели управления, затем повторите попытку.
  • «Уже есть снимок» или «снимка ещё нет»: используйте инструмент, указанный в сообщении. add_snapshot прикрепляет снимок к URL-адресу, у которого его нет, а update_snapshot обновляет уже существующий.
  • «Достигнут лимит снимков»: ваш план ограничивает количество публичных URL-адресов, которые могут одновременно обслуживать снимок. В сообщении перечислены URL-адреса, уже использующие слот, которые вы можете обновить с помощью update_snapshot вместо публикации нового.
  • «Комментарии требуют защищённого URL-адреса»: set_comments был вызван для URL-адреса без контроля доступа. Сначала выполните set_password.
  • «В вашей учётной записи нет отображаемого имени»: для ответа требуется имя, под которым будет опубликован комментарий. Установите его на панели управления или ответьте один раз на странице снимка, открыв его как владелец из приложения.
  • Хост показывает сервер как сбойный или без инструментов: графическое приложение не может найти localcan в PATH. Используйте абсолютный путь, проще всего через настройки копирования конфигурации.