
TatNet
cloud.tatnetv1.0.0Updated Sep 29, 2026
Deploy and manage web apps on TatNet, a Russian cloud: builds, logs, env, domains, balance
Overview
Lets an assistant deploy and manage web apps on the TatNet cloud: create apps, deploy files, read builds and logs, manage env vars and domains, check balance.
- What it does
- A thin remote MCP layer over TatNet's public /v1 API. Tools cover reading account and projects (whoami), listing and inspecting apps, creating apps from git or a Docker image, deploying a static or SSR site from files in the conversation, triggering builds, reading build status, logs and history, and listing, setting or deleting environment variables and domains. It also exposes balance information for the account owner. Repeated calls with the same app name reuse the existing app rather than creating duplicates.
- When to use it
- Useful when you want an assistant to publish a site or app to TatNet and then operate it: check whether a build succeeded, inspect logs, adjust environment variables or attach a domain. Also relevant for checking account balance and project scope before deploying.
- Requirements
- Remote streamable HTTP endpoint at nothing to install locally. Authentication is OAuth (the client registers itself and the user signs in to TatNet and picks account, projects and access level) or an API key sent as an Authorization: Bearer header. Keys are created in the TatNet panel and can be limited by project and action. Balance access needs billing:read on a key or account-wide OAuth grant.
Installation
In SourceWeft
- Open TatNet in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.
Other MCP clients
Add this to your client's mcpServers config.
{
"mcpServers": {
"mcp": {
"type": "http",
"url": "https://mcp.tatnet.cloud/mcp"
}
}
}README
tatnet-mcp
MCP-сервер TatNet: управление платформой из Claude (claude.ai, Desktop, Code),
ChatGPT и любого клиента Model Context Protocol.
«Сделай сайт и выложи на TatNet» — это вызов deploy_files.
Устройство
- Тонкий слой над публичным
/v1. Своей БД, своих прав и бизнес-логики нет: каждый инструмент зовётapi.tatnet.ru/v1черезtatnet-goключом того, кто подключился. Права — политика ключа ∩ живая роль создателя, как у CLI и SDK. Чего нет в/v1, того нет и здесь: сначала ручка в/v1, потом инструмент. - Streamable HTTP без состояния (
/mcp), официальныйmodelcontextprotocol/go-sdk. Реплики взаимозаменяемы, выкат клиентов не рвёт. - Авторизация — OAuth или ключ
/v1. Клиент без поля для заголовка регистрируется сам (DCR), человек входит в TatNet и на экране согласия выбирает аккаунт, проекты и уровень доступа; подключение появляется в панели рядом с API-ключами и отзывается там же. Токен выдан только для MCP и дальше сервера не уходит — в/v1сервер ходит сам от имени подключения. Клиенты, которые умеют передать заголовок, могут прийти и с ключомAuthorization: Bearer tn_live_…. Права в обоих случаях решает api на каждом вызове: политика подключения или ключа пересекается с ролью человека.
Инструменты (приложения и баланс)
Удаления аппов нет намеренно: необратимые действия появятся только с двухшаговым подтверждением.
Правила, на которых держится
- Секрет не попадает в контекст модели. Контекст логируется у провайдера
модели; секрет, попавший туда, считается утёкшим.
.envизdeploy_filesв архив не кладётся (как уtatnet deploy), значения секретов не возвращаются. - Пустой список ≠ «ничего нет».
/v1отвечает 200 и пустым списком, когда ключу не видно ресурсов; инструменты говорят это прямо, если ключ ограничен. - Отказ — текст, по которому можно действовать: что случилось и что делать (403 → «расширьте ключ, не повторяйте», 5xx → «наша сторона, повторите»).
- Лог сборки — недоверенные данные. Его пишет код клиента; инструкции сервера и схемы полей говорят модели не исполнять найденное в нём.
- «Сборка прошла» ≠ «работает».
get_buildждёт конца раскатки и отдаётdeploy_state; живым апп называется только приlive. - Повторы не плодят ресурсы. Модели повторяют вызовы;
create_appиdeploy_filesнаходят апп по имени вместо создания второго.
Подключение
Адрес сервера — https://mcp.tatnet.cloud/mcp.
Через OAuth — в клиенте с поддержкой удалённых MCP-серверов (веб-чаты, десктопные приложения, IDE) достаточно указать адрес и выбрать OAuth: клиент зарегистрируется сам и откроет вход в TatNet.
Ключом — для клиентов, которые передают заголовок, и для скриптов. Ключ создаётся в панели TatNet → «API-ключи»; можно ограничить проектами и действиями.
Окружение
Метрики: tatnet_mcp_tool_calls_total{tool,outcome},
tatnet_mcp_tool_duration_seconds{tool}, tatnet_mcp_auth_failures_total{reason}.
Разработка
Сквозной тест (cmd/tatnet-mcp/e2e_test.go) поднимает настоящий MCP-клиент
SDK против сервера, а сервер — против поддельного /v1 с состоянием в памяти,
и проверяет последствия вызовов: что ушло в архив, сколько аппов создано,
что попало в ответ модели.
Каталоги
Сервер один; каталогов, из которых о нём узнают клиенты, три, и в каждый он подаётся отдельно.
Реестр. Пространство имён cloud.tatnet/* подтверждается TXT-записью на
АПЕКСЕ tatnet.cloud (не под селектором вроде _mcp.), адрес сервера держим
на том же домене (тест TestServerJSONFitsTheRegistry; реестр этого не
требует, это наше правило). Ключ Ed25519 — только OpenSSL 3 (системный
openssl macOS — LibreSSL, Ed25519 не умеет):
⚠ Каждая публикация требует НОВОЙ version в server.json: реестр
отвергает повтор уже опубликованной версии.
Аннотации. Оба каталога читают title, readOnlyHint,
destructiveHint, openWorldHint с провода, а ChatGPT отклоняет инструмент,
у которого флаг не указан явно. Тест TestToolAnnotationsAreExplicitOnTheWire
проверяет сырой tools/list.
Source: README.md at commit b5cf1b9
Tools
0Version history
1- v1.0.0LatestSep 29, 2026

