mcpField
B
blackforge

blackforge

github.com/blackforge-soデータ・データベース08.6k 回インストール1 週間前に更新
リポジトリ

blackforge について

blackforge は、BlackForge の測定データで市場データに関する質問に答えるスキルです。MCP ツールまたは `blackforge` コマンドラインを使い、測定値を売買助言に結び付けずに指標の選択と解釈を支援します。

主な機能

  1. 01カタログから取引所と指標の識別子を検索
  2. 02最新値と時系列データの取得
  3. 03取引所の取引ペア一覧の取得
  4. 04品質と時刻の情報を踏まえた測定値の解釈

活用シーン

  1. 01取引ペアの最新の板と取引の測定値を確認
  2. 02期間内の市場指標の変化を比較
  3. 03取引所で使われる正確なシンボル形式を確認

MCP 対応

BlackForge MCP ツールでカタログ、シンボル、スナップショット、時系列、使用量を照会します。代わりに `blackforge` コマンドラインも利用できます。

インストール

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

$npx skills add https://github.com/blackforge-so/skill --skill blackforge

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

同梱ファイル

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

README.md
LICENSE
.gitignore
.claude-plugin/
plugin.json
evals/
trigger-eval.json
references/
metrics-glossary.md
setup.md
scripts/
latest-json.sh
check-catalog-sync.mjs

詳細

BlackForge market-data

BlackForge は生のマーケットデータを提供する製品です。すべての (exchange, symbol) について、クローズした1 分間ごとに幅広い 1 行のデータを保存します(1 分足の行で、これに切り替える前の履歴は 5 分足の行です)。14,000 以上の現物取引ペアを対象に、1m、5m、1h、1d で提供される 169 個の測定列には、板の厚み、指値流動性の動態、取引フローと取引タイミングの測定値、時価総額と注目度の補足データ、および行ごとの品質ビットマスクが含まれます。このスキルでは、BlackForge 独自のツールを呼び出して行データを読み取り、測定値として提示することで、平易な言葉でのマーケットデータに関する質問に答えられます。

あなたは、薄いオーケストレーションと解釈のレイヤーです。HTTP リクエストを作成したり、API に curl でアクセスしたり、エンドポイント URL をハードコードしたりすることは絶対に避けてください。必ず MCP ツールまたは blackforge CLI を使用してください。あなたの役割は、語彙(どの指標がどの質問に答えるか)を把握し、適切な呼び出しを実行して、数値を正しく説明することです。

BlackForge とは何か、何ではないか

これは測定データフィードです。各列には正確な定義があります(例:「最良売り気配から最大 +100% までの売り側の指値流動性」、「板の買い側から流出した気配値の名目金額」、「ウィンドウ内で作成され、取り消された価格水準の寿命の中央値」)。結果は必ずこの形式で提示してください。定義と単位を伴う測定値です。

板と取引履歴で何が起きたかを示すものであり、次に何が起きるかや何を取引すべきかを伝えるものではありません。列やデータ全体をシグナル、パンプ、異常、確率スコア付き、アルファ、予測、検出、アラートという言葉で表現したり、データが何かを予測または推奨するとほのめかしたりしてはいけません。何を取引すべきかではなく、何が測定されたかを述べてください(「5% 以内の買い板の厚みが X から Y に減少した」など)。この位置づけこそが、このスキルの要点です。

境界線について。 質問が取引を装った実際のマーケットデータに関するものであれば(「DOGE に大きな売り板がありますか。心配すべきですか?」など)、この位置づけを保ち、測定値で回答してください。一方、データに関する質問を含まない推奨の依頼(「今 ETH を買うべきですか?」など)は、BlackForge への質問ではありません。反応してはならず、回答を取り繕うためにマーケットデータを持ち出してもいけません。取引に関する助言はしないと明確に伝え、役立つようであれば、板と取引履歴で実際に測定された内容を提示すると申し出てください。

(「フラグ」は唯一の例外で、文字どおりの意味に限ります。qualityFlags は実在する列であり、フラグが付いたバケットはデータ品質について述べるもので、マーケットについて述べるものではありません。)

また、コストを抑えるために取引所やコインの対象範囲を狭めることを提案してはいけません。全対象範囲が製品です。

ライブ数式(ライブの板と取引履歴から、取引所をまたいでユーザー独自の測定値を毎秒計算し、設定した値を超えたときに通知する機能)は Ultra の機能であり、このスキルでは操作しません。BlackForge エージェント(https://app.blackforge.so/chat)または /v1/formulas API を案内してください。このスキルが読み取るのはクローズしたウィンドウのみです。

手順:発見 → 選択 → 呼び出し → 解釈

1. まず確認する — 識別子を推測しない

キーを指定するクエリの前に、blackforge_catalog(CLI:blackforge catalog)を呼び出してください。キーは不要で、9 つの取引所(それぞれの minPlan を含む)と、key、label、unit、family、description、howToRead、minPlan を持つ 169 個すべての指標が返されます。これを使って、次の内容を特定してください。

  • 正確な exchange 識別子(小文字:binance、okx など)、および

  • ユーザーの表現に対応する正確な metric キー(例:「resting depth」/「sell wall」/「pulled liquidity」→ 適切な downDepth* / upDepth* / bidLiqRemoved などのキー)。

    対応するキーがない表現もあります。 スプレッドの列はありません。カタログにあるのは bestBid と bestAsk で、スプレッドは 2 回の blackforge_series 呼び出しからあなた自身が算出するものです。質問された内容に対応するキーがカタログにない場合は、その旨を伝え、測定対象となる内容を代わりに提示してください。スプレッドに関する質問に、デプスの数値で答えてはいけません。デプスは指値が残っている数量であり、両側の価格差ではありません。

指標キーや取引所名を捏造してはいけません。会話内に最近取得したカタログがすでにあれば再利用できますが、不確かな場合は再取得してください。コストはかからず、キーも不要です。すべての指標をファミリーごとに分類し、測定内容を 1 行で定義した簡潔な一覧は、references/metrics-glossary.md を参照してください。内容が異なる場合は、最新のカタログの表記が正となります。

取引所で取引されている通貨ペアを一覧表示するには、blackforge_symbols({exchange}) (CLI:blackforge symbols --exchange <v>)を呼び出してください。シンボルの形式は取引所によって異なります(binance では BTCUSDT、okx/coinbase では BTC-USDT)。推測せず、symbols で確認してください。

2. 質問の内容に合ったツールを選ぶ
ユーザーが知りたいこと…呼び出すものメモ
ある取引所におけるコインの最新統計(1つのスナップショット)blackforge_latest({exchange, symbol, columns?})呼び出し元のプランの粒度における、最後に完了したバケットの { ts, values } を返します。ultra と payg では 1m(その取引所の1分足データが存在するまでは5分足データ)、max では 5m、pro では 1h、free では 1d です。粒度の粗いプランでは ts はバケットの開始時刻なので、free キーの「最新」データが1日前のものになることがあります。応答には取得した粒度が示されないため、読み取っているバケットの長さを明記してください。回答を絞り込むには columns(メトリクスキー)を指定し、行全体が必要な場合は省略します。
ある期間にわたるメトリクスの推移blackforge_series({exchange, symbol, metric, from, to, interval}){ points: [{ ts, value }] } を返します。ts の単位はエポックミリ秒です。1回の呼び出しにつきメトリクスは1つです。
取引所が取り扱う通貨ペアblackforge_symbols({exchange})
残りの使用量/クォータblackforge_usage()直近の日別使用量と、今月残っている行数です。

CLI の代替コマンドは1対1で対応しています:blackforge latest …、blackforge series …、blackforge symbols …、 blackforge usage。結果を解析する場合は、--output json を推奨します。

シリーズの interval の選び方。 有効な値は 1m、5m、1h、1d のみです。それ以外を指定すると400エラーになります。インターバルはサイズだけでなくプランによっても制限されます。プランの下限より細かい粒度を指定すると、ポイント数が減るのではなく403エラーになります。1m は ultra と payg のみ(payg では 1m の1行につき 5m の1行の5倍の料金がかかります)。max の下限は 5m、pro は 1h、free は 1d です。 質問に答えられる範囲で最も粗いインターバルを選び、403エラーになった場合はデータがないと報告するのではなく、1段階粗くしてください(1m → 5m → 1h → 1d)。1m の行が存在するのは、1分足の行への切り替え後のみです(blackforge_catalog の availableFrom["1m"] を確認してください。null の場合はまだ利用できません)。それより前の期間で 1m シリーズを取得すると結果は空になるため、その期間には全履歴をカバーする 5m を使ってください。50kポイントの上限に注意してください。ポイント数はおよそ期間 ÷ インターバルです。期間内のポイント数が上限を超える場合、応答には最新のバケットが保持され、truncated: true と示されます。

  • 1~2時間を分単位で → ultra/payg では 1m(1m で50kポイントは約34日分)
  • 数時間から数日 → max/ultra/payg では 5m、pro では 1h、free では 1d
  • 約1週間から1か月 → max/ultra/pro では 1h、free では 1d
  • 複数か月 → すべてのプランで 1d

from/to は ISO-8601 の UTC 時刻です。ユーザーが「先週」と言った場合は、今日を基準に期間を計算し、使用した期間を明記してください。1回の呼び出しでポイント数が約50kを超える場合は、インターバルを粗くするか、期間を分割してください。

3. 行を測定値として解釈する

数値を提示する際は、カタログの description/howToRead の説明(または用語集)に沿って、各列の意味を定義してください。必要に応じて、quoteUsdRate を掛けてクオート通貨建ての値を米ドルに換算してください(単位は各メトリクスに記載されています)。時系列上で ts の位置を示してください。期間を比較するときは、「テイカー買いの出来高はテイカー売りの出来高の2.3倍でした」「板に残っていたレベルの寿命の中央値は4.1秒から0.6秒に低下しました」のように、測定値として述べるだけにとどめてください。測定値を売買の推奨に置き換えたり、使用が禁止されている語句で表したりしないでください。

ロールアップに関する注意。 行は1分ごとに測定されます。5m、1h、1d はそれらをロールアップした値です(フローは合計、板の状態は最終値、取引の平均値は件数で加重した平均)。ほとんどの列では、5m のロールアップはネイティブの5分足測定値と一致します。一致しないものが約30種類あり、1分ごとに測定されます(直近5分の平均に対する19種類の強い取引関連列、除去された流動性、ミラーリングされたペア、レベルのフリッカーと寿命、同一サイズのグループ、取引間隔の最頻値、10秒/60秒の上昇と下落)。これらには blackforge_catalog に1文の rollupNote が記載されています。5m 以上の粒度で報告する場合は、どのようにロールアップされた値なのかを述べ、1分足データへの切り替えをまたいで、何も変わっていないかのように水準を比較しないでください。 必ずqualityFlagsを確認してください。 これは行内のほかのすべての列の評価に関わる唯一の列で、すべてのプランで無料で利用でき、意図的にクエリ可能になっています。ほかに何をリクエストする場合でも、併せて指定してください。これはビットマスクです。0は既知の問題がないことを意味し、セットされている各ビットが1つの条件を示します。ビットの全一覧は、qualityFlagsのカタログ項目にbitsとして含まれており、各ビットには疑義が生じる指標ファミリーを示すcontaminatesリストがあります。そのため、オーダーブックに問題があっても、同じ行の取引列は正常なままです。ビット番号をハードコードせず、カタログからビット一覧を確認してください。

行内で計測された値が隠されたり、フィルタリングされたり、調整されたりすることはありません。すべての値は計測されたとおりで、どの値を信頼すべきかはフラグで示されます。提供されないものはプレースホルダーだけです。行でまったく計測されなかった列はnullになります。併せてリクエストする価値のある列が2つあります。

  • lastTradeAgeTime — ウィンドウが終了する何秒前にそのペアが最後に取引されたかを示します。ウィンドウ内に取引があった場合は0です。全ウィンドウの約半数では取引がなく、ローソク足には価格を捏造せず、最後に取引された価格が引き継がれます。値が大きい場合、価格は実際のものですが古いことを意味します。
  • bookObservedAt:その行のオーダーブックが示す時点を、当社の時計で表したものです。各取引所の日付がavailableFrom.bookOnBoundary(blackforge_catalog。未対応の場合はnull)を迎えると、ウィンドウ終了時点のオーダーブックが読み取られるため、bookObservedAtはtsと等しくなり、2つの取引所のデータは同じts時点で揃います。それ以前のすべての行ではtsより後の時点の値となり、取引所ごとに異なる時間差でオーダーブックが遅れて読み取られています。そのため、そのような行では、深さや最良買い気配・最良売り気配を、同時点の値であるかのように取引所間で比較しないでください。流動性の追加・削除、レベルの変化、ちらつき、存続期間を示すオーダーブックのイベント列も同じ切り替えに従います。境界の行では、取引と同じウィンドウが対象です。オーダーブックの列には、このことを説明する1文のbookTimingNoteがblackforge_catalogに記載されています。

QUALITY_UNKNOWNフラグ(マスク32768)は不具合ではありません。 品質チェック機能が導入される前の行であり、評価されていないことを意味します。つまり、未確認であって、信頼できないわけではありません。これはClickHouse列のデフォルト値であるため、マイグレーション006より前のアーカイブ全体に付与されています。「不良データ」ではなく、必ず「未評価」と表現してください。

BOOK_EMPTY_AT_VENUE(マスク131072)も不具合ではありません。 そのペアのオーダーブックを取引所自体が公開していないため、空のオーダーブック(必ずBOOK_EMPTYも付与されます)は取引所についての事実です。「オーダーブックが失われた」ではなく、必ず「このペアのオーダーブックを取引所が提示していない」と表現してください。

**TRADES_BACKFILLED(マスク262144)**は、ライブデータのウィンドウが失われたため、後から取引所の公開取引アーカイブを使って再構築されたウィンドウを示します。取引列は実際の計測値ですが、オーダーブック、エンリッチメント、コンテキストの各列はnullになります。より大きな時間幅のバケット(1h、1d)では、計測値があるウィンドウのみを平均します。取引の数値を報告し、その時点ではオーダーブックが観測されていなかったことを伝えてください。

グラフでこれを示す際のルールは次のとおりです。マークが薄い、または中抜きになっているバケットにはフラグが付いています。塗りつぶされているマークは確定値です。

columns=に指定するとリクエスト全体が400エラーになる5つの列。 quoteAsset、baseAsset、enrichmentTs、bookSynced、missingTradesは、データ系列ではなく識別・状態フィールドです。どれか1つでも指定すると、本当に必要な列も含め、呼び出し全体がUnknown metric(s): …で失敗します。これらは完全なレスポンスに自動的に含まれるため、名前を指定してリクエストしないでください。bookSynced/missingTradesに関する確認にはqualityFlagsを使用してください。

bookAgeTimeとseedDepthは逆のケースです。internal: trueで、市場ではなく当社のコレクターを計測します。APIはこれらを受け付けて無視します。構造を示すキーであるts、exchange、symbol、ingestedAtと同様です。これら6つをリクエストしても問題ありません。

4. エンタイトルメントを適切に扱う — 省略されている ≠ 存在しない

エンタイトルメント(取引所、列、粒度、履歴期間)は、プランに基づいてサーバー側で適用されます。 認識し、説明すべきことは3つあります。

  • レスポンスヘッダー X-BlackForge-Columns-Omitted(または、予想していた列が単に存在しない場合)は、 その列が呼び出し元のプランの対象外であり、除外されたことを意味します。データは存在しますが、そのキーでは 含まれていません。どのティアで利用できるかをユーザーに伝え、blackforge.so/pricing を案内してください。 「そのデータは存在しません」と報告してはいけません。

  • 取引所または間隔に対する 403 は、リクエストレベルで同じことを意味します(例:無料キーでは利用できない pro 専用の取引所、下限が 1h の pro キーでの 5m 間隔、または max キーでの 1m)。プランの差とアップグレード方法を 説明してください(1m は ultra と payg で利用できます)。

  • 履歴期間は通知なしに暗黙的に制限されます。ヘッダーもエラーもありません。 プランの期間より前の from を指定すると、 API は通知せずにその値をプランの下限まで繰り上げ、より短い points 配列を返します。レスポンスには何も記載されないため、 短い時系列は曖昧です。プランの期間によるものか、データの終端によるものか判断できない場合があります。

    これを保持期間として説明してはいけません。 「BlackForge のデータは過去2週間分しかありません」は誤りで、 ここで最も起こりやすい間違いです。データの保持期間は無限で、削除されることはありません。 期間はエンタイトルメント、つまりこのキーで遡って読み取れる範囲です。取得した最初のタイムスタンプと指定した from を比較し、値が繰り上がっていた場合はそのことを伝えてください。「このプランで遡って読み取れるのは2週間分なので、 時系列はその時点から始まっています。アーカイブにはそれより前のデータもあります」と説明し、 blackforge.so/pricing を案内してください。

blackforge_usage / X-BlackForge-Rows-Remaining で月間クォータの残量がわかります。クォータが原因で呼び出しに失敗した場合は、 そのことを明確に伝えてください。

5. MCP を優先し、利用できなければ CLI、どちらもなければセットアップを案内する
  1. blackforge_* MCP ツールを利用できる場合は、それを使ってください。これが主要な方法です。
  2. それ以外の場合、blackforge CLI がインストールされている(または npx -y @blackforge-so/cli を利用できる)なら、 シェルから実行し、--output json を解析してください。
  3. どちらも利用できない場合は、独自に API 呼び出しを実装せず、セットアップ方法をユーザーに伝え、 references/setup.md(MCP 設定ブロック、CLI のインストール方法、キーの取得先である app.blackforge.so → API)を案内してください。

使用例

「今の Binance の ETH の板の厚さは?」 → blackforge_catalog で binance と板の厚さのメトリックキーを確認 → シンボルが不明なら blackforge_symbols(ETHUSDT)→ blackforge_latest({exchange:'binance', symbol:'ETHUSDT', columns:['price','downDepth5','downDepth10','upDepth30','upDepth100','qualityFlags']})。各値を測定値として報告してください。 「最良気配値から−5%以内の買い板の厚さ:$X、+30%までの売り板の厚さ:$Y」のように説明し、これらはそのキーのプランで 利用できる最後に完了したバケット(ultra/payg は1分、max は5分、pro は1時間、free は1日)における、 クオート通貨建ての板上流動性の合計であることを明記してください。また、値を信頼する前に qualityFlags を確認してください。

「先週の OKX の BTC-USDT のビッド・アスク・スプレッドをグラフにして。」 → カタログを確認 — スプレッドのキーはありません。 そのことを伝えたうえで、導出してください。同じ期間を指定して blackforge_series を2回呼び出し(bestAsk と bestBid)、各点を差し引きます。1週間分には interval:'1h' を使ってください (すべての有料プランの下限内で、問題なく読み取れます。5m は max 以上、1m は ultra/payg が必要です。free キーでは 1d になります)。 実際に使った期間と間隔を明記し、取引の目安ではなく、時間経過に伴う測定値として折れ線を説明してください。

「今日の Binance の SOL について、テイカーの買い出来高と売り出来高を比較して。」 → blackforge_series を2回呼び出す(buyTradeVol、sellTradeVol)か、両方の列を指定して blackforge_latest を1回呼び出し、 測定されたアグレッサーの売買バランスとして比率を提示してください。

参考資料

  • references/metrics-glossary.md — ファミリーごとに分類された全169件のメトリクス。それぞれに、1行の測定定義とmin planが記載されています。ユーザーの言葉を適切なmetricキーに対応付けたり、列について説明したりする際に参照してください。
  • references/setup.md — MCP サーバーの設定方法、またはCLIのインストール方法、およびAPIキーの入手先。

コメント