一个全面的用于Starknet区块链的模型上下文协议(MCP)服务器。此服务器提供给AI代理与Starknet网络交互的能力,查询区块链数据,管理钱包,并与智能合约进行交互。
<a href="https://glama.ai/mcp/servers/@mcpdotdirect/starknet-mcp-server"> <img width="380" height="200" src="https://gips0.baidu.com/it/u=3753512634,1484523236&fm=3081&app=32&f=PNG?w=760&h=400" alt="Starknet Server MCP server" /> </a>Starknet MCP Server利用模型上下文协议为AI代理提供区块链服务。它提供了与Starknet生态系统全面交互的接口,使AI助手能够通过自然语言与Starknet区块链数据和操作进行交互。
主要功能包括:
所有服务都通过一致的MCP工具和资源接口暴露出来,使得AI代理可以轻松发现并使用Starknet区块链功能。每个接受Starknet地址的工具也支持StarknetID,自动解析人类可读的身份到地址。
该服务器支持以下Starknet网络:
要通过Smithery自动安装starknet-mcp-server供Claude Desktop使用:
npx -y @smithery/cli install @mcpdotdirect/starknet-mcp-server --client claude
最简单的开始方式是使用npx直接运行包:
# 无需安装运行stdio服务器
npx @mcpdotdirect/starknet-mcp-server
# 无需安装运行HTTP服务器
npx @mcpdotdirect/starknet-mcp-server http
这将自动下载并运行最新版本,无需事先安装。
如果你打算频繁使用它,可以全局安装:
# 全局安装
npm install -g @mcpdotdirect/starknet-mcp-server
# 然后从任何地方运行
starknet-mcp-server
starknet-mcp-server http
# 添加到你的项目
npm install @mcpdotdirect/starknet-mcp-server
# 使用yarn
yarn add @mcpdotdirect/starknet-mcp-server
# 使用pnpm
pnpm add @mcpdotdirect/starknet-mcp-server
然后添加到你的package.json脚本中:
"scripts": {
"starknet-mcp": "starknet-mcp-server",
"starknet-mcp-http": "starknet-mcp-server http"
}
如果你想从源代码运行或本地开发:
# 克隆仓库
git clone https://github.com/mcpdotdirect/starknet-mcp-server.git
cd starknet-mcp-server
# 安装依赖
npm install
# 启动stdio服务器
npm start
# 或启动HTTP服务器
npm run start:http
对于具有自动重载的开发模式:
# 开发模式,使用stdio
npm run dev
# 开发模式,使用HTTP
npm run dev:http
服务器使用以下默认配置:
这些值在应用程序中是硬编码的。如果需要修改它们,可以编辑以下文件:
src/core/chains.tssrc/server/http-server.ts你可以以两种模式运行Starknet MCP Server:
# 以stdio模式运行服务器(适用于CLI工具和AI助手)
npx @mcpdotdirect/starknet-mcp-server
# 以HTTP模式运行服务器(适用于Web应用)
npx @mcpdotdirect/starknet-mcp-server http
HTTP服务器默认运行在3000端口,并提供REST API和服务器发送事件(SSE)以实现实时通信。
要从Cursor连接到Starknet MCP服务器:
打开Cursor并转到设置(左下角的齿轮图标)
单击左侧边栏中的“功能”
向下滚动到“MCP服务器”部分
单击“添加新MCP服务器”
输入以下详细信息:
starknet-mcp-server命令npx @mcpdotdirect/starknet-mcp-server单击“保存”
一旦连接,你就可以直接在Cursor中使用MCP服务器的功能。服务器将出现在MCP服务器列表中,并可根据需要启用或禁用。
为了创建一个可以在团队中共享或跨项目使用的更便携的配置,你可以在项目的根目录中创建一个.cursor/mcp.json文件:
{
"mcpServers": {
"starknet-mcp-server": {
"command": "npx",
"args": [
"@mcpdotdirect/starknet-mcp-server"
]
},
"starknet-mcp-http": {
"command": "npx",
"args": [
"@mcpdotdirect/starknet-mcp-server",
"http"
]
}
}
}
将此文件放置在项目的.cursor目录中(如果不存在,请创建),Cursor将在该项目中自动检测并使用这些MCP服务器配置。
如果你正在开发一个Web应用并希望使用服务器发送事件(SSE)连接到HTTP服务器,可以使用以下配置:
{
"mcpServers": {
"starknet-mcp-sse": {
"url": "http://localhost:3000/sse"
}
}
}
如果你正在使用Claude CLI,只需两个命令即可连接到MCP服务器:
# 使用npx添加MCP服务器
claude mcp add starknet-mcp-server npx @mcpdotdirect/starknet-mcp-server
# 启动Claude并启用MCP服务器
claude
配置好MCP服务器后,你可以在Cursor中轻松使用它。例如:
// starknet-example.js
async function main() {
try {
// 当与Cursor一起使用时,你可以简单地让Cursor执行:
// "检查Starknet主网上地址0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7的ETH余额"
// 或 "查找地址0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7的Starknet ID"
// Cursor将使用MCP服务器执行这些操作
// 不需要额外的代码
} catch (error) {
console.error("错误:", error.message);
}
}
main();
// 使用MCP客户端检查使用Starknet ID的ETH余额示例
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("get_starknet_eth_balance", {
address: "vitalik.stark", // 使用Starknet ID而不是地址
network: "mainnet"
});
console.log(result);
// {
// wei: "1000000000000000000",
// ether: "1.0"
// }
// 使用MCP客户端解析Starknet ID到地址的示例
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("resolve_starknet_address", {
name: "vitalik.stark",
network: "mainnet"
});
console.log(result);
// {
// starknetId: "vitalik.stark",
// address: "0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5d",
// resolved: true
// }
// 使用MCP客户端调用智能合约函数的示例
const mcp = new McpClient("http://localhost:3000");
const result = await mcp.invokeTool("call_starknet_contract", {
contractAddress: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", // ETH合约
entrypoint: "totalSupply",
calldata: [],
network: "mainnet"
});
console.log(result);
// {
// result: ["0x84b6c7d5970d5a73abe"]
// }
如果你想在Node.js项目中编程使用MCP服务器:
// 作为子进程启动MCP服务器
const { spawn } = require('child_process');
const mcpServer = spawn('npx', ['@mcpdotdirect/starknet-mcp-server']);
// 使用MCP客户端连接到它
const mcp = new McpClient({ process: mcpServer });
// 现在你可以使用客户端
const networks = await mcp.invokeTool("get_supported_starknet_networks", {
random_string: "any"
});
console.log("支持的网络:", networks);
对于更高级的使用,你可以围绕HTTP API创建一个包装类,或者使用Axios等库进行更干净的API调用。
此服务器实现了以下MCP工具:
get_starknet_chain_info:获取有关Starknet网络的信息get_supported_starknet_networks:获取支持的Starknet网络列表get_starknet_eth_balance:获取Starknet地址或Starknet ID的ETH余额get_starknet_token_balance:获取地址的任何代币余额get_starknet_strk_balance:获取地址的STRK代币余额get_starknet_native_balances:获取地址的所有原生代币余额(ETH和STRK)resolve_starknet_name:获取地址的StarknetIDresolve_starknet_address:获取StarknetID的地址get_starknet_profile:获取地址的完整StarknetID个人资料validate_starknet_domain:检查字符串是否为有效的StarknetIDget_starknet_block:获取特定区块的信息get_starknet_block_transactions:获取特定区块中的交易get_starknet_transaction:获取交易的详细信息get_starknet_transaction_receipt:获取交易收据check_starknet_transaction_status:检查交易是否已确认call_starknet_contract:调用合约的只读函数get_starknet_contract_class:获取合约的类(ABI和其他信息)execute_starknet_contract:执行合约调用(写操作)get_starknet_token_info:获取代币的信息get_starknet_token_supply:获取代币的总供应量check_starknet_nft_ownership:检查地址是否拥有特定的NFTget_starknet_nft_balance:获取地址拥有的NFT数量transfer_starknet_eth:在账户之间转移ETH(金额以人类可读格式表示)transfer_starknet_strk:在账户之间转移STRK(金额以人类可读格式表示)transfer_starknet_token:在账户之间转移ERC20代币(金额以人类可读格式表示)服务器提供了以下MCP资源:
starknet://{network}/chain:获取特定网络的链信息starknet://networks:获取所有支持的网络列表starknet://{network}/block/{blockIdentifier}:获取特定区块的信息starknet://{network}/block/latest:获取最新区块starknet://{network}/address/{address}:获取地址的信息starknet://{network}/tx/{txHash}:获取交易信息starknet://{network}/id/address/{address}:将地址解析为StarknetID