mcpField
S
solana-agent-kit

solana-agent-kit

github.com/sendaifunエージェントワークフロー130236 回インストール13 週間前に更新
リポジトリ

solana-agent-kit について

モジュール式プラグインでトークン、NFT、DeFi などの Solana 操作を行う AI エージェント向けオープンソースツールキットです。LangChain や Vercel AI SDK に対応し、Claude 用 MCP サーバーも提供します。

主な機能

  1. 01プラグインで Solana 操作を構成
  2. 02トークン、NFT、DeFi 操作
  3. 03複数のエージェントフレームワークに対応
  4. 04対話型と自律型の実行モード
  5. 05Claude 用 MCP サーバー

活用シーン

  1. 01トークン管理エージェントの構築
  2. 02NFT の作成や取引の自動化
  3. 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.md
troubleshooting.md
examples/autonomous-agent/
README.md
examples/langchain/
README.md
examples/mcp-server/
README.md
examples/vercel-ai/
README.md
resources/
actions-reference.md
templates/
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 をデプロイします
transferSOL または SPL トークンを転送します
getBalanceトークン残高を確認します
stakeJupiter/Solayer 経由で SOL をステーキングします
bridgeWormhole 経由でトークンをブリッジします
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)
アクション説明
createCollectionMetaplex 経由で NFT コレクションを作成します
mintNFTコレクションに NFT をミントします
listNFTマーケットプレイスに NFT を出品します
updateMetadataNFT のメタデータを更新します
// 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)
アクション説明
tradeJupiter 経由でトークンをスワップします
createRaydiumPoolRaydium AMM プールを作成します
createOrcaPoolOrca Whirlpool を作成します
createMeteoraPoolMeteora DLMM プールを作成します
limitOrderManifest 経由で指値注文を出します
lendLulo 経由で資産を貸し出します
perpetualTradeAdrena/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)
アクション説明
airdropHelius 経由で ZK 圧縮エアドロップを実行します
getPriceCoinGecko 経由でトークン価格を取得します
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);

ベストプラクティス

セキュリティ
  1. 秘密鍵を決して公開しないでください - 環境変数を使用します
  2. 専用ウォレットを使用します - エージェント用ウォレットをメイン資金から分離します
  3. 支出上限を設定します - トランザクションの最大額を設定します
  4. 最初に devnet でテストします - mainnet の前に必ずテストします
  5. エージェントのアクションを監査します - すべての操作をログに記録します
パフォーマンス
  1. 適切な RPC を使用します - 本番環境では Helius、Triton を使用します
  2. 操作をバッチ処理します - 関連するトランザクションをまとめます
  3. レート制限に対処します - バックオフ戦略を実装します
  4. 可能な場合はキャッシュします - 価格フィード、トークンのメタデータ
エージェントの設計
  1. プラグインの範囲を限定する - 必要なプラグインのみを読み込みます(ハルシネーションを減らします)
  2. 明確なコンテキストを提供する - 詳細なプロンプトによって精度が向上します
  3. 制約を追加する - 望ましくない動作を防ぎます
  4. 監視して反復する - エージェントの判断を確認します

ガイドライン

  • メインネットの前に、必ず 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 つに直接対応しています。

  1. セキュリティ:秘密鍵の入力方式は完全に安全ではありませんでした
  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 の主なメリット
機能V1V2
ウォレットのセキュリティ秘密鍵の入力埋め込みウォレット(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 ライセンス

コメント