mcpField
E
Evernode MCP

Evernode MCP

ローカル
github.com開発ツール24 週間前に更新

Evernode MCP について

Evernode MCPは、EvernodeとXahau向けHotPocket dAppの構築と準備を支援する助言型サーバーです。テンプレート、ヒューリスティックな検査、リース費用の見積もり、ライブホスト情報、デプロイ手順を提供し、署名や送信は行いません。

主な機能

  1. 01HotPocket dAppテンプレートの生成
  2. 02合意を損なうコードパターンの検出
  3. 03コントラクトAPI利用のヒューリスティック検査
  4. 04EVRリース費用の見積もり
  5. 05ライブホストの順位付けと診断
  6. 06デプロイと決済コマンドの生成

活用シーン

  1. 01テンプレートからのdApp作成
  2. 02デプロイ前のコントラクト検査
  3. 03ライブホストとリース費用の比較
  4. 04Xahau決済ワークフローの準備

MCP 対応

dApp生成、検査、費用見積もり、ホスト検索、デプロイ案内を行う12種類の読み取り専用・助言型ツールを提供するMCPサーバーです。うち2つのツールは公開OnLedgerのライブデータを参照します。

設定

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

mcp.json · 共通設定
{
"mcpServers": {
"hugegreencandle-evernode": {
"command": "npx",
"args": [
"-y",
"evernode-mcp"
]
}
}
}
起動コマンドnpx -y evernode-mcp

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

パッケージ
npmevernode-mcp0.6.0

ツール

12

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

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

詳細

evernode-mcp — Evernode AI Builder

Model Context Protocol サーバーです。AI エージェントが Evernode / Xahau 上で HotPocket dApp を構築、チェック、コスト見積もり、デプロイできるようにします。MCP 対応エージェント(Claude など)を接続して dApp を依頼すると、既知のコンセンサス破綻の原因を避けるように作成されたテンプレートからコントラクトをひな形生成し、非決定的なパターンがないかコントラクトコードを静的解析し、EVR リース料金を見積もり、稼働中の Evernode ホストをランキングし、デプロイコマンドを生成します。また、dApp が Xahau 上で価値を移転する場合は、支出制限 Hook をインストールするコマンドと、Hooks ツールチェーンでその不変条件を証明するコマンドを出力します。

HotPocket は Evernode のコントラクトランタイムです。クラスターのすべてのノードで Node.js/WASM コントラクトを実行し、その出力と状態をコンセンサスにかけます。初心者が最もよく犯すミスは、非決定的なコード(Date.now()、Math.random()、fetch() など)です。2 つのノードが異なる結果を計算し、台帳が停止します。このサーバーは、デプロイ前にそうした一般的な原因を検出することを目的に構築されています(ヒューリスティックによる検出です。詳しくは検出できること/できないことをご覧ください)。

これは助言のみを行う読み取り専用のツールです。ファイルとガイダンスを生成しますが、キーを保持せず、EVR を使用せず、リースを取得せず、署名や送信も行いません。また、オーケストレーションを置き換えるのではなく、Offledger Cluster Manager に接続します。API キーやアカウントは不要です。ネットワーク通信は、2 つのツールが公開 OnLedger API に対して行う読み取り専用の HTTPS GET のみです(ネットワークアクセスを参照)。

位置づけ — Hooks トライフェクタのレイヤー 2 コンパニオン

Hooks パイプラインはレイヤー 1 Hooks を保護します — 記述 → 1 件の tx をシミュレート → すべての入力を証明 → ライブで監視:

ステージツール機能
記述xahc安全な Hook を作成・コンパイルし、クリーンで lint を通過した WASM にする
1 件をシミュレートxahau-mcpライブトランザクション 1 件に対して実際のバイトコードを実行する
すべてを証明xahc-prover対象範囲内のすべての入力で不変条件が成立することを証明する。または反例を返す
ライブで監視xahc-watch証明をデプロイ済み Hook に結び付けて継続的に検証する(SetHook の差し替えや、ライブ判定の破綻を通知)

evernode-mcp はレイヤー 2 のコンパニオンです。Evernode ホスト上で動作する HotPocket dApp を構築します。dApp が Hook で保護されたアカウントを通じて Xahau 上で価値を決済する場合は、トライフェクタに引き継ぎます。決済の安全性を独自に再検証することはありません(check_hook_compat / generate_settlement はトライフェクタの証明・インストールコマンドを出力し、安全性の判定は行いません)。

ツール

12 個すべてのツールは読み取り専用/助言のみです。各ツールは readOnlyHint: true を設定します。ライブの OnLedger ツール 2 つ(recommend_hosts、host_diagnostics)のみが openWorldHint: true を設定し、ライブの外部エンドポイントである OnLedger に接続する場合があります。各ツールは出力スキーマを公開するため、エージェントは検証済みの structuredContent の形式を取得でき、フィールド名を推測する必要はありません。

ツールオープンワールドか?戻り値
list_templatesいいえ{ templates } — 利用可能な10個の dApp テンプレート名です。
generate_contractいいえ{ template, files, notes } — テンプレート用の、完全で lint エラーのない(HIGH の check_determinism 検出結果がない)HotPocket ファイル一式(コントラクト + 状態ヘルパー + hp.cfg.override + package.json + クライアント)です。
check_determinismいいえ{ findings, summary } — コントラクトソース向けのヒューリスティックなリンターです。クラスターの合意を損なう可能性がある既知の非決定的なパターン(壁時計、乱数、ネットワーク I/O、環境変数/ホストの読み取り、タイマー/競合、状態ファイル外のファイルシステム操作、順序が定まらない反復/シリアライズ、ロケール/タイムゾーンのフォーマット、浮動小数点リテラル)を検出します。各検出結果には line/column/rule/severity/why/fix が含まれます。HIGH の検出結果は、合意を損なう可能性が高いものです。検出結果がない場合は、これらのパターンが見つからなかったことを意味します。コントラクトの決定性が証明されたことを意味するものではありません。
check_contract_apiいいえ{ findings, summary } — check_determinism と同系列のツールです(同じく誠実な位置付けで、ガイダンスであり、証明ではありません)。HotPocket の Node.js コントラクトがコントラクト API を正しく使用しているかを静的にヒューリスティック検査します。hpc.init(...) エントリーポイント、ctx(users/lclSeqNo)の読み取り、合意された状態機構のみを通じた永続化(状態以外のパスへの任意の fs 書き込みは禁止)、ctx.users I/O の処理、時刻の取得に ctx.lclSeqNo を使用すること(Date.now は使用しない)、非同期の合意処理を await することを確認します。各検出結果には line/column/rule/severity/why/fix が含まれます。
recommend_patternいいえ{ pattern, nodes, notes } — 平易な英語で記述されたユースケースをもとに、HotPocket のパターンを提示します。ノード数、状態モデル、オラクル/NPL の使用、Xahau での決済、および重要な決定性に関する注意事項が含まれます。
check_hook_compatいいえ{ involvesHook, workflow, repos } — Xahau Hook 経由で決済する dApp に推奨される 書き込み → シミュレーション → 証明 → インストール のワークフローを返します(xahc · xahau-mcp · xahc-prover)。Hook 自体の分析は行いません。
generate_settlementいいえ{ template, limitDrops, files, install, prove, notes } — agent_guardrail Hook 用の、クラスター側の Xahau 出金コードのスターターと、署名なしの xahc install-tx コマンド(トランザクションごとの LIM + 任意の DST ロック)、およびチェック用の xahc prove コマンドです。コマンドのみを出力し、安全性の判定は行いません。escrow/subscription/payment_splitter/streaming_payment/multisig_treasury を受け付けます。
estimate_lease_costいいえ{ inputs, perNodeEVR, totalEVR, approxDurationHours, notes } — テナントの EVR リース費用は evrPerMoment × moments × nodes です。誠実な注記として、料金はホストが設定します(ネットワーク標準はありません)。ホスト側の登録料は含まれません。
recommend_hostsはい{ mode, ranked, prefer, note, source?, query? } — 公開 OnLedger API(Xahau 上の Evernode レジストリのインデックス)から Evernode ホストのライブデータを取得して、cheap/capacity/reputation で順位付けします。フィルター(最低レピュテーション/スロット数/RAM、国)はライブクエリに適用されます。または、指定した hosts リストを順位付けします(フィルターは適用されず、上位10件)。実データのみを使用し、ホストを捏造しません。取得に失敗した場合は、偽りなく空の結果と注記を返します。
host_diagnosticsはい{ found, address, source, note?, registration?, reputation?, slots?, lease?, specs?, redFlags } — r-address で指定した単一の Evernode ホストの健全性を確認します。登録状態、レピュテーション、アクティブ/合計/利用可能なスロット数、リース条件(取得できる場合は料金/drops)、仕様、警告フラグ(フラグ付き、非アクティブとしてマーク済み、レピュテーションが低いまたはゼロ、容量上限)が含まれます。OnLedger からライブデータを取得するか、指定した host オブジェクトを診断します。実データのみを使用します。数値フィールドは妥当性を保って型変換されます("252" のような文字列型の数値は実数値になり、無効な値や有限でない値は、捏造した 0 に置き換えず省略されます)。不明なフィールドは省略されます(捏造されません)。見つからない場合や取得に失敗した場合は、偽りなく found:false と注記を返します。
generate_deploy_commandsいいえ{ steps, notes } — local(hpdevkit の開発用クラスター)・single(evdevkit でホストを1つ取得)・cluster(evdevkit の N ノード)・cluster-manager(Offledger Cluster Manager に接続)用のコマンドシーケンスです。
explain_errorいいえ{ matched, explanations? / message? } — HotPocket/Evernode のエラーを原因と修正方法に対応付けます(接続、合意の停滞、ホストがない、EVR 不足、リース切れ、Docker/Sashimono、Hook による拒否)。

テンプレート

generate_contract には10種類のテンプレートが含まれています。どのテンプレートも、既知の非決定性の原因を避けるように作られており(コントラクトの実行経路では、壁時計、乱数、ネットワークを使用しません。時刻にはコンセンサス台帳のシーケンス ctx.lclSeqNo を使用し、状態はコントラクト自身のコンセンサス対象の状態ファイルを通じてのみ保持します)、リンターを通過します。スモークテストとテストスイートでは、すべてのテンプレートに対して check_determinism(HIGH の検出なし)と check_contract_api を実行します。これは経験則に基づくチェックであり、決定性を証明するものではありません。メインネットの前に、マルチノードクラスターでテストしてください。

テンプレート内容決定性に関する注記
blank最小限のエコーコントラクトです。出発点として使用できます。入力と ctx.lclSeqNo をエコーします。
escrow預託者が受益者のために請求額をロックし、期限後に解放します。期限にはタイムスタンプではなく、台帳シーケンスを使用します。
subscriptionユーザーが N 台帳ラウンド分のサブスクリプションを行います。lclSeqNo < expiry の間、アクセスが許可されます。台帳シーケンスのみで計算します。
game_backendユーザーごとのターン制スコアとリーダーボードです。リーダーボードは公開鍵のタイブレーカーにコードポイント順を使用します(localeCompare は使用しません。ホストの ICU 照合順序は一致しないことがあるため、順序が決定的になりません)。
voting公開鍵ごとに1票を投じる投票と集計です。集計ではソート済みのキー一覧を反復処理し、公開鍵をキーとして投票の重複を防ぎます。
token_gated管理者が保守する許可リストによるアクセス制限です。コントラクトロジックからオンチェーン残高を読み取りません(非決定的になるため)。コンセンサス対象の許可リストまたはオラクルの証明を使用します。
payment_splitter預け入れを記録し、整数のドロップ単位で按分します。端数は最後の受取人に加えるため、支払い額の合計は正確に一致します(丸め誤差は発生しません)。実際の支払いは、別の Xahau マルチシグステップで行います(generate_settlement を参照)。
oracle_consumer正規の難しいパターンです。NPL agreement(ノードが値について合意してから動作する仕組み)を通じて外部データを取り込み、直接取得は行いません。ノードは Node Party Line を通じて観測結果を PROPOSE し、厳密な過半数で合意された値に対してのみ ACT します(プリミティブを使用するため、正規形式はバイト単位で一致します)。不一致の場合は決定的な no-op となり、合意されたデータには ctx.lclSeqNo が付与されます。
streaming_payment台帳シーケンスごとのベスティングです。解放可能額は release = f(ctx.lclSeqNo) で求めます。コンセンサスのクロックのみを使う純粋関数で、整数のドロップのみを使用します(浮動小数点数の不一致は発生しません)。コントラクトが解放額を RECORD し、実際の送金は generate_settlement で後から行います。
multisig_treasury支払い提案と M-of-N の承認(しきい値)を記録します。承認は署名者の公開鍵をキーとし、ソート済みの一覧に基づいて集計します。しきい値に達すると、generate_settlement に対する決済ステップを出力します(3つの要素を連携させます)。コントラクトが署名や支払いを行うことはありません。

生成される各ファイルセットには、「デプロイ前に src/index.js に対して check_determinism を実行してください。HIGH の検出はコンセンサスを破綻させます」という注意書きが含まれています。

決定性チェックが重要な理由(および、検出できること・できないこと)

HotPocket は、すべてのノード間でコントラクトの出力をコンセンサスします。Date.now()、Math.random()、fetch() を呼び出したり、process.env を読み取ったり、コンセンサス対象ではない順序で構築された順不同のコレクションを反復処理したりすると、2つのノード間で結果が異なる場合があります。その場合、コンセンサスが破綻し、台帳が停止します。 check_determinism はデプロイ前にこれらを検出します。

これは証明ツールではなく、経験則に基づくリンターです。ソースコードをスキャンします(主に行ごとの正規表現と、小規模な複数行のエイリアス検査)。そのため、あくまで参考情報であり、保証ではありません。設計上の方針(意図的なもの): このツールでは、実際のコンセンサス破壊要因を誤って見逃す偽陰性が最悪の結果です。そのため、順不同のコレクションを反復処理またはシリアライズする可能性があるものの、ソート済みであると証明できない構文には警告を出します。安全なコードに警告を出す偽陽性の場合、必要なのは根拠の提示だけです。

現在、検査対象となっている項目(それぞれに why と具体的な fix があります):

  • 壁時計 — Date.now、performance.now、process.hrtime[.bigint]、new Date()(HIGH)。
  • 乱数 — Math.random、crypto.randomBytes/randomUUID/randomInt/randomFill[Sync]/getRandomValues(HIGH)。
  • ネットワーク I/O — fetch/axios/got/node-fetch、require('https'|'net'|'dns')(HIGH)。
  • ノードごとの環境情報 — process.env/process.pid、os.hostname/networkInterfaces/cpus/freemem/loadavg/uptime/userInfo/platform/arch/tmpdir/endianness(HIGH)。
  • タイマー/競合 — setTimeout/setInterval/setImmediate、Promise.race/any(MEDIUM)。
  • ファイルシステム — 許可された状態ファイル以外に対する fs.read*/write*/stat/readdir(MEDIUM)。
  • 順序が未定義の反復処理 — for..in、および Object.keys/values/entries と Map/Set の for..of(LOW)。ソート済みのビュー(Object.keys(o).sort()、Object.entries(o).sort(...))は認識され、警告されません。
  • 別名を介した Map/Set(LOW)— 変数 またはメンバー(this.m = new Map()、state.m = new Set())に new Map()/new Set() を代入し、その後の行で反復処理/スプレッド/forEach/Array.from/.entries()/.keys()/.values() を実行する場合(複数行にわたる別名の検出処理では、通常の識別子だけでなくメンバー式の別名も対象になりました)。
  • メンバー式の for..of(LOW)— Map/Set の証拠がなくても、for (const x of this.m / state.m / obj.m) は順序を証明できないため警告されます。既知の決定的な配列メンバー(user.inputs/outputs)と関数呼び出し式(ctx.users.list())は認識され、警告されません。
  • スプレッド/Array.from による実体化(LOW)— 挿入順を配列に実体化する [...map]、[...Object.values(o)]、Array.from(set)。直後に .sort() でソートされる場合は警告されません。
  • .forEach(LOW)— Object のビューまたは new Map/Set に対する処理。先にソートされる場合は警告されません。
  • 順序が未定義のオブジェクトに対する JSON.stringify(LOW)— キーの順序が一致すると証明できない、単独のオブジェクト識別子またはスプレッド/マージ。ただし、シリアライズされた出力/状態はバイト単位で一致します。固定キーのオブジェクトリテラル、配列、プリミティブ、ソート済みの置換配列、.sort() 済みの引数は安全と認識され、警告されません。
  • ロケール/タイムゾーン/ICU(MEDIUM)— toLocaleString/toLocaleDateString/toLocaleTimeString、localeCompare、Intl.*。これらはホストのロケールと ICU の照合/書式データ(およびタイムゾーン)に依存し、ノードごとに異なります。そのため、生成される文字列やソート順が異なります。修正方法:ロケールに依存しない書式設定とコードポイント比較(a < b ? -1 : a > b ? 1 : 0)を使用し、localeCompare は決して使用しないでください。
  • 浮動小数点リテラル(LOW)— 整数でない浮動小数点リテラル(例:0.1、または負の指数を持つ科学表記リテラル 1.5e-3/1e-3)や、コントラクトの計算に使われる parseFloat(。浮動小数点の丸め、NaN、-0 の結果がエンジン/ホストごとに異なる可能性があります。修正方法:整数演算のみを使用してください(ドロップ単位で計算し、Math.floor(a*n/d) を使用)。整数リテラル、正の指数を持つ整数値のリテラル(1.5e3 = 1500)、整数の除算/切り捨ては警告されません。

引き続き対象外(正確に記載しています。以下は検出されません):

  • そのままの浮動小数点演算/型なしの除算 — 型が不明な2つの変数に対する a / b(浮動小数点リテラルや parseFloat による手がかりがない場合)は、確実に検出するには誤検知が多すぎるため、対象にしていません。検出されるのは浮動小数点のリテラルと parseFloat のみです。
  • より深いデータフロー — 複数段のエイリアス(const n = m)、関数の戻り値(const m = makeMap())、パラメーターとして渡された Map、複数の文にまたがってマージされるオブジェクトスプレッド、動的に構築された呼び出し式、または別の文での再代入によって参照される Map(let m; m = new Map())に起因する順序の不一致です。エイリアス検査が対象とするのは、直接の const x = new Map() と、直接のメンバー this.m = new Map() のケースであり、任意のデータフローではありません。
  • 許容可能と分かっている誤検知 — たとえば、[...Object.keys(o)].sort() は、スプレッドによって .sort() が基本の iteration-order ルールから見えなくなるため、依然として検出されます。Date.now() をローカルログにのみ使用するケース、順序に依存しない Map の畳み込み、for (const x of this.list) で正当な配列を反復処理するケース(配列許可リストにエントリーがないメンバー)などです。これらは安全なコードを検出します(許容される方向の誤検知です)。根拠を示すか、リファクタリングしてください。

つまり、初心者が遭遇する破綻は検出し、反復処理/シリアライズのクラスでは意図的に多めに検出しますが、決定性を証明するものではありません。決済の安全性は、別途、3要素セット(xahc-prover)によって証明します。メインネットの前に、必ず実際の複数ノードクラスターでテストしてください。

決済から3要素セットへの引き継ぎ

価値を移動する dApp(エスクロー/サブスクリプションの支払い/payment_splitter)が Xahau 上で支払いを行う場合、クラスターのマルチシグアカウントから支払います。generate_settlement は次の3要素を含むバンドルを生成します。

  1. クラスター側の支払いコード(xahau/settle.js、出発点として使用) — コントラクトがコンセンサス下で金額を決定します。署名はコンセンサスの外部で、クラスターの閾値/マルチシグ署名者を通じて行います。生成されたファイルはプレースホルダーとして単一キーで署名します。マルチシグ集約に置き換えてください。
  2. 参照用 agent_guardrail Hook(xahc-prover のもの。Xahau テストネットで動作確認済み)をクラスターアカウントにインストールするための手順。トランザクションごとの LIM(支出上限、8バイトのビッグエンディアン HookParameter)と、任意の DST(送金先の制限)が含まれます。オフラインで署名するための、未署名の xahc install-tx SetHook として出力されます。
  3. 自分でビルドした WASM 上でガードレールの不変条件を証明するための、正確な xahc prove コマンド。

このバンドルは prove/install コマンドを出力しますが、それ自体で安全性の判定を下すものではありません。Hook がインストールされている間は、LIM を超える Payment、または許可されていない DST 宛ての Payment は、支払いコードや署名者に誤りがあってもレジャーによって拒否されます。制限事項: Hook が実行されるのは Payment のみです。そのため、アカウントの署名者が SetHook で Hook を削除することや、ほかの種類のトランザクションで価値を移動することは阻止できません。署名者クォーラムを保護してください。xahc prove の PROVEN 判定は、プローバーがモデル化した範囲内で有効です。自分のビルドで PROVEN となった場合にのみデプロイしてください。

インストール

Node.js 20+ が必要です。サーバーは stdio 経由で MCP と通信し、MCP クライアントが起動します。

npm からインストール
npx -y evernode-mcp --help      # run without installing (prints usage and exits)
npm install -g evernode-mcp     # or install the `evernode-mcp` command globally
evernode-mcp --smoke            # offline self-test (templates lint-clean, checker + math work)

引数なしで実行すると、evernode-mcp は stdin/stdout で MCP クライアントからの接続を待ちます。対話型 CLI ではありません。

MCP クライアントへの追加

Claude Code:

claude mcp add evernode -- npx -y evernode-mcp

Claude Desktop(claude_desktop_config.json)、または mcpServers ブロックを受け付ける任意のクライアント:

{
  "mcpServers": {
    "evernode": { "command": "npx", "args": ["-y", "evernode-mcp"] }
  }
}

グローバルにインストールした場合は、"command": "evernode-mcp" を指定し、args を省略しても動作します。環境変数、API キー、ウォレットは不要です。

GitHub/ソースからインストール
npm install -g github:Hugegreencandle/evernode-mcp   # builds on install via `prepare`

または、クローンしてビルドします。

git clone https://github.com/Hugegreencandle/evernode-mcp && cd evernode-mcp
npm install        # the `prepare` script compiles dist/ automatically
npm run smoke      # offline self-test
npm test           # the full Vitest suite (offline)

ネットワークアクセス

12 個のツールのうち 10 個は完全にオフラインで動作します。recommend_hosts と host_diagnostics のみネットワーク呼び出しを行い、ホストデータを自分で指定しなかった場合に限られます。

toolrequestnotes
recommend_hostsGET https://api.onledger.net/hosts?active=true&sort=…&limit=…[&minSlots&minRep&country&minRam]公開、キー不要、タイムアウト 10 秒、メモリ内キャッシュ 30 秒
host_diagnosticsGET https://api.onledger.net/hosts/<r-address>公開、キー不要、タイムアウト 10 秒、メモリ内キャッシュ 30 秒

OnLedger はこのプロジェクトが運営するものではないサードパーティのサービスであり、データの鮮度はインデックスの更新状況に依存します。失敗した場合、ツールは注記とともに空の結果を返し、ホストを捏造することはありません。台帳に書き込みが行われることはありません。(生成された xahau/settle.js ファイルは、ユーザー自身が実行したときに wss://xahau-test.net に接続します。サーバー自体が接続することはありません。)

使用方法

MCP 対応エージェントをサーバーに接続し、次のように依頼するだけです。

  • 「vault という名前のエスクロー HotPocket dApp のひな形を作成して。」 → generate_contract
  • 「このコントラクトはクラスターのコンセンサスに対して安全ですか?」(ソースを貼り付ける)→ check_determinism
  • 「このコントラクトは HotPocket API を正しく使用していますか?」(ソースを貼り付ける)→ check_contract_api
  • 「NPL を使って価格について合意するオラクル dApp のひな形を作成して。」 → generate_contract(oracle_consumer)
  • 「ホスト rHostAddr… はリースするのに十分な状態ですか?」 → host_diagnostics(ライブ)
  • 「トークン保有者限定フォーラムには、どのパターンを使えばよいですか?」 → recommend_pattern
  • 「ドイツで稼働中の最も安い Evernode ホストを 5 件探して。」 → recommend_hosts(ライブ)
  • 「2 EVR/moment で 720 moments の間、3 ノードクラスターを稼働させる EVR を見積もって。」 → estimate_lease_cost
  • 「私の分配コントラクト用に、上限 50 XAH の安全な Xahau 決済を生成して。」 → generate_settlement → その後、出力された xahc prove コマンドを実行します。

開発/テスト/CI

npm run build      # tsc → dist/
npm test           # build + Vitest (offline; mocks the live OnLedger fetch)
npm run smoke      # node dist/index.js --smoke — offline self-test
node dist/index.js # run as a stdio MCP server
  • テスト(tests/):determinism(回帰テストの最低基準と新たなギャップを含むルールの網羅性)、contractApi(正常なコントラクトが問題なしで、各 API の誤用が検出されること)、advisor(リース計算、ホストの順位付け、エラーマッピング、パターン/デプロイ分岐)、templates(テンプレートごとのビルド、決定性チェックへの合格、テンプレートごとの不変条件)、settlement(LIM エンコーディングと trifecta の引き継ぎ形式)、outputSchemas(各ハンドラーの実際の出力が公開済みスキーマに照らして検証されること)、index(エンドツーエンド:メモリ内 MCP クライアントを通じた全ツールの実行と、入力スキーマによる拒否)、hostDiagnostics(正常/重大な問題あり/未検出/取得失敗時の誠実な応答、モックされた fetch)、fetch(ライブパスの堅牢性、モックあり)。
  • CI(.github/workflows/ci.yml):main へのプッシュと PR で、Node 20 上で npm ci、npm run build、npm test、npm run smoke を実行します。
  • createServer() は src/index.ts からエクスポートされます。これにより、テストでは stdio トランスポートを開始せずに、メモリ内トランスポート経由でサーバーを実行できます。

正直な対象範囲(再確認)

  • コードとガイダンスを生成します。リースの取得、署名、EVR/XAH の移動は行いません。鍵の管理も行いません。
  • recommend_hosts は OnLedger からライブデータを取得する(または、指定されたリストを順位付けする)機能です。ホストのアドレスや仕様を捏造することはありません。取得に失敗した場合は、ホストのアドレスを捏造して補完せず、理由を説明する注記と空のホスト一覧を返します。
  • check_determinism と check_contract_api は、ソースをヒューリスティックにスキャンする機能です(主に行単位の正規表現を使用します)。結果はガイダンスであり、証明ではありません。check_determinism は反復処理/シリアライズのクラスを過剰に検出しやすく、文書化された見落としもあります(単独の浮動小数点演算、複数ホップにわたるデータフローなど)。メインネットで使用する前に、実際のマルチノードクラスターでテストしてください。
  • 決済の安全性(Hook の支出制限)はHooks ツールチェーン(xahc prove)に委ねられています。このサーバーは prove/install コマンドを出力するだけで、判定は行いません。ガードレール Hook が対象とするのは、送信する Payment のみです。
  • generate_deploy_commands と explain_error は静的なガイダンスです。コマンドの構文は evdevkit 0.7.22 および hpdevkit 0.6.9(npm、2026-10-01)に照らして確認済みです。お使いのバージョンが異なる場合は、Evernode のドキュメントまたは --help を確認してください。
  • estimate_lease_cost は、指定したレートに基づく算術計算です。ホストはそれぞれ独自のレートを設定します。

ライセンス

MIT © 2026 Dane Brown. オープンソースです。LICENSEをご覧ください。Evernode Labs または Xahau プロジェクトとは関係ありません。check_determinism の検出結果はヒューリスティックなガイダンスであり、保証ではありません。メインネットで使用する前に、必ずマルチノードクラスターでテストし、確認してください。

コメント

MCP は初めてですか?

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

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