SVM-MCP
一个模型上下文协议服务器,将 Claude AI 与 SOON 和其他基于 SVM 的区块链连接起来,允许用户在 SOON 的测试网和主网上查看账户余额、获取最近的交易以及查看代币持有情况。
README
SVM-MCP: SOON 模型上下文协议服务器
一个模型上下文协议 (MCP) 服务器,集成了 Claude AI 与 SOON 和其他基于 SVM 的区块链。该服务器提供工具,用于检查 SOON 测试网和主网上的账户余额、获取最近的交易以及查看代币持有情况,包括账户余额、交易和代币持有情况。
概述
此 MCP 服务器旨在将 Claude 连接到 SOON 生态系统,使其能够:
- 查询测试网和主网上的钱包余额
- 获取地址的最新交易
- 检查任何账户的代币持有情况
当前的实现使用 SOON 的 RPC 端点,但可以轻松修改以与任何 Solana 兼容的区块链或自定义 SVM 实现一起使用。
特性
- 获取余额: 获取 SOON 测试网或主网上任何地址的本地代币余额
- 获取最新交易: 检索地址的最新交易
- 获取代币账户: 列出地址拥有的所有代币账户
前提条件
- Node.js (v16+)
- NPM 或 Bun 包管理器
- Claude Desktop (用于本地测试)
安装
- 克隆存储库:
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 一起使用,请将以下内容添加到您的 claude_desktop_config.json 文件中:
{
"mcpServers": {
"svm-mcp": {
"command": "bun",
"args": ["/path/to/svm-mcp/build/index.js"]
}
}
}
自定义 RPC 端点
要使用不同的 RPC 端点或连接到不同的 Solana 兼容区块链,请编辑 src/index.ts 中的连接 URL:
const connectionTestnet = new Connection("YOUR_TESTNET_RPC_URL");
const connectionMainnet = new Connection("YOUR_MAINNET_RPC_URL");
与 Claude 一起使用
MCP 服务器运行并连接到 Claude 后,您可以使用以下命令:
检查地址余额
你能检查一下这个 SOON 测试网地址的余额吗:<address>
获取最近的交易
<address> 在 SOON 测试网上进行的最后一笔交易是什么?
检索代币持有情况
<address> 在 SOON 主网上持有哪些代币?
致谢
- Anthropic Claude 提供 AI 功能
- 模型上下文协议 用于启用工具集成
- Solana Web3.js 用于区块链交互
- SOON Network 用于此示例中使用的 SVM 实现
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
mcp-server-qdrant
这个仓库展示了如何为向量搜索引擎 Qdrant 创建一个 MCP (Managed Control Plane) 服务器的示例。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器