AIエージェントフレームワーク Solana Agent Kit v2 解説(4): MCPサーバーを立ててみる
はじめに
こんにちは!今回は4月18日に公開されたSolana Agent Kit v2に関してv1からの変更点を中心に私自身のキャッチアップも兼ねて調査したので解説していきます。
今回はMCP Serverを立ててClaude Desktopで動作確認してみようと思います。v2になり、@solana-agent-kit/adapter-mcp
が追加されたことにより、Solana Agent Kitを利用してMCPサーバーが立てられるようになったようです。
AIエージェントフレームワーク Solana Agent Kit v2 解説記事
AIエージェントフレームワーク Solana Agent Kit v2 解説(1): 新アーキテクチャでNFT作成
AIエージェントフレームワーク Solana Agent Kit v2 解説(2): 組み込みウォレット
AIエージェントフレームワーク Solana Agent Kit v2 解説(3): モバイル対応とプロンプトパフォーマンス向上
MCPサーバーを立ててみる
公式ドキュメントに立て方が記載されていたので、ドキュメント通りに実施してみようと思います。
実装
nodeバージョン
node -v
v23.11.1
ディレクトリ・プロジェクト作成
mkdir solana-agent-mcp
cd solana-agent-mcp
npm init -y
ライブラリインストール
今回はsolana-agent-kitに加えて、MCPサーバーを構築するフレームワークである@solana-agent-kit/adapter-mcp
もインストールします。また、SOLのウォレット残高をClaude Desktopで確認するため、Tokenプラグイン@solana-agent-kit/plugin-token
をインストールします。
npm install solana-agent-kit @solana-agent-kit/adapter-mcp @solana-agent-kit/plugin-token dotenv
.envファイル作成
利用するSolanaウォレットの秘密鍵(テスト目的の場合は必ず資産の入っていないテスト用ウォレットを利用してください)、DevnetのRPC URL、OpenAIのAPIキーを記載します。
SOLANA_PRIVATE_KEY=your_private_key_here
RPC_URL="https://api.devnet.solana.com"
OPENAI_API_KEY=your_openai_api_key_here
index.jsファイル作成
MCPサーバーを立てる時もSolanaAgentKitをインスタンス化して、ウォレット、RPC URL、OpenAIのAPIキーを定義し、利用するプラグインをuse
メソッドで組み込む流れは変わらないようです。今回MCPサーバーを立てるときは組み込みウォレットではなく、サーバーに定義した秘密鍵からウォレットを作成します。
import { SolanaAgentKit, KeypairWallet } from "solana-agent-kit";
import { startMcpServer } from "@solana-agent-kit/adapter-mcp";
import TokenPlugin from "@solana-agent-kit/plugin-token";
import * as dotenv from "dotenv";
// 環境変数の読み込み
dotenv.config();
// プライベートキーからウォレットを作成
const wallet = new KeypairWallet(process.env.SOLANA_PRIVATE_KEY);
// SolanaAgentKitのインスタンスを作成。利用するプラグインも設定
const agent = new SolanaAgentKit(wallet, process.env.RPC_URL, {
OPENAI_API_KEY: process.env.OPENAI_API_KEY,
}).use(TokenPlugin);
// どのアクションをMCPサーバーに公開するかを選択する
const finalActions = {
// TokenPluginのアクション
BALANCE_ACTION: agent.actions.find(
(action) => action.name === "BALANCE_ACTION"
),
TOKEN_BALANCE_ACTION: agent.actions.find(
(action) => action.name === "TOKEN_BALANCE_ACTION"
),
// 現在のsolana-agent-kitリポジトリには存在せず、そのままだとエラーになる。
// GET_WALLET_ADDRESS_ACTION: agent.actions.find(
// (action) => action.name === "GET_WALLET_ADDRESS_ACTION"
// ),
};
// MCPサーバーを起動
startMcpServer(finalActions, agent, {
name: "solana-agent-mcp",
version: "0.0.1",
});
どのアクションをMCPサーバーに公開するかを選択する部分ではアクション名をsolana-agent-kitリポジトリから取得します。
solana-agent-kitリポジトリのpackagesディレクトリには各プラグインのソースコードがあり、使いたいプラグインのディレクトリ内のsrcフォルダに、対応するプロトコルごとのコードが整理されています。
Token pluginの例
各プロトコルのディレクトリには大方actions
ディレクトリとtools
ディレクトリが存在しており、actionsディレクトリにAIエージェントにツールを認識させるためのアクションの定義(システムプロンプトに渡る部分)が、toolsディレクトリには実際の各ツールの処理の関数が実装されています。toolsディレクトリの関数をactionsディレクトリ内の定義で呼び出す流れです。
- actions/
- tools/
Solana Agent KitでMCPサーバーを立てる時に定義が必要なactionの名前はactionsディレクトリ内の各ファイルのname
フィールドに記載されています。
今回定義するBALANCE_ACTION
とTOKEN_BALANCE_ACTION
はそれぞれ下記に定義されています。
BALANCE_ACTION
TOKEN_BALANCE_ACTION
また、公式ドキュメントに記載されていたGET_WALLET_ADDRESS_ACTION
アクションは現在のsolana-agent-kitリポジトリには存在しておらず、そのままだとエラーが出たためコメントアウトしました。
package.jsonファイル編集
package.jsonファイルに"type": "module"
フィールドを追加します。
{
"name": "solana-agent-mcp",
"version": "1.0.0",
"type": "module",
"main": "index.js",
"scripts": {
"start": "node index.js"
},
"keywords": [],
"author": "",
"license": "ISC",
"description": "",
"dependencies": {
"@solana-agent-kit/adapter-mcp": "^2.0.4",
"@solana-agent-kit/plugin-token": "^2.0.4",
"dotenv": "^16.5.0",
"solana-agent-kit": "^2.0.4"
}
}
Claude Descktop設定
Claude Desktopの設定をします。下記リンクからダウンロードできます。
設定ファイルを開く
私はMacOSで動作確認しましたが、それぞれ下記パスにMCPサーバーの設定をするファイルが存在します。
MacOS
code ~/Library/Application\ Support/Claude/claude_desktop_config.json
Windows
code $env:AppData\Claude\claude_desktop_config.json
設定記載
ファイルを開いたら下記のように記載します。公式ドキュメントにはcommand
フィールドにnode
と記載されていましたが、私はnvm
を使っていたからかそのままでは動作せず、which node
コマンドで出力された絶対パスを記載しました。
また、env
フィールドには.env
ファイルを作成した時の値をそれぞれ記載します。args
フィールドにも作成したindex.js
ファイルの絶対パスを記載します。
{
"mcpServers": {
"agent-kit": {
"command": "<nodeコマンドの絶対パス>",
"env": {
"RPC_URL": "<.envファイルに記載したRPC_URL>",
"SOLANA_PRIVATE_KEY": "<.envファイルに記載したSOLANA_PRIVATE_KEY>",
"OPENAI_API_KEY": "<.envファイルに記載したOPENAI_API_KEY>"
},
"args": [
"/<作成したindex.jsの絶対パス>/solana-agent-mcp/index.js"
]
}
}
}
Claude Desktop再起動
ファイルの定義が完了したらClaude Desktopを再起動します。
動作確認
What’s my SOL balance? My wallet address is nHSjCbSd3XD3UwGy5uAAUqEfDf4kBDYaJZ4eF82nCDZ.
というプロンプトを入力して、Devnetのテスト用ウォレットの残高を聞いてみました。
すると下記のように実際のDevnetのSOLの残高を返してくれました!また、SOLのみではなく、テスト用に作っていた独自トークンまで回答してくれました。
まとめ
Solana Agent Kitを使ってMCPサーバーを立ててClaude Desktopで動作確認まで実施できました。今回はClaude Desktopで実施しましたが、OpenAIのPlaygroundを利用しても動作させることができるようです。
手順通りに実装してTokenの残高は確認できたのですが、NFTの発行を試みたところうまく動作させられなかったので、引き続き調査していこうと思いました。
Discussion