使用说明
NEAR协议全功能MCP服务器
该项目实现了一个模型上下文协议(MCP)服务器,用于与NEAR协议区块链进行交互。它允许通过MCP客户端(如Claude Desktop)连接的大型语言模型(LLM)查询区块链数据,并使用预配置的NEAR帐户执行交易。
⚠️ 安全警告: 此服务器使用存储在环境变量中的助记符种子短语(MNEMONIC)以导出用于签名交易的私钥。这种方法是 对生产环境不安全。仅将此服务器用于本地开发和测试,使用不具有重大价值的帐户。对于生产,实施更安全的密钥管理解决方案(例如KMS、HSM、专用密钥管理器)。
✨ 特性
此服务器将以下功能作为MCP工具公开:
get_account_balance:检索指定帐户(或服务器帐户,如果未指定)的总余额、质押余额、状态质押余额和可用余额。view_account_state:查看存储在指定合约帐户(或服务器帐户,如果未指定)中的原始键值状态。支持可选的base64编码密钥前缀过滤。get_account_details:获取指定NEAR帐户(或服务器帐户,如果未指定)的详细信息,包括余额和存储使用情况。create_sub_account:在服务器帐户下创建新的子帐户。需要指定后缀、公钥和初始余额。delete_account:删除服务器的帐户,并将剩余余额转账给受益人。 不可逆转的行动!send_tokens:将NEAR令牌从服务器帐户转移到另一个帐户。call_function:对指定的智能合约(或未指定的服务器帐户)执行更改方法(函数调用),必要时附加gas和deposit。batch_actions:在针对特定接收者(或服务器帐户,如果省略)的单个事务中原子地执行多个操作。deploy_contract:将WASM智能合约部署到服务器的配置帐户。需要base64编码的WASM字节码。view_function:对指定的合约(或未指定的服务器帐户)调用仅查看函数。不会改变状态或消耗大量天然气。get_access_keys:列出与服务器配置的帐户关联的所有访问密钥(公钥、权限、随机数)。add_full_access_key:向服务器帐户添加具有完全访问权限的新密钥。add_function_call_key:向服务器帐户添加一个具有有限函数调用权限(特定合约、方法、权限)的新密钥。delete_access_key:从服务器帐户中删除现有的访问密钥。verify_signature:验证消息签名是否对给定的公钥有效。
🚀 先决条件
- Node.js: 版本16或更高。 (下载)
- npm (通常随Node.js一起提供)
- NEAR账户(可选): 您可以使用现有的NEAR帐户(例如
testnet或mainnet)及其 12或24个单词的助记符种子短语如果不存在帐户,服务器将使用从种子短语派生的隐式帐户。 - NEAR网络: 了解
networkId您想连接到(testnet,mainnet). - (可选)MCP客户端: 可以连接到MCP服务器的应用程序,例如 Claude桌面版.
🛠️ 安装和设置
npm install near-mcp-server
-
配置环境变量: 创建一个
.env项目根目录中的文件。 重要提示: 添加.env到你的.gitignore文件,以避免意外提交您的秘密种子短语!# .env # Replace with your actual 12 or 24 word seed phrase (no quotes) MNEMONIC="word1 word2 word3 word4 word5 word6 word7 word8 word9 word10 word11 word12" # Set to 'testnet' or 'mainnet' NEAR_NETWORK_ID="testnet" # Optional: Specify a different RPC node URL if needed # NEAR_NODE_URL="https://rpc.testnet.near.org" -
构建服务器: 将TypeScript代码编译为JavaScript。
npm run build这创建了一个
build已编译的目录index.js文件并使其可执行。
🏃 运行服务器
您可以通过多种方式运行服务器:
-
使用npm start:
npm start -
直接使用Node:
node build/index.js -
使用二进制名称(如果全局链接或安装):
near-mcp-server-full
初始化成功后,服务器将把连接详细信息记录到stderr:
Connected to NEAR <networkId> as <accountId>
NEAR MCP Server running on stdio...
在将服务器与客户端一起使用时,保持终端运行。服务器的日志和错误将显示在此终端中(stderr)。
🔑 默认帐户行为
此服务器实现通过以下方式处理帐户ID:
-
当账户ID被明确地提供给工具功能时(例如。,
get_account_balance({ accountId: "example.near" })),将使用该特定帐户。 -
当没有提供帐户ID时,服务器将使用自己的帐户(从MNEMONIC派生的帐户)。
-
如果服务器没有已建立的帐户ID(例如,当为链上尚不存在的帐户使用种子短语时),它将转而使用从种子短语的公钥导出的隐式帐户ID。
这种行为允许工具与明确指定的帐户和服务器自己的帐户无缝协作,提供更好的用户体验。
🔌 连接到客户端(示例:Claude Desktop)
-
查找克劳德配置: 找到Claude Desktop配置文件:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - 窗户:
%APPDATA%\Claude\claude_desktop_config.json(如果文件不存在,则创建该文件)。
- macOS:
-
编辑配置: 在以下位置为此服务器添加条目
mcpServers. 使用绝对路径 到编译build/index.js项目目录中的文件。{ "mcpServers": { "near-protocol-server": { "command": "node", "args": [ "/path/to/your/project/near-mcp-server/build/index.js" ] "env": { "MNEMONIC": "...", "NEAR_NETWORK_ID": "testnet" } } } } -
重新启动Claude: 保存配置文件并完全重新启动Claude Desktop应用程序。
-
验证连接: 在聊天输入区域中查找锤子图标。单击它应该列出此服务器中定义的NEAR工具。
💬 使用示例(使用Claude Desktop)
连接后,您可以要求Claude使用NEAR工具:
What's the balance of my account?(使用服务器帐户)What's the balance of vitalik.near?(指定帐户)Get the account details for vitalik.nearView the state for contract guest-book.testnetSend 0.1 NEAR from my account to friend.testnetCall the 'add_message' function on 'guest-book.testnet' with arguments {"text": "Hello from MCP!"}Call the 'set_greeting' function on my contract with arguments {"message": "Hello"}Deploy this contract (provide base64 WASM) to my accountCreate a subaccount 'mysub' under my account with public key 'ed25519:...' and fund it with 0.5 NEARShow me all access keys for my accountAdd a full access key 'ed25519:...' to my accountDelete the access key 'ed25519:...' from my accountDelete my account and send the funds to 'beneficiary.testnet'(请务必谨慎使用!)Verify the message "test message" against signature "base64..." using public key "ed25519:..."Execute these actions in a batch for my account: transfer 0.1 NEAR to bob.testnet, then call method 'increase' on counter.testnet
Claude将确定适当的工具,并在执行任何修改状态或花费资金的交易之前要求您确认。
🔒 安全考虑
- 私钥(助记): 将种子短语存储在
.env是 不安全的 除了本地测试之外的任何东西。不要对持有实际价值的账户使用这种方法。探索硬件钱包、安全飞地解决方案或生产用例的KMS。确保您的.env文件在.gitignore. - 隐式帐户: 如果请求中没有明确指定帐户ID,服务器将使用自己的帐户ID。如果服务器没有现有的帐户ID,它将使用从种子短语派生的隐式帐户。
- 工具权限: 此服务器为连接的LLM客户端提供强大的功能。注意你将其连接到哪些客户端,尤其是像这样的工具
delete_account,add_full_access_key,以及deploy_contract. - 输入消毒: 虽然Zod提供基本的类型验证,但请确保在敏感操作中使用的任何用户/LLM提供的输入(如合约调用或文件路径,如果扩展的话)都经过了适当的清理。
- 速率限制: 对于生产服务器,考虑添加速率限制以防止滥用。
🧪 发展
# Build the TypeScript code
npm run build
# Check TypeScript errors
npm run check-index
# Run in development mode (build + start)
npm run dev
🔧 故障排除
- 服务器未启动: 检查您运行的终端中的错误
npm start.确保中的所有环境变量.env设置正确。确保已安装Node.js v16+。 - 未出现在客户端(克劳德):
- 仔细检查
claude_desktop_config.json语法。 - 验证 绝对路径 向
build/index.js是正确的。 - 完全重新启动克劳德桌面。
- 检查克劳德的MCP日志。
- 仔细检查
- 工具错误: 检查服务器的终端输出(stderr)是否有来自的特定错误消息
near-api-js或NEAR网络。常见问题包括余额不足、帐户ID不正确或网络问题。
🤝 贡献
欢迎投稿!如果您有建议或改进,请打开问题或提交拉取请求。