Starknet MCP Server

Integrations

  • Used as a recommended runtime environment for the MCP server, with specific compatibility for Bun 1.0.0 or higher

  • Supports interaction with Starknet on Ethereum's Sepolia testnet, providing integration between Starknet and Ethereum ecosystems

  • Supports Node.js 18.0.0 or higher as an alternative runtime environment for the MCP server

スタークネット MCP サーバー

Starknetブロックチェーン向けの包括的なモデルコンテキストプロトコル(MCP)サーバー。このサーバーは、AIエージェントにStarknetネットワークとのインタラクション、ブロックチェーンデータのクエリ、ウォレットの管理、スマートコントラクトとのインタラクション機能を提供します。

📋 目次

🔭 概要

Starknet MCPサーバーは、モデルコンテキストプロトコル(Model Context Protocol)を活用してAIエージェントにブロックチェーンサービスを提供します。Starknetエコシステムへの包括的なインターフェースを提供し、AIアシスタントが自然言語でStarknetブロックチェーンのデータや操作を操作できるようにします。

主な機能は次のとおりです。

  • ブロックチェーンの状態(残高、取引、ブロック)の読み取り
  • Cairoスマートコントラクトとのやり取り
  • トークン(ETH、STRK、その他のERC20トークン)の転送
  • NFTとトークンメタデータの操作
  • StarknetIDドメインの解決(EthereumのENSに類似)
  • 適切なトランザクション処理で読み取りと書き込みの両方の操作を実行する

すべてのサービスは、MCPツールとリソースの一貫したインターフェースを通じて公開されているため、AIエージェントはStarknetブロックチェーンの機能を容易に発見し、利用できます。Starknetアドレスを受け入れるすべてのツールはStarknetIDもサポートしており、人間が読めるIDをバックグラウンドで自動的にアドレスに変換します。

✨ 特徴

  • Starknet 統合: Starknet.js を使用した完全な Starknet ブロックチェーン統合
  • ネットワークサポート:メインネットとSepoliaテストネットの両方をサポート
  • StarknetID 統合: Starknet ID からアドレスへの解決、およびその逆
  • ネイティブトークンのサポート: ETHとSTRKの両方のネイティブトークンをサポート
  • スマートコントラクトインタラクション: Starknet スマートコントラクトの呼び出しとクエリ
  • デュアルトランスポート: さまざまな統合ニーズに合わせて stdio サーバーまたは HTTP サーバーとして実行します。
  • AI対応: Claude、GPT、その他のAIアシスタントと併用できるように設計されています

ブロックチェーン情報

  • クエリチェーン情報(チェーンID、最新ブロック)
  • ブロックの詳細とトランザクションを調べる
  • 取引の領収書とステータスを表示する
  • 住所情報と契約データを取得する

ネイティブトークン操作

  • 任意のアドレスのETHとSTRKの残高を取得
  • アカウント間でETHとSTRKを転送する
  • ネイティブトークンの合計残高を表示する

トークン操作

  • ERC20トークンの残高と情報を取得する
  • ERC20トークンの転送
  • トークンの供給とメタデータを表示する
  • トークンの所有権を確認する

NFTオペレーション

  • トークンIDでNFTの所有権を確認する
  • NFTコレクション情報を取得する
  • アドレスのNFT残高を表示する

スマートコントラクトの相互作用

  • 読み取り専用コントラクト関数を呼び出す
  • トランザクション確認による契約書き込みの実行
  • 契約保管情報を取得する
  • ABI と契約クラス情報を表示する

スタークネットID

  • Starknet アドレスを Starknet ID に解決する
  • Starknet IDをアドレスに解決する
  • 検証データ付きの完全なStarknet IDプロファイルを取得する
  • Starknetドメインを検証する

🔧 サポートされているネットワーク

サーバーは次の Starknet ネットワークをサポートしています。

  • メインネット: Starknetの主要実稼働ネットワーク
  • Sepolia : イーサリアムの Sepolia 上の Starknet のテストネット

🛠️ 前提条件

  • Bun 1.0.0以上(推奨)
  • Node.js 18.0.0以上

📦 インストール

オプション1: インストールせずに使用 (npx)

最も簡単な方法は、 npxを使用してパッケージを直接実行することです。

# Run the stdio server without installation npx @mcpdotdirect/starknet-mcp-server # Run the HTTP server without installation npx @mcpdotdirect/starknet-mcp-server http

これにより、最初にインストールする必要なく、最新バージョンが自動的にダウンロードされて実行されます。

オプション2: グローバルインストール

頻繁に使用する予定の場合は、グローバルにインストールできます。

# Install globally npm install -g @mcpdotdirect/starknet-mcp-server # Then run from anywhere starknet-mcp-server starknet-mcp-server http

オプション3: ローカルプロジェクトのインストール

# Add to your project npm install @mcpdotdirect/starknet-mcp-server # Using yarn yarn add @mcpdotdirect/starknet-mcp-server # Using pnpm pnpm add @mcpdotdirect/starknet-mcp-server

次に、package.json スクリプトに次のコードを追加します。

"scripts": { "starknet-mcp": "starknet-mcp-server", "starknet-mcp-http": "starknet-mcp-server http" }

オプション4: ソースから実行

ソースから実行したり、ローカルで開発したりする場合:

# Clone the repository git clone https://github.com/mcpdotdirect/starknet-mcp-server.git cd starknet-mcp-server # Install dependencies npm install # Start the stdio server npm start # Or start the HTTP server npm run start:http

自動リロードを使用した開発の場合:

# Development mode with stdio npm run dev # Development mode with HTTP npm run dev:http

⚙️ サーバー構成

サーバーは次のデフォルト構成を使用します。

  • デフォルトネットワーク: メインネット
  • サーバーポート: 3000 (HTTP モード)
  • サーバーホスト: 0.0.0.0 (どのネットワークインターフェースからもアクセス可能)

これらの値はアプリケーションにハードコードされています。変更が必要な場合は、以下のファイルを編集してください。

  • ネットワーク設定の場合: src/core/chains.ts
  • サーバー構成の場合: src/server/http-server.ts

🔍 使用方法

サーバーの実行

Starknet MCP サーバーは、次の 2 つのモードで実行できます。

# Run the server in stdio mode (for CLI tools and AI assistants) npx @mcpdotdirect/starknet-mcp-server # Run the server in HTTP mode (for web applications) npx @mcpdotdirect/starknet-mcp-server http

HTTP サーバーはデフォルトでポート 3000 で実行され、リアルタイム通信用に REST API と Server-Sent Events (SSE) の両方を提供します。

カーソルからの接続

Cursor から Starknet MCP サーバーに接続するには:

  1. カーソルを開いて設定(左下の歯車アイコン)に移動します
  2. 左側のサイドバーの「機能」をクリックします
  3. 「MCPサーバー」セクションまでスクロールします
  4. 「新しいMCPサーバーを追加」をクリックします
  5. 次の詳細を入力してください。
    • サーバー名: starknet-mcp-server
    • タイプ: command
    • コマンド: npx @mcpdotdirect/starknet-mcp-server
  6. 「保存」をクリック

接続すると、Cursor 内で MCP サーバーの機能を直接使用できるようになります。サーバーは MCP サーバーリストに表示され、必要に応じて有効化/無効化できます。

カーソルでmcp.jsonを使用する

チームと共有したり、プロジェクト間で使用したりできる、より移植性の高い構成にするには、プロジェクトのルート ディレクトリに.cursor/mcp.jsonファイルを作成します。

{ "mcpServers": { "starknet-mcp-server": { "command": "npx", "args": [ "@mcpdotdirect/starknet-mcp-server" ] }, "starknet-mcp-http": { "command": "npx", "args": [ "@mcpdotdirect/starknet-mcp-server", "http" ] } } }

このファイルをプロジェクトの.cursorディレクトリに配置すると (存在しない場合は作成します)、そのプロジェクトで作業するときに Cursor はこれらの MCP サーバー構成を自動的に検出して使用します。

SSE を使用した HTTP モード

Web アプリケーションを開発していて、Server-Sent Events (SSE) を使用して HTTP サーバーに接続する場合は、次の構成を使用できます。

{ "mcpServers": { "starknet-mcp-sse": { "url": "http://localhost:3000/sse" } } }

Claude CLI を使用して接続する

Claude CLI を使用している場合は、次の 2 つのコマンドだけで MCP サーバーに接続できます。

# Add the MCP server using npx claude mcp add starknet-mcp-server npx @mcpdotdirect/starknet-mcp-server # Start Claude with the MCP server enabled claude

例: カーソルでMCPサーバーを使用する

MCPサーバーを設定したら、Cursorで簡単に使用できます。例:

  1. プロジェクトに新しい JavaScript/TypeScript ファイルを作成します。
// starknet-example.js async function main() { try { // When using with Cursor, you can simply ask Cursor to: // "Check the ETH balance of address 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 on Starknet mainnet" // Or "Lookup the Starknet ID for address 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" // Cursor will use the MCP server to execute these operations // without requiring any additional code from you } catch (error) { console.error("Error:", error.message); } } main();
  1. カーソルでファイルを開いた状態で、カーソルに次の操作を実行できます。
    • 「vitalik.starkのETH残高を確認する」
    • 「スタークネットの最新ブロックに関する情報を取得する」
    • 「コレクション 0x 内の NFT #123 の所有者を検索します...」

例: Starknet IDでETH残高を取得する

// Example of using the MCP client to check an ETH balance using Starknet ID const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("get_starknet_eth_balance", { address: "vitalik.stark", // Starknet ID instead of address network: "mainnet" }); console.log(result); // { // wei: "1000000000000000000", // ether: "1.0" // }

例: Starknet IDの解決

// Example of using the MCP client to resolve a Starknet ID to an address const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("resolve_starknet_address", { name: "vitalik.stark", network: "mainnet" }); console.log(result); // { // starknetId: "vitalik.stark", // address: "0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5d", // resolved: true // }

例: スマートコントラクトの呼び出し

// Example of using the MCP client to call a smart contract function const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("call_starknet_contract", { contractAddress: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", // ETH contract entrypoint: "totalSupply", calldata: [], network: "mainnet" }); console.log(result); // { // result: ["0x84b6c7d5970d5a73abe"] // }

Node.jsプロジェクトでの使用

Node.js プロジェクトで MCP サーバーをプログラム的に使用する場合:

// Start the MCP server as a child process const { spawn } = require('child_process'); const mcpServer = spawn('npx', ['@mcpdotdirect/starknet-mcp-server']); // Connect to it with the MCP client const mcp = new McpClient({ process: mcpServer }); // Now you can use the client const networks = await mcp.invokeTool("get_supported_starknet_networks", { random_string: "any" }); console.log("Supported networks:", networks);

より高度な使用方法としては、HTTP API のラッパー クラスを作成したり、Axios などのライブラリを使用して API 呼び出しをよりクリーンにしたりできます。

📚 APIリファレンス

利用可能なMCPツール

このサーバーは、次の MCP ツールを実装します。

ネットワークツール

  • get_starknet_chain_info : Starknet ネットワークに関する情報を取得する
  • get_supported_starknet_networks : サポートされているStarknetネットワークのリストを取得します

バランスツール

  • get_starknet_eth_balance : Starknet アドレスまたは Starknet ID の ETH 残高を取得します。
  • get_starknet_token_balance : アドレスのトークンの残高を取得する
  • get_starknet_strk_balance : アドレスのSTRKトークン残高を取得する
  • get_starknet_native_balances : アドレスのすべてのネイティブトークン残高(ETH および STRK)を取得します。

StarknetIDツール

  • resolve_starknet_name : アドレスのStarknet IDを取得する
  • resolve_starknet_address : Starknet IDのアドレスを取得する
  • get_starknet_profile : アドレスの完全な Starknet ID プロファイルを取得します
  • validate_starknet_domain : 文字列が有効なStarknet IDであるかどうかを確認する

ブロックツール

  • get_starknet_block : 特定のブロックに関する情報を取得する
  • get_starknet_block_transactions : 特定のブロック内のトランザクションを取得する

取引ツール

  • get_starknet_transaction : トランザクションの詳細を取得する
  • get_starknet_transaction_receipt : トランザクションの領収書を取得する
  • check_starknet_transaction_status : トランザクションが確認されたかどうかを確認する

契約ツール

  • call_starknet_contract : コントラクトの読み取り専用関数を呼び出す
  • get_starknet_contract_class : 契約のクラス(ABI およびその他の情報)を取得します。
  • execute_starknet_contract : コントラクト呼び出しを実行する(書き込み操作)

トークンツール

  • get_starknet_token_info : トークンに関する情報を取得する
  • get_starknet_token_supply : トークンの総供給量を取得する
  • check_starknet_nft_ownership : アドレスが特定のNFTを所有しているかどうかを確認する
  • get_starknet_nft_balance : アドレスが所有するNFTの数を取得する

転送ツール

  • transfer_starknet_eth : あるアカウントから別のアカウントに ETH を転送する (金額は人間が読める形式で表示されます)
  • transfer_starknet_strk : あるアカウントから別のアカウントに STRK を転送する (金額は人間が読める形式で表示されます)
  • transfer_starknet_token : ERC20トークンをあるアカウントから別のアカウントに転送する(金額は人間が読める形式で表示)

利用可能なMCPリソース

サーバーは次の MCP リソースを提供します。

ネットワークリソース

  • starknet://{network}/chain : 特定のネットワークのチェーン情報を取得する
  • starknet://networks : サポートされているすべてのネットワークのリストを取得します

ブロックリソース

  • starknet://{network}/block/{blockIdentifier} : 特定のブロックに関する情報を取得する
  • starknet://{network}/block/latest : 最新のブロックを取得する

アドレスリソース

  • starknet://{network}/address/{address} : アドレスに関する情報を取得する

取引リソース

  • starknet://{network}/tx/{txHash} : トランザクション情報を取得する

StarknetIDリソース

  • starknet://{network}/id/address/{address} : アドレスをStarknet IDに解決する
  • starknet://{network}/id/name/{name} : Starknet IDをアドレスに解決する
  • starknet://{network}/id/profile/{address} : アドレスのStarknet IDプロファイルを取得します。

利用可能なMCPプロンプト

LLM のやり取りの場合、サーバーは次のプロンプトを提供します。

  • explore_starknet_block : 特定のStarknetブロックに関する情報を探索する
  • explore_starknet_address : Starknet アドレスに関する情報を取得する
  • explore_starknet_transaction : Starknet トランザクションに関する情報を取得する
  • lookup_starknet_id : Starknet IDを検索するか、アドレスをStarknet IDに解決する
  • explore_starknet_id_profile : Starknet ID の完全なプロファイルを調べる

🔍 AIアシスタントとの使用

このサーバーをClaudeやGPTなどのAIアシスタントで使用する場合:

  1. このMCPサーバーを使用するようにAIアシスタントを構成する
  2. アシスタントはツールを使用してStarknetと対話することができます
  3. クエリの例:
    • 「アドレス0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5dのETH残高はいくらですか?」
    • 「アドレス0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5dのStarknet IDを検索してください」
    • 「Starknet メインネットの最新ブロックには何が含まれていますか?」
    • 「トランザクション 0x7e3a33ab42f2e24184763563b7b8482b53e3b89831ebc3eacf29d4d11f5198 に関する情報を取得します」
    • 「Starknet ID vitalik.stark をアドレスに解決する」

🔒 セキュリティに関する考慮事項

  • 秘密鍵はトランザクションの署名にのみ使用され、サーバーに保存されることはありません。
  • すべてのトークンの量は、 weiや最小単位ではなく、人間が読める形式(例:ETH、STRK、トークン単位)で指定されます。
  • 操作を実行する前に、入力パラメータを常に検証してサニタイズする
  • 本番環境での使用のために追加の認証メカニズムを実装することを検討する
  • 実稼働環境ではHTTPサーバーにHTTPSを使用する
  • 不正使用を防ぐためにレート制限を実装する
  • 高価値サービスの場合は確認手順を追加することを検討してください

📁 プロジェクト構造

starknet-mcp-server/ ├── src/ │ ├── index.ts # Main stdio server entry point │ ├── server/ # Server-related files │ │ ├── http-server.ts # HTTP server with SSE │ │ └── server.ts # General server setup │ ├── core/ │ │ ├── chains.ts # Chain definitions and utilities │ │ ├── resources.ts # MCP resources implementation │ │ ├── tools.ts # MCP tools implementation │ │ ├── prompts.ts # MCP prompts implementation │ │ └── services/ # Core blockchain services │ │ ├── index.ts # Service exports │ │ ├── balance.ts # Balance services │ │ ├── blocks.ts # Block services │ │ ├── clients.ts # Client utilities │ │ ├── contracts.ts # Contract interactions │ │ ├── starknetid.ts # Starknet ID services │ │ ├── tokens.ts # Token services │ │ ├── transactions.ts # Transaction services │ │ ├── transfer.ts # Transfer services │ │ └── utils.ts # Utility functions ├── package.json ├── tsconfig.json └── README.md

🛠️ 開発コンベンション

カスタム ツール、リソース、またはプロンプトを追加する場合:

  1. すべてのリソース、ツール、プロンプト名ではハイフン( - )の代わりにアンダースコア( _ )を使用してください
    // Good: Uses underscores server.tool( "starknet_contract_call", "Description of the tool", { contract_address: z.string().describe("The contract address") }, async (params) => { // Tool implementation } );
  2. この命名規則により、カーソルや他のAIツールとの互換性が確保されます。

📚 ドキュメント

詳細については以下をご覧ください。

📄 ライセンス

このプロジェクトは MIT ライセンスに基づいてライセンスされています - 詳細についてはLICENSEファイルを参照してください。

ID: 7j8b8yomn6