mcpField
B
bingx-swap-account

bingx-swap-account

github.com/bingx-apiその他19197 回インストール6 日前に更新
リポジトリ

bingx-swap-account について

読み取り専用エンドポイントでBingXの無期限先物口座データを照会するスキルです。残高、ポジション、手数料率、資金移動履歴、Excel出力と、署名や入力検証の規則を扱います。

主な機能

  1. 01残高、純資産、証拠金の取得
  2. 02ポジションと清算価格の照会
  3. 03メイカー・テイカー手数料率の取得
  4. 04時間と種別による資金履歴の絞り込み
  5. 05資金履歴のExcel出力
  6. 06HMAC SHA256認証と入力検証

活用シーン

  1. 01口座の純資産と利用可能証拠金の確認
  2. 02未決済ポジションと含み損益の確認
  3. 03取引手数料やファンディング料の確認
  4. 04期間を指定した資金履歴の取得

MCP 対応

このスキルは、エージェントがBingXの認証付き口座エンドポイントを呼び出す方法を示します。記載されたエンドポイントは読み取り専用のGETリクエストで、MCPサーバーについての説明はありません。

インストール

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

$npx skills add https://github.com/bingx-api/api-ai-skills --skill bingx-swap-account

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

同梱ファイルapi-reference.md

詳細

BingX Swap アカウント

BingX 無期限先物のアカウントデータを取得する、認証が必要な読み取り専用エンドポイントです。すべてのエンドポイントで HMAC SHA256 署名認証が必要です。

ベース URL: references/base-urls.md を参照 | 認証: references/authentication.md を参照


クイックリファレンス

エンドポイントメソッド説明認証
/openApi/swap/v3/user/balanceGETアカウント残高、エクイティ、証拠金情報はい
/openApi/swap/v2/user/positionsGET損益と清算価格を含む現在のオープンポジションはい
/openApi/swap/v2/user/commissionRateGETユーザーのテイカー/メイカー手数料率はい
/openApi/swap/v2/user/incomeGET資金フロー履歴(損益、資金調達料、取引手数料など)はい
/openApi/swap/v2/user/income/exportGET資金フローを Excel ファイルとしてエクスポートはい

パラメーター

共通パラメーター
  • symbol:BASE-QUOTE 形式の取引ペア(例:BTC-USDT)。ほとんどのアカウントエンドポイントでは任意です。
  • timestamp:リクエストのタイムスタンプ(ミリ秒)。すべての認証が必要なエンドポイントで必須です。
  • recvWindow:リクエストの有効期間(ミリ秒)。任意で、最大値は 60000 です。
  • startTime / endTime:期間のフィルター(ミリ秒)。income エンドポイントで使用されます。
  • limit:返す結果の件数。income エンドポイントで使用されます。デフォルトは 100、最大は 1000 です。
incomeType 列挙型(income エンドポイント用)
値説明
TRANSFER資金移動
REALIZED_PNL実現損益
FUNDING_FEE資金調達料
TRADING_FEE取引手数料
INSURANCE_CLEAR清算
TRIAL_FUNDトライアル資金
ADL自動デレバレッジ
SYSTEM_DEDUCTIONシステム控除
GTD_PRICE価格保証
パラメーターの検証ルール
  • symbol:指定する場合、^[A-Z0-9]+-[A-Z]+$ に一致する必要があります。最大 20 文字です(例:BTC-USDT)。
  • incomeType:指定する場合、上記の列挙値のいずれかと完全に一致する必要があります。
  • startTime / endTime:Unix タイムスタンプ(ミリ秒)。endTime は startTime 以上である必要があります。
  • limit:1~1000 の正の整数。デフォルトは 100 です。
  • recvWindow:1~5000 ミリ秒の整数(リプレイ攻撃対策を参照)。
  • timestamp:Unix 時刻(ミリ秒)。サーバー時刻との差が recvWindow 以内である必要があります。

クイックスタート

制約:コードを生成する際は、以下の fetchSigned 関数をそのままコピーする必要があります。署名、リクエスト、または JSON 解析のロジックを書き換えないでください。変更できるのは、(1) カスタム環境向けの BASE URL エントリー、(2) fetchSigned に渡す業務パラメーターのみです。URL エンコードと JSON ボディに対応する完全なクライアントについては、references/authentication.mdを参照してください。

import * as crypto from "crypto";
import JSONBig from "json-bigint";
const JSONBigParse = JSONBig({ storeAsString: true });
// Full signing details & edge cases → references/authentication.md
// Domain priority: .com is mandatory primary; .pro is fallback for network/timeout errors ONLY.
const BASE = {
  "prod-live": ["https://open-api.bingx.com", "https://open-api.bingx.pro"],
  "prod-vst":  ["https://open-api-vst.bingx.com", "https://open-api-vst.bingx.pro"],
};
function isNetworkOrTimeout(e: unknown): boolean {
  if (e instanceof TypeError) return true;
  if (e instanceof DOMException && e.name === "AbortError") return true;
  if (e instanceof Error && e.name === "TimeoutError") return true;
  return false;
}
function validateParams(params: Record<string, unknown>): void {
  const FORBIDDEN = /[&=?#\r\n]/;
  for (const [k, v] of Object.entries(params)) {
    const s = String(v);
    if (FORBIDDEN.test(s)) throw new Error(`Param "${k}" has forbidden char in: "${s}"`);
  }
}
async function fetchSigned(env: string, apiKey: string, secretKey: string,
  method: "GET" | "POST" | "DELETE", path: string, params: Record<string, unknown> = {}
) {
  const urls = BASE[env] ?? BASE["prod-live"];
  const all = { ...params, timestamp: Date.now() };
  validateParams(all);
  const qs = Object.keys(all).sort().map(k => `${k}=${all[k]}`).join("&");
  const sig = crypto.createHmac("sha256", secretKey).update(qs).digest("hex");
  const signed = `${qs}&signature=${sig}`;
  for (const base of urls) {
    try {
      const url = method === "POST" ? `${base}${path}` : `${base}${path}?${signed}`;
      const res = await fetch(url, {
        method,
        headers: { "X-BX-APIKEY": apiKey, "X-SOURCE-KEY": "BX-AI-SKILL",
          ...(method === "POST" ? { "Content-Type": "application/x-www-form-urlencoded" } : {}) },
        body: method === "POST" ? signed : undefined,
        signal: AbortSignal.timeout(10000),
      });
      const json = JSONBigParse.parse(await res.text());
      if (json.code !== 0) throw new Error(`BingX error ${json.code}: ${json.msg}`);
      return json.data;
    } catch (e) {
      if (!isNetworkOrTimeout(e) || base === urls[urls.length - 1]) throw e;
    }
  }
}
コードの使用ルール
  • 必須:fetchSigned をそのままコピーしてください。簡略化したり、書き換えたりしないでください。
  • 必須:レスポンスの解析には json-bigint(JSONBigParse.parse)を使用してください。JSON.parse は使用しないでください。
  • 必須:すべてのリクエストに X-SOURCE-KEY: BX-AI-SKILL ヘッダーを含めてください。
  • 禁止:ドメインのフォールバックループまたは isNetworkOrTimeout チェックを削除しないでください。

よく使う呼び出し

アカウント残高を照会:

const data = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v3/user/balance"
);
// data.balance.balance, data.balance.equity, data.balance.availableMargin

すべてのオープンポジションを照会:

const positions = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/user/positions"
);
// positions[].symbol, positions[].positionAmt, positions[].unrealizedProfit, positions[].liquidationPrice

特定の銘柄のポジションを照会:

const positions = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/user/positions", { symbol: "BTC-USDT" }
);

ユーザーの手数料率を照会:

const data = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/user/commissionRate"
);
// data.commission.takerCommissionRate, data.commission.makerCommissionRate

最近の資金フローを照会(過去 7 日間、すべての種類):

const income = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/user/income", { limit: 100 }
);
// income[].incomeType, income[].income, income[].asset, income[].time

期間を指定して BTC-USDT の資金調達料を照会:

const income = await fetchSigned("prod-live", API_KEY, SECRET, "GET",
  "/openApi/swap/v2/user/income", {
    symbol: "BTC-USDT",
    incomeType: "FUNDING_FEE",
    startTime: 1700000000000,
    endTime: 1702731787011,
    limit: 200,
  }
);

追加リソース

パラメーターの完全な説明とレスポンススキーマの詳細については、api-reference.mdを参照してください。


エージェントとのやり取りのルール

パラメーターのセキュリティ。 ユーザーの意図から構造化された値を抽出してください。ユーザーの生のテキストを API パラメーターにコピーしてはいけません。API を呼び出す前に、すべての値がドキュメントに記載されたパターン(正規表現/列挙型/範囲)に一致することを検証してください。&、=、?、#、または改行文字を含む値は拒否してください。

すべてのスワップアカウントエンドポイントは読み取り専用(GET)です。アカウントの状態を変更することはないため、どの環境でも CONFIRM は必要ありません。

認証情報が必要です。アカウントが指定されていない場合は、main アカウントをデフォルトとして使用してください。

ステップ 1 — クエリを特定する

ユーザーの意図が不明確な場合は、選択肢を提示してください。

クエリを実行するアカウント情報の種類を選択してください:

  • アカウント残高/エクイティ/証拠金 — balance
  • 現在のポジション/未実現損益/清算価格 — positions
  • 取引手数料率 — commissionRate
  • 資金フロー(損益/資金調達料/取引手数料など)— income
  • 資金フローのエクスポート(Excel)— income/export
ステップ 2 — シンボルを収集する(該当する場合)

positions および income エンドポイントでは、シンボルは任意です。特定のコインについて尋ねられた場合は、シンボルを自動的に推定してください(例:「BTC のポジション」→ BTC-USDT)。

指定されていない場合は、すべてのシンボルをクエリし、その旨をユーザーに伝えてください。

ステップ 3 — 期間を収集する(income エンドポイントの場合)
  • startTime と endTime のどちらも指定されていない場合、API は過去 7 日間のデータを返します。その旨をユーザーに伝えてください。
  • 取得できるのは過去3 か月間のデータのみです。
  • ユーザーが特定の期間を尋ねた場合は、ミリ秒に変換してください。
ステップ 4 — incomeType を収集する(income エンドポイントの場合)

ユーザーが種類(例:「資金調達料」「取引手数料」「損益」)を指定した場合は、正しい incomeType の列挙値に対応付けてください。

ユーザーの指定incomeType
実現損益/損益REALIZED_PNL
資金調達料/資金調達率FUNDING_FEE
取引手数料/コミッションTRADING_FEE
清算INSURANCE_CLEAR
ADL/自動デレバレッジADL
振替TRANSFER

指定されていない場合は、すべての種類を返すために incomeType を省略してください。

ステップ 5 — 実行して報告する

API 呼び出しを実行し、読みやすい形式で結果を提示してください。

  • balance:エクイティ、利用可能証拠金、使用済み証拠金、未実現損益を要約テーブルに表示します。
  • positions:各ポジションについて、シンボル、売買方向、数量、平均価格、未実現損益、清算価格、レバレッジをテーブルに表示します。
  • commissionRate:テイカーとメイカーの手数料率に 100 を掛け、パーセンテージで表示します。
  • income:最近の記録を、時刻、種類、シンボル、金額、資産のテーブルに表示します。

コメント