MCP-сервер знаний по разработке Telegram Mini Apps и TON blockchain. AI-агент спрашивает — сервер отвечает, используя Qwen Code и базу из 55 документов (29,500+ строк).
AI-агент (docker-git у пользователя)
|
MCP tool: search({ query: "..." })
|
mcp-tma-client (npm-пакет, stdio-to-SSE bridge)
| HTTP
v
Express сервер (VPS)
|-- Rate limit (10 req/s по IP)
|-- /sse -> MCP SSE Transport
| |
v v
Qwen Code (Docker-контейнер)
|
knowledge/ (55 markdown-файлов)
- Node.js 20+
- Docker + Docker Compose
- GPU или достаточно RAM для Qwen Code
git clone https://github.com/SpawnDock/MCP.git
cd MCP
npm install
cp .env.example .envPORT=3000
RATE_LIMIT_RPS=10
QWEN_MODE=http
QWEN_API_URL=http://localhost:8080
QWEN_TIMEOUT_MS=60000
QWEN_CODE_COMMAND=qwen
QWEN_CODE_AUTH_TYPE=qwen-oauth
PUBLIC_ORIGIN=http://localhost:3000
# Продакшен с docker-compose.prod.yml: см. .env.example — PUBLIC_HOST (:80 или FQDN), PUBLIC_ORIGIN без :3000 (наружу 80/443 через Caddy).
TELEGRAM_BOT_TOKEN=
TELEGRAM_BOT_USERNAME=rustgpt_bot
TELEGRAM_MINI_APP_SHORT_NAME=tma
CONTROL_PLANE_URL=http://localhost:3000
BOT_POLL_TIMEOUT=25
TELEGRAM_*, CONTROL_PLANE_URL и BOT_POLL_TIMEOUT нужны для npm run bot или npm run bot:dev. Бот использует TELEGRAM_BOT_USERNAME и TELEGRAM_MINI_APP_SHORT_NAME, чтобы отдавать TMA deep link вида https://t.me/rustgpt_bot/tma?startapp=<slug>.
Если те же TELEGRAM_BOT_TOKEN, TELEGRAM_BOT_USERNAME и TELEGRAM_MINI_APP_SHORT_NAME заданы процессу MCP/API (npm start / npm run dev), при первом подключении dev-tunnel к проекту владелец получит сообщение в Telegram со ссылками на превью.
Режимы Qwen / поиска по базе знаний:
QWEN_MODE=http(по умолчанию) — запрос к HTTP API (QWEN_API_URLили OpenRouter приOPENROUTER_KEY).QWEN_MODE=cli— локальный бинарьqwenна машине, где запущен API (QWEN_CODE_COMMAND,QWEN_CODE_CWD,QWEN_CODE_AUTH_TYPE).QWEN_MODE=container— каждый поиск вызываетdocker/podman runс образомQWEN_CONTAINER_IMAGE; каталогknowledge/монтируется только для чтения вQWEN_CONTAINER_CORPUS_PATH. Сборка образа, примерdocker runи обновление корпуса без пересборки: docker/qwen-search/README.md. ПеременныеQWEN_CONTAINER_*и опциональноQWEN_KNOWLEDGE_HOST_PATH— в.env.example.
Для cli: QWEN_CODE_AUTH_TYPE=qwen-oauth ожидает OAuth credentials в ~/.qwen/oauth_creds.json.
npm run build
npm startИли:
npm run devДля локального polling-бота:
npm run bot:devПолный локальный стек с HTTPS (Caddy tls internal) для проверки сценариев, где нужен https:// на этой машине.
mkdir -p data/state
npm run build
npm run docker:dev
# или: docker compose up -d --buildСервисы:
- qwen — Qwen Code, порт 8080 на хосте (удобно для гибрида: только Qwen в Docker,
npm run devна хосте сQWEN_API_URL=http://127.0.0.1:8080). - mcp-server — API и MCP, http://localhost:3000 и через Caddy https://localhost (и https://127.0.0.1).
- caddy — 80/443, лендинг на
/, остальное — прокси на MCP.
Базовые переменные для compose лежат в deploy/spawndock-docker-dev.stack (PUBLIC_ORIGIN=https://localhost). Секреты и TELEGRAM_* задавайте в корневом .env (рядом с docker-compose.yml) — Compose подставит их в контейнеры.
Доверие локальному HTTPS (браузер): у Caddy внутренний CA. Экспорт корневого сертификата (один раз):
docker compose cp caddy:/data/caddy/pki/authorities/local/root.crt /tmp/spawndock-caddy-local.crt
# Далее импортируйте root.crt в доверенные корневые (Chrome: Настройки → Безопасность → Управление сертификатами) или см. документацию вашей ОС.Telegram: long polling бот в том же compose: положите токен и username в .env, затем npm run docker:dev:telegram или docker compose --profile telegram up -d --build. Mini App из телефона по-прежнему нуждается в публичном HTTPS (туннель, например dev-tunnel / cloudflared / ngrok); https://localhost с ПК после импорта CA достаточно для проверки API и ссылок на этой машине.
Продакшен на VPS: docker compose -f docker-compose.prod.yml — MCP, бот, образ поиска и Caddy на 80/443; порт 3000 наружу не публикуется. См. .env.example и OPERATOR.md.
npm testЕдинственный MCP tool. Принимает запрос на естественном языке, Qwen ищет по документации и формирует ответ.
Input:
{
"query": "как реализовать корзину в TMA"
}Output:
{
"answer": "Для корзины используйте React-контекст...",
"sources": [
{ "file": "templates/shop/components.md", "section": "Cart" },
{ "file": "guides/webapp-api.md", "section": "MainButton" }
]
}Ограничения: query не пустой, максимум 2000 символов.
55 файлов, 29,500+ строк документации. Покрывает всю экосистему TMA + TON.
guides/
getting-started.md -- создание проекта, Vite + React + TWA SDK
webapp-api.md -- WebApp API: MainButton, BackButton, HapticFeedback, Popup
navigation.md -- роутинг, BackButton, deep linking, табы
theming.md -- темы Telegram, CSS-переменные, dark/light
common-mistakes.md -- 10 типичных ошибок с исправлениями
advanced-tma-features.md -- CloudStorage, BiometricManager, QR-сканер, Invoice, Fullscreen, Accelerometer
performance.md -- бандл, lazy loading, виртуализация, кэширование
testing-tma.md -- моки WebApp SDK, TON Connect, Playwright E2E
security.md -- initData HMAC, CSP, XSS, rate limiting
workflows.md -- 6 end-to-end воркфлоу (beginner -> advanced)
guides/deploy/
cloudflare-pages.md -- Wrangler CLI, GitHub integration
vercel.md -- Vercel CLI, конфигурация
github-pages.md -- GitHub Actions, SPA routing
guides/
ton-connect.md -- базовая интеграция: wallet, transfer, manifest
ton-connect-advanced.md -- get-методы, мульти-сообщения, TON Proof, Jetton/NFT
ton-agentic-patterns.md -- 3 модели AI-blockchain: Propose+Approve, Agentic, Read-Only
guides/
ton-smart-contracts.md -- Tolk, Tact, FunC, акторная модель, Blueprint
ton-tvm.md -- TVM: стек, cells, газ, регистры, опкоды
ton-jettons.md -- TEP-74, мастер/кошелёк, минт/трансфер/сжигание
ton-nft.md -- TEP-62, коллекции, метаданные, royalty, SBT
ton-defi.md -- AMM, стейкинг, DAO, multisig, DeDust/Ston.fi
ton-swap-dex.md -- DeDust, Ston.fi, Omniston, LP, swap UI
ton-wallet-versions.md -- v3r2, v4r2, v5r1, Agentic wallet сравнение
ton-agentic-wallets.md -- автономные AI-кошельки, operator/owner ключи
ton-dns.md -- .ton, .t.me домены, TEP-81
ton-sites.md -- ADNL, RLDP, децентрализованный хостинг
ton-storage.md -- Bag of Cells, storage providers, файлы
ton-payment-channels.md -- off-chain каналы, микротранзакции
ton-payments-tma.md -- 5 способов оплаты: TON, Jetton, Stars, TON Pay, Invoice
ton-analytics.md -- forensics, мониторинг, whale alerts
ton-transaction-tracking.md -- lifecycle, hash типы, polling, SSE
ton-contract-security.md -- 10 уязвимостей, аудит, TEP compliance
ton-appkit.md -- @ton/appkit, React hooks, swap integration
templates/
shop/ -- каталог, корзина, checkout (prompt.md + components.md)
game/ -- Canvas/Phaser, лидерборд, скоринг
landing/ -- hero, features, CTA
quiz/ -- вопросы, таймер, результаты
menu/ -- категории, корзина, доставка
portfolio/ -- проекты, галерея, контакты
reference/
twa-sdk.md -- @twa-dev/sdk API (все методы и типы)
telegram-bot-api.md -- Bot API для TMA
ton-sdk.md -- @ton/ton, @ton/crypto, tonweb
ton-apis.md -- TON Center, TON API (tonapi.io)
ton-standards.md -- TEP-62, TEP-64, TEP-74, TEP-66, TEP-81, TEP-85, TEP-89
ton-popular-tokens.md -- USDT, NOT, DOGS, STON, GRAM + адреса контрактов
blueprint.md -- Blueprint framework, Sandbox, деплой
ton-explorers.md -- Tonviewer, TON Scan, TONAPI, инструменты
tolk-language.md -- Tolk: синтаксис, типы, миграция с FunC
ton-mcp-ecosystem.md -- обзор всех MCP-серверов в экосистеме TON
npm-пакет mcp-tma-client в packages/mcp-tma-client/. Работает как stdio-to-SSE bridge — AI-агент видит его как локальный MCP-сервер, а он проксирует запросы на бэкенд.
Конфигурация в проекте пользователя (.mcp.json):
{
"mcpServers": {
"tma-knowledge": {
"command": "npx",
"args": ["mcp-tma-client"],
"env": {
"MCP_SERVER_URL": "https://tma-api.example.com/sse"
}
}
}
}docs/PRD-public-knowledge-search-service.md— публичный/knowledgeAPIdocs/PRD-usage-dashboard-minimal.md— панель использования (SQLite); UI:/ops/usage(Basic AuthOPS_USAGE_*), пиксель лендинга:/ops/pixel/landing.gif
src/
index.ts -- точка входа, запуск Express
server.ts -- Express: CORS, rate limit, health, SSE
mcp.ts -- MCP server, tool search
config.ts -- env-переменные
qwen/
client.ts -- HTTP-клиент к Qwen API
parser.ts -- парсинг ответа, fallback
prompts.ts -- системный промпт
packages/
mcp-tma-client/ -- npm-пакет тонкого клиента
knowledge/ -- база знаний (55 файлов)
Dockerfile
docker-compose.yml