SVM-MCP
The SVM-MCP server enables Claude AI to interact with SOON blockchain networks (both testnet and mainnet) to query wallet and transaction data:
Check wallet balances: Retrieve native token balances for any address
Fetch recent transactions: Get the most recent transaction made by an address
View token holdings: List all token accounts owned by an address
Dual network support: All functions available on both SOON testnet and mainnet
Error handling: Includes proper error handling and user-friendly error messages
Provides tools for checking wallet balances, fetching recent transactions, and viewing token holdings on SOON (a Solana-compatible blockchain) testnet and mainnet.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@SVM-MCP check my balance for address 5Hn8... on testnet"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
SVM-MCP: SOON Model Context Protocol Server
A Model Context Protocol (MCP) server that integrates Claude AI with SOON and other SVM-based blockchains. The server provides tools for checking balances, fetching recent transactions, and viewing token holdings on SOON's testnet and mainnet, for account balances, transactions, and token holdings.
Overview
This MCP server is designed to connect Claude with the SOON ecosystem, allowing it to:
Query wallet balances on testnet and mainnet
Fetch the most recent transactions for an address
Check token holdings for any account
The current implementation uses the SOON's RPC endpoints, but can be easily modified to work with any Solana-compatible blockchain or custom SVM implementation.
Related MCP server: Solana Agent Kit MCP Server
Features
Get Balances: Fetch native token balances for any address on SOON testnet or mainnet
Get Last Transaction: Retrieve the most recent transaction for an address
Get Token Accounts: List all token accounts owned by an address
Prerequisites
Node.js (v16+)
NPM or Bun package manager
Claude Desktop (for local testing)
Installation
Clone the repository:
git clone https://github.com/rkmonarch/svm-mcp
cd svm-mcpInstall dependencies:
npm install
# or
bun installBuild the project:
npm run build
# or
bun run buildProject Structure
The main server implementation is in src/index.ts:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { Connection, PublicKey } from "@solana/web3.js";
import { z } from "zod";
const connectionTestnet = new Connection("https://rpc.testnet.soo.network/rpc");
const connectionMainnet = new Connection("https://rpc.mainnet.soo.network/rpc");
const server = new McpServer({
name: "svm-mcp",
version: "0.0.1",
capabilities: [
"get-soon-testnet-balance",
"get-soon-testnet-last-transaction",
"get-soon-testnet-account-tokens",
"get-soon-mainnet-balance",
"get-soon-mainnet-last-transaction",
"get-soon-mainnet-account-tokens",
],
});Tool Implementations
Get Balance
server.tool(
"get-soon-testnet-balance",
"Get the balance of a address on the Soon testnet",
{
address: z.string().describe("The Solana address to get the balance of"),
},
async ({ address }) => {
try {
const balance = await connectionTestnet.getBalance(new PublicKey(address));
return {
content: [
{
type: "text",
text: `Balance: ${balance}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error getting balance: ${error instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);Get Last Transaction
server.tool(
"get-soon-testnet-last-transaction",
"Get the last transaction of an address on the Soon testnet",
{
address: z
.string()
.describe("The Solana address to get the last transaction for"),
},
async ({ address }) => {
try {
// Fetch the most recent transaction signatures for the address
const signatures = await connectionTestnet.getSignaturesForAddress(
new PublicKey(address),
{ limit: 1 } // Limit to just the most recent transaction
);
if (signatures.length === 0) {
return {
content: [
{
type: "text",
text: "No transactions found for this address",
},
],
};
}
// Get the most recent transaction using its signature
const latestSignature = signatures[0].signature;
const transaction = await connectionTestnet.getConfirmedTransaction(
latestSignature
);
return {
content: [
{
type: "text",
text: JSON.stringify(transaction),
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error getting transaction: ${error instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);Get Token Accounts
server.tool(
"get-soon-testnet-account-tokens",
"Get the tokens of a address on the Soon testnet",
{
address: z.string().describe("The Solana address to get the tokens of"),
},
async ({ address }) => {
try {
const tokens = await connectionTestnet.getTokenAccountsByOwner(
new PublicKey(address),
{
programId: new PublicKey("TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA"),
}
);
return {
content: [
{
type: "text",
text: JSON.stringify(tokens),
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `Error getting tokens: ${error instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);Server Initialization
async function main() {
try {
console.error("Starting MCP server...");
const transport = new StdioServerTransport();
console.error("Transport initialized, connecting to server...");
await server.connect(transport);
console.error("Server connection established successfully");
// The server will keep running in this state
} catch (error) {
console.error("There was an error connecting to the server:", error);
process.exit(1);
}
}
main().catch((err) => {
console.error("There was an error starting the server:", err);
process.exit(1);
});Configuration
Claude Desktop Configuration
To use this MCP server with Claude Desktop, add the following to your claude_desktop_config.json file:
{
"mcpServers": {
"svm-mcp": {
"command": "bun",
"args": ["/path/to/svm-mcp/build/index.js"]
}
}
}Customizing RPC Endpoints
To use different RPC endpoints or connect to a different Solana-compatible blockchain, edit the connection URLs in src/index.ts:
const connectionTestnet = new Connection("YOUR_TESTNET_RPC_URL");
const connectionMainnet = new Connection("YOUR_MAINNET_RPC_URL");Usage with Claude
Once the MCP server is running and connected to Claude, you can use the following commands:
Checking an Address Balance
Can you check the balance of this SOON testnet address: <address>Fetching Recent Transactions
What is the last transaction made by <address> on SOON testnet?Retrieving Token Holdings
What tokens does <address> hold on SOON mainnet?Acknowledgments
Anthropic Claude for the AI capabilities
Model Context Protocol for enabling tool integration
Solana Web3.js for blockchain interaction
SOON Network for the SVM implementation used in this example
Available Tools
6 toolsget-soon-mainnet-account-tokensC
Get the tokens of a address on the Soon mainnet
Inputs: address (required).
get-soon-mainnet-balanceC
Get the balance of a address on the Soon mainnet
Inputs: address (required).
get-soon-mainnet-last-transactionC
Get the last transaction of an address on the Soon mainnet
Inputs: address (required).
get-soon-testnet-account-tokensC
Get the tokens of a address on the Soon testnet
Inputs: address (required).
get-soon-testnet-balanceC
Get the balance of a address on the Soon testnet
Inputs: address (required).
get-soon-testnet-last-transactionB
Get the last transaction of an address on the Soon testnet
Inputs: address (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 6 tools
Each tool has a clearly distinct purpose based on the combination of network (mainnet vs. testnet) and data type (tokens, balance, or last transaction). There is no overlap or ambiguity between tools, as they target specific resources and actions.
All tool names follow a consistent verb_noun pattern with 'get' as the verb, followed by the network and resource (e.g., get-soon-mainnet-account-tokens). The naming is uniform across all tools, using kebab-case consistently without any deviations.
With 6 tools, the server is well-scoped for querying blockchain data on two networks. Each tool earns its place by covering essential data types (tokens, balance, transactions) for both mainnet and testnet, avoiding redundancy or excessive complexity.
The tool set provides comprehensive read operations for blockchain addresses, covering tokens, balance, and last transactions on both mainnet and testnet. A minor gap exists in the lack of write operations (e.g., sending transactions) or broader query capabilities, but the read surface is complete for its apparent domain.
Maintenance
Related MCP Connectors
Hosted MCP server for live Bittensor chain reads and self-custodial on-chain writes.
Hosted Notion MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Provide AI agents and automation tools with contextual access to blockchain data including balance…
Hosted X (Twitter) MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
Related MCP Servers
- AlicenseCqualityDmaintenanceA Model Context Protocol server that provides Claude with comprehensive access to Solana blockchain data via the Helius API, enabling operations like checking wallet balances, retrieving blockchain information, and interacting with tokens and NFTs.3831 npm14MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables Claude AI to interact with the Solana blockchain through a standardized interface, providing tools for transactions, account queries, and wallet management.45 npm167Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that provides onchain tools for Claude AI, allowing it to interact with the Solana blockchain through a standardized interface for operations like managing assets, executing token operations, and retrieving network information.7MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that enables Claude AI to interact with the Solana blockchain, allowing it to execute transactions, query accounts, manage wallets, get price predictions, trade tokens, and access various blockchain data sources.4-