mcpField
C
crypto-price

crypto-price

github.com/evgyurデータ・データベース267 回インストール14 週間前に更新
リポジトリ

crypto-price について

crypto-priceは、暗号資産や対応する市場ティッカーの価格・期間変動を調べ、チャートを生成するエージェントスキルです。Hyperliquid、CoinGecko、Yahoo Financeへデータ取得先を振り分け、複数資産の正規化比較にも対応します。

主な機能

  1. 01価格と期間変動の取得
  2. 02ローソク足・出来高チャート
  3. 03複数資産の正規化比較
  4. 04期間とティッカー別名の振り分け
  5. 05テキストとチャートの出力

活用シーン

  1. 01指定期間のBTCやHYPEの価格確認
  2. 02SP500、GOLD、SILVERの騰落比較
  3. 03株式・ETF・FXティッカーの価格取得

インストール

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

$npx skills add https://github.com/evgyur/crypto-price --skill crypto-price

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

同梱ファイル

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

LICENSE
QUICK_START.md
README.md
PUBLISH_INSTRUCTIONS.md
.gitignore
PUBLISH.md
requirements.txt
.clawdhub/
origin.json
.github/workflows/
test.yml
references/
hip3-tradexyz-tickers.md
legacy-SKILL.md
protocol-revenue-yield-checks.md
refactor-notes.md
hyperliquid-symbol-map.md
scripts/
get_price_chart.py
hype_quick.py
price_quick.py
spaghetti_quick.py
tests/
test_spaghetti.py

詳細

/crypto-price

暗号資産の価格とチャートを扱うスキルのルーターです。

Trigger

トークンの価格、期間内の変動、またはチャート(BTC、ETH、HYPE など)が必要な場合に使用します。

Commands

/crypto-price <SYMBOL> [duration]

サポート対象のあらゆるトークン/資産に対応する標準の汎用コマンドです。

python3 {baseDir}/scripts/get_price_chart.py <SYMBOL> [duration]

データソースは、metaAndAssetCtxs に含まれるすべてのライブ無期限先物シンボルについて Hyperliquid を最優先し、次に暗号資産トークンには CoinGecko、従来型のティッカー/エイリアスには Yahoo Finance を使用します(SILVER→SI=F、GOLD→GC=F、SPX→^GSPC、FX、Yahoo のティッカーが指定された株式/ETF)。

/price <SYMBOL> [duration]

Telegram/ゲートウェイ用の簡易コマンドラッパーです。テキスト + verify + MEDIA:<png> を出力します。

python3 {baseDir}/scripts/price_quick.py <SYMBOL> [duration]
/spaghetti <SYMBOL...> [duration]

複数資産を正規化して折れ線グラフにします。同じ期間の資産を比較する場合(例:6 か月間の SP500 と GOLD と SILVER)に使用します。各系列の最初のローソク足を 0% として正規化し、変動率をプロットするため、単位や価格の異なる資産も比較できます。

python3 {baseDir}/scripts/get_price_chart.py spaghetti SP500 GOLD SILVER 6mo
python3 {baseDir}/scripts/spaghetti_quick.py SP500 GOLD SILVER 6mo

エイリアス:compare、multi、basket は、スクリプトの最初のコマンドとして使用できます。カンマ区切りの入力にも対応しています:SP500,GOLD,SILVER 6mo。

/hype [duration]

この同じスキルが所有する組み込みエイリアスコマンドです。別の hype スキルにせず、crypto-price 内に置いてください。

python3 {baseDir}/scripts/hype_quick.py [duration]

このエイリアスは、次のコマンドに処理を委譲します:

python3 {baseDir}/scripts/get_price_chart.py HYPE [duration]

Command contract

生成されるすべてのチャート画像には、右下に公開用の帰属ウォーターマーク Telegram: @human20 を必ず含めてください。標準的なローソク足/出来高チャートとスパゲッティ比較チャートの両方に表示してください。

期間:分/時間/日/週/月。コンパクト形式は <数値>[m|h|d|w|mo] で、接尾辞がない場合は時間です。例:30m、2h、3h、12h、24h、2d、1w、2weeks、1mo、2months。1 week、2 months、30 分、3 時間、1 か月 のような分離形式にも対応しています。1 か月は 30 日として計算します。デフォルト:24h。

Router Map

  • データソース/期間のルーティング -> modules/source-routing/SKILL.md
  • データ取得 + チャート成果物 -> modules/price-chart/SKILL.md
  • エラー/レート制限への対応 -> modules/ops-fallback/SKILL.md
  • Hyperliquid のライブシンボルスナップショット -> references/hyperliquid-symbol-map.md
  • HIP-3/TradeXYZ のティッカーの意味 -> references/hip3-tradexyz-tickers.md
  • プロトコル収益/ステーブルコイン利回りに関する主張の検証 -> references/protocol-revenue-yield-checks.md

HIP-3 routing pitfall

デフォルトの無期限先物ユニバース(metaAndAssetCtxs)と現物ユニバース(spotMetaAndAssetCtxs)だけを調べて、Hyperliquid に暗号資産以外の資産がないと結論づけないでください。HIP-3 のビルダーがデプロイした市場は、perp dex 名の配下にあり、xyz:SILVER のような完全修飾シンボルを使用します。

/price <symbol> の正しい検索順序:

  1. Hyperliquid のデフォルト無期限先物を確認します。
  2. perpDexs を照会して HIP-3 の dex を特定します。
  3. 各 dex について、dex=<name> を指定して metaAndAssetCtxs を照会し、市場名またはエイリアスを照合します。
  4. xyz:SILVER のような完全な dex:ticker コイン文字列を使ってローソク足を照会します。SILVER のみは使用しないでください。
  5. その後で初めて CoinGecko/Yahoo にフォールバックします。

TradeXYZ/HIP-3 のエイリアス例:SILVER→xyz:SILVER、GOLD→xyz:GOLD、SPX/SP500→xyz:SP500、NASDAQ/NDX→xyz:XYZ100、WTI→xyz:CL、BRENT→xyz:BRENTOIL。データソースのルーティングを変更する前に、references/hip3-tradexyz-tickers.md を参照してください。

Protocol revenue / yield claim verification

ユーザーが暗号資産の収益に関する主張(+25% annual revenue、準備金利回りの分配、トークンのファンダメンタルズへの影響)の確認を求めた場合、ウェブ検索の要約だけで済ませないでください。可能な限り直接データ API を使用し、そのうえで主張を明示的に再計算してください:

  • プロトコル収益のランレート:DefiLlama の fees API。通常は直近 30 日分を年率換算します。
  • ステーブルコイン供給量:チェーン/プロトコル別の DefiLlama stablecoins API
  • 増加分:supply * reserve_yield * protocol_share / annualized_revenue

チームが公式ガイダンスを公開していない限り、概算として明記した範囲を返してください。詳細と Hyperliquid/Coinbase/Circle を使った計算例については、references/protocol-revenue-yield-checks.md を参照してください。

クイックコマンドのエイリアス

トークン固有のスラッシュエイリアス(例:/hype)で、Hermes の quick_commands を type: exec として使用する場合は、エイリアスをこの crypto-price スキル内に置き、クイックコマンドの実行先をこのスキルのラッパー(scripts/hype_quick.py)にしてください。エイリアス設定では、期間の引数を転送する(append_args: true)か、ラッパーから HERMES_COMMAND_ARGS を参照できるようにする必要があります。そうしないと、/alias 2h が 2h を渡さずにこのスクリプトを呼び出し、一見正常に見えながらデフォルト期間のチャートを返すことがあります。ゲートウェイの仕組みについては、hermes-agent → references/gateway-quick-commands.md を参照してください。

出力仕様(必須)

必ず以下を返してください。

  1. symbol と duration
  2. price と change_period_percent(またはエラー)
  3. chart_path(ある場合)
  4. 余分な書式を含まない text_plain
  5. 簡潔な検証結果(JSON/ファイルに基づく)

chart_path がある場合は、text_plain とともに PNG を添付してください。

配信ルール(重要)
  • Telegram や、添付ファイルに対応したその他のチャットチャンネルでは、message ツールを使い、チャートをファイルとして送信してください(filePath/path = chart_path)。
  • message action=send の後は、重複を防ぐため NO_REPLY だけを返してください。
  • Telegram では、/tmp 内のファイルに MEDIA: を使わないでください。添付されない可能性があります。
  • 利用可能な Telegram 送信ツールが MEDIA:<path> を使ったテキスト送信のみに対応している場合(個別の filePath に対応していない send_message など)は、まず PNG を /tmp から /home/hermes/workspace/artifacts/crypto_chart_<SYMBOL>_<ts>.png のような永続的なパスにコピーし、test -s/サイズで確認してから、MEDIA:<persistent_path> を送信してください。テキストとメディアを同じメッセージで送るとタイムアウトする場合は、まず短いキャプション/検証結果を送り、次にメディアのみのメッセージを送信してください。その場合も、最後は NO_REPLY としてください。
  • message ツールが不要な web/local render の場合に限り、MEDIA: は予備の方法として使用してください。
重複出力の切り分け

ユーザーがチャートの下に重複したキャプション(HYPE... + verify... の繰り返し)を示した場合、最初に価格スクリプトを書き換えないでください。まず次のレイヤーを確認してください。

  1. python3 scripts/get_price_chart.py HYPE <duration> を実行し、JSON に text_plain、verify、chart_path がそれぞれ 1 つずつ含まれていることを確認します。
  2. スクリプトの出力が重複していない場合、原因はほぼ間違いなく配信レイヤーにあります。キャプションと後続テキスト、MEDIA: と最終応答の併用、または message ツール使用後の NO_REPLY の欠落を確認してください。
  3. 可能であれば、正確なメッセージ取得で Telegram の形式を検証します。メッセージ A が has_media=true/写真付きで価格テキストをキャプションとして含み、メッセージ B が has_media=false で同じテキストを含む場合、OpenClaw の配信重複排除が text+media と最終的な text-only を異なるペイロードとして扱っていることが原因です。
  4. OpenClaw では、reply-delivery.ts、agent-runner-payloads.ts、block-reply-pipeline.ts を調べてください。永続的な修正は、同じテキストがメディアのキャプションとしてすでに配信されている場合に、後続のテキストのみの最終ペイロードを抑制することです。references/openclaw-media-caption-dedupe.md を参照してください。
  5. transcript/session JSONL を確認します。toolResult が 1 つなのに Telegram の送信/アシスタントの応答が重複している場合は、価格計算ではなく、ゲートウェイ/スキルの配信指示を修正してください。
  6. live Claw では、ユーザーメッセージ前後のログも確認してください。メモリ圧縮/ツール許可リストの失敗により、診断応答が重複することがありますが、これは別のゲートウェイ/ツールポリシーの問題です。

セットアップ/依存関係の確認

  • チャート描画では _build_chart 内で matplotlib をインポートします。ローソク足データがあるのに JSON の chart_path が null の場合は、まずゲートウェイ/クイックコマンドが使用する Python 環境を確認してください。
    /opt/hermes-agent/venv/bin/python3 - <<'PY'
    import matplotlib
    print(matplotlib.__version__)
    PY
    
  • その仮想環境に不足している場合は、そこでインストールしてからスクリプトを再実行してください。
    /opt/hermes-agent/venv/bin/python3 -m pip install matplotlib
    /opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 24h
    
  • 今後に活かす教訓は、「ゲートウェイが使用するものと同じ Python 環境にチャート描画の依存関係をインストールすること」です。チャート描画に問題があると断定しないでください。

クイックテストチェックリスト

  • /opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py BTC
  • python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 12h
  • python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 2h は duration: "2h" を返し、text_plain に over 2h と表示され、chart_path が既存の PNG を指していること。
  • python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 1w は duration: "1w" と週単位のチャートを返すこと。
  • python3 /home/hermes/.hermes/skills/crypto-price/scripts/get_price_chart.py HYPE 1mo は duration: "1mo" と月単位のチャートを返すこと。
  • HERMES_COMMAND_ARGS='1 week' /opt/hermes-agent/venv/bin/python3 /home/hermes/.hermes/skills/crypto-price/scripts/hype_quick.py は over 1w と MEDIA:<png> を出力すること。
  • 成功時の JSON に price|change_period_percent|text_plain が含まれていること。
  • 2h のような短い期間では、チャートが一部だけに切り詰められず、指定した期間全体を表示していることを目視で確認します。チャート作成処理では「余白を作る」ために指定したローソク足の範囲を切り詰めないでください。変動の計算にも X 軸にも期間全体を使用します。
  • フラクタルが絶対高値/安値と同じローソク足にある場合、そのポイントの価格ラベルがチャートに 1 つだけ表示されることを確認します。ラベルが重複しないよう、絶対値マーカーにラベルの表示を優先させます。
  • 無効なシンボルに対して、わかりやすいエラー JSON が返されること。

手動レビューのチェックリスト

  • スキルファイルにシークレット/トークン/チャット ID が含まれていないこと。
  • text_plain がそのまま使用されていること(追加の書式設定なし)。
  • フォールバックパスで内部のスタックトレースが公開されないこと。
  • コマンドが以前の使用方法との後方互換性を保っていること。

完了条件

  • SKILL.md に有効なフロントマターとコマンドの仕様があること。
  • scripts/get_price_chart.py HYPE 12h が symbol、duration、price、change_period_percent、text_plain と、任意の chart_path を含む JSON を返すこと。
  • chart_path が返された場合、PNG が存在し、チャットチャネルに添付できること。
  • 無効なシンボルに対して、スタックトレースを含まない構造化エラー JSON が返されること。

正規リポジトリ/プッシュ時の注意事項

  • ~/.hermes/skills/crypto-price にインストールされた実行環境は、Git のワークツリーではない場合があります。正規の公開リポジトリは https://github.com/evgyur/crypto-price.git です。
  • 実行環境の修正をプッシュする場合は、このリポジトリをクリーンな一時チェックアウトにクローンまたは同期してください。.github/workflows、ドキュメント、.clawdhub、フォント、公開用ファイルなどのリポジトリメタデータは保持してください。
  • 実行環境のファイルには空白文字やローカルでの差分が含まれ、正規の差分に不要な変更が混入する可能性があるため、実行環境のファイル全体をコピーするのではなく、クリーンなチェックアウトに必要最小限のパッチを適用してください。
  • ユーザーから別のブランチを指定されていない限り、デフォルトのリモートブランチ(origin/HEAD。現在は master)にプッシュしてください。
  • プッシュ後、git ls-remote とリモートの HEAD が一致していることを確認してください。GitHub Actions が設定されている場合は、最新のワークフロー実行を success になるまで確認するか、失敗を明示的に報告してください。

後方互換性マップ

  • 旧形式の実行コマンド python3 {baseDir}/scripts/get_price_chart.py <SYMBOL> [duration] は維持されています
  • 旧形式の説明は references/legacy-SKILL.md に移されています
  • 互換性を保つため、スクリプトのコードは名前を変更せずに残されています
  • JSON には duration と duration_label の両方を含める必要があります。一部の OpenClaw コマンドエイリアスとチャット配信のチェックでは、duration が明示的に確認されます。
  • scripts/price_quick.py:汎用の /price <SYMBOL> [duration] ラッパーです。argv と HERMES_COMMAND_ARGS を解析し、text_plain、検証行、および MEDIA:<png> を出力します。
  • scripts/spaghetti_quick.py:正規化された複数アセット比較チャート用の /spaghetti <SYMBOL...> [duration] ラッパーです。デフォルトは SP500 GOLD SILVER 6mo です。
  • OpenClaw/Hermes の /hype は、この同じ crypto-price スキル内の薄いエイリアスコマンドとして維持し、crypto-price/scripts/get_price_chart.py HYPE [duration] に処理を委譲する必要があります。別の hype スキルを作成したり、維持したりしないでください。
  • 期間エイリアスでは、要求された全期間を最初から最後まで維持する必要があります。以前のバグでは、2h を受け付けてキャプションに over 2h と表示したものの、チャートの「余白」のためにローソク足を 80% に切り詰め、その結果、チャートと変動幅の対象が約 96 分になっていました。要求された期間のローソク足を切り詰めないでください。視覚的な余白が必要な場合は、データ選択ではなく軸のマージンを調整してください。

コメント