一个集成 Claude AI 和 SOON 以及其他基于 SVM 的区块链的模型上下文协议(MCP)服务器。该服务器提供了检查余额、获取最近交易以及查看账户在 SOON 测试网和主网上代币持有情况的工具。
<a href="https://glama.ai/mcp/servers/@rkmonarch/svm-mcp"> <img width="380" height="200" src="https://gips1.baidu.com/it/u=2218340297,1601742570&fm=3081&app=3081&f=PNG?w=760&h=400" alt="SVM-MCP MCP 服务器" /> </a>此 MCP 服务器旨在连接 Claude 和 SOON 生态系统,使其能够:
当前实现使用 SOON 的 RPC 端点,但可以轻松修改以与任何兼容 Solana 的区块链或自定义 SVM 实现一起工作。
git clone https://github.com/rkmonarch/svm-mcp
cd svm-mcp
npm install
# 或
bun install
npm run build
# 或
bun run build
主要服务器实现在 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",
],
});
server.tool(
"get-soon-testnet-balance",
"获取 Soon 测试网上某个地址的余额",
{
address: z.string().describe("要获取余额的 Solana 地址"),
},
async ({ address }) => {
try {
const balance = await connectionTestnet.getBalance(new PublicKey(address));
return {
content: [
{
type: "text",
text: `余额: ${balance}`,
},
],
};
} catch (error) {
return {
content: [
{
type: "text",
text: `获取余额时出错: ${error instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);
server.tool(
"get-soon-testnet-last-transaction",
"获取 Soon 测试网上某个地址的最后一笔交易",
{
address: z
.string()
.describe("要获取最后一笔交易的 Solana 地址"),
},
async ({ address }) => {
try {
// 获取地址的最近交易签名
const signatures = await connectionTestnet.getSignaturesForAddress(
new PublicKey(address),
{ limit: 1 } // 仅限最近的一笔交易
);
if (signatures.length === 0) {
return {
content: [
{
type: "text",
text: "未找到此地址的交易",
},
],
};
}
// 使用其签名获取最近的交易
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 instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);
server.tool(
"get-soon-testnet-account-tokens",
"获取 Soon 测试网上某个地址的代币",
{
address: z.string().describe("要获取代币的 Solana 地址"),
},
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 instanceof Error ? error.message : String(error)}`,
},
],
};
}
}
);
async function main() {
try {
console.error("正在启动 MCP 服务器...");
const transport = new StdioServerTransport();
console.error("传输已初始化,正在连接到服务器...");
await server.connect(transport);
console.error("服务器连接成功建立");
// 服务器将在这种状态下继续运行
} catch (error) {
console.error("连接到服务器时出错:", error);
process.exit(1);
}
}
main().catch((err) => {
console.error("启动服务器时出错:", err);
process.exit(1);
});
要在 Claude Desktop 中使用此 MCP 服务器,请在您的 claude_desktop_config.json 文件中添加以下内容:
{
"mcpServers": {
"svm-mcp": {
"command": "bun",
"args": ["/path/to/svm-mcp/build/index.js"]
}
}
}
要使用不同的 RPC 端点或连接到不同的兼容 Solana 的区块链,请编辑 src/index.ts 中的连接 URL:
const connectionTestnet = new Connection("YOUR_TESTNET_RPC_URL");
const connectionMainnet = new Connection("YOUR_MAINNET_RPC_URL");
一旦 MCP 服务器运行并连接到 Claude,您可以使用以下命令:
你能检查这个 SOON 测试网地址的余额吗:<地址>
<地址> 在 SOON 测试网上做的最后一笔交易是什么?
<地址> 在 SOON 主网上持有哪些代币?