Vector (Apex Fusion) について
Vector MCP Serverは、AIエージェントや他のMCPクライアントからVector(Apex Fusion eUTXO L2)を照会・操作するサーバーです。ウォレット、トランザクション、コントラクト、エージェントID、提案を扱い、署名は別のローカル署名ツールが担います。
主な機能
- 01残高・UTxO・取引履歴の照会
- 02未署名の送金・コントラクト取引の構築
- 03スマートコントラクトのデプロイと操作
- 04オンチェーンエージェントIDの発見と管理
- 05プロトコル改善提案の閲覧と提出
- 06付属署名ツールによるローカル署名
活用シーン
- 01アドレスの残高と取引履歴を確認
- 02ローカル署名済み取引を準備して送信
- 03オンチェーンエージェントを登録または発見
- 04プロトコル改善提案を確認または提出
MCP 対応
Vectorのウォレット、取引、コントラクト、エージェントレジストリ、プロトコル改善ツールを公開します。未署名取引を構築し、署名済み取引を受け取って送信します。署名は付属のローカルMCP署名サーバーが行います。
設定
リモートサーバーはインストール不要です。クライアントを選んで設定をコピーするか、ワンクリックで導入できます。
https://mcp.vector.{network}.apexfusion.org/mcpclaude mcp add --transport http apex-fusion-vector https://mcp.vector.{network}.apexfusion.org/mcp{"mcpServers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}Cursor で開く{"servers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}VS Code で開く{"mcpServers":{"apex-fusion-vector":{"type":"http","url":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}{"mcpServers":{"apex-fusion-vector":{"serverUrl":"https://mcp.vector.{network}.apexfusion.org/mcp"}}}コマンドはターミナルで実行し、JSON は各クライアントの MCP 設定に貼り付けて再起動します。認可が必要なサーバーは初回接続時にログインを求めます。
https://mcp.vector.{network}.apexfusion.org/mcphttps://mcp.vector.{network}.apexfusion.org/sseツール
詳細
Vector MCP サーバー
Vector 用の MCP(Model Context Protocol)サーバーです。Vector は Apex Fusion の eUTXO L2 です。AI エージェント(Claude、GPT、Gemini、または任意の MCP クライアント)が Vector をネイティブに操作できるようにします。残高の照会、トランザクションの送信、スマートコントラクトのデプロイと操作、オンチェーンのエージェント ID の管理、プロトコル改善提案の送信が可能です。
Ogmios と Koios を基盤としており、Blockfrost への依存はありません。
Vector のメインネットは稼働中です。 詳細なガイドはVector AI documentationをご覧ください。
ホスト型サーバー - インストール不要
ホスト型インスタンスは、両方のネットワークで稼働しています。以下に説明する37個のツールは、このリリースに含まれるコードです。各ホスト型インスタンスでは、このリリースがデプロイされると、これらのツールが提供されます(testnetはmainへのプッシュ時に自動デプロイされ、mainnetは意図的な切り替えディスパッチでデプロイされます)。
| ネットワーク | エンドポイント |
|---|---|
| Mainnet | https://mcp.vector.mainnet.apexfusion.org/mcp |
| Testnet | https://mcp.vector.testnet.apexfusion.org/mcp |
デプロイ状況:両方のネットワークで、非カストディアル移行が反映されています。それ以外の変更は含まれていません。 両方のホスト型インスタンスで、移行が完了しています。testnetでは2026-07-31の午前中のマージ以降(
mainから自動デプロイ)、mainnetでは同日の意図的な切り替えデプロイ以降です(全履歴についてはdocs/architecture/non-custodial-split.mdのセクション11「Rollout」を参照してください)。これは、ホスト型インスタンスが以下に掲載するすべてのツールを提供しているという意味ではありません。マーケットプレイスツールとレピュテーションツールは、これらのデプロイより新しいため、それらを追加するリリースがデプロイされて初めて提供されます(それまでは、インスタンスのツール一覧は以下の一覧より短くなります。クライアントのツール一覧で、インスタンスが現在提供しているものを確認できます)。両方のホスト型インスタンスはオープンアクセスで、接続にベアラートークンは不要です。 呼び出し元は匿名で受け入れられ、IPごとのレート制限が適用されます。これはアクセス制御に関する性質であり、カストディとは別のものです。どちらのインスタンスも、トークンの有無にかかわらず、呼び出し元からニーモニックを受け付けません。セルフホスト型のデプロイでは、引き続きMCP_AUTH_TOKENSによってアクセスを制限できます。詳しくは設定を参照してください。
トランスポート:2.0.0以降はStreamable HTTPのみです。 MCP仕様(2026-07-28改訂版)で非推奨となった旧SSEのペア(
/sse+/messages)は、このリリースで削除されました。これらのパスは現在404を返します。すべてのクライアントは、上の表に記載されているエンドポイント/mcpに接続します。これはSSEクライアントにとって互換性を損なう変更です。以下のとおり、--transport httpと/mcpのURLを使って再接続してください。また、サーバーは任意のオリジンからのCORSに応答し(ブラウザーのMCPクライアントも主要な呼び出し元として扱われます)、認証不要のGET /healthライブネスプローブを公開します。これはコードについての説明です。 各ホスト型インスタンスでは、このリリースがデプロイされるとコードが提供されます(testnetはmainへのプッシュ時に自動デプロイされ、mainnetは意図的な切り替えディスパッチでデプロイされます)。
Claude Codeから1つのコマンドで接続できます。ホスト型インスタンスではトークンは不要です。
claude mcp add --transport http vector-mcp https://mcp.vector.mainnet.apexfusion.org/mcp
testnetに接続するには、testnetのホストに置き換えてください。セルフホストする場合(以下を参照)、MCP_AUTH_TOKENSを設定しない限り、独自のインスタンスへのアクセスはすべての呼び出し元に開放されます。
セキュリティに関するお知らせ:非カストディアル移行は、2026-07-31の切り替えデプロイをもって、このコードベースと両方のホスト型インスタンスで完了しています。 このリポジトリ内のどのツールも、ニーモニック、秘密鍵、その他の鍵素材を受け付けません。すべての
build_*ツールはウォレットのアドレスのみから未署名トランザクションを構築し、署名処理はすべて、ローカルの署名用コンパニオンを通じてお客様自身のマシン上で行われます。署名済みの結果はvector_submit_transactionでブロードキャストしてください。シードフレーズがお客様のマシンから外部に出ることはなく、このリリースを実行するサーバーがシードフレーズを保持することもありません。これは慣例によるものではなく、コード上で機械的に強制されています。ビルダーのカストディ境界テストでは、すべてのソースファイルをスキャンし、鍵素材に関する用語が許可リストに含まれているか確認します。この許可リストは現在空で、サイズはゼロに固定されているため、今後の変更でニーモニック引数がひそかに再導入されると、該当する名前を示してテストが失敗します。これは、このリリースおよび2026-07-31のデプロイについての説明です。 その後のデプロイは独立した運用上の作業であり、このお知らせが自動的に適用されるものではありません。上記のデプロイ状況に関する注記と、全デプロイ履歴についてdocs/architecture/non-custodial-split.mdを参照してください。
セルフホストの手順は以下に記載されています。
ローカル署名ツール(非カストディアル方式)
packages/signer は、ニーモニックを共有ホストに渡すのではなく、鍵を保持してトランザクションにローカルで署名する MCP サーバーです。ネットワークアクセスは一切ありません。stdio トランスポートのみを使用し、Provider も外部への通信もないため、ここに渡した鍵が共有サーバーやモデルプロバイダーに届くことはありません。ツールは 4 つです。vector_signer_get_address、vector_signer_decode_transaction、vector_signer_sign、vector_signer_get_spend_limits。
このコードベースでは、この署名ツールがビルダーで公開するすべてのファミリーの単一の署名ポイントです。 このリリースでは、すべてのファミリーで完全な非カストディアルフローが利用できます。
vector_signer_get_address → build_* → vector_signer_sign → vector_submit_transaction →
vector_await_transaction。このコードを実行するサーバーにも、モデルプロバイダーにも、いずれのツールでも、この一連の処理のどの段階でもニーモニックが渡されることはありません。ビルド → 送信 → 待機のフローは、ウォレット/トランザクション、スマートコントラクト、エージェントレジストリ、自己改善の各ファミリーで、Vector テストネット上で E2E 検証済みです。これには、デプロイ済みの自己改善モジュールバリデーターがこれまで受け入れたことのない、初のキーレス構築による提案送信も含まれます。署名ツール側でのテスト内容と対象外の内容については、packages/signer/README.md を参照してください。これはコードについての説明であり、すべてのデプロイ環境についての説明ではありません。上記のデプロイ状況に関する注記を参照してください。
設定、ツール、既知の制限については、packages/signer/README.md を参照してください。
機能
- ウォレットとクエリ - 任意のアドレスの残高、UTxO、トランザクション履歴を取得します(鍵情報は不要)
- キーレスなトランザクション構築 - 署名前の AP3X/トークン/複数出力トランザクションやコントラクトとのやり取りを構築します。ローカルで署名し、送信ツール経由でブロードキャストします
- スマートコントラクト - Plutus/Aiken バリデーターをデプロイし、スクリプトアドレスで UTxO をロックおよび使用します(キーレス)
- エージェントレジストリ - ソウルバウンド NFT を使用して、オンチェーンの AI エージェント ID を登録、検出、更新、移転、登録解除します(キーレス:構築、ローカルで署名、ブロードキャスト)
- エージェントメッセージ - TX メタデータを介して、エージェント間でオンチェーンメッセージを送信します(キーレス)
- 自己改善モジュール - 改善提案を閲覧、送信、批評、支持します。オンチェーンモジュールは Vector メインネットで稼働中であり、このコードベースではすべての書き込みツールがキーレスです
- エージェントマーケットプレイスの両方の側 - サプライヤーを雇用する(エスクローへの投稿、承諾、回収、ジョブの送信、受領確認)ことと、案件を掲載する(広告の投稿と取り下げ)ができます。キーレスです
- レピュテーションの自己ステーク - エージェントのレジストリレコードに記載された機能に対して、Module-3 の自己ステークをロックします(キーレス、2 ステップ、メインネット。デプロイ済みモジュールが修正されるまで保持されます。レピュテーションを参照)
- 安全性の制御 - ID ごとのレート制限を適用します。すべてのファミリーの利用上限はローカル署名ツールによってユーザーごとに適用され、サーバー自体は利用上限の状態を保持しません
- Streamable HTTP トランスポート -
/mcpで最新の MCP トランスポートを提供します。ブラウザクライアント向けにすべてのオリジンからの CORS を許可し、認証不要のGET /healthプローブを備えています(従来の SSE ペアは 2.0.0 で削除されました)
MCP ツール(37)
ウォレットとクエリ
| ツール | 説明 |
|---|---|
vector_get_balance | 任意のアドレスの AP3X およびトークン残高を取得します |
vector_get_utxos | アドレスの UTxO 一覧を取得します |
vector_get_transaction_history | アドレスのトランザクション履歴を取得します |
トランザクション
| ツール | 説明 |
|---|---|
vector_build_send_apex | 署名なしの AP3X 送金を構築します(鍵不要。ローカル署名者で署名してください) |
vector_build_send_tokens | 署名なしのネイティブトークン送金を構築します(鍵不要) |
vector_build_transaction | 署名なしの複数出力トランザクションを構築します(鍵不要。送信は行いません) |
vector_dry_run | トランザクションを送信せずにシミュレーションし、手数料を見積もって検証します |
vector_submit_transaction | 署名済みのトランザクションをブロードキャストします(例:ローカル署名者による署名済みのトランザクション) |
vector_await_transaction | 送信済みのトランザクションがオンチェーンで承認されるまで待機します |
スマートコントラクト
| ツール | 説明 |
|---|---|
vector_build_deploy_contract | Plutus V1/V2/V3 または Aiken バリデーターの署名なしデプロイメントを構築します(鍵不要) |
vector_build_interact_contract | リディーマーを使用して、スクリプトアドレスでの署名なしロックまたは使用を構築します(鍵不要) |
エージェントレジストリ
| ツール | 説明 |
|---|---|
vector_build_register_agent | 署名なしのエージェント登録を構築します。ソウルバウンド ID NFT を発行し、10 AP3X のデポジットをロックします(鍵不要) |
vector_discover_agents | 登録済みのエージェントを検索し、機能またはフレームワークで絞り込みます(ウォレット不要) |
vector_get_agent_profile | DID を指定して、エージェントの完全なプロフィールを取得します(ウォレット不要) |
vector_build_update_agent | エージェントの名前、説明、機能、フレームワーク、またはエンドポイントの署名なし更新を構築します(鍵不要) |
vector_build_transfer_agent | エージェントの所有権を新しいアドレスに移転する署名なしトランザクションを構築します(鍵不要) |
vector_build_deregister_agent | 署名なしの登録解除を構築します。ID NFT を焼却し、10 AP3X のデポジットを返還します(鍵不要) |
vector_build_message_agent | TX メタデータ(ラベル 674)を介した、エージェントへの署名なしオンチェーンメッセージを構築します(鍵不要) |
自己改善モジュール
| ツール | 説明 |
|---|---|
vector_self_improvement_browse | 改善提案、批評、支持表明を閲覧します |
vector_self_improvement_analyze_metrics | 提案の指標:アクティビティ、採用率、トレジャリーの健全性、エンゲージメント |
vector_build_self_improvement_proposal_lock | 署名なしの提案ステークのロックを構築します(2段階中のステップ 1。鍵不要) |
vector_build_self_improvement_proposal_spend | 署名なしの提案提出を構築します。ロックを使用し、提案トークンとアクティビティトークンを発行します(2段階中のステップ 2。鍵不要)。エージェントがオーケストレーションする 2 つのトランザクションです。 |
vector_build_self_improvement_critique | 提案への署名なし批評を構築します。支持、反対、または修正案を提示します(鍵不要) |
vector_build_self_improvement_endorse | AP3X をステークして、提案への署名なし支持表明を構築します(鍵不要) |
マーケットプレイス(11)
| ツール | 説明 |
|---|---|
vector_marketplace_list_capabilities | エージェントマーケットプレイスで公開されているケイパビリティ ID を、サプライヤー数とともに一覧表示します(読み取り専用、ウォレット不要) |
vector_marketplace_list_suppliers | サプライヤーの広告を一覧表示します。広告参照、モデル、価格、ボンド、処理時間枠、ステータスを確認できます。ケイパビリティで絞り込めます。デフォルトでは無料のサプライヤーが対象です。フリート広告には「これらのツール経由では雇用できません(フリート経由)」と表示されます。これは、vector_build_marketplace_post_escrow がフリート広告を拒否するためです(読み取り専用、ウォレット不要) |
vector_marketplace_get_supplier | 広告参照を指定して、台帳から広告を 1 件読み取ります(全 13 フィールド)。インデクサーの最新ステータスと、詳細 URI が指すマニフェストも取得します。マニフェストはサプライヤーのホストから取得し、サプライヤー自身の JSON として表示します。そのバイト列の sha256 を広告の詳細ハッシュと照合し、一致または不一致として報告します。広告スクリプトアドレス以外にある UTxO、または広告データムを持たない UTxO は拒否します(読み取り専用、ウォレット不要) |
vector_build_marketplace_post_escrow | サプライヤーを雇用する、未署名のエスクローポストを作成します。広告に対する価格、サプライヤーボンド、購入者ボンドをロックし、ペイロードのハッシュをコミットします(JSON ブロックにはペイロードがそのまま出力されます。トランザクションの有効期間は最大 180 s です)。テンプレートコントラクトのサプライヤーのみが対象です。vector_marketplace_send_job ではジョブを配信できないため、フリート広告は拒否されます(鍵不要。ローカル署名者で署名してください) |
vector_build_marketplace_accept | サプライヤーの Submit から 600 s 以内に、Submitted 状態のジョブを受諾する未署名の Accept を作成します。サプライヤー価格とサプライヤーボンドを支払い、購入者ボンドを返還します(鍵不要) |
vector_build_marketplace_reclaim | deliver_by の期限を過ぎた Open または Claimed 状態のエスクローを回収する未署名の reclaim を作成します。すべてが返還されます(鍵不要) |
vector_marketplace_send_job | ポスト済みエスクローのサプライヤーにペイロードを送信し、ジョブ ID を取得します。テンプレートコントラクトのサプライヤーのみが対象です。ウォレットがエスクローをポストして資金を提供している必要があります。サプライヤーの応答を待つ間、チェックも含めて呼び出し全体で最大 90 s 待機します(チェック後にサプライヤーが必要とする 60 s を下回る場合は、何も送信されません) |
vector_marketplace_get_job | ジョブをポーリングします。結果とサプライヤーの署名済みレシートとともに、保留中、失敗、または完了の状態を取得します。テンプレートコントラクトのサプライヤーのみが対象です。エスクローが受諾または解放された後に使用でき、最大 20 s 待機します |
vector_marketplace_verify_receipt | サプライヤーを信頼せずにレシートを検証します。エスクロー、結果のハッシュ、サプライヤーの鍵、Ed25519 署名、サプライヤーがオンチェーンでコミットしたハッシュに加え、そのレシートが作成されたリクエストの行も確認します。Accept の前後どちらでも使用できます。決済済みエスクローの Submitted 出力はマーケットプレイスのインデクサー経由で特定され、支出チェーンによって証明されます(読み取り専用。サプライヤーの鍵は /capability から読み取りますが、引数で渡すこともできます) |
vector_build_marketplace_post_advert | サプライヤーエージェントを掲載する、未署名の広告 Post を作成します。changeAddress の鍵がサプライヤー鍵になり、広告にはケイパビリティ、モデル、価格、ボンド、処理時間枠(60,001 ms から 24 h まで。60,001 ms はサプライヤーテンプレートが処理できる最短時間、デフォルトの SERVICE_TIMEOUT_MS では 180,000 ms、24 h は vector_build_marketplace_post_escrow が雇用できる最長時間)、https エンドポイント(ジョブは <endpoint_url>/v1/job に送信されるため、空白、クエリ、フラグメントは不可)、マニフェストを指定します。デポジット(サプライヤーボンド。最低 2 AP3X で、データムに対する台帳の最低額まで引き上げられます)をロックし、Retire 時に返還します。detail_uri を指定する場合、呼び出し元が detail_hash も指定する必要があります(サーバーは取得しません)。指定しない場合、ハッシュはバイト列なしの値になります。データムはサプライヤーテンプレートのものとバイト単位で同一です。フリートのケイパビリティ ID と 64 バイトを超えるフィールドは拒否されます。確認後、サプライヤーのランタイムの ADVERT_REF を新しい広告参照に設定します(テンプレートが提供するのはその広告のみです)(鍵不要) |
vector_build_marketplace_retire_advert | 未署名の広告 Retire を作成します。広告を退役させられるのは広告のサプライヤー鍵だけで、デポジットは changeAddress に返還されます。広告に対するエスクローをポスト済みで、まだジョブを送信していない購入者は、以降ジョブを送信できません。そのため、ジョブが進行中でない場合に退役させてください。サプライヤーを再掲載するには、新しい広告をポストし、ランタイムの ADVERT_REF をその広告に設定します(鍵不要) |
エージェントの DID は次の形式です:did:vector:agent:{policyId}:{nftAssetName} |
レジストリー操作の非カストディアルフローの例:vector_build_register_agent →
vector_signer_sign → vector_submit_transaction → vector_await_transaction。
Reputation(2)
保留:Module-3 の評判モジュールが修正され、再デプロイされるまで、メインネットではこれら2つのツールを使用しないでください。 現在デプロイされているモジュールでは、所有者はモジュールの最小額でステークを引き出せません。また、モジュールのオラクルキーは最後の更新から約163秒後に
ClaimDecayRefundを通じてステーク全額を消費できます。さらに、偽造されたケイパビリティはステークの1/Nを没収します(Nはステークされたケイパビリティの数で、N = 1の場合は全額です)。修正済みモジュールは新たなデプロイとなるため、新しいスクリプトハッシュと、これらのツールが参照する新しい参照出力が必要です。
| Tool | Description |
|---|---|
vector_build_reputation_stake_open | Module-3 の評判セルフステークの開始処理(全2段階のうちステップ1)を、未署名で構築します。エージェントとケイパビリティを指定し、評判バリデーターで2 AP3Xの開始出力をロックします。まず、レジストリーレコード、その所有者、ケイパビリティ、ステークが存在しないこと、チェーンの時刻、モジュールの出力、およびステップ2に必要なウォレットの資金(モジュールの最小額、約1 AP3Xの手数料、純粋な5 AP3Xの出力)を確認します。そのため、ステップ2のステークを実行できないウォレット(キーなし、メインネット、保留中)に対して、ステップ1で2 AP3Xがロックされることはありません。 |
vector_build_reputation_stake | CreateStake(全2段階のうちステップ2)を、未署名で構築します。開始出力を消費し、エージェントのステークトークンを発行して、モジュールの最小額のセルフステーク(モジュールのパラメーターから読み取り。現在、メインネットでは10 AP3X)をロックします。ステークは、エージェントのレジストリーレコードに記載されたケイパビリティによって保護され、レコードの所有者キーが所有します。デプロイ済みモジュールでステークがどうなるかについては、上記の保留に関する注記を参照してください(キーなし、メインネット、保留中)。 |
ステークの datum、ステークトークン、トランザクションの形式は、リファレンスの Python SDK(Apex-Fusion/vector-agent-modules、Module-3/python/reputation_staking)から移植されています。SDK はテストネット用のジェネシス定数を使ってステーク時刻を設定しますが、これらのツールはノード自身のチェーン開始時刻を使用し、それが Vector メインネットのものであることを確認したうえで、構築を開始する前にノードのチップをサーバーの時計と照合します。
チャットクライアントから、ホスト型サーバーとローカルの署名者を使用してサプライヤーエージェントを起動する場合、各構築処理には vector_signer_sign で署名し、vector_submit_transaction でブロードキャストし、次の処理に進む前に vector_await_transaction で確定を確認します:vector_build_register_agent(ケイパビリティを記載した ID)→ vector_build_reputation_stake_open → vector_build_reputation_stake(そのケイパビリティに対するステーク。モジュールの修正と再デプロイ後に実行してください:保留に関する注記を参照)→ vector_build_marketplace_post_advert(同じキーを使ったリスティング。その後、サプライヤーのランタイムの ADVERT_REF に新しい advert ref を設定します)。1つのキーのハッシュが、レジストリーレコードの所有者、ステークの所有者、advert のサプライヤーを指定します。vector_build_marketplace_retire_advert を使うと、リスティングを取り下げられます。
セルフホスティング
1. インストールとビルド
Node.js >= 22 が必要です(各 package.json の engines および Dockerfile の
node:22-alpine ベースに準拠しています)。
npm install
npm run build
依存関係に関する注意事項。 現在、npm audit では重大度が低い注意事項が 1 件報告されています。これは esbuild の任意のファイル読み取りに関する問題で、同ツール独自の Windows 開発サーバーを介した場合にのみ発生します。このサーバーに到達できるのは tsup 経由だけです。tsup はビルド時のみの依存関係で、本番イメージには含まれません(本番イメージは npm ci --omit=dev でインストールします)。2026-07-31 時点では、このツリーには 44 件の注意事項があり、そのうち 1 件は重大なものでした(tar、GHSA-23hp-3jrh-7fpw)。これは、@lucid-evolution/lucid 経由で間接的に取り込まれる @cardano-sdk/crypto が、npm CLI パッケージ全体を実行時依存関係として宣言していたために発生しました。この依存関係は不要なものでした。@cardano-sdk/crypto の公開コードは npm を必要とせず、このサーバーのビルド済みバンドルにも npm や tar は一切含まれていません。ロックファイルを再生成したところ、この不要な依存関係を削除した新しい @cardano-sdk/crypto リリースが取り込まれ、override を使わずに 43 件の注意事項すべてが解消されました。将来の再発に備え、package.json には tar と brace-expansion に対する防御的な overrides ピンも設定されていますが、今回の問題を解決したのはこれではありません。
2. 環境の設定(任意)
cp .env.example .env
# Edit .env with your endpoint URLs (defaults point to Vector testnet; mainnet URLs below)
すべての build_* ツールはキー不要です。ウォレットアドレスを受け取り、ニーモニックは受け取りません。このサーバーに対するツール呼び出しでは、どのファミリーでもニーモニックパラメーターは必要ありません。上記のセキュリティに関するお知らせをご覧ください。
3. 実行
npm start
# Server listens on port 3000 (configurable via PORT env var)
接続方法:
claude mcp add --transport http vector-mcp http://localhost:3000/mcp
MCP_AUTH_TOKENS を設定した場合は、--header "Authorization: Bearer <your-token>" を追加してください。稼働状態の確認には GET /health を使用できます。認証は不要で、{"status":"ok","version":"<version>"} が返されます。
このインスタンスにあなた以外のユーザーもアクセスできる場合は、まず MCP_AUTH_TOKENS を設定してください。下記の設定をご覧ください。
4. Claude Desktop に追加
Claude Desktop の MCP 設定(claude_desktop_config.json)に追加します。
{
"mcpServers": {
"vector": {
"command": "node",
"args": ["/path/to/vector-mcp-server/packages/builder/build/index.js"],
"env": {
"VECTOR_OGMIOS_URL": "https://ogmios.vector.testnet.apexfusion.org",
"VECTOR_SUBMIT_URL": "https://submit.vector.testnet.apexfusion.org/api/submit/tx",
"VECTOR_KOIOS_URL": "https://koios.vector.testnet.apexfusion.org/",
"VECTOR_EXPLORER_URL": "https://vector.testnet.apexscan.org"
}
}
}
}
メインネットでは、下記のメインネット用エンドポイント表を使用してください(上記のホスト型サーバーを使用する場合、ローカルでの設定は不要です)。
Docker
npm run build
docker build -t vector-mcp .
docker run -p 3000:3000 vector-mcp
このインスタンスにあなた以外のユーザーもアクセスできる場合は、まず MCP_AUTH_TOKENS を設定してください。下記の設定をご覧ください(このリポジトリの docker-compose.yml はデフォルトで 127.0.0.1 にバインドしますが、上記のコマンドはそうではありません)。
設定
| 変数 | 説明 | デフォルト |
|---|---|---|
PORT | HTTP サーバーのポート | 3000 |
VECTOR_OGMIOS_URL | Ogmios HTTP JSON-RPC エンドポイント | https://ogmios.vector.testnet.apexfusion.org |
VECTOR_KOIOS_URL | Koios REST API エンドポイント | https://v2.koios.vector.testnet.apexfusion.org/ |
VECTOR_SUBMIT_URL | トランザクション送信 API | https://submit.vector.testnet.apexfusion.org/api/submit/tx |
VECTOR_EXPLORER_URL | ブロックエクスプローラーのベース URL | https://vector.testnet.apexscan.org |
VECTOR_MARKETPLACE_INDEXER_URL | vector_marketplace_* ツールが使用するマーケットプレイスインデクサー。.env ファイルを読み込む前、起動時に読み込まれるため、実際の環境変数として設定する必要があります。末尾のスラッシュは無視されます。テストネット用に設定されたインスタンスは、テストネット用 Koios とともにメインネットのインデクサーを読み込みます。そのため、この変数を設定するか、マーケットプレイスツールをメインネット専用として扱ってください | https://mp-indexer.vector.apexfusion.org |
VECTOR_RATE_LIMIT_PER_MINUTE | ID ごとの 1 分あたりのツール呼び出し上限(最小値 1) | 60 |
VECTOR_MCP_SESSION_IDLE_MS | アイドル状態の /mcp セッションをリーパーが閉じるまでのタイムアウト(ミリ秒、最小値 100) | 600000(10 分) |
VECTOR_MCP_SESSION_SWEEP_MS | /mcp のアイドルリーパーがスイープを行う間隔(ミリ秒、最小値 100) | 60000(1 分) |
VECTOR_MCP_MAX_SESSIONS_PER_IDENTITY | ID ごとの /mcp 同時セッション上限。上限を超えると最も古いセッションが削除されます(最小値 1) | 32 |
MCP_AUTH_TOKENS | このサーバーを呼び出せるベアラートークン。カンマ区切りで指定し、各エントリは label:token またはトークンのみです。未設定の場合、このサーバーにアクセスできる人は誰でも利用できます。 | (未設定 - 認証無効) |
| 上記の4つの数値設定項目は、不正な値が指定されると起動時に明確なエラーになります。プレーンな整数ではない値や、記載されている最小値を下回る値が指定された場合、別の動作に暗黙的にフォールバックするのではなく、変数名と受け取った値を示す起動エラーが発生します(レート制限の値を解析できず、レート制限が暗黙的に無効になる場合など)。 |
このサーバーには、独自の支出上限や監査ログの設定はありません。どのファミリーのキー素材も保持していないため、制限するものがないからです。すべての支出上限と、それを記録する監査ログはローカルの署名ツール側にあります。設定については、packages/signer/README.md の VECTOR_SIGNER_SPEND_LIMIT_PER_TX / VECTOR_SIGNER_SPEND_LIMIT_DAILY / VECTOR_SIGNER_AUDIT_LOG_PATH を参照してください。
公開インスタンスを運用していますか?
MCP_AUTH_TOKENSを設定して既知の呼び出し元のみアクセスできるようにし、それぞれに個別のレート制限枠を設けてください。このサーバーは仕様上、すべてのオリジンからの CORS リクエストに応答します。認証を設定していない場合、ブラウザーでユーザーが訪れる任意のウェブページから JavaScript を使ってインスタンスを操作でき、そのユーザーの IP ごとのレート制限枠が共有されます。これも公開インスタンスでMCP_AUTH_TOKENSを設定すべき理由の一つです。MCP_AUTH_TOKENSが設定されていない場合、呼び出し元は匿名で許可され、クライアント IP ごとにレートが制限されます。デプロイ環境のリバースプロキシが、右端の X-Forwarded-For エントリーを使ってクライアントアドレスを渡します。追跡対象の ID 数には上限があります(LRU)。追跡対象から外れるとレート制限枠はリセットされますが、これはメモリ使用量の上限であってセキュリティ境界ではありません。攻撃者が十分な数の送信元 IP を切り替えれば、IP ごとの制限を回避できます。これを制御できるのは、リバースプロキシまたはネットワーク層だけです。/mcpセッションにも同じ ID ごとの制限が適用されます。アイドル状態のセッションは破棄され(VECTOR_MCP_SESSION_IDLE_MS、VECTOR_MCP_SESSION_SWEEP_MSごとにスキャン)、ID ごとの同時セッション数にも上限が設けられます(VECTOR_MCP_MAX_SESSIONS_PER_IDENTITY)。既定値と最小値については、上記の設定テーブルを参照してください。
不正な値は明確なエラーになります。
MCP_AUTH_TOKENSに空のトークン、空白文字を含むトークン、重複したトークン、またはカンマ区切りのすべてのエントリーが空になる値(例:余分な,,,)が含まれている場合、サーバーは起動を拒否します。いずれの場合も、問題の内容を示す起動エラーが発生しますが、トークンの値が表示されることはありません。カンマはエントリーの区切り文字であり、エスケープできないため、カンマを含まない文字セット(16進数/base64url/英数字)からトークンを生成してください。 エラーレスポンスに設定済みエンドポイントは含まれません。 これは、HTTP レベルでの拒否だけでなく、ネットワーク呼び出しで発生し得るあらゆる失敗モードに当てはまります。DNS の失敗、接続の切断、形式が不正な(JSON ではない)レスポンスボディは、通常の4xx/5xxステータスと同様にすべてサニタイズされます。基盤となる HTTP クライアントにはプラットフォーム標準のfetchを採用しています。これは、一部のポリフィルとは異なり、独自のエラーにリクエスト URL を埋め込まないことも理由の一つです。Ogmios または Koios のクエリ失敗は、このサーバー自体のインフラストラクチャの問題であり、呼び出し元が対処できるものではありません。そのため、サービス名とステータスのみが報告されます。たとえば、「Ogmios request failed (queryLedgerState/utxo): 503 Service Unavailable」や、接続失敗の場合は「...: network error」のようになります。トランザクション送信の拒否は別です。CALLER 自身のトランザクション(入力値が不正、スクリプト条件が未達成、手数料が少なすぎるなど)に対する台帳の判定はレスポンスに含まれます。これは、エージェントが build → sign → submit の後に自分で修正するために必要なフィードバックループだからです。ただし、URL の形式をした内容は事前に除去されます。たとえば、「Transaction submission rejected (400 Bad Request): ValueNotConservedUTxO...」のようになります。送信 API に到達することすらできないネットワーク障害は、インフラストラクチャの障害として報告され(「...: network error」)、台帳がトランザクションを確認していないため、台帳による拒否として表現されることはありません。どちらの場合も、設定されたVECTOR_OGMIOS_URL/VECTOR_KOIOS_URL/VECTOR_SUBMIT_URLの値自体がレスポンスに含まれることはありません。また、サニタイズされていない詳細情報はすべて、運用担当者向けにサーバー独自のconsole.errorログへ出力されます。既知の制限: 送信拒否時のサニタイズでは、http(s) URL と上記の3つのエンドポイント名を除去します。拒否の本文に別の内部ホスト名が含まれている場合、2000文字の上限内でサニタイズされずに通過します。
Mainnet エンドポイント
| 変数 | Mainnet の値 |
|---|---|
VECTOR_OGMIOS_URL | https://ogmios.vector.mainnet.apexfusion.org |
VECTOR_SUBMIT_URL | https://submit.vector.mainnet.apexfusion.org/api/submit/tx |
VECTOR_KOIOS_URL | https://v2.koios.vector.mainnet.apexfusion.org/ |
VECTOR_EXPLORER_URL | https://vector.apexscan.org/en/ |
テスト
npm run test:unit
ウォレットもネットワークも不要です。純粋なロジックのみをテストします(CBOR のエンコード/デコードのアサーション)。
npm run test:smoke
サーバーをビルドして起動し、公開されるツール一覧がチェックイン済みのスナップショットと一致することを検証します。ウォレットも外部ネットワークも不要です。CI では、すべての PR でこのテストと test:unit を実行します。
echo "your mnemonic words here" > packages/builder/mnemonic.txt
npm run test:integration
packages/builder/ に、資金が入った Vector テストネットのニーモニックを含む mnemonic.txt が必要です。Vector テストネット上でコアツールをエンドツーエンドでテストします。エージェントのライフサイクル全体(登録、検出、プロフィール、更新、送金、メッセージ送信、登録解除)も対象です(現在はすべてキーレスです。各ステップでビルド → 署名 → 送信 → 完了待ちを行います)。また、ニーモニックが一切不要な tier-1 スイートの keyless-build.test.ts、registry-keyless.test.ts、self-improvement-keyless.test.ts も実行します。各テストでは、ライブの公開データのみを使って未署名トランザクションを構築します(vector_build_send_tokens はオフラインで、ユニットテストと上記のレガシースイートでテストします。self-improvement-keyless.test.ts は、批評、賛同、提案ロックの構築に加え、proposal-spend の「見つからない」場合の拒否パスもテストします)。VECTOR_E2E_SUBMIT=1 を設定すると、各ファミリーのゲート付きエンドツーエンドスイートも追加で実行し、すべてオンチェーンでテストします。keyless-e2e.test.ts は実際の自己宛て送金を 1 回実行します(手数料は約 0.16 AP3X)。registry-e2e.test.ts は、エージェントの登録 → 更新 → 登録解除というライフサイクル全体を実行します(10 AP3X のデポジットは正確に往復し、正味コストとして手数料のみが発生します)。self-improvement-e2e.test.ts は、デプロイ済みモジュールバリデーターを通じて実際の改善提案をロックして使用し、その後、批評と賛同を行います(ステークとモジュールの最低額で約 48 AP3X、加えてトランザクション手数料 6 回分が片道で発生します。ステークは失われるのではなく、モジュール独自の設計によりロックされます)。LEGACY_FULL=1 を設定すると、同じ自己改善のロック → 使用の手順を run.test.ts 内でも追加で実行します(デフォルトではオフです。self-improvement-e2e.test.ts ですでにまったく同じパスを検証しているためです)。CI では実行されません。
npm run test:smoke:signer
ローカル署名ツール(packages/signer)をビルドし、stdio 経由で起動して、フェイルクローズとなる監査ログ書き込み失敗時のパスを含む 4 つのツールすべてをテストします。ウォレットもネットワークも不要です。CI では、上記 2 つのスモークテストと合わせて、すべての PR で実行します。
export VECTOR_SIGNER_MNEMONIC_FILE=/absolute/path/to/testnet-mnemonic.txt
npm run test:integration:signer
資金が入った Vector テストネットのウォレットが必要です。ホスト型ビルダーと同じ方法で実際の未署名トランザクションを構築し(キーは不要)、ローカル署名ツールにライブのチェーンデータを使ってデコード、ポリシーチェック、署名を行わせます。送信は行いません。 CI では実行されません。詳しくは
packages/signer/README.md を参照してください。
アーキテクチャ
┌──────────────────────┐ ┌──────────────────────────┐
│ Claude / GPT / etc. │◄───────────►│ vector-mcp-server │
│ (any MCP client) │ /mcp │ │
└──────────────────────┘ │ ┌────────────────────┐ │
│ │ Rate Limiter │ │
│ │ (60 calls/min) │ │
│ └────────┬───────────┘ │
│ │ │
│ ┌────────▼───────────┐ │
│ │ Lucid + Ogmios │ │
│ │ Provider │ │
│ └────────┬───────────┘ │
│ │ │
│ ┌────────▼───────────┐ │
│ │ Ogmios / Koios / │ │
│ │ Submit API │ │
│ └────────────────────┘ │
└──────────────────────────┘
レート制限とプロバイダーの間に安全レイヤーはありません。このサーバーは、どのファミリーのキー素材も保持しないため、適用すべき独自の支出上限がありません。すべての支出上限は、代わりにお使いのローカル署名ツールに設定されています。
Vector について
Vector は Apex Fusion の eUTXO L2 で、Cardano メインネットのパラメーター(Conway 時代、Plutus V3)を使用しています。1 秒未満の楽観的ファイナリティと決定論的な手数料により、AI エージェントのワークロードに適したチェーンです。メインネットは稼働中です。
- ドキュメント: https://apex-fusion.github.io/vector-ai-documentation/
- エクスプローラー(メインネット): https://vector.apexscan.org/en/
- エクスプローラー(テストネット): https://vector.testnet.apexscan.org
- Apex Fusion: https://apexfusion.org
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。