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 云上部署和管理 Web 应用:创建应用、部署文件、查看构建与日志、管理环境变量和域名、查询余额。

功能
这是 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