mcpField
J
jupiter

jupiter

github.com/starchild-ai-agentその他30272 回インストール6 日前に更新
リポジトリ

jupiter について

jupiterは、Solana上のトークン取引を支援するエージェントスキルです。価格確認、スワップの見積もりと実行に加え、指値注文の作成・確認・キャンセルに対応します。

主な機能

  1. 01トークンの米ドル価格確認
  2. 02スワップ見積もりや取引データの取得
  3. 03指値注文の作成
  4. 04注文の確認とキャンセル

活用シーン

  1. 01Solanaトークンの価格確認
  2. 02スワップ前の受取数量の見積もり
  3. 03目標価格での指値注文
  4. 04未約定注文の確認とキャンセル

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/starchild-ai-agent/official-skills --skill jupiter

インストール後、Claude Code で/jupiterを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

__init__.py
_trade_report.py
exports.py
scripts/
jupiter_ops.py

詳細

Jupiter — Solana DEX アグリゲーター

Jupiter は、最良の価格を得るためにすべての Solana DEX(Raydium、Orca、Phoenix など)をまたいでスワップをルーティングします。

⛽ ガスとコスト — まずこれを読んでください

  • ガスは常にウォレットの SOL 残高から支払われます。 Solana ではガスのスポンサーシップはありません。
  • wallet_sol_transfer は Jupiter では動作しません — これは SOL 送金専用です。
  • スワップの手数料は約 0.0002~0.001 SOL です(優先手数料 + 新しいトークンアカウントのレントデポジット)。
  • リミット注文の作成には約 0.002 SOL かかります(オンチェーンアカウントのレント)。
  • 操作の前に必ず wallet_sol_balance() を呼び出して、SOL > 0.01 であることを確認してください。

⛔ 厳守事項

  • 必ず ultra/v1/order を使用してください — swap/v1/quote + swap/v1/swap は使用しないでください(非推奨)
  • jupiter_swap にウォレットの pubkey を渡すのは実行する意図がある場合のみ — 省略するとクォートのみの結果(トランザクションなし)が返りますが、これは価格確認には正しい動作です
  • 数値の makingAmount/takingAmount を絶対に渡さないでください — 文字列でなければ API が ZodError 400 を返します
  • リミット注文に /ultra/v1/execute を絶対に使用しないでください — リミット注文は必ず jupiter_broadcast_tx()(Solana RPC)を経由する必要があります
  • スワップやリミット注文を実行する前に、必ずユーザーの確認を省略しないでください
  • スワップ後は必ず wallet_sol_balance() を呼び出して、残高が変化したことを確認してください
  • DCA には絶対に言及しないでください — lite-api はこれをサポートしていません

前提条件 — ウォレットポリシー

オンチェーン操作の前に、wallet スキルをロードし、標準のワイルドカード Solana ポリシー(キーのエクスポートを拒否 + * を許可)を提案してください。

主要トークンアドレス(Solana)

トークンMint アドレス小数点以下桁数
SOLSo111111111111111111111111111111111111111129
USDCEPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v6
USDTEs9vMFrzaCERmJfrF4H2FYD4KCoNkY11McCe8BenwNYB6
JUPJUPyiwrYJFskUPiHa7hkeR8VUtAeFoSYbKedZNsDvCN6
BONKDezXAZ8z7PnrnRJjz3wXBoRgixCa6xjnB7YaB1pPB2635
WIFEKpQGSJtjMFqKZ9KQanSqYXRcF8fBopzLHYxdM65zcjm6
JTOjtojtomepa8beP8AuQc6eXt5FriJwfFMwQx2v2f9mCL6(9 ではありません)

リストにないトークンの場合:ユーザーに Mint アドレスを直接尋ねてください — トークン検索 API は非推奨です。

利用可能なツール(exports.py より)

ツール機能
jupiter_price(token)任意のトークンの USD 価格
jupiter_swap(in, out, amount, wallet?)クォートのみ(ウォレットなし)またはクォート + トランザクション(ウォレット指定時)
jupiter_execute_swap(signed_tx, request_id, in_mint?, out_mint?)/ultra/v1/execute 経由でスワップをブロードキャスト ← スワップ専用
jupiter_broadcast_tx(signed_tx)Solana RPC 経由でブロードキャスト ← リミット注文 + キャンセル
jupiter_limit_create(in, out, making, taking, maker)リミット注文を作成
jupiter_limit_orders(wallet, history=False)未約定または過去の注文を一覧表示
jupiter_limit_cancel(order_pubkey, maker)未約定の注文をキャンセル

スワップのワークフロー(エンドツーエンド)

1. quote = jupiter_swap("SOL", "USDC", 0.01, wallet_pubkey)
   └─ returns: in_amount, out_amount, in_usd, out_usd, transaction, request_id

2. Show user: amount in/out, USD values, price_impact_pct — wait for confirm

3. signed = wallet_sol_sign_transaction(quote["transaction"])

4. result = jupiter_execute_swap(signed["signed_transaction"], quote["request_id"])
   └─ returns: status ("Success"), signature, in_amount, out_amount

5. wallet_sol_balance()  ← verify balances changed

重要なポイント:

  • jupiter_execute_swap → POST /ultra/v1/execute — Ultra スワップ専用
  • ウォレットの pubkey が欠落または無効な場合、transaction は null になります — 有効なウォレットでステップ 1 を再試行してください
  • スワップはアトミックです:失敗した場合、何も差し引かれません(ガス手数料を除く)

リミット注文のワークフロー(エンドツーエンド)

1. order = jupiter_limit_create(
       input_token="SOL",    # selling
       output_token="USDC",  # buying
       making_amount=0.06,   # 0.06 SOL to sell
       taking_amount=3.0,    # want at least 3 USDC (sets target price)
       maker=wallet_pubkey
   )
   └─ returns: order_pubkey, transaction, implied_price, next_step

2. Show user: implied price, amounts — wait for confirm

3. signed = wallet_sol_sign_transaction(order["transaction"])
   ⚠️  Sign and broadcast within ~90 seconds — blockhash expires.

4. result = jupiter_broadcast_tx(signed["signed_transaction"])
   └─ returns: {"success": True, "signature": "..."} or {"success": False, "error": "..."}
   ⚠️  Use jupiter_broadcast_tx, NOT jupiter_execute_swap — different endpoints!

5. jupiter_limit_orders(wallet_pubkey)  ← confirm order_pubkey appears
   Note: if order fills instantly (implied price ≤ market), check orderHistory instead

重要なポイント:

  • 最小注文サイズ:約 5 USD — それより小さいと {"error": "Order size must be at least 5 USD"} が返ります
  • あなたの提示価格が有利(市場価格以下)な場合、キーパーが即座に注文を約定することがあります
  • API レスポンスの orderKey フィールドが注文の pubkey です(publicKey ではありません)
  • openOrders の makingAmount / takingAmount はすでに人間が読める形式(例:"0.06")であり、生の lamports ではありません
  • expiredAt と feeBps は、使用しない場合は完全に省略する必要があります(null や 0 を渡さないでください)

注文キャンセルのワークフロー

1. orders = jupiter_limit_orders(wallet_pubkey)
2. Pick order_pubkey from orders["orders"][n]["order_pubkey"]
3. cancel = jupiter_limit_cancel(order_pubkey, wallet_pubkey)
4. signed = wallet_sol_sign_transaction(cancel["transaction"])
5. jupiter_broadcast_tx(signed["signed_transaction"])

ツールルーティング — IF/THEN

IF "price" / "how much is X"             → jupiter_price(token)
IF "quote" / "how much can I get"        → jupiter_swap(in, out, amount)  [wallet omitted = quote-only, no tx]
IF "swap" / "exchange" / "convert"       → jupiter_swap(in, out, amount, wallet) → confirm → sign → jupiter_execute_swap(in_mint, out_mint)
IF "limit order" / "buy when price hits" → jupiter_limit_create → sign → jupiter_broadcast_tx
IF "my orders" / "open orders"           → jupiter_limit_orders(wallet)
IF "cancel order"                        → jupiter_limit_orders → jupiter_limit_cancel → sign → jupiter_broadcast_tx
IF token not in KNOWN_TOKENS             → ask user for mint address

少数ショット例

JUP-01 — 「SOL の価格は?」

jupiter_price("SOL")
# -> {"price_usd": 84.2, ...}

JUP-01b — 「0.5 SOL で USDC はいくらになりますか?」(クォートのみ、取引なし)

jupiter_swap("SOL", "USDC", 0.5)   # wallet_pubkey omitted
# -> {quote_only: True, in_amount: "0.50", out_amount: "42.10",
#     in_usd: "42.1", transaction: None}
# Stop here — show user the rate, no signing needed.

JUP-02 — 「0.01 SOL を USDC にスワップ」

quote  = jupiter_swap("SOL", "USDC", 0.01, wallet_pubkey)
# → show: 0.01 SOL → ~0.84 USDC, impact <0.01%
signed = wallet_sol_sign_transaction(quote["transaction"])
result = jupiter_execute_swap(
    signed["signed_transaction"],
    quote["request_id"],
    in_mint=quote["in_mint"],
    out_mint=quote["out_mint"],
)
# → {"status": "Success", "signature": "yUKn...", "in_amount_fmt": "0.01", "out_amount_fmt": "0.84"}
wallet_sol_balance()

JUP-03 — 「リミット設定:USDC 価格が $50/SOL に達したら 0.06 SOL を売却」

# makingAmount=0.06 SOL, takingAmount=3 USDC (= 0.06 * 50)
order  = jupiter_limit_create("SOL", "USDC", 0.06, 3.0, wallet_pubkey)
# → implied_price: "1 USDC = 0.0200 SOL" (i.e. $50/SOL)
signed = wallet_sol_sign_transaction(order["transaction"])  # do this immediately!
result = jupiter_broadcast_tx(signed["signed_transaction"])
# → {"success": True, "signature": "53bp..."}
jupiter_limit_orders(wallet_pubkey)  # or check history if filled instantly

JUP-04 — 「未約定の注文」

jupiter_limit_orders(wallet_pubkey)
# → {"count": 1, "orders": [{"order_pubkey": "...", "making_amount": "0.06", ...}]}

JUP-05 — 「注文をキャンセル」

orders = jupiter_limit_orders(wallet_pubkey)
pubkey = orders["orders"][0]["order_pubkey"]
cancel = jupiter_limit_cancel(pubkey, wallet_pubkey)
signed = wallet_sol_sign_transaction(cancel["transaction"])
jupiter_broadcast_tx(signed["signed_transaction"])

コメント