mcpField
H
hodlodds-mcp

hodlodds-mcp

ローカル
hodlodds.com金融データ04 日前に更新

hodlodds-mcp について

hodlodds-mcpは、Solanaのミームコイン市場を調べ、暴落リスクの推定値を取得するローカルMCPサーバーです。SolanaまたはBaseでのx402によるUSDC従量払いに対応し、支出上限を設定できます。

主な機能

  1. 01市場と対象範囲の無料確認
  2. 0260分間の暴落リスク推定
  3. 03条件指定の銘柄一覧とウォッチリスト
  4. 04直近の暴落と下落幅の情報
  5. 05呼び出し単位とセッション単位の上限

活用シーン

  1. 01オッズ取得前に銘柄の対象範囲を確認
  2. 02絞り込んだ一覧で暴落推定値を比較
  3. 03指定したSolana銘柄を監視
  4. 04直近の暴落情報と併せてリスクを確認

MCP 対応

別パッケージのhodlodds-mcpが、市場調査と暴落リスク取得のローカルstdioツールを提供します。呼び出しではx402によるUSDC決済を利用でき、呼び出し単位とセッション単位の上限があります。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"com-hodlodds-hodlodds": {
"command": "uvx",
"args": [
"hodlodds-mcp"
],
"env": {
"HODLODDS_BASE_URL": "<HODLODDS_BASE_URL>",
"HODLODDS_NETWORK": "<HODLODDS_NETWORK>",
"HODLODDS_PAY_TO": "<HODLODDS_PAY_TO>",
"HODLODDS_KEYPAIR": "<HODLODDS_KEYPAIR>",
"HODLODDS_MAX_PRICE_USDC": "<HODLODDS_MAX_PRICE_USDC>",
"HODLODDS_SESSION_BUDGET_USDC": "<HODLODDS_SESSION_BUDGET_USDC>"
}
}
}
}
起動コマンドuvx hodlodds-mcp
設定が必要な環境変数
HODLODDS_BASE_URLHodlOdds HTTPS API or loopback test API
HODLODDS_NETWORKsolana, base, devnet or base-sepolia
HODLODDS_PAY_TOVerified recipient; required on mainnet and for keyed test-network use
HODLODDS_KEYPAIRシークレットOptional absolute local key-file path; omission enables read-only mode
HODLODDS_MAX_PRICE_USDCPer-call USDC cap; a board costs 0.005 per delivered row (0.05 for 10 rows), so raise it for boards
HODLODDS_SESSION_BUDGET_USDCProcess USDC budget; required when a key is set; resets on restart

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
pypihodlodds-mcp0.2.3

ツール

4

掲載時のツール一覧 · 1 週間前に更新

このツールにパラメーターはありません。

詳細

hodlodds — Python クライアント

リクエストごとにx402(Solana または Base 上の USDC)で支払う、Solana ミームコインのペイ・パー・アンサー方式の暴落確率です。アカウントも API キーも不要です。

https://api.hodlodds.com の API は支払いを受け付けます。支払う前に、無料のステータス、マーケット、カバレッジのエンドポイントを確認してください。ローカルのテストサーバーでは、Solana devnet または Base Sepolia を利用できます。

何を回答するのか

このトークンの価格が、今後 60 分以内に 90%以上下落する確率はどれくらいですか?

0.04 は、予測期間内に定義されたイベントが発生する確率の推定値が 4%であることを意味します。信頼度は、その確率帯における過去の予測の較正状況を示すもので、このトークンについての保証ではありません。数値が高いほどリスクは高くなりますが、低い数値は安全の兆候ではありません。より小幅または緩やかな下落はカウントされず、確率は分単位で変動します。

暴落とは、今後 60 分以内に、SOL 建てで基準価格を 90%以上下回る、完了済みの 1 分足の終値です。カバレッジ対象は、SOL 建ての pump.fun 卒業済みトークンです。各回答には、該当する確率帯で過去の予測が実際の結果とどの程度一致したかに基づく信頼度(high/medium/low)が付与されます。

dd_60 は、直近の終値を過去 60 分間の最高終値で割り、そこから 1 を引いた値です。ゼロは、その 1 時間の高値にあることを示します。dd_60 <= -0.90 は、すでに 1 時間以内に 90%以上下落したことを示します。各行には already_crashed(true、false、またはドローダウンが不明な場合は null)が含まれます。過去の暴落は false として表示されます。crashed_within_24h と last_crash_as_of は、API スナップショットが過去 24 時間以内にそのトークンの dd_60 <= -0.90 を検出したかどうかと、該当する最新のスナップショット時刻(UTC のエポック秒)を示します。このメモリが把握しているのは、API が受信したスナップショットのみです。API の停止中に完全に発生した暴落は検出されません。メモリが過去 24 時間全体を保証できない間は、どちらのフィールドも null になります。これは、メモリに記録された前回のスナップショットから 1 時間以上経過して次のスナップショットが届いた後の 23 時間(フィードの停止、またはメモリファイルの置き換えや復元)、サイズ上限を超えた後(対象外になったトークンの有効期限が切れるまで)、およびストアに障害がある間です。新しいデプロイでは、メモリを利用できます。いずれかの暴落フラグが立つと、note と summary 内の暴落コンテキストが追加されます。暴落後に暴落確率が低くても、回復や安全の兆候ではありません。 約 2%未満では、観測された暴落率が予測値の最大約 2 倍に達したことがありますが、絶対値では 1 パーセントポイント未満です。0.5%から 2%までの回答には confidence: low が付きます。0.5%未満の回答の信頼度は最大でも medium で、direction: historically under-predicted が付きます。

ルート価格備考
GET /v1/status無料フィードの状態(live/stale/down)、経過時間、インシデント、稼働率
GET /v1/meta無料定義、価格、支払いの詳細、モデルカード
GET /v1/markets無料利用可能なデータチェーン、プラットフォーム、カバレッジ
GET /v1/coverage/{mint}無料1 つのトークンのカバレッジ段階と理由
GET /v1/risk/{mint}$0.011 つのトークンの最新の確率
GET /v1/board?limit=N返却されるコイン 1 枚あたり $0.00510~500 枚のコイン、または異なるミントアドレス 1~100 件のウォッチリストをリクエストできます。返却されたコイン分のみ支払い、空の結果は無料です
GET /v1/risk/{mint}/last$0.002最後に判明した確率。最大 30 分前の値です(ライブ時も利用可能)。古いデータの場合は stale と表示され、信頼度が 1 段階下がります

通常のリスクルートとボードルートで課金されるのは、新しいカバレッジ対象の回答のみです。オプトインの /last ルートでは、30 分以内の最終確認済み確率に対して、明示的にラベルを付けたうえで課金される場合があります。カバレッジ対象外および適格でない回答は無料です。HodlOdds-Charged: no を伴う拒否は、支払い成功のレシートと矛盾しない限り無料として扱われます。これには、ヘッダーサイズ超過時の 431 も含まれます。署名後に適格性が変わった場合、この無料の拒否によって保留中の支払いが発生することはありません。

鮮度

スコアは60秒ごとに、各分の終了から約20秒後に、as_of までの完了した1分足を使って再計算されます。各スコアはas_of時刻から60分間を対象とし、次回の更新まで有効です。同じトークンのオッズが、1分で急上昇することがあります。スコアの計算はおよそ:20に始まります。計算や公開の遅延により、利用可能になる時刻が遅れる場合があります。判断を行う際は、実行直前に更新し、継続的に監視する場合は1分ごとに更新して、as_ofが新しい分に変わったことを確認してください。APIの鮮度判定基準は別にあり、デフォルトではissued_atから120秒を超えた場合、またはexpires_atを過ぎた場合、データはstaleになります。新しいリクエストを送信しても、予測期間はリセットされません。

オプトインの/v1/risk/{mint}/lastルートは、発行から最大30分後(1800秒ちょうどを含む)まで保存されたオッズを返します。ライブ中も利用できます。データが古くなると、信頼度は「高」から「中」または「中」から「低」に下がります。「低」は「低」のままで、信頼度がない場合は引き続き表示されません。元の予測期間と有効期限は変わりません。

インストール

pip install hodlodds                                        # from PyPI
pip install "git+https://github.com/hodlodds/hodlodds-sdk"  # or the latest main

Python 3.10以降が必要です。依存関係:httpx、certifi>=2026.10.19、および公式のx402[svm,evm]==2.25.0 SDK(バージョン固定)。

MCP サーバー

独立したhodlodds-mcp パッケージは、市場の検索と暴落オッズの取得に使えるローカルのstdioツールを提供します。呼び出しごとおよびセッションごとの支払い上限が設定されています。

pip install hodlodds-mcp クライアントの設定と支払いの安全性については、MCP READMEを参照してください。

使用方法

コマンドライン:

hodlodds status
hodlodds markets
hodlodds coverage <MINT> --chain solana --platform pumpfun
hodlodds risk <MINT> --keypair ~/.config/hodlodds/wallet.json --pay-to <RECIPIENT> --network solana
hodlodds risk <MINT> --keypair ~/.config/hodlodds/base-wallet.json --pay-to <BASE_RECIPIENT> --network base
hodlodds board --limit 100 --sort lowest_risk --max-risk 0.05 --min-liquidity 50 --max-price 0.5 \
  --keypair ... --pay-to ... --network solana
hodlodds last <MINT> --keypair ... --pay-to ... --network solana

Python:

from hodlodds import HodlOdds, HodlOddsError

with HodlOdds("https://api.hodlodds.com", keypair="~/.config/hodlodds/wallet.json",
              network="solana", pay_to="<RECIPIENT>", max_price_usdc="0.01") as client:
    print(client.status()["state"])
    print(client.markets())
    print(client.coverage("<MINT>", chain="solana", platform="pumpfun"))
    try:
        answer = client.risk("<MINT>")
        row = answer.data["row"]
        print(row["p_crash_60m"], row["confidence"]["level"], answer.payment["explorer"])
    except HodlOddsError as e:
        print(e, e.status, e.body)
        # e.payment["charged"] == False means a confirmed free refusal.
        # A PendingPayment needs reconciliation or explicit redemption.

<RECIPIENT> は、選択した決済ネットワークの支払いアドレスで、GET /v1/meta で公開されています。コード内で確認して固定してください。クライアントは、別の相手に支払うオファーを拒否します。

ネットワーク:devnet と solana(メインネット。mainnet はエイリアス)は Solana の JSON キーファイルを受け取り、base-sepolia と base は EVM キーファイル({"private_key": "0x..."}、モード 0600)を受け取ります。価格は両方のチェーンで同じで、API は両方に対応しています。クライアントが署名するのは、選択したネットワーク上のみです。

base = HodlOdds("https://api.hodlodds.com", keypair="~/.config/hodlodds/base-wallet.json",
                network="base", pay_to="<BASE_RECIPIENT>", max_price_usdc="0.01")

ボードのオプション:limit は 10~500(デフォルトは 50)、sort は lowest_risk(デフォルト)、riskiest、liquidity、newest、active です。フィルターは max_risk、min_risk、min_liquidity_sol、min_age_min、max_age_min、min_trades_5、min_confidence(high/medium/low)、include_crashed(True/False)です。 合計価格は 0.005 × 返されるコイン数 です。Python では max_price_usdc、CLI では --max-price に、それ以上の値を指定してください。1 回の呼び出しあたりのデフォルト上限は 0.01 USDC のため、通常、ボードには明示的により高い上限を指定する必要があります。ハード上限は、ボード呼び出しのみ 2.5 USDC、個別のリスク/最終値呼び出しは 1 USDC です。 指定した上限を超えると、クライアントは署名前に PriceLimitError(HodlOddsError)を発生させます。price_atomic と limit_atomic には、提示された合計額と指定した上限が USDC の最小単位で示されます(1 USDC = 1,000,000)。 min_trades_5 には、0 から 9223372036854775807 までの整数を指定できます。

互換性:0.2.0 の safest ソートは引き続き lowest_risk のエイリアスとして受け付けられ、mainnet 決済ネットワークのエイリアスも引き続き solana を意味します。これらの旧表記は例では非推奨ですが、既存の呼び出しは引き続き動作します。

lowest_risk とそのエイリアス safest では、これらのフィルターが省略されている場合、サーバーは min_trades_5=3、min_liquidity_sol=5、include_crashed=false を適用します。これにより、取引がほとんどないトークン、流動性の低いトークン、最近暴落したトークンがリストを占めるのを防ぎます。暴落フィルターは already_crashed と crashed_within_24h の両方の行を除外します。min_trades_5=0、min_liquidity_sol=0、include_crashed=True など、明示的に指定した値はデフォルトを上書きします(CLI:--min-trades 0 --min-liquidity 0 --include-crashed)。 ほかのソートでは、既存の選択方法が維持されます。明示的な mints= ウォッチリストには、これらのデフォルトは一切適用されません。そのため、include_crashed=False を明示的に指定しない限り、暴落した保有銘柄も表示され、フラグが付けられます。

オッズが最も低いトークンは、通常、取引が最も少ないトークンです。デフォルトのフィルターで除外されるのは、ほとんどの非アクティブなトークンや最近暴落したトークンであり、すべてではありません。

ボードの応答には、有効な filters、defaults_applied(デフォルトが追加されなかった場合は空)、およびデフォルトのみが原因で上限適用前に除外された行数 excluded_by_defaults が含まれます。402 オファーの本文にも defaults_applied と excluded_by_defaults が表示されますが、これらは署名対象のオファーには含まれません。API で最近の暴落に関する記録を利用できない場合、デフォルトの理由にその旨が示され、暴落フィルターでは already_crashed のみが使用されます。オファーには、クライアント自身の正規化済みパラメーターがそのまま含まれます。サーバーは、行の選択と価格設定の際に、文書化されたデフォルトを決定的に適用します。クライアントは、署名対象のクエリにそれらのデフォルトを追加しません。

board = client.board(limit=100, sort="lowest_risk", max_risk=0.05, min_liquidity_sol=50, max_price_usdc="0.5")
for row in board.data["rows"]:
    print(row["mint"], row["p_crash_60m"], row["confidence"]["level"])
# Explicitly include quiet and already-collapsed tokens:
all_rows = client.board(min_trades_5=0, include_crashed=True, max_price_usdc="0.25")
# The cheaper, opt-in answer preserves its original horizon and labels its age:
last_known = client.last("<MINT>")
print(last_known.data["age_s"], last_known.data["freshness"])

last() の料金は 0.002 USDC です。フィードが稼働中でも、最大 30 分前の最終確認済みオッズが返されることがあります。stale、age_s、freshness、horizon_remaining_s を確認してください。回答を購入しても、予測の有効期間は更新されません。

ボードのオファーが変更された場合

ボードの 409 で code: "offer_changed" が返された場合、オファーの提示後から支払いリクエストまでの間に一致する項目が変わったことを意味します。サーバーはこの拒否に HodlOdds-Charged: no を設定します。現在の API では、この 409 は署名済みリクエストにのみ返され、署名済みリクエストが自動で再試行されることはありません。HodlOdds-Charged: no があり、矛盾するレシートがなければ課金は発生していませんが、クライアントは再度呼び出す必要があります。SDK が独自に再署名することはありません。実際には、board() は error.payment["charged"] == False を含む HodlOddsError を発生させます。新しいオファーを取得するには、board() を再度呼び出してください。サーバーに不正な動作があった場合、自動で二度目の支払い承認を行うと、二重に決済される可能性があります。監視ループでは、無料であることが確認された拒否をスキップとして扱い、次回のスケジュールされたサイクルで続行します。支払いが不確かな場合は監視を停止し、照合が必要になります。

安全策として、SDK 0.3.1 以降では、署名する前に 409 が発生し、成功または不確かなレシートがない場合に限り、新しいオファーを一度だけリクエストします。この更新では同じクエリを使用し、価格と予算のチェックをすべて再実行します。署名も支払いも行いません。

ウォッチリストと市場フィルター

mints=[mint_a, mint_b] を渡すと、ボードを 1~100 件の重複のない Solana ミントアドレスに限定できます。重複はリクエストを送信する前にローカルで拒否されます(サーバーでも無料の 400 が返されます)。ウォッチリストのデフォルト上限はその件数と同じです。ウォッチリストの上限を明示する場合は 1~100 を指定してください。ソートとフィルターも引き続き適用されます。署名前に、ウォッチリストのダイジェストを含む正規化済みの選択内容にオファーが紐付けられます。課金対象は返された行のみです。answer.data["not_delivered"] は、リクエストしたミントのうち返されなかったものについて、カバレッジとフィルターに関する情報を示します。スコアではありません。

hodlodds board --mints <MINT_A>,<MINT_B> --max-price 0.01 \
  --keypair ... --pay-to ... --network solana
hodlodds board --mints-file watchlist.txt --max-price 0.50 \
  --keypair ... --pay-to ... --network solana

--mints-file には 1 行につき 1 つのミントを指定します。空行と # で始まるコメントは無視されます。ウォッチリストの 2 つのフラグは同時に指定できず、watch --board と組み合わせて使用することもできます。

answer = client.board(mints=[mint_a, mint_b], max_price_usdc="0.01",
                      chain="solana", platform="pumpfun")
print(answer.data["rows"], answer.data.get("not_delivered", []))

chain と platform は、支払いに使用するネットワークとは独立して、データ市場を選択します。risk、last、coverage、board、watch、watch_board で使用できます。CLI ではそれぞれ --chain と --platform に対応します。Python では文字列、カンマ区切りの文字列、またはリストを受け付けます。値では大文字と小文字が区別されません。チェーンのエイリアスまたは CAIP-2 ID を使用できます。pump と pump.fun は pumpfun のエイリアスです。リストには、サポートされている重複のない値を 1~10 個指定します。リスト内では OR 条件、2 つのフィルター間では AND 条件で適用されます。サポートされていない値や矛盾する値は、支払いの前に拒否されます。フィルターを省略すると、既存のデフォルト選択が維持されます。

サポートされている値を確認するには client.markets() / hodlodds markets を使用してください。トークンがカバーされているかを確認するには client.coverage(mint) / hodlodds coverage <MINT> を使用してください。Base で支払っても、Base のトークンデータが選択されるわけではありません。実験的な非 SOL ランキングは引き続き有料ボードの対象外であり、無料の risk ルートでの拒否に表示されることがあります。

トークンを監視する

監視ループはすべてクライアント内で実行されます。1~60 分の整数で間隔を選択してください。監視全体の USDC 上限として、--max-spend は必須です。--max-price は引き続き各オファーの上限を設定します。例(メインネット。公開されている受取先を指定してください):

hodlodds watch <MINT> --every 1 --max-spend 1.00 \
  --keypair ~/.config/hodlodds/wallet.json --pay-to <RECIPIENT> --network solana
hodlodds watch <MINT> --every 5 --max-spend 1.00 --max-calls 20 --alert-above 0.20 \
  --keypair ~/.config/hodlodds/wallet.json --pay-to <RECIPIENT> --network solana
hodlodds watch --board --limit 100 --sort riskiest --max-price 0.50 --every 5 --max-spend 2.00 --alert-above 0.20 --json \
  --keypair ~/.config/hodlodds/wallet.json --pay-to <RECIPIENT> --network solana

メインネットでは引き続き --network solana または --network base と --pay-to <recipient> を明示的に指定する必要があります。既存のすべてのボードフィルターは --board とともに使用できます。呼び出しごとのデフォルト上限は引き続き 0.01 です。大きなボードでは、明示的に上限を引き上げてください。

スキップや合計上限を考慮する前の連続実行コストの推定値:

対象間隔価格/呼び出し(USDC)呼び出し/時間USDC/時間USDC/24 時間
トークン1 分0.01600.6014.40
トークン5 分0.01120.122.88
ボード、上限 1001 分最大 0.5060最大 30.00最大 720.00
ボード、上限 1005 分最大 0.5012最大 6.00最大 144.00
トークンの見積もりには、提示価格の 0.01 を使用します。ボードの見積もりでは、一致するコインが少ない場合や --max-price がより低い場合でも、指定した上限全額をコインあたり 0.005 で計算します。実際の支出には、検証済みの各オファーに記載された正確な最小単位の USDC 額を使用します。残りの上限を超えるオファーへの署名は行わず、ループを停止します。上限は正の値で、小数点以下は最大 6 桁にしてください。SDK の呼び出し前に浮動小数点演算が行われないよう、10 進数文字列を渡してください。デフォルトの支出上限はありません。

サイクルは UTC の分境界の :25 に 0~5 秒のジッターを加えた時刻に開始します。5 分間の監視では :00、:05、:10 などに開始します。最初の呼び出しは、次の予定時刻まで待機します。リクエストや利用側の処理に時間がかかった場合、逃した時刻分を取り戻すのではなく、そのスロットをスキップします。各サイクルでは、まず無料の /v1/status を確認します。

  • フィードの state が live 以外の場合、支払いなしでスキップ結果を返します。--stop-on-stale を指定すると、その結果の後に終了します。指定しない場合は監視を続けます。
  • as_of が直前の有料回答の分と同じか、それより古い場合、10 秒待ってステータスをもう一度確認します。それでも変化がなければ、支払いなしでスキップします。支払い処理中に公開内容が進むことがあるため、有料回答の as_of と比較します。
  • 新しいライブの分が確認されると、既存の支払いチェックを通じて有料ルートを 1 回呼び出します。有料回答を返す前に、サーバーも鮮度を再確認します。監視で古い /last ルートが使われることはありません。

スコアは、次の分の更新までのみ有効です。 5 分ごとに監視すると費用を節約できますが、現在のスコアが確認されない時間が生じます。フィードの中断や同じ分の繰り返しでは費用はかかりません。空のボードも無料です。--max-calls は、無料の空ボードも含め、有料ルートの呼び出し数をカウントします。スキップされたステータス確認はカウントされず、障害中は監視が待機し続けることがあります。

テキスト出力には UTC 時刻、as_of、小数点以下 1 桁のオッズ(0.1% 未満は 0.0% ではなく <0.1% と表示)、信頼度、支出合計/上限が表示されます。オッズがしきい値(0~1)以上の場合は ALERT が表示されます。ボードでは概要と、しきい値を満たす各行が出力されます。--json を指定すると、各サイクルにつき JSON オブジェクトを 1 つ出力します。内容はすべての回答フィールドに加えて、cycle、spent_usdc、cap_usdc、skipped_reason、utc、alert を含む watch です。スキップされたサイクルには、有料回答の代わりにステータスフィールドが含まれます。金額は正確な 10 進数文字列です。回答の skipped_reason は null です。見積もりや停止/エラーメッセージは stderr に出力されるため、stdout は有効な JSON Lines のままです。

# Use the configured client from the Python example above.
watch = client.watch(mint, every_minutes=5, max_spend_usdc="1.00",
                     max_calls=20, alert_above=0.20, stop_on_stale=False)
print(watch.estimate)  # available immediately, before any request
try:
    for answer in watch:
        print(answer.data, answer.watch, answer.payment)
finally:
    watch.close()

board_watch = client.watch_board(every_minutes=5, max_spend_usdc="2.00",
                                 limit=100, max_price_usdc="0.50", max_calls=4)
board_watch.close()

どちらのメソッドも、ジェネレーターを使用したクローズ可能なイテレーターを返し、Answer オブジェクトを生成します。answer.alerts には一致した行が格納されます。watch.spent_atomic では整数の支出額を確認でき、watch.stop_reason では通常の上限到達または割り込みによる停止理由を確認できます。クライアントの所有者は呼び出し元です。イテレーターを閉じるか、サイクルの合間に Ctrl-C を押すと、正常に停止します。認証済みリクエストの実行中に割り込みが発生した場合は、照合の詳細とともに不明として報告されます。

署名後、成功した支払いレシートがない状態で HodlOdds-Charged: no と記された拒否を受け取った場合、予約済みの支出額は解放され、スキップ結果が返されます。監視は続行されます。この拒否は --max-calls にカウントされます。支払いが不明な場合、成功レシートに矛盾がある場合、またはその他の支払いエラーが発生した場合は、監視を停止します。支払いの再試行や自動償還は行われません。未解決の試行分は spent_atomic に予約されたままです。Python では HodlOddsError.payment を受け取ります。CLI では、後述のとおり明示的な償還に使う、非公開の保留中支払いファイルが保存されます。その他のリクエストエラーや拒否されたオファーでもループは停止します。不明な支払いが照合されるまでは、別の監視を開始しないでください。

支払い後に回答が失われた場合

支払い済みのリクエストは最大90秒(paid_timeout、30~600)待機します。認証後に接続が切れた場合は、保留中の記録を保持し、再度支払うのではなく明示的な復旧手順を使用してください。

  • サーバーが未配信として記録した決済済みの支払いは、24時間以内に1回だけ引き換えられます。引き換え時にも、ルートと回答の適格性が確認されます。回答の準備ができた時点ですでに接続が閉じていた場合、または決済が後から確定した場合、サーバーは回答を未配信として記録します。サーバーが回答を完了して送信した場合は配信済みとして記録され、途中で失われた場合でも、引き換えは 409 で拒否されます。
  • Pythonでは、エラーに情報が含まれます。client.redeem(error.payment) は同じ認証情報を HodlOdds-Redeem: 1 とともに再送します。新たな支払いに署名することも、2回目の決済を行うこともありません。
  • CLIは情報を ~/.config/hodlodds/pending/<id>.json(モード0600)に保存し、パスを表示します。約2分後に hodlodds redeem <file> を実行してください。
  • 409 は、確認がまだ保留中である、引き換え可能な支払いが見つからない、回答がすでに配信済みである、またはすでに引き換え済みか期限切れであることを意味する場合があります。Retry-After が指定されている場合はそれに従い、拒否された場合も保留中の記録を保持してください。引き換えが拒否されても、新たな署名や決済は行われません。また、それだけで元の支払いが失敗したことを示すものではありません。

CLIの環境変数:HODLODDS_BASE_URL、HODLODDS_NETWORK、HODLODDS_KEYPAIR、HODLODDS_PAY_TO、HODLODDS_MAX_PRICE。 終了ステータス:成功は 0、拒否/API/トランスポートの失敗は 1、使用方法が無効な場合は 2。

クライアントに組み込まれた安全ルール

  • 支払いへの署名は、402オファーがすべてのチェックに合格した後にのみ行われます。チェック項目は、x402 v2、選択したネットワーク、正確なUSDC、認証フロー、固定された payTo、Solana上であなたとは異なる有効なファシリテーター手数料支払者、上限付きのタイムアウト、上限以下の価格(デフォルトは0.01 USDC、risk/lastは上限1 USDC、boardは上限2.5 USDC。正確な最小単位で計算)です。
  • 支払いが自動的に再試行されることはありません。認証情報の送信後に問題が発生した場合、エラーでその旨を示し、詳細(HodlOddsError.payment)を含めます。ウォレットの取引履歴と照合するか、回答を1回だけ引き換えてください(上記参照)。
  • キーファイルは、通常のファイルであり、シンボリックリンクではなく、モード0600である必要があります。ローカルで読み取られ、表示も送信もされません。マシンから送信されるのは、SDKが署名したUSDC送金認証情報のみです。残高の少ない専用ウォレットを使用してください。
  • HTTPSのみを使用します(ローカルテストサーバーでは平文HTTPのみ使用可能です)。リダイレクトは禁止です。環境プロキシは使用せず、ヘッダーと本文のサイズには上限があります。
  • メインネットでは、明示的な network="solana"(または "base")と固定された pay_to が必要です。CLIでは、コマンドラインで --network solana|base --pay-to ... を指定する必要があります。

セキュリティ

このパッケージは、httpx が使用するTLSルート証明書バンドルである certifi>=2026.10.19 を必要とします。このリリースでは、2026-10-20に発表された認証局のインシデントを受けて、「emSign ECC Root CA - G3」ルート証明書が削除されています。古い環境は pip install -U hodlodds certifi でアップグレードしてください。

テスト用ウォレット(devnet / Base Sepolia)

hodlodds-wallet new ~/.config/hodlodds/my-devnet.json   # prints the public address only
hodlodds-wallet new --network base-sepolia ~/.config/hodlodds/base-sepolia.json

https://faucet.circle.com でテスト用USDCを入金してください(ネットワーク:Solana DevnetまたはBase Sepolia)。 テスト用ウォレットに実際の資金を入れないでください。

テスト

python -m unittest discover -s tests -v

テストは、偽のサーバーと偽のSDK接続部を使用してオフラインで実行されます。固定されたSDKをインストールすると、すべてのRPC呼び出しをモックして実際の署名を作成する追加テストも実行されます。

免責事項

オッズであり、保証ではありません。金融上の助言ではありません。オッズが低くてもトークンが安全とは限りません。崩壊は予告なく発生することがあります。運営者は、HodlOddsが評価するトークンを取引する独立した取引システムも運用していますが、そのシステムが顧客のリクエストや購入を受け取ることはなく、誰もスコアの変更を依頼できません。

ライセンス

MIT

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。