Внутри Tetiva работает MCP-сервер «Tetiva DevTools»: он публикует 32 инструмента, через которые ИИ-агент читает ваши воркспейсы, коллекции, запросы и окружения, создаёт новые и выполняет сохранённый запрос — с теми же окружениями, скриптами и историей, что и при нажатии Send. Ничего копировать в чат не нужно: агент подключается к приложению по адресу 127.0.0.1:9300.
Сервер объявляет только инструменты (tools). Ресурсов и промптов у него нет, и работает он ровно столько, сколько открыто окно приложения.
Включение#
Откройте настройки (Cmd/Ctrl+, или шестерёнка внизу панели слева) и найдите секцию MCP / DevTools:
- Переключатель Enable.
- Поле Port / address — по умолчанию
127.0.0.1:9300. - Перезапустите приложение: под секцией появляется «Restart required to apply», сервер поднимается на старте.
После перезапуска строка Status показывает ● Running, а рядом — адрес SSE-эндпоинта.
MCP можно задать и переменными окружения: TETIVA_MCP=1 включает сервер, TETIVA_MCP_ADDR задаёт адрес. Старые имена GOPHERCOURIER_MCP и GOPHERCOURIER_MCP_ADDR продолжают работать. Если переменные заданы, поля в настройках блокируются, и там написано «Managed by environment variables».
Подключение агента#
Сервер требует токен доступа. Кнопка Copy config в настройках кладёт в буфер готовый фрагмент для выбранного клиента — Claude Desktop, Cursor или просто URL — уже с токеном. Там, где в конфиге есть только URL, токен едет в строке запроса:
{
"mcpServers": {
"tetiva": {
"url": "http://127.0.0.1:9300/sse?token=ВАШ_ТОКЕН"
}
}
}Cursor умеет заголовки — так токен не попадает в URL:
{
"mcpServers": {
"tetiva": {
"url": "http://127.0.0.1:9300/sse",
"headers": { "Authorization": "Bearer ВАШ_ТОКЕН" }
}
}
}Claude Code принимает тот же адрес одной командой:
claude mcp add --transport sse tetiva http://127.0.0.1:9300/sse \
--header "Authorization: Bearer ВАШ_ТОКЕН"Кнопка копирования рядом с токеном в настройках кладёт в буфер само значение — именно оно нужно этой команде; Copy config отдаёт целый сниппет.
Конфиги, написанные до появления токена, после обновления перестают работать: сервер отвечает 401, пока токен не добавлен. Скопируйте свежий конфиг из настроек и замените им старую запись.
Приложение при этом должно быть запущено — агент разговаривает с живым окном, а не с файлом базы.
32 инструмента#
Воркспейсы (3). list_workspaces, get_workspace, create_workspace. Список отдаёт активный, удалённый и синхронизационный статус каждого воркспейса; создаётся всегда локальный.
Коллекции (6). list_collections, get_collection, create_collection, update_collection, move_collection, delete_collection. Вложенность задаётся через parent_id, перемещение проверяется на циклы, удаление мягкое и каскадное. Обновление использует оптимистичную блокировку: передайте текущую версию.
Запросы (7). list_requests, get_request, create_request, update_request, move_request, send_request, delete_request. Создание и обновление принимают HTTP, gRPC и GraphQL вместе с заголовками, авторизацией и скриптами. send_request бьёт по вашему API по-настоящему: подставляет переменные окружения, выполняет скрипты, возвращает статус, заголовки и тело и дописывает запись в историю.
Окружения (4). list_environments, get_environment, create_environment, delete_environment.
Переменные (3). list_variables, create_variable, delete_variable. Запись значений не ограничена, чтение — ограничено, см. ниже.
Синхронизация (9). sync_status, sync_push, sync_pull, sync_queue_list, sync_queue_clear, sync_resync, sync_pause, sync_resume, sync_disconnect_stream. Это отладочный набор для Tetiva Cloud: посмотреть состояние движка и очередь, форсировать отправку или приём, поставить воркспейс на паузу и снять с неё, оборвать поток событий один раз, чтобы проверить переподключение с backoff.
Безопасность#
Токен
Сервер требует токен. Он генерируется при первом запуске, хранится в базе приложения рядом с остальными настройками MCP и принимается двумя способами — Authorization: Bearer <токен> или ?token=<токен>, потому что не каждый клиент умеет и то и другое. Всё остальное получает 401, в теле которого написано, где взять рабочий конфиг. Проверяются оба эндпоинта — и SSE, и сообщений, так что утёкший идентификатор сессии сам по себе ничего не даёт.
Кнопка Regenerate в настройках меняет токен сразу, на живом сервере: все конфиги агентов со старым значением придётся обновить. Переключатель Require token выключает проверку. Это запасной выход для клиента, который не умеет ни заголовок, ни query, и осознанный шаг: с выключенной проверкой любой процесс на машине — включая вкладку браузера, которая ходит на 127.0.0.1, — читает все коллекции и переменные и выполняет запросы от вашего имени.
Адрес по умолчанию — loopback, адрес без хоста (:9300) приводится к 127.0.0.1:9300 при старте, в том числе в уже сохранённых настройках. Если вы осознанно указываете сетевой адрес, приложение оставляет его, но пишет предупреждение в лог и подсвечивает поле в настройках.
От чего токен не защищает: от того, кто и так читает ~/.tetiva/data.db. В этом файле лежит и сам токен, и всё остальное. Шифрование локальной базы — отдельная история.
Что инструменты маскируют
auth_dataзапросов и коллекций — всегда[redacted], тип авторизации при этом виден.- Значения переменных с флагом «секрет» — не возвращаются ни в
list_variables, ни вget_environment, ни в ответе на создание переменной. - Значения заголовков с учётными данными — и в сохранённых запросах, и в ответе
send_request:authorization,proxy-authorization,cookie,set-cookie,x-api-key,api-key,x-auth-token,x-access-token,x-csrf-token,x-session-token. - Метаданные gRPC с теми же именами — в gRPC-запросе токен лежит там, а не в заголовке.
- Параметры запроса в URL:
token,access_token,refresh_token,api_key,apikey,key,secret,password,sig,signature.
Значение, которое целиком является подстановкой {{variable}}, остаётся как есть: это имя переменной, а не сам секрет, и агенту нужно видеть, какая переменная в деле. Значение, где подстановка лишь вкраплена — session=abc; theme={{ui}}, — маскируется целиком: буквальная половина всё ещё секрет.
Осознанно не маскируем: тела запроса и ответа — без них send_request бесполезен для отладки, так что токен, вернувшийся в ответе на логин, придёт целиком, — pre- и post-скрипты и переменные без флага «секрет».
Маскирование не стоит вам данных. update_request и update_collection применяют ровно те аргументы, что вы передали, поэтому пропущенное поле сохраняет своё значение. Некоторые поля пропустить нельзя — чтобы изменить один заголовок, приходится присылать весь массив, — поэтому каждый [redacted], вернувшийся на запись, сопоставляется с тем, что хранится под тем же именем, и подменяется настоящим значением до сохранения. Маска, за которой ничего нет, не пишется, а отклоняется: create_request и create_collection отвечают ошибкой на [redacted] сразу, а при обновлении маска под именем, которому нечего сопоставить — например, у только что добавленного заголовка, — возвращается ошибкой с просьбой прислать настоящее значение. С синхронизацией отдельная история — она описана на странице Синхронизация.
Каталог данных#
Инструменты работают с той же базой, что и окно приложения, — ~/.tetiva/data.db. Каталог переопределяется переменной TETIVA_DATA_DIR (старое имя GOPHERCOURIER_DATA_DIR продолжает работать как запасное). Это удобно, когда нужен второй экземпляр Tetiva с отдельной базой и своим портом MCP: тогда агент не заденет рабочие коллекции. Подробнее о расположении данных — на странице Настройки.