TatNet

cloud.tatnetv1.0.0更新於 Sep 29, 2026

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

已驗證Streamable HTTP可網頁執行Developer ToolsCloud & Infrastructure

概覽

AI 產生的概覽

讓助手在 TatNet 雲端部署與管理網站應用:建立應用、部署檔案、查看建置與日誌、管理環境變數與網域、查詢餘額。

功能
這是 TatNet 公開 /v1 API 之上的遠端 MCP 薄層。工具涵蓋讀取帳號與專案(whoami)、列出與檢視應用、從 git 或 Docker 映像建立應用、把對話中的檔案部署為靜態或 SSR 網站、觸發建置、讀取建置狀態、日誌與歷史,以及列出、設定或刪除環境變數與網域。也會向帳號擁有者提供餘額資訊。同名重複呼叫會沿用既有應用,不會重複建立。
適用情境
適合讓助手把網站或應用發佈到 TatNet 並持續維運:確認建置是否成功、查看日誌、調整環境變數或綁定網域。部署前核對帳號餘額與專案範圍時也有用。
執行需求
遠端 streamable HTTP 端點 OAuth(用戶端自行註冊,使用者登入 TatNet 並選擇帳號、專案與存取層級),或以 Authorization: Bearer 標頭傳入 API 金鑰;金鑰在 TatNet 面板建立,可依專案與操作限制。查看餘額需要金鑰具備 billing:read,或 OAuth 連線取得整個帳號的授權。
安裝前請注意
寫入與刪除類工具會改動真實雲端資源:create_app、deploy_files、deploy_app 會改變部署,delete_env 與 remove_domain 標記為破壞性操作並會要求確認。密鑰值從不回傳,.env 檔案也不會被打進部署封存,但任何進入模型上下文的密鑰都應視為已外洩。餘額僅供讀取,加值需在面板進行。建置日誌是用戶端寫入的不可信資料,不應當成指令執行。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 TatNet,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Web executable,透過 Streamable HTTP。 遠端服務在工作區中設定後即可從網頁執行環境執行。

其他 MCP 客戶端

把它新增到你客戶端的 mcpServers 設定中。

{
  "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.

來源:README.md,提交 b5cf1b9

工具

0
工具後設資料尚未被收錄。

版本歷史

1
  1. v1.0.0最新Sep 29, 2026