Starknet MCP Server

Integrations

  • Used as a recommended runtime environment for the MCP server, with specific compatibility for Bun 1.0.0 or higher

  • Supports interaction with Starknet on Ethereum's Sepolia testnet, providing integration between Starknet and Ethereum ecosystems

  • Supports Node.js 18.0.0 or higher as an alternative runtime environment for the MCP server

Starknet MCP 服务器

一个适用于 Starknet 区块链的全面模型上下文协议 (MCP) 服务器。该服务器为 AI 代理提供了与 Starknet 网络交互、查询区块链数据、管理钱包以及与智能合约交互的能力。

📋 内容

🔭 概述

Starknet MCP 服务器利用模型上下文协议 (MCP) 为 AI 代理提供区块链服务。它为 Starknet 生态系统提供了全面的接口,使 AI 助手能够通过自然语言与 Starknet 区块链数据和操作进行交互。

主要功能包括:

  • 读取区块链状态(余额、交易、区块)
  • 与 Cairo 智能合约交互
  • 转移代币(ETH、STRK 和其他 ERC20 代币)
  • 使用 NFT 和代币元数据
  • 解析 StarknetID 域名(类似于以太坊的 ENS)
  • 通过适当的事务处理进行读写操作

所有服务均通过 MCP 工具和资源的一致接口公开,方便 AI 代理发现并使用 Starknet 区块链功能。所有接受 Starknet 地址的工具也支持 StarknetID ,可在后台自动将人类可读的身份解析为地址。

✨ 特点

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

区块链信息

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

原生代币操作

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

代币操作

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

NFT 操作

  • 通过代币 ID 检查 NFT 所有权
  • 获取NFT收藏信息
  • 查看地址的 NFT 余额

智能合约交互

  • 调用只读合约函数
  • 通过交易确认执行合约写入
  • 获取合约存储信息
  • 查看 ABI 和合约类信息

StarknetID

  • 将 Starknet 地址解析为 Starknet ID
  • 将 Starknet ID 解析为地址
  • 获取带有验证数据的完整 Starknet ID 资料
  • 验证 Starknet 域名

🔧 支持的网络

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

  • 主网:Starknet 的主要生产网络
  • Sepolia :Starknet 在以太坊 Sepolia 上的测试网

🛠️ 先决条件

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

📦安装

选项 1:无需安装即可使用(npx)

最简单的入门方法是使用npx直接运行包:

# Run the stdio server without installation npx @mcpdotdirect/starknet-mcp-server # Run the HTTP server without installation npx @mcpdotdirect/starknet-mcp-server http

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

选项 2:全局安装

如果您打算经常使用它,您可以全局安装它:

# Install globally npm install -g @mcpdotdirect/starknet-mcp-server # Then run from anywhere starknet-mcp-server starknet-mcp-server http

选项 3:本地项目安装

# Add to your project npm install @mcpdotdirect/starknet-mcp-server # Using yarn yarn add @mcpdotdirect/starknet-mcp-server # Using pnpm pnpm add @mcpdotdirect/starknet-mcp-server

然后添加到你的 package.json 脚本:

"scripts": { "starknet-mcp": "starknet-mcp-server", "starknet-mcp-http": "starknet-mcp-server http" }

选项 4:从源代码运行

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

# Clone the repository git clone https://github.com/mcpdotdirect/starknet-mcp-server.git cd starknet-mcp-server # Install dependencies npm install # Start the stdio server npm start # Or start the HTTP server npm run start:http

对于自动重新加载的开发:

# Development mode with stdio npm run dev # Development mode with HTTP npm run dev:http

⚙️ 服务器配置

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

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

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

  • 网络配置: src/core/chains.ts
  • 对于服务器配置: src/server/http-server.ts

🔍 使用方法

运行服务器

您可以以两种模式运行 Starknet MCP 服务器:

# Run the server in stdio mode (for CLI tools and AI assistants) npx @mcpdotdirect/starknet-mcp-server # Run the server in HTTP mode (for web applications) npx @mcpdotdirect/starknet-mcp-server http

HTTP 服务器默认在端口 3000 上运行,并提供 REST API 和服务器发送事件 (SSE) 以进行实时通信。

从光标连接

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

  1. 打开 Cursor 并转到“设置”(左下角的齿轮图标)
  2. 点击左侧边栏中的“功能”
  3. 向下滚动到“MCP 服务器”部分
  4. 点击“添加新的 MCP 服务器”
  5. 输入以下详细信息:
    • 服务器名称: starknet-mcp-server
    • 类型: command
    • 命令: 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 服务器配置。

带 SSE 的 HTTP 模式

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

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

使用 Claude CLI 进行连接

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

# Add the MCP server using npx claude mcp add starknet-mcp-server npx @mcpdotdirect/starknet-mcp-server # Start Claude with the MCP server enabled claude

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

配置完 MCP 服务器后,您就可以在 Cursor 中轻松使用它了。例如:

  1. 在您的项目中创建一个新的 JavaScript/TypeScript 文件:
// starknet-example.js async function main() { try { // When using with Cursor, you can simply ask Cursor to: // "Check the ETH balance of address 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7 on Starknet mainnet" // Or "Lookup the Starknet ID for address 0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7" // Cursor will use the MCP server to execute these operations // without requiring any additional code from you } catch (error) { console.error("Error:", error.message); } } main();
  1. 在 Cursor 中打开文件后,您可以要求 Cursor 执行以下操作:
    • “检查 vitalik.stark 的 ETH 余额”
    • “获取有关 Starknet 上最新区块的信息”
    • “在收藏 0x 中查找 NFT #123 的所有者...”

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

// Example of using the MCP client to check an ETH balance using Starknet ID const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("get_starknet_eth_balance", { address: "vitalik.stark", // Starknet ID instead of address network: "mainnet" }); console.log(result); // { // wei: "1000000000000000000", // ether: "1.0" // }

示例:解析 Starknet ID

// Example of using the MCP client to resolve a Starknet ID to an address 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 // }

示例:调用智能合约

// Example of using the MCP client to call a smart contract function const mcp = new McpClient("http://localhost:3000"); const result = await mcp.invokeTool("call_starknet_contract", { contractAddress: "0x049d36570d4e46f48e99674bd3fcc84644ddd6b96f7c741b1562b82f9e004dc7", // ETH contract entrypoint: "totalSupply", calldata: [], network: "mainnet" }); console.log(result); // { // result: ["0x84b6c7d5970d5a73abe"] // }

在 Node.js 项目中使用

如果您想在 Node.js 项目中以编程方式使用 MCP 服务器:

// Start the MCP server as a child process const { spawn } = require('child_process'); const mcpServer = spawn('npx', ['@mcpdotdirect/starknet-mcp-server']); // Connect to it with the MCP client const mcp = new McpClient({ process: mcpServer }); // Now you can use the client const networks = await mcp.invokeTool("get_supported_starknet_networks", { random_string: "any" }); console.log("Supported networks:", 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 :获取地址的 Starknet ID
  • resolve_starknet_address :获取 Starknet ID 的地址
  • get_starknet_profile :获取地址的完整 Starknet ID 配置文件
  • validate_starknet_domain :检查字符串是否为有效的 Starknet ID

块工具

  • 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} :将地址解析为 Starknet ID
  • starknet://{network}/id/name/{name} :将 Starknet ID 解析为地址
  • starknet://{network}/id/profile/{address} :获取地址的 Starknet ID 配置文件

可用的 MCP 提示

对于 LLM 交互,服务器提供以下提示:

  • explore_starknet_block :探索有关特定 Starknet 区块的信息
  • explore_starknet_address :获取有关 Starknet 地址的信息
  • explore_starknet_transaction :获取有关 Starknet 交易的信息
  • lookup_starknet_id :查找 Starknet ID 或将地址解析为 Starknet ID
  • explore_starknet_id_profile :探索完整的 Starknet ID 配置文件

🔍 与 AI 助手一起使用

当将此服务器与 Claude 或 GPT 等 AI 助手一起使用时:

  1. 配置您的 AI 助手以使用此 MCP 服务器
  2. 然后,助手可以使用工具与 Starknet 进行交互
  3. 示例查询:
    • “地址 0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5d 的 ETH 余额是多少?”
    • “查找地址 0x04d07e40e93398ed3c76981e449d3446f7c4e52aac5b3e8a37d7b0ca30845a5d 的 Starknet ID”
    • “Starknet 主网的最新区块是什么?”
    • “获取有关交易 0x7e3a33ab42f2e24184763563b7b8482b53e3b89831ebc3eacf29d4d11f5198 的信息”
    • “将 Starknet ID vitalik.stark 解析为一个地址”

🔒 安全注意事项

  • 私钥仅用于交易签名,服务器永远不会存储
  • 所有代币数量均以人类可读的格式(例如 ETH、STRK、代币单位)指定,而不是以 wei 或最小单位指定
  • 在执行操作之前始终验证并清理输入参数
  • 考虑实施额外的身份验证机制以供生产使用
  • 在生产环境中使用 HTTPS 作为 HTTP 服务器
  • 实施速率限制以防止滥用
  • 对于高价值服务,考虑添加确认步骤

📁 项目结构

starknet-mcp-server/ ├── src/ │ ├── index.ts # Main stdio server entry point │ ├── server/ # Server-related files │ │ ├── http-server.ts # HTTP server with SSE │ │ └── server.ts # General server setup │ ├── core/ │ │ ├── chains.ts # Chain definitions and utilities │ │ ├── resources.ts # MCP resources implementation │ │ ├── tools.ts # MCP tools implementation │ │ ├── prompts.ts # MCP prompts implementation │ │ └── services/ # Core blockchain services │ │ ├── index.ts # Service exports │ │ ├── balance.ts # Balance services │ │ ├── blocks.ts # Block services │ │ ├── clients.ts # Client utilities │ │ ├── contracts.ts # Contract interactions │ │ ├── starknetid.ts # Starknet ID services │ │ ├── tokens.ts # Token services │ │ ├── transactions.ts # Transaction services │ │ ├── transfer.ts # Transfer services │ │ └── utils.ts # Utility functions ├── package.json ├── tsconfig.json └── README.md

🛠️ 开发约定

添加自定义工具、资源或提示时:

  1. 在所有资源、工具和提示名称中使用下划线 ( _ ) 代替连字符 ( - )
    // Good: Uses underscores server.tool( "starknet_contract_call", "Description of the tool", { contract_address: z.string().describe("The contract address") }, async (params) => { // Tool implementation } );
  2. 此命名约定确保与 Cursor 和其他 AI 工具的兼容性

📚 文档

更多信息请见:

📄 许可证

该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅LICENSE文件。

ID: 7j8b8yomn6