Барлық мақалалар
6 мин оқу

TON trading agent құру: MCP арқылы оқу, котировка, своп

MCP негізіндегі TON trading agent: агент балансты оқиды, қатаң котировка алады және non-custodial своп жинайды — get_balance, get_swap_quote, build_swap_tx.

TON trading agentсауда агентіMCPTON свопnon-custodialOmniston

Кез келген TON trading agent тап болатын алғашқы мәселе

Сіз AI агентке «баға түскенде 50 USDT-ны GRAM-ға своп жаса» дейсіз — ал ол 50-дің орнына 50 000 USDT-ға транзакция жібереді. Себебі TON-дағы USDT-да decimals = 6 (50 USDT = 50 000 000 raw-бірлік), ал агент әдепкіде оны тоғыз нөлі бар кәдімгі жетон деп есептеп, соманы 1000 есе үлкейтіп жіберді. 1000 еселік қате, нақты ақша, кері қайтарылмайтын транзакция. Дәл сол тамырдан кері бағыттағы қате де өсіп шығады: агент баланста шикі 1000000000 санын көріп, «сізде миллиард USDT бар» деп сеніммен есеп береді, ал шын мәнінде онда 1000 ғана.

Бұл ойдан шығарылған қорқынышты әңгіме емес — LLM-ді TON-дағы DeFi-ға тікелей шикі RPC арқылы қосатын әркім сүрінетін нақ сол тастар: шатасқан decimals, жетон балансын jetton-әмиян мекенжайынсыз оқи алмау, контекст арқылы сыртқа кетіп қалған жеке кілт. Төменде — балансты оқитын, қатаң котировка алатын және сіздің кілттеріңізге бір рет те тимей своп жинайтын TON trading agent-ті (сауда агентін) қалай құру керектігі. Құрал — TONNode, TON үшін hosted MCP-сервер.

TON trading agent деген не және оған MCP не үшін керек

Trading agent — бұл пайдаланушының сұрауы бойынша желі күйін оқып, мәміле дайындай алатын LLM (Claude, Cursor, Codex немесе кез келген басқа MCP-клиент): «USDT балансымды көрсет», «500 USDT-ға қанша GRAM аламын», «своп жина». Модельдің өзі блокчейнді көрмейді — оған құралдар керек.

Дәл осы жұмысты MCP (Model Context Protocol) атқарады — агенттер сыртқы құралдарды шақыратын стандарт. Модельді шикі ADNL-сұрауларын құрастыруға және BOC-ұяшықтарын талдауға үйретудің орнына, сіз оған типтелген функциялар жинағын бересіз: «балансты бер», «котировка бер», «транзакция жина». TONNode осындай құралдардың көзі ретінде қосылады да, агентке желімен жұмыс істеу үшін дәл 16 функция береді: оқу, своп, кроссчейн, әмиян генерациясы.

Trading agent-ке олардың бесеуі керек, әрі бесеуі де тегін тарифте қолжетімді:

оқу (get_balance, get_jetton_balance)
   -> decimals-ті нақтылау (get_jetton_info)
      -> котировка алу (get_swap_quote)
         -> своп жинау (build_swap_tx)
            -> әмиян TonConnect арқылы қол қояды

Соңғы қадамның ең маңызды тұсы: қол қоятын — сервер емес, пайдаланушының әмияны. TONNode қол қойылмаған хабарламаларды қайтарады — мұның неге принципті екенін соңында талдаймыз.

1-қадам: агент балансты оқиды (get_balance, get_jetton_balance)

Своп жасамас бұрын, агент қолында не бар екенін түсінуі керек. Екі құрал:

  • get_balance — мекенжайдағы GRAM балансы. GRAM — бұл 2026 жылдың маусымында атауы өзгертілген Toncoin; желінің өзі бұрынғыдай TON деп аталады.
  • get_jetton_balance — жетон балансы: USDT, NOT, кез келген басқасы. Мұндағы сиқыр — jetton-әмиян он-чейн есептеледі. Сіз иесінің мекенжайы мен жетонның мастер-мекенжайын бересіз, ал TONNode jetton-әмиянның мекенжайын өзі шығарып, оның балансын оқиды. Бұл мекенжайды алдын ала біліп, бір жерде сақтап жүрудің қажеті жоқ.

Агентке берілетін промпт нақ былай көрінеді:

UQAbc...xyz әмиянының балансын тексер:
онда қанша GRAM және қанша USDT бар?

Сахна артында модель нативті баланс үшін get_balance, ал USDT үшін get_jetton_balance шақырады. Бір ғана мәселе бар: қайтарылатын нәрсе әлі «адамға түсінікті» сома емес, шикі бірліктер. Ең маңыздысы міне осы жерден басталады. USDT балансын jetton-әмиян мекенжайларымен әуре болмай бір шақырумен қалай алуға болатыны туралы бөлек талдау бар: /blog/usdt-balance-ton-one-call.

Бәрін decimals шешеді: get_jetton_info және неге USDT = 6

TON-да баланстар мен сомалар raw-бірліктерде сақталады — бөлшек бөлігі жоқ бүтін сандарда. Адам оқитын соманы алу үшін шикі санды 10^decimals-ке бөлу керек. Ал енді қақпан: әртүрлі жетондарда decimals саны әртүрлі.

  • USDT-да decimals = 6. Яғни 1 USDT = 1 000 000 raw-бірлік.
  • TON-дағы жетондардың көпшілігінде decimals = 9 (GRAM сияқты). Яғни 1 жетон = 1 000 000 000 raw-бірлік.

6 бен 9-ды шатастыру — сомада дәл 1000 есе қателесу деген сөз. Мақаланың басындағы сол «миллиард USDT». Trading agent үшін бұл косметика емес, сенімнің түп-тамыры: егер ол сандардың разрядын шатастырса, оған мәміле жинауға рұқсат беруге болмайды.

Сондықтан конвейерге get_jetton_info кірістіріледі — ол жетонның метадеректерін береді: атауы, символы, эмиссиясы және — ең бастысы — decimals. Агенттің ішіндегі дұрыс логика:

raw       = get_jetton_balance(...)   // мысалы, 1000000000
decimals  = get_jetton_info(...)      // USDT үшін → 6
human     = raw / 10 ** decimals      // 1000000000 / 1e6 = 1000 USDT

Дәл сол raw decimals = 9 болғанда 1 токен беретін еді — айырмашылық орасан. decimals-ті промптқа хардкодпен жазбаңыз және модельге оны жадынан «ойлап табуға» жол бермеңіз: жаңа жетонда ол міндетті түрде қателеседі. Ол әр жолы get_jetton_info-дан тартып алып, факт бойынша қайта есептесін. Осы қақпан және оның адамдарға неге қымбатқа түсетіні туралы толығырақ: /blog/jetton-decimals-ton.

2-қадам: Omniston арқылы қатаң котировка (get_swap_quote)

Баланстар оқылды және дұрыс бірліктерге қайта есептелді — енді агентке баға керек. DeFi-да «көзбен мөлшерленген баға» жұмыс істемейді: өтімділік бірнеше DEX арасында шашыраңқы, бағам қозғалып тұрады, сондықтан агент болжамға емес, өзекті котировкаға сүйенуі керек.

get_swap_quoteOmniston протоколы арқылы GRAM ⇄ жетон свопына қатаң котировка береді; бұл протокол TON-ның ең ірі екі DEX-інің — STON.fi мен DeDust-тың өтімділігін бірден біріктіреді. Агенттің пулдарды өзі сұрастырып, бағаларды салыстырып, сырғанауды (slippage) есептеп отыруының қажеті жоқ: Omniston біріктірілген өтімділіктен ең жақсы бағытты қайтарады.

Котировка бер: дәл қазір 50 USDT-ға қанша GRAM аламын?

Модель get_swap_quote-ты 50000000 сомасымен (өткен қадамдағы сол raw-бірліктер) шақырады да, нақты сандарды алады: кіріске қанша, шығысқа қанша, қандай бағытпен, қандай сырғанаумен. Бұл — шешім қабылдау нүктесі: егер агентте шарт болса («бағам X-тен жақсы болғанда ғана своп жаса»), ол котировканы шекті мәнмен салыстырып, не әрі қарай жүреді, не келесі итерацияны күтеді. Маңыздысы: котировка әлі мәміле емес. Ешқандай қаражат қозғалмайды, ешнәрсеге қол қойылмайды. Бұл — нарықты оқу ғана.

3-қадам: қол қойылмаған свопты жинау (build_swap_tx) және әмияндағы қолтаңба

Пайдаланушы котировканы көрді де, «иә, своп жасаймыз» дейді. Агент build_swap_tx-ті шақырып, TonConnect үшін дайын қол қойылмаған своп транзакциясын алады.

«Қол қойылмаған» деген сөзді ерекше атап өтемін. Сервер дұрыс хабарлама жинайды — алушының мекенжайы, payload, сома, бағыт параметрлері — және оны сол күйінде қайтарады. Одан әрі хабарлама пайдаланушының әмиянына жіберіледі (Tonkeeper, MyTonWallet, кез келген TonConnect-үйлесімді әмиян), пайдаланушы нақ неге қол қойып жатқанын көреді және өзі растайды. Қолтаңбаны серверде емес, пайдаланушының әмиянында тұратын оның жеке кілті қояды.

get_balance / get_jetton_balance   →  не бар екенін оқу
        ↓
get_jetton_info                    →  decimals-ті нақтылау, қайта есептеу
        ↓
get_swap_quote (Omniston)          →  қатаң котировка
        ↓
build_swap_tx                      →  қол қойылмаған транзакция
        ↓
пайдаланушының әмияны (TonConnect) →  қолтаңба және жіберу

Әр қадам — жеке әрі айқын құрал шақыруы. Агент ақшамен ешнәрсені «өз білгенінше» аяғына жеткізбейді: ол дайындайды, ал шешім мен қолтаңба адамда қалады. Котировкадан қолтаңбаға дейінгі non-custodial своптың толық сценарийі осы жерде қадам-қадам талданған: /blog/agent-swap-ton-noncustodial.

Non-custodial: сервер неге агенттің кілттерін ешқашан ұстамайды

Бұл маркетингтік тұжырым емес, архитектуралық шекара. TONNode-та своп, кроссчейн және әмиян генерациясы құралдары қатаң түрде non-custodial:

  • Сервер транзакцияларға ешқашан қол қоймайды.
  • Сервер жеке кілттер мен қаражатты ешқашан сақтамайды.
  • Оның сыртқа беретінінің бәрі — қол қойылмаған TonConnect-хабарламалары.

Бұл неге дәл trading agent үшін маңызды? Себебі агент анықтамасы бойынша ақшамен жұмыс істейді және анықтамасы бойынша қателесуі мүмкін — сұрауды дұрыс түсінбеуі, соманы шатастыруы, циклге түсіп қалуы ықтимал. Егер кілттер серверде жатып, ол өзі қол қойса, агенттің қатесі сіз білмей тұрып қаражаттан айырылу дегенді білдірер еді. Non-custodial сұлбада соңғы шеп — сіз: сіздің әмияныңыз растамайынша, бірде-бір транзакция кетпейді.

Мұны TON Foundation-ның ресми @ton/mcp-імен салыстырыңыз — бұл custodial (кастодиалды) агент-әмиян: ол operator-кілтті ұстайды және өзі қол қояды (split-key сұлбасы, мұнда operator-кілт агентте, owner-кілт пайдаланушыда). Оның да өз күшті жақтары бар — адамның қатысуынсыз автономды жұмсау, NFT және DNS-пен жұмыс, Foundation-ның ресми мәртебесі. Бірақ сенім моделі басқаша: онда агент шынымен қаражатты қозғай алады. TONNode саналы түрде қарама-қарсы шекараны таңдайды: сервер мүлдем ешнәрсеге қол қоймайды. Екі тәсілдің кеңейтілген салыстырмасы: /blog/custodial-vs-noncustodial-mcp.

Қалай қосу керек және 5 минутта неден бастау керек

Жақсы жаңалық: сауда конвейерін жинау үшін ақы төлеудің қажеті жоқ. Бірақ екі тегін жолды шатастырып алмау маңызды — оларда құралдар жинағы әртүрлі.

Жергілікті жария конфиг толық оқу жинағын береді (8 құрал: get_masterchain_info, get_balance, get_account_state, get_transactions, run_get_method, get_jetton_balance, parse_address, get_jetton_info). npx арқылы, кілтсіз орнатылады:

{
  "mcpServers": {
    "ton": {
      "command": "npx",
      "args": ["-y", "@tonnode/mcp"]
    }
  }
}

@tonnode/mcp пакеті — open source (MIT), npm мен GitHub-та жатыр (tonnode/mcp), агент пен желі арасында HTTP-қабаттарсыз, TON-ның нативті ADNL-протоколы бойынша жұмыс істейді. Конфигті Claude Desktop, Cursor немесе кез келген MCP-клиентке қою жеткілікті — агент енді балансты оқи алады және get_jetton_info-ны шақыра алады.

Ал котировкалардың өзі — get_swap_quote пен build_swap_txСВОП тобына жатады және hosted-эндпоинт арқылы жүреді. Ең маңызды тұсы: тегін Hobby кілтінде 16 құралдың бәрі қолжетімді, оның ішінде котировка мен своп жинау да бар. Яғни бүкіл сауда конвейері (оқу → котировка → своп) тегін жиналады — бірақ дәл hosted Hobby кілті арқылы, жергілікті жария конфиг арқылы емес. Hosted-эндпоинтке арналған конфиг:

{
  "mcpServers": {
    "ton": {
      "type": "http",
      "url": "https://mcp.tonnode.io/mcp",
      "headers": { "Authorization": "Bearer tn_live_…" }
    }
  }
}

TONNode-та дәл 16 құрал бар және барлық тарифтерде 16-ның бәрі қолжетімді — сіз функционалдық үшін емес, тек өткізу қабілеті үшін төлейсіз:

  • Hobby — мәңгі тегін, 60 сұрау/мин, картасыз.
  • Pro — $29/ай, 300 сұрау/мин.
  • Scale — $199/ай, 1200 сұрау/мин.

Сауда конвейерін бастап, сынап көру үшін тегін Hobby кілті артығымен жеткілікті: минутына 60 сұрау — агенттің көптеген дәйекті шақыруын өтейді. Карта керек емес, кілт жүйеге кірген бойда беріледі.

Тегін Hobby кілтін алу (60 req/min, картасыз): tonnode.io/dashboard?plan=hobby

16 құралдың толық тізімі: tonnode.io/mcp · Тарифтер: tonnode.io/pricing


Бес құралдан конвейер жинаңыз — get_balance, get_jetton_balance, get_jetton_info, get_swap_quote, build_swap_tx — decimals-ті бақылауда ұстаңыз және қолтаңбаны әмиянға беріңіз. Сонда сізде балансты адал оқитын, қатаң котировка алатын әрі бөтен кілттерге бір секундқа да қол жеткізбей, нақты сомаларға своп дайындайтын сауда агенті шығады. TON-дағы trading agent дәл осылай жұмыс істеуі керек.

Агентіңізге TON-ға қолжетімділік беріңіз

16 MCP-құрал: оқу, кастодиалды емес сваптар, кроссчейн және әмияндар. Тегін тариф — 60 сұрау/мин, карта керек емес.