TatNet

cloud.tatnetv1.0.0Updated Sep 29, 2026

Deploy and manage web apps on TatNet, a Russian cloud: builds, logs, env, domains, balance

VerifiedStreamable HTTPWeb executableDeveloper ToolsCloud & Infrastructure

Overview

AI-generated 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.
Before you install
Write and delete tools act on real cloud resources: create_app, deploy_files and deploy_app change deployments, while delete_env and remove_domain are marked destructive and prompt for confirmation. Secret values are never returned, and a .env file is excluded from deploy archives, but any secret placed in the model context should be treated as leaked. Balance is read-only; top-ups happen in the panel. Build logs are untrusted client-written data and should not be treated as instructions.

Installation

In SourceWeft

  1. Open TatNet in the dashboard and add it to a workspace.
  2. 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 на каждом вызове: политика подключения или ключа пересекается с ролью человека.

Инструменты (приложения и баланс)

ИнструментТипЧто делает
whoamiчтениеаккаунт и проекты, ограничен ли ключ
get_balanceчтениебаланс: доступно сейчас, деньги, бонусы и открыты ли они. Только владельцу: ключу нужно billing:read, OAuth-подключению — выдача на весь аккаунт. Пополнения нет — оно в панели
list_apps, get_appчтениеаппы; у get_app — адрес, домены, последняя сборка
create_appзаписьапп из git или Docker-образа; идемпотентен по имени
deploy_filesзаписьвыкладка САЙТА (статика, SSR) из файлов разговора: пакует tar.gz → /v1 …/deployments; создаёт апп при первом вызове, повтор с тем же именем — тот же апп. ⚠ Бэкенд платформа из папки пока не собирает — отказ до загрузки
deploy_appзаписьновая сборка git/docker-аппа; у docker-аппа с image — сначала переключает его на новый образ (PATCH docker_image), потом собирает
get_buildчтениестатус с ожиданием до 45 с; при провале — хвост лога
get_build_logs, list_buildsчтениелог и история сборок
list_env, set_envчтение/записьпеременные; значения секретов не отдаются никогда
delete_env, remove_domainудалениепомечены destructiveHint — клиент спросит человека
list_domains, add_domainчтение/записьдомены и инструкция по DNS

Удаления аппов нет намеренно: необратимые действия появятся только с двухшаговым подтверждением.

Правила, на которых держится

  • Секрет не попадает в контекст модели. Контекст логируется у провайдера модели; секрет, попавший туда, считается утёкшим. .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-ключи»; можно ограничить проектами и действиями.

bash
claude mcp add --transport http tatnet https://mcp.tatnet.cloud/mcp \  --header "Authorization: Bearer tn_live_…"

Окружение

ПеременнаяПо умолчанию
LISTEN:8080
API_BASE_URLhttps://api.tatnet.ru/v1stage — …stage…/v1
PUBLIC_URLhttps://mcp.tatnet.cloudосновной внешний адрес (метаданные OAuth)
EXTRA_PUBLIC_URLS—дополнительные внешние имена через запятую (например, на время переезда); на каждом имени сервер говорит от его лица
METRICS_TOKEN—без него /metrics отвечает 404

Метрики: tatnet_mcp_tool_calls_total{tool,outcome}, tatnet_mcp_tool_duration_seconds{tool}, tatnet_mcp_auth_failures_total{reason}.

Разработка

bash
go build ./... && go test ./...

Сквозной тест (cmd/tatnet-mcp/e2e_test.go) поднимает настоящий MCP-клиент SDK против сервера, а сервер — против поддельного /v1 с состоянием в памяти, и проверяет последствия вызовов: что ушло в архив, сколько аппов создано, что попало в ответ модели.

Каталоги

Сервер один; каталогов, из которых о нём узнают клиенты, три, и в каждый он подаётся отдельно.

КаталогЧто нужноСтатус
Официальный реестр MCPserver.json в корне + владение доменом tatnet.cloudкарточка готова
Каталог коннекторов Claude (claude.ai/directory/manage)форма, тестовый аккаунт, документация, политика конфиденциальности—
Плагины ChatGPT (platform.openai.com/plugins)верификация издателя, файл /.well-known/openai-apps-challenge, 5+3 тестовых сценария—

Реестр. Пространство имён cloud.tatnet/* подтверждается TXT-записью на АПЕКСЕ tatnet.cloud (не под селектором вроде _mcp.), адрес сервера держим на том же домене (тест TestServerJSONFitsTheRegistry; реестр этого не требует, это наше правило). Ключ Ed25519 — только OpenSSL 3 (системный openssl macOS — LibreSSL, Ed25519 не умеет):

O=/opt/homebrew/opt/openssl@3/bin/openssl$O genpkey -algorithm Ed25519 -out key.pem          # хранить как секрет, не в репозиторииecho "tatnet.cloud. IN TXT \"v=MCPv1; k=ed25519; p=$($O pkey -in key.pem -pubout -outform DER | tail -c 32 | base64)\""# ↑ эту запись — в зону tatnet.cloud, дождаться распространенияmcp-publisher login dns --domain tatnet.cloud \  --private-key "$($O pkey -in key.pem -noout -text | grep -A3 priv: | tail -n +2 | tr -d ' :\n')"mcp-publisher publish

⚠ Каждая публикация требует НОВОЙ version в server.json: реестр отвергает повтор уже опубликованной версии.

Аннотации. Оба каталога читают title, readOnlyHint, destructiveHint, openWorldHint с провода, а ChatGPT отклоняет инструмент, у которого флаг не указан явно. Тест TestToolAnnotationsAreExplicitOnTheWire проверяет сырой tools/list.

Source: README.md at commit b5cf1b9

Tools

0
Tool metadata has not been indexed yet.

Version history

1
  1. v1.0.0LatestSep 29, 2026