solana-agent-kit について
モジュール式プラグインでトークン、NFT、DeFi などの Solana 操作を行う AI エージェント向けオープンソースツールキットです。LangChain や Vercel AI SDK に対応し、Claude 用 MCP サーバーも提供します。
主な機能
- 01プラグインで Solana 操作を構成
- 02トークン、NFT、DeFi 操作
- 03複数のエージェントフレームワークに対応
- 04対話型と自律型の実行モード
- 05Claude 用 MCP サーバー
活用シーン
- 01トークン管理エージェントの構築
- 02NFT の作成や取引の自動化
- 03Solana ツールの Claude への接続
MCP 対応
solana-mcp サーバーを含み、アセット情報取得、トークン作成、残高確認、送金、NFT ミント、取引などのツールを MCP クライアントに公開します。
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ sendaifun/ skills --skill solana-agent-kitインストール後、Claude Code で/solana-agent-kitを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
docs/custom-actions.mdtroubleshooting.mdexamples/autonomous-agent/README.mdexamples/langchain/README.mdexamples/mcp-server/README.mdexamples/vercel-ai/README.mdresources/actions-reference.mdtemplates/agent-template.ts詳細
Solana Agent Kit 開発ガイド
SendAI のオープンソースツールキットを使って、60 以上の Solana ブロックチェーン操作を自律的に実行する AI エージェントを構築できます。LangChain、Vercel AI SDK、および MCP 経由の Claude と互換性があります。
概要
Solana Agent Kit を使うと、あらゆる AI モデルで次のことができます。
- トークン(SPL および Token-2022)のデプロイと管理
- Metaplex 経由での NFT の作成と取引
- DeFi 操作の実行(Jupiter、Raydium、Orca、Meteora)
- SOL のステーキング、トークンのブリッジ、ドメインの登録
- 対話型モードまたは完全自律モードでの実行
主な機能
| 機能 | 説明 |
|---|---|
| 60 以上のアクション | トークン、NFT、DeFi、ステーキング、ブリッジ操作 |
| プラグインアーキテクチャ | モジュール式で、必要なものだけを使用できます |
| マルチフレームワーク対応 | LangChain、Vercel AI SDK、MCP、Eliza |
| モデル非依存 | OpenAI、Claude、Llama、Gemini で動作します |
| 自律モード | エラー回復機能を備えた、手動操作不要の実行 |
クイックスタート
インストール
# Core package
npm install solana-agent-kit
# With plugins (recommended)
npm install solana-agent-kit \
@solana-agent-kit/plugin-token \
@solana-agent-kit/plugin-nft \
@solana-agent-kit/plugin-defi \
@solana-agent-kit/plugin-misc \
@solana-agent-kit/plugin-blinks
環境のセットアップ
# .env file
OPENAI_API_KEY=your_openai_api_key
RPC_URL=https://api.mainnet-beta.solana.com # or devnet
SOLANA_PRIVATE_KEY=your_base58_private_key
# Optional API keys for enhanced features
COINGECKO_API_KEY=your_coingecko_key
HELIUS_API_KEY=your_helius_key
基本的なエージェントのセットアップ
import {
SolanaAgentKit,
createVercelAITools,
KeypairWallet,
} from "solana-agent-kit";
import { Keypair } from "@solana/web3.js";
import bs58 from "bs58";
// Import plugins
import TokenPlugin from "@solana-agent-kit/plugin-token";
import NFTPlugin from "@solana-agent-kit/plugin-nft";
import DefiPlugin from "@solana-agent-kit/plugin-defi";
import MiscPlugin from "@solana-agent-kit/plugin-misc";
import BlinksPlugin from "@solana-agent-kit/plugin-blinks";
// Create wallet from private key
const privateKey = bs58.decode(process.env.SOLANA_PRIVATE_KEY!);
const keypair = Keypair.fromSecretKey(privateKey);
const wallet = new KeypairWallet(keypair);
// Initialize agent with plugins
const agent = new SolanaAgentKit(
wallet,
process.env.RPC_URL!,
{
OPENAI_API_KEY: process.env.OPENAI_API_KEY!,
}
)
.use(TokenPlugin)
.use(NFTPlugin)
.use(DefiPlugin)
.use(MiscPlugin)
.use(BlinksPlugin);
// Create tools for AI framework
const tools = createVercelAITools(agent, agent.actions);
プラグインとアクション
Token プラグイン(@solana-agent-kit/plugin-token)
| アクション | 説明 |
|---|---|
deployToken | 新しい SPL トークンまたは Token-2022 をデプロイします |
transfer | SOL または SPL トークンを転送します |
getBalance | トークン残高を確認します |
stake | Jupiter/Solayer 経由で SOL をステーキングします |
bridge | Wormhole 経由でトークンをブリッジします |
rugCheck | トークンの安全性を分析します |
// Deploy a new token
const result = await agent.methods.deployToken({
name: "My Token",
symbol: "MTK",
decimals: 9,
initialSupply: 1000000,
});
// Transfer tokens
await agent.methods.transfer({
to: "recipient_address",
amount: 100,
mint: "token_mint_address", // optional, defaults to SOL
});
// Check balance
const balance = await agent.methods.getBalance({
tokenAddress: "token_mint_address", // optional
});
NFT プラグイン(@solana-agent-kit/plugin-nft)
| アクション | 説明 |
|---|---|
createCollection | Metaplex 経由で NFT コレクションを作成します |
mintNFT | コレクションに NFT をミントします |
listNFT | マーケットプレイスに NFT を出品します |
updateMetadata | NFT のメタデータを更新します |
// Create collection
const collection = await agent.methods.createCollection({
name: "My Collection",
symbol: "MYCOL",
uri: "https://arweave.net/metadata.json",
});
// Mint NFT to collection
const nft = await agent.methods.mintNFT({
collectionMint: collection.collectionAddress,
name: "NFT #1",
uri: "https://arweave.net/nft1.json",
});
DeFi プラグイン(@solana-agent-kit/plugin-defi)
| アクション | 説明 |
|---|---|
trade | Jupiter 経由でトークンをスワップします |
createRaydiumPool | Raydium AMM プールを作成します |
createOrcaPool | Orca Whirlpool を作成します |
createMeteoraPool | Meteora DLMM プールを作成します |
limitOrder | Manifest 経由で指値注文を出します |
lend | Lulo 経由で資産を貸し出します |
perpetualTrade | Adrena/Drift 経由で無期限先物を取引します |
// Swap tokens via Jupiter
const swap = await agent.methods.trade({
outputMint: "target_token_mint",
inputAmount: 1.0,
inputMint: "So11111111111111111111111111111111111111112", // SOL
slippageBps: 50, // 0.5%
});
// Create Raydium CPMM pool
const pool = await agent.methods.createRaydiumCpmm({
mintA: "token_a_mint",
mintB: "token_b_mint",
configId: "config_id",
mintAAmount: 1000,
mintBAmount: 1000,
});
Misc プラグイン(@solana-agent-kit/plugin-misc)
| アクション | 説明 |
|---|---|
airdrop | Helius 経由で ZK 圧縮エアドロップを実行します |
getPrice | CoinGecko 経由でトークン価格を取得します |
registerDomain | .sol ドメインを登録します |
resolveDomain | ドメインをアドレスに解決します |
getTPS | ネットワークの TPS を取得します |
// Compressed airdrop (cost-efficient)
const airdrop = await agent.methods.sendCompressedAirdrop({
mintAddress: "token_mint",
amount: 100,
recipients: ["addr1", "addr2", "addr3"],
priorityFeeInLamports: 10000,
});
// Get token price
const price = await agent.methods.getPrice({
tokenId: "solana", // CoinGecko ID
});
Blinks プラグイン(@solana-agent-kit/plugin-blinks)
Solana Actions/Blinks を直接実行します。
// Execute a Blink
const result = await agent.methods.executeBlink({
blinkUrl: "https://example.com/blink",
params: { /* blink-specific params */ },
});
統合パターン
LangChain との統合
import { SolanaAgentKit, createSolanaTools } from "solana-agent-kit";
import { ChatOpenAI } from "@langchain/openai";
import { createReactAgent } from "@langchain/langgraph/prebuilt";
import { MemorySaver } from "@langchain/langgraph";
import { HumanMessage } from "@langchain/core/messages";
async function createLangChainAgent() {
// Initialize LLM
const llm = new ChatOpenAI({
modelName: "gpt-4-turbo-preview",
temperature: 0.7,
});
// Initialize Solana Agent Kit
const solanaKit = new SolanaAgentKit(
wallet,
process.env.RPC_URL!,
{ OPENAI_API_KEY: process.env.OPENAI_API_KEY! }
)
.use(TokenPlugin)
.use(DefiPlugin);
// Create LangChain tools
const tools = createSolanaTools(solanaKit);
// Create agent with memory
const memory = new MemorySaver();
const agent = createReactAgent({
llm,
tools,
checkpointSaver: memory,
});
return agent;
}
// Run agent
async function chat(agent: any, message: string) {
const config = { configurable: { thread_id: "solana-agent" } };
const stream = await agent.stream(
{ messages: [new HumanMessage(message)] },
config
);
for await (const chunk of stream) {
if ("agent" in chunk) {
console.log(chunk.agent.messages[0].content);
}
}
}
Vercel AI SDK との統合
import { SolanaAgentKit, createVercelAITools } from "solana-agent-kit";
import { openai } from "@ai-sdk/openai";
import { generateText } from "ai";
async function runVercelAgent(prompt: string) {
const agent = new SolanaAgentKit(wallet, rpcUrl, options)
.use(TokenPlugin)
.use(DefiPlugin);
const tools = createVercelAITools(agent, agent.actions);
const result = await generateText({
model: openai("gpt-4-turbo"),
tools,
maxSteps: 10,
prompt,
});
return result.text;
}
// Usage
const response = await runVercelAgent(
"Swap 0.1 SOL for USDC using the best rate"
);
Claude 用 MCP サーバー
Claude Desktop 用の MCP サーバーをインストールして設定します。
# Install globally
npm install -g solana-mcp
# Or run directly
npx solana-mcp
Claude Desktop の設定(~/Library/Application Support/Claude/claude_desktop_config.json)に追加します。
{
"mcpServers": {
"solana": {
"command": "npx",
"args": ["solana-mcp"],
"env": {
"RPC_URL": "https://api.mainnet-beta.solana.com",
"SOLANA_PRIVATE_KEY": "your_base58_private_key",
"OPENAI_API_KEY": "your_openai_key"
}
}
}
}
利用可能な MCP ツール:
GET_ASSET- トークン/資産情報を取得しますDEPLOY_TOKEN- 新しいトークンを作成しますGET_PRICE- トークン価格を取得しますWALLET_ADDRESS- ウォレットアドレスを取得しますBALANCE- 残高を確認しますTRANSFER- トークンを送信しますMINT_NFT- NFT を作成しますTRADE- スワップを実行しますREQUEST_FUNDS- devnet SOL を取得しますRESOLVE_DOMAIN- .sol ドメインを検索しますGET_TPS- ネットワークのスループットを取得します
自律モード
エージェントを完全自律モードで実行します。
import { SolanaAgentKit } from "solana-agent-kit";
const agent = new SolanaAgentKit(wallet, rpcUrl, options)
.use(TokenPlugin)
.use(DefiPlugin);
// Configure autonomous behavior
const autonomousConfig = {
intervalMs: 60000, // Check every minute
maxActions: 100, // Max actions per session
errorRecovery: true, // Auto-retry on failures
dryRun: false, // Set true for testing
};
// Start autonomous loop
async function runAutonomous() {
while (true) {
try {
// Agent decides what to do based on market conditions
const decision = await agent.analyze({
context: "Monitor my portfolio and rebalance if needed",
constraints: [
"Keep at least 1 SOL for gas",
"Max 10% allocation per token",
],
});
if (decision.shouldAct) {
await agent.execute(decision.action);
}
await sleep(autonomousConfig.intervalMs);
} catch (error) {
if (autonomousConfig.errorRecovery) {
console.error("Error, recovering:", error);
await sleep(5000);
} else {
throw error;
}
}
}
}
カスタムアクションの作成
カスタムアクションでエージェントを拡張します。
import { Action, Tool, SolanaAgentKit } from "solana-agent-kit";
// Define the Tool (tells LLM HOW to use it)
const myCustomTool: Tool = {
name: "my_custom_action",
description: "Does something custom on Solana",
parameters: {
type: "object",
properties: {
param1: {
type: "string",
description: "First parameter",
},
param2: {
type: "number",
description: "Second parameter",
},
},
required: ["param1"],
},
};
// Define the Action (tells agent WHEN and WHY to use it)
const myCustomAction: Action = {
name: "my_custom_action",
description: "Use this when you need to do something custom",
similes: ["custom thing", "special operation"],
examples: [
{
input: "Do the custom thing with value X",
output: "Custom action executed with param1=X",
},
],
handler: async (agent: SolanaAgentKit, params: any) => {
const { param1, param2 } = params;
// Your custom logic here
const connection = agent.connection;
const wallet = agent.wallet;
// Execute Solana operations...
return {
success: true,
result: `Executed with ${param1}`,
};
},
};
// Register custom action
agent.registerAction(myCustomAction);
agent.registerTool(myCustomTool);
ベストプラクティス
セキュリティ
- 秘密鍵を決して公開しないでください - 環境変数を使用します
- 専用ウォレットを使用します - エージェント用ウォレットをメイン資金から分離します
- 支出上限を設定します - トランザクションの最大額を設定します
- 最初に devnet でテストします - mainnet の前に必ずテストします
- エージェントのアクションを監査します - すべての操作をログに記録します
パフォーマンス
- 適切な RPC を使用します - 本番環境では Helius、Triton を使用します
- 操作をバッチ処理します - 関連するトランザクションをまとめます
- レート制限に対処します - バックオフ戦略を実装します
- 可能な場合はキャッシュします - 価格フィード、トークンのメタデータ
エージェントの設計
- プラグインの範囲を限定する - 必要なプラグインのみを読み込みます(ハルシネーションを減らします)
- 明確なコンテキストを提供する - 詳細なプロンプトによって精度が向上します
- 制約を追加する - 望ましくない動作を防ぎます
- 監視して反復する - エージェントの判断を確認します
ガイドライン
- メインネットの前に、必ず devnet でテストしてください
- トランザクションの上限を設定してください
- エージェントのアクティビティログを監視してください
- エージェント専用のウォレットを使用してください
- 適切なエラー処理を実装してください
- 秘密鍵を安全に保管してください
このスキルのファイル
solana-agent-kit/
├── SKILL.md # This file
├── resources/
│ ├── actions-reference.md # Complete actions list
│ ├── plugins-guide.md # Plugin deep dive
│ └── security-checklist.md # Security best practices
├── examples/
│ ├── langchain/ # LangChain integration
│ ├── vercel-ai/ # Vercel AI SDK
│ ├── mcp-server/ # Claude MCP setup
│ └── autonomous-agent/ # Autonomous patterns
├── templates/
│ └── agent-template.ts # Starter template
└── docs/
├── custom-actions.md # Creating custom actions
└── troubleshooting.md # Common issues
V2 の主な特徴
バージョン 2 では、重要な改善を加え、ツールキットを全面的に刷新しました。
プラグインアーキテクチャ
V2 では、V1 の主な課題 2 つに直接対応しています。
- セキュリティ:秘密鍵の入力方式は完全に安全ではありませんでした
- ハルシネーション:100 個以上のツールが混乱を招いていました
モジュール式のプラグインシステムにより、必要なものだけをインストールできるため、コンテキストの肥大化とハルシネーションを抑えられます。
埋め込みウォレットのサポート(新機能)
V2 では、セキュリティを強化するため、安全なウォレットプロバイダーと連携します。
import { TurnkeyWallet, PrivyWallet } from "solana-agent-kit/wallets";
// Turnkey - fine-grained rules and policies
const turnkeyWallet = new TurnkeyWallet({
organizationId: process.env.TURNKEY_ORG_ID,
privateKeyId: process.env.TURNKEY_PRIVATE_KEY_ID,
});
// Privy - human-in-the-loop confirmation
const privyWallet = new PrivyWallet({
appId: process.env.PRIVY_APP_ID,
requireConfirmation: true,
});
// Initialize agent with secure wallet
const agent = new SolanaAgentKit(turnkeyWallet, rpcUrl, options)
.use(TokenPlugin)
.use(DefiPlugin);
V2 の主なメリット
| 機能 | V1 | V2 |
|---|---|---|
| ウォレットのセキュリティ | 秘密鍵の入力 | 埋め込みウォレット(Turnkey、Privy) |
| ツールの読み込み | 100 個以上のすべてのツール | プラグインベースで必要なものを読み込み |
| LLM のコンテキスト | 大きく、ハルシネーションの原因に | 最小限で、焦点を絞ったコンテキスト |
| Human-in-loop | 非対応 | Privy に標準対応 |
注意事項
- Solana Agent Kit は積極的にメンテナンスされています(コミット 1,400 件以上、フォーク 800 件以上)
- V2 ではプラグインアーキテクチャが導入されました(移行ガイドを利用できます)
- Python 版も利用できます:
solana-agent-kit-py - MCP サーバーにより、Claude Desktop と連携できます
- ダウンロード数 100,000 件以上、GitHub スター 1.6k 件以上
- Apache-2.0 ライセンス