TON MCP 비교: TONNode vs 공식 @ton/mcp, 키는 누가 쥐는가
TON MCP 비교: 공식 @ton/mcp와 TONNode는 무엇이 다른가. 커스터디얼 에이전트 지갑 vs 크로스체인을 지원하는 논커스터디얼 MCP. 비교표와 선택 기준까지.
@ton/mcp vs TONNode: 정직한 비교 — 그리고 첫 번째 질문, 키는 누가 쥐고 있는가?
TON용 MCP 두 개를 비교하는 이 글은 기능 목록이 아니라 하나의 보안 질문에서 출발합니다. 이런 상황을 떠올려 보십시오. 여러분은 Claude나 Cursor에 TON 접근 권한을 주었습니다. 에이전트는 잔액을 읽고, 스왑을 조립하고, get 메서드를 호출합니다. 트랜잭션에 서명해야 하는 순간이 오기 전까지는 모든 것이 잘 돌아갑니다. 그런데 새벽 3시, 에이전트가 어설픈 프롬프트(혹은 웹에서 슬쩍 끼어든 지시문) 때문에 "포트폴리오를 최적화하겠다"고 판단하고 스스로 트랜잭션에 서명합니다. 자금은 이미 빠져나갔고, 여러분은 아침에야 그 사실을 알게 됩니다.
이것은 공포 마케팅이 아니라 단 하나의 아키텍처 선택에서 곧바로 따라 나오는 결과입니다. 에이전트가 자기 키로 직접 서명하는가, 아니면 서명은 언제나 사용자의 지갑 몫으로 남는가? 바로 이 지점에서 TON을 위한 성숙한 두 MCP, 즉 TON Foundation의 공식 @ton/mcp와 TONNode가 갈라집니다. 둘 다 에이전트가 블록체인에 직접 손을 뻗을 수 있게 해 줍니다. 어느 한쪽을 깎아내리지 않고 정직하게 짚어 보겠습니다. 작업의 성격이 다르면 두 접근 모두 존재할 이유가 있습니다.
왜 비교하는가: TON용 MCP를 향한 두 가지 접근
MCP(Model Context Protocol)는 AI 에이전트(Claude, Cursor, ChatGPT/Codex를 비롯한 모든 MCP 클라이언트)가 도구를 호출하는 표준입니다. TON에서는 이런 뜻입니다. 에이전트는 get_balance나 build_swap_tx 같은 함수 묶음을 받고, 대화 중에 필요하다고 판단할 때 스스로 그것을 호출합니다.
@ton/mcp와 TONNode의 차이는 명령어 목록이 아니라 철학에 있습니다. 비유하자면 @ton/mcp는 비서에게 한도가 걸린 법인 카드를 쥐여 주는 것입니다. 비서가 직접, 빠르게, 자율적으로 결제하지만 카드는 비서 손에 있습니다. TONNode는 지급 전표를 만들어 여러분의 서명을 받으러 오는 비서입니다. 여러분의 지갑을 거치지 않으면 아무것도 나가지 않습니다. 두 모델 모두 실전에서 동작합니다. 문제는 어떤 작업에 쓸 것이냐입니다.
이론적인 배경이 더 궁금하다면 커스터디얼 vs 논커스터디얼 MCP를 따로 정리해 두었습니다. 여기서는 구체적인 사실을 비교하겠습니다.
공식 @ton/mcp: NFT와 DNS를 갖춘 커스터디얼 에이전트 지갑
@ton/mcp는 TON Foundation의 공식 패키지이며, 그 점 자체가 강점입니다. 네트워크 팀의 지원, 예측 가능한 발전, 그리고 레퍼런스라는 지위입니다.
아키텍처상으로는 split-key 모델을 쓰는 커스터디얼 에이전트 지갑입니다.
- operator 키 — 에이전트가 가집니다. 이 키로 에이전트는 여러분의 개입 없이 직접 트랜잭션에 서명합니다.
- owner 키 — 사용자가 가지며, 지갑을 통제하는 두 번째 계층 역할을 합니다.
기본으로 제공하는 기능은 다음과 같습니다.
- 네트워크, 계정, 잔액 상태 조회
- GRAM, 제톤, NFT 전송(에이전트가 직접 서명)
- DEX 애그리게이터를 통한 스왑
- 에이전트 지갑 생성 및 가져오기
- NFT와 DNS 조회 — TONNode에는 아직 없는 기능이며, 공식 패키지의 분명한 우위입니다.
실행 방식은 로컬, HTTP, serverless 중에서 고를 수 있습니다. 설계상의 제약은 TON 전용이라는 점이며, 크로스체인은 없습니다.
핵심은 자율성입니다. 에이전트는 서명 루프에 사람을 끼우지 않고 스스로 지출합니다. "에이전트가 구독료·가스비·자잘한 작업 비용을 알아서 내게 하자"는 시나리오라면 정확히 이것이 필요합니다. 다만 그 자율성은 곧 이런 뜻이기도 합니다. 자금을 움직이는 실사용 키가 에이전트 쪽에 놓여 있고, 따라서 프롬프트 인젝션이나 모델의 환각이 실제 지출로 이어질 수 있다는 뜻입니다.
TONNode: 논커스터디얼 MCP, 크로스체인, 그리고 hosted 옵션
TONNode는 TON을 위한 hosted MCP 서버(사이트 tonnode.io)이며 도구는 정확히 16개입니다. 핵심 불변 조건은 한 문장으로 정리됩니다.
서버는 절대로 서명하지 않으며 자금과 개인키를 보관하지 않습니다. 스왑, 크로스체인, 지갑 도구는 서명되지 않은 TonConnect 메시지를 반환합니다. 서명은 사용자의 지갑이 합니다.
서버가 자금을 빼돌릴 수 있는 순간 자체가 없습니다. 서버에는 키가 물리적으로 존재하지 않기 때문입니다. 그룹별로 살펴보겠습니다.
조회 (7+1)
일상적인 작업은 이것으로 거의 다 해결됩니다.
get_masterchain_info — 마스터체인 헤드(최신 상태)
get_balance — GRAM 잔액
get_account_state — 상태, 플래그, 마지막 트랜잭션
get_transactions — 트랜잭션 내역
run_get_method — 컨트랙트의 모든 read-only get 메서드
get_jetton_balance — 제톤/USDT 잔액(제톤 지갑 주소는 온체인에서 계산)
get_jetton_info — 제톤 메타데이터: 이름, 심볼, decimals, 발행량
parse_address — EQ/UQ/raw 변환, 오프라인
get_jetton_info는 decimals를 반환합니다. raw 단위를 환산하는 데 필요한 값이며, USDT는 6이고 대부분의 제톤은 9입니다.
스왑 (2)
Omniston 프로토콜을 통해 동작하며, STON.fi와 DeDust의 유동성을 집계합니다.
get_swap_quote— GRAM⇄제톤 확정 견적build_swap_tx— TonConnect에 바로 넘길 수 있는 서명되지 않은 트랜잭션
크로스체인 (5)
공식 패키지에는 아예 없는 영역입니다. TON이 언제나 출발지인 원자적 HTLC 에스크로 방식입니다.
get_crosschain_quote— 견적 조회build_crosschain_swap_tx— 서명되지 않은 HTLC 에스크로 트랜잭션과 시크릿track_crosschain_swap— 양쪽 네트워크에서 거래가 어느 단계에 있는지 추적disclose_crosschain_secret— 온체인에서 준비 상태를 확인한 뒤, 정산을 위해 시크릿을 공개build_crosschain_refund— 거래가 멈췄을 때 에스크로에서 자금을 회수
지원 네트워크는 Ethereum, Arbitrum, Base, BNB Chain, Polygon, Avalanche입니다. TRON은 아직 지원되지 않습니다. 이런 거래가 어떻게 굴러가는지는 TON 에이전트의 첫 크로스체인을 다룬 글에서 확인할 수 있습니다.
지갑 (1): generate_wallet은 v3r2/v4/v5r1/highload_v3 버전의 지갑을 만들고 니모닉, 키, 주소를 사용자에게 넘깁니다. 서버는 그것을 저장하지 않습니다.
TONNode에 아직 없는 것은 NFT와 DNS 도구이며, 로드맵에 올라가 있습니다. 지금 당장 NFT 컬렉션을 읽거나 .ton 도메인을 resolve해야 한다면 그것은 공식 패키지의 영역입니다. 한 가지 짚고 갈 점이 있습니다. TONNode에는 GRAM이나 제톤을 "보내기/전송"하는 직접적인 도구도 없습니다. 서명되지 않은 트랜잭션을 만드는 빌더는 build_swap_tx, build_crosschain_swap_tx, build_crosschain_refund가 전부이며, 따라서 자금 이동은 스왑, 크로스체인, 에스크로 환불의 범위 안에서만 가능합니다. 임의의 "send"는 설계상 존재하지 않습니다.
비교표: @ton/mcp vs TONNode
| 항목 | 공식 @ton/mcp | TONNode |
|---|---|---|
| 서명 주체 | 에이전트 본인 (operator 키, split-key) | 사용자의 지갑 (서버는 서명하지 않음) |
| 모델 | 커스터디얼 | 엄격한 논커스터디얼 |
| 자율적 지출 | 가능 | 불가 (설계상) |
| GRAM/제톤 직접 전송 | 가능, 자율적으로 | 별도 도구 없음. 전송은 스왑/크로스체인 안에서 서명되지 않은 tx로만 |
| 스왑 | DEX 애그리게이터 | Omniston (STON.fi + DeDust) |
| 크로스체인 | 없음 (TON 전용) | 있음, 6개 네트워크 HTLC 에스크로 |
| NFT / DNS | 있음 (조회) | 로드맵 |
| 지갑 생성 | 에이전트 지갑 생성/가져오기 | v3r2/v4/v5r1/highload_v3, 키는 사용자 보관 |
| 실행 | 로컬 / HTTP / serverless | 로컬 (npx) + hosted 엔드포인트 |
| 지위 | 공식, TON Foundation | 독립, 오픈소스 (MIT) |
핵심 갈림길: 에이전트의 키는 누가 쥐는가
나머지는 전부 세부 사항입니다. 진짜 선택은 하나의 질문으로 압축됩니다. 에이전트가 스스로 트랜잭션에 서명하도록 맡길 준비가 되었습니까?
@ton/mcp에서는 operator 키가 에이전트에게 있습니다. 즉 사람의 서명이라는 2차 관문 없이도 프롬프트만으로 자금을 지출할 수 있다는 뜻입니다. 자율성 측면에서는 강력하지만 프롬프트 인젝션이나 환각 앞에서는 위험합니다. 컨텍스트가 오염되는 순간이 곧 자금이 빠져나갈 수 있는 순간입니다.
TONNode에서는 서명이 서버에서 물리적으로 일어날 수 없습니다. 에이전트가 "정신을 놓고" 말도 안 되는 파라미터로 build_swap_tx를 호출하더라도 손에 쥐는 것은 기껏해야 서명되지 않은 트랜잭션 객체뿐입니다. 사용자의 지갑이 승인하기 전까지는 아무것도 움직이지 않습니다. 이것은 정책이 아니라 아키텍처가 보장하는 성질입니다.
어느 한쪽이 무조건 "더 낫다"고 할 수는 없습니다. 두 접근은 에이전트의 자율성을 어디까지 신뢰할 것인지에 대한 서로 다른 답일 뿐입니다.
언제 공식 @ton/mcp를 고르고, 언제 TONNode를 고르는가
다음이라면 @ton/mcp를 고르십시오.
- 사람을 루프에 넣지 않고 에이전트가 직접 결제하고 서명하는 자율적 지출이 필요할 때
- TON 안에서만 작업하고 크로스체인은 필요 없을 때
- NFT와 DNS가 지금 당장 필요할 때
- Foundation 공식 패키지라는 지위가 중요할 때
다음이라면 TONNode를 고르십시오.
- 자금 처분 권한이 에이전트가 아니라 사용자의 지갑에만 있어야 할 때 — 이 패턴은 TON 에이전트를 위한 논커스터디얼 스왑을 다룬 글에서 정리했습니다
- TON⇄EVM 크로스체인이 필요할 때(Ethereum, Arbitrum, Base, BNB Chain, Polygon, Avalanche)
- Omniston의 집계 유동성을 통한 스왑이 필요할 때
- 로컬 실행만이 아니라 처리량이 보장되는 hosted 엔드포인트가 필요할 때
"더 좋다/나쁘다"의 문제가 아니라 서로 다른 도구의 문제입니다. 두 접근은 배타적이지도 않습니다. 실제로 많은 팀이 설정 파일에 두 서버를 함께 둡니다. NFT/DNS와 자율 작업에는 공식 패키지를, 논커스터디얼 스왑과 크로스체인에는 TONNode를 쓰는 식입니다.
각각을 어떻게 연결하는가
TON용 MCP가 처음이라면 전반적인 소개는 TON MCP 가이드를 참고하십시오.
TONNode 로컬 실행 — 무료, 조회 도구 전부 제공
@tonnode/mcp 패키지는 오픈소스(MIT, npm 및 GitHub tonnode/mcp)이며, HTTP 중간 계층 없이 TON의 네이티브 ADNL 프로토콜로 동작합니다.
{
"mcpServers": {
"ton": {
"command": "npx",
"args": ["-y", "@tonnode/mcp"]
}
}
}
TONNode hosted — 전용 키와 보장된 처리량
{
"mcpServers": {
"ton": {
"type": "http",
"url": "https://mcp.tonnode.io/mcp",
"headers": { "Authorization": "Bearer tn_live_…" }
}
}
}
연결한 뒤에는 에이전트에게 평범한 텍스트로 작업을 맡기면 됩니다. 도구는 에이전트가 알아서 고릅니다.
get_jetton_balance로 내 지갑 EQ…의 USDT 잔액을 확인해 줘.
그다음 50 USDT를 GRAM으로 바꾸는 get_swap_quote를 받고
build_swap_tx로 트랜잭션을 조립해 줘.
트랜잭션은 보내지 말고, 지갑에서 내가 서명하도록 돌려줘.
에이전트는 get_jetton_balance → get_swap_quote → build_swap_tx 순으로 호출하고 서명되지 않은 TonConnect 메시지를 돌려줍니다. 자금은 지갑에서 승인한 뒤에야 움직입니다.
크로스체인 작업도 똑같이 자연스럽게 지시할 수 있습니다.
TON의 100 GRAM을 Base의 USDC로 바꾸는 거래를 조립해 줘.
get_crosschain_quote를 먼저 주고, 그다음 build_crosschain_swap_tx.
시크릿은 저장하고, 상태는 track_crosschain_swap으로 추적해 줘.
모든 요금제에서 16개 도구 전부를 쓸 수 있습니다. 비용을 내는 대상은 처리량뿐입니다. Hobby — 영구 무료, 분당 60회; Pro — 월 $29, 분당 300회; Scale — 월 $199, 분당 1200회. Hobby 키는 로그인 직후 카드 없이 바로 발급됩니다.
공식 @ton/mcp
@ton/mcp는 TON Foundation의 안내에 따라 설치하며 로컬, HTTP, serverless로 실행합니다. 최초 설정 단계에서 에이전트에게 operator 키를 가진 에이전트 지갑을 새로 만들어 주거나 기존 지갑을 가져옵니다. 커스터디얼 모델이라는 점을 감안해 한도와 에이전트가 접근할 자금의 범위를 미리 정해 두십시오.
정리
@ton/mcp는 공식 커스터디얼 에이전트 지갑입니다. split-key, 자율적 지출, NFT와 DNS를 제공하고 TON 전용입니다. TONNode는 도구 16개로 이루어진 논커스터디얼 서버입니다. 서버는 절대로 서명하지 않으며, 6개 네트워크 크로스체인과 hosted 옵션을 더합니다. 차이는 정직하고 아키텍처에서 비롯되며, 결국 서명 권한을 누구에게 맡기느냐의 문제입니다. 서명하는 쪽이 리스크 프로필을 결정합니다.
도구별 상세 비교는 TONNode vs 공식 MCP 페이지에 정리되어 있습니다. 카드 없이 무료 Hobby 키로 논커스터디얼 방식을 지금 바로 시험해 보려면 여기서 시작하십시오: tonnode.io/dashboard?plan=hobby.