返回市场
斯塔克网-MCP服务器

斯塔克网-MCP服务器

作者:mcpdotdirect5 星标更新:2025-05-24

项目介绍

Starknet MCP Server

smithery badge License: MIT TypeScript MCP Starknet.js

一个全面的用于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区块链数据和操作进行交互。

主要功能包括:

  • 读取区块链状态(余额、交易、区块)
  • 与Cairo智能合约交互
  • 转移代币(ETH、STRK和其他ERC20代币)
  • 处理NFT和代币元数据
  • 解析StarknetID域名(类似于Ethereum的ENS)
  • 执行读写操作并正确处理事务

所有服务都通过一致的MCP工具和资源接口暴露出来,使得AI代理可以轻松发现并使用Starknet区块链功能。每个接受Starknet地址的工具也支持StarknetID,自动解析人类可读的身份到地址。

✨ 特性

  • Starknet集成:使用Starknet.js实现完整的Starknet区块链集成
  • 网络支持:支持主网和Sepolia测试网
  • StarknetID集成:解析StarknetID到地址以及反之
  • 原生代币支持:支持ETH和STRK原生代币
  • 智能合约交互:调用和查询Starknet智能合约
  • 双传输:作为stdio服务器或HTTP服务器运行以满足不同的集成需求
  • AI准备:设计用于与Claude、GPT和其他AI助手一起使用

区块链信息

  • 查询链信息(链ID、最新区块)
  • 探索区块详情和交易
  • 查看交易收据和状态
  • 获取地址信息和合约数据

原生代币操作

  • 获取任何地址的ETH和STRK余额
  • 在账户之间转移ETH和STRK
  • 查看合并的原生代币余额

代币操作

  • 获取ERC20代币余额和信息
  • 转移ERC20代币
  • 查看代币供应量和元数据
  • 检查代币所有权

NFT操作

  • 根据代币ID检查NFT所有权
  • 获取NFT集合信息
  • 查看地址的NFT余额

智能合约交互

  • 调用只读合约函数
  • 执行带有事务确认的合约写入
  • 获取合约存储信息
  • 查看ABIs和合约类信息

StarknetID

  • 将Starknet地址解析为StarknetID
  • 将StarknetID解析为地址
  • 获取包含验证数据的完整StarknetID个人资料
  • 验证Starknet域

🔧 支持的网络

该服务器支持以下Starknet网络:

  • 主网:主要的Starknet生产网络
  • Sepolia:在Ethereum的Sepolia上的Starknet测试网

🛠️ 先决条件

  • Bun 1.0.0或更高版本(推荐)
  • Node.js 18.0.0或更高版本

📦 安装

通过Smithery安装

要通过Smithery自动安装starknet-mcp-server供Claude Desktop使用:

npx -y @smithery/cli install @mcpdotdirect/starknet-mcp-server --client claude

方案1:无需安装使用(npx)

最简单的开始方式是使用npx直接运行包:

# 无需安装运行stdio服务器
npx @mcpdotdirect/starknet-mcp-server

# 无需安装运行HTTP服务器
npx @mcpdotdirect/starknet-mcp-server http

这将自动下载并运行最新版本,无需事先安装。

方案2:全局安装

如果你打算频繁使用它,可以全局安装:

# 全局安装
npm install -g @mcpdotdirect/starknet-mcp-server

# 然后从任何地方运行
starknet-mcp-server
starknet-mcp-server http

方案3:本地项目安装

# 添加到你的项目
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"
}

方案4:从源代码运行

如果你想从源代码运行或本地开发:

# 克隆仓库
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

⚙️ 服务器配置

服务器使用以下默认配置:

  • 默认网络:主网
  • 服务器端口:3000(HTTP模式)
  • 服务器主机:0.0.0.0(可以从任何网络接口访问)

这些值在应用程序中是硬编码的。如果需要修改它们,可以编辑以下文件:

  • 对于网络配置:src/core/chains.ts
  • 对于服务器配置:src/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连接

要从Cursor连接到Starknet MCP服务器:

  1. 打开Cursor并转到设置(左下角的齿轮图标)

  2. 单击左侧边栏中的“功能”

  3. 向下滚动到“MCP服务器”部分

  4. 单击“添加新MCP服务器”

  5. 输入以下详细信息:

    • 服务器名称:starknet-mcp-server
    • 类型:命令
    • 命令:npx @mcpdotdirect/starknet-mcp-server
  6. 单击“保存”

一旦连接,你就可以直接在Cursor中使用MCP服务器的功能。服务器将出现在MCP服务器列表中,并可根据需要启用或禁用。

使用mcp.json与Cursor

为了创建一个可以在团队中共享或跨项目使用的更便携的配置,你可以在项目的根目录中创建一个.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服务器配置。

HTTP模式与SSE

如果你正在开发一个Web应用并希望使用服务器发送事件(SSE)连接到HTTP服务器,可以使用以下配置:

{
  "mcpServers": {
    "starknet-mcp-sse": {
      "url": "http://localhost:3000/sse"
    }
  }
}

使用Claude CLI连接

如果你正在使用Claude CLI,只需两个命令即可连接到MCP服务器:

# 使用npx添加MCP服务器
claude mcp add starknet-mcp-server npx @mcpdotdirect/starknet-mcp-server

# 启动Claude并启用MCP服务器
claude

示例:在Cursor中使用MCP服务器

配置好MCP服务器后,你可以在Cursor中轻松使用它。例如:

  1. 在项目中创建一个新的JavaScript/TypeScript文件:
// starknet-example.js
async function main() {
  try {
    // 当与Cursor一起使用时,你可以简单地让Cursor执行:
    // "检查Starknet主网上地址0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7的ETH余额"
    // 或 "查找地址0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7的Starknet ID"
    
    // Cursor将使用MCP服务器执行这些操作
    // 不需要额外的代码
  } catch (error) {
    console.error("错误:", error.message);
  }
}

main();
  1. 在Cursor中打开文件,你可以请求Cursor:
    • "检查vitalik.stark的ETH余额"
    • "获取Starknet上最新区块的信息"
    • "查找集合0x...中的NFT #123的所有者"

示例:使用Starknet ID获取ETH余额

// 使用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"
// }

示例:解析Starknet ID

// 使用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项目中使用

如果你想在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调用。

📚 API 参考

可用的MCP工具

此服务器实现了以下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)

StarknetID工具

  • resolve_starknet_name:获取地址的StarknetID
  • resolve_starknet_address:获取StarknetID的地址
  • get_starknet_profile:获取地址的完整StarknetID个人资料
  • validate_starknet_domain:检查字符串是否为有效的StarknetID

区块工具

  • get_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:检查地址是否拥有特定的NFT
  • get_starknet_nft_balance:获取地址拥有的NFT数量

转移工具

  • transfer_starknet_eth:在账户之间转移ETH(金额以人类可读格式表示)
  • transfer_starknet_strk:在账户之间转移STRK(金额以人类可读格式表示)
  • transfer_starknet_token:在账户之间转移ERC20代币(金额以人类可读格式表示)

可用的MCP资源

服务器提供了以下MCP资源:

网络资源

  • starknet://{network}/chain:获取特定网络的链信息
  • starknet://networks:获取所有支持的网络列表

区块资源

  • starknet://{network}/block/{blockIdentifier}:获取特定区块的信息
  • starknet://{network}/block/latest:获取最新区块

地址资源

  • starknet://{network}/address/{address}:获取地址的信息

交易资源

  • starknet://{network}/tx/{txHash}:获取交易信息

StarknetID资源

  • starknet://{network}/id/address/{address}:将地址解析为StarknetID
  • `starknet://{network}/