LayerZero OFT MCP 是一个用 TypeScript/Node.js 编写的模型上下文协议(MCP)服务器,用于在多个区块链上创建、部署和桥接 跨链可替代代币(OFT)。交互主要通过 ethers.js 进行管理,利用 LayerZero 合约和协议实现跨链通信。
该 MCP 通过提供一个结构化、上下文感知的层来抽象跨链代币创建和跨链交互的复杂性,用于发起、管理和桥接 OFT。它旨在方便与需要安全可靠地访问去中心化跨链功能的大语言模型(LLM)代理、机器人或应用程序集成。
确定性跨链合约地址
MCP 使用 Solidity 的 CREATE2 操作码在每个链上的相同地址部署 OFT 合约。
该地址由字节码和一个固定的盐派生而来,目前盐中包含 代币名称和符号。部署时请确保使用唯一的标识符,因为不能使用同一个工厂两次创建相同的代币(相同的名称和符号)。
这是一个可行的起点。你可以引入自己的 OFT 合约,并通过自定义功能或代币逻辑对其进行扩展。该系统在设计上是开放且可扩展的。
此 MCP 服务器提供以下交互工具:
deploy-and-configure-oft-multichaintokenName(字符串):代币名称(例如,"MyToken")。tokenSymbol(字符串):代币符号(例如,"MYT")。initialTotalSupply(字符串):以人类可读格式表示的代币总供应量(例如,"1000000")。这将使用 decimals 值进行解析。decimals(数字,可选,默认值:18):代币的小数位数。targetChains(字符串数组):要在其上部署和配置 OFT 的链名称列表(来自 utils.ts 中配置的 NETWORKS,例如,["Arbitrum sepolia", "baseSepolia"])。必须至少选择一个。要实现对等连接,必须指定至少两条链并确保部署成功。owner(字符串,可选):部署合约的以太坊地址。如果未提供,则默认为 .env 文件中设置的 OWNER_ADDRESS。bridge-ofttokenAddress(字符串):源链上 OFT 合约的地址。amount(字符串):要桥接的代币数量(例如,"100")。假设使用 18 位小数进行解析;如有必要,请确保你的代币使用此设置或修改该工具。fromChain(字符串):源链名称(例如,"Arbitrum sepolia")。toChain(字符串):目标链名称(例如,"baseSepolia")。receiverAddress(字符串):目标链上接收代币的地址。extraOptions(字符串,可选,默认值:"0x"):LayerZero 消息执行的额外选项。在运行服务器之前,你必须将这些路径替换为你的合约工件的绝对路径。
// --- index.ts ---
// 将这些路径替换为你的 OFT 合约的实际 ABI 和字节码 JSON 文件路径(例如,来自 MyOFT.sol)
const oftPath = resolve(
"D:\\Dev\\layerzero-mcp\\artifacts\\MyOFT\\MyOFT.json"
);
// 工厂合约同理
// 这应该指向 CREATE2Factory 的 ABI 和字节码 JSON 文件
const factoryPath = resolve(
"D:\\Dev\\layerzero-mcp\\artifacts\\factory\\CREATE2Factory.json"
);
// --- --- ---
如果不这样做,在尝试使用 deploy-and-configure-oft-multichain 工具时将导致错误。bridge-oft 工具也需要正确设置 OFT_ABI 才能与现有合约进行交互。
git clone https://github.com/your-username/layerzero-oft-mcp.git
cd layerzero-oft-mcp
npm install
# 或者
yarn install
.env 文件:
复制 .env.example(如果提供)或在项目根目录中创建一个新的 .env 文件,并使用你的详细信息填充它:PRIVATE_KEY="your_hex_encoded_private_key_here"
OWNER_ADDRESS="your_owner_ethereum_address_here"
ARBITRUM_SEPOLIA_RPC_URL="your_Arbitrum sepolia_testnet_rpc_url_here"
BASE_SEPOLIA_RPC_URL="your_base_sepolia_testnet_rpc_url_here"
ARBITRUM_FACTORY_ADDRESS="0x754a2643Ce68e0e34510B1E246254f93946AE3a1"
BASE_FACTORY_ADDRESS="0x754a2643Ce68e0e34510B1E246254f93946AE3a1"
# 如果你在 utils.ts 中配置了更多网络,请添加其他 RPC URL 环境变量
安全注意事项:切勿将包含私钥的 .env 文件提交到公共仓库。
更新 ABI 和字节码:
如上面“重要提示”部分所述,打开 layerzero-mcp.ts 并将 OFT_ABI 和 OFT_BYTECODE 占位符替换为你的实际合约详细信息。
构建项目(如果使用 TypeScript 编译):
npm run build
# 或者
yarn run build
(此命令假设你的 package.json 中有一个 build 脚本,用于将 TypeScript 编译为 JavaScript,例如,tsc)
将 MCP 配置添加到你的 Claude for Desktop 配置文件中(在 Windows 上通常位于 C:\Users\{User}\AppData\Roaming\Claude\claude_desktop_config.json):
{
"layerzero-oft-mcp": {
"command": "node",
"args": [
"/build/index.js"
],
"env": {
"PRIVATE_KEY": "your_hex_encoded_private_key_here",
"OWNER_ADDRESS": "your_owner_ethereum_address_here",
"ARBITRUM_SEPOLIA_RPC_URL": "your_Arbitrum_sepolia_testnet_rpc_url_here",
"BASE_SEPOLIA_RPC_URL": "your_base_sepolia_testnet_rpc_url_here",
"ARBITRUM_FACTORY_ADDRESS": "0x754a2643Ce68e0e34510B1E246254f93946AE3a1",
"BASE_FACTORY_ADDRESS": "0x754a2643Ce68e0e34510B1E246254f93946AE3a1"
}
}
}
替换为你的项目目录的实际绝对路径。env 变量与你的服务器所需的变量相匹配,或者如果你的 Node.js 设置加载了这些变量(脚本中的 dotenv.config() 调用应该处理这个问题),则确保它们能正确从 .env 文件中获取。对于 Claude Desktop,需要在 claude_desktop_config.json 中显式设置这些变量。遵循官方 MCP 指南,获取有关使用 Claude for Desktop 进行测试的更多详细信息。
配置完成(包括 ABI/字节码和环境变量)后,MCP 服务器将在需要时由主机应用程序(例如,Claude for Desktop)启动。
如果你使用大语言模型,可以使用自然语言提示与它进行交互。例如:
部署并配置新的 OFT:
"在 Arbitrum sepolia 和 Base Sepolia 测试网上部署一个名为 'OmniCoin'(OMC)、总供应量为 500,000 个代币的新 OFT。"
这将使用 deploy-and-configure-oft-multichain 工具。
桥接现有 OFT 代币:
"将 50 个 MyOFT 从 Arbitrum sepolia 桥接到 Base Sepolia 的地址 0x123...abc。该代币部署在 Arbitrum sepolia 的地址 0xabc...123 上。"
这将使用 bridge-oft 工具。
请确保与你的 PRIVATE_KEY 关联的账户在相应链上有足够的 gas 代币(例如,测试网 ETH 或 MATIC),以支付部署和桥接交易费用。