利用 Slither-MCP 提升 Solidity LLM 工具链
我们发布了 Slither-MCP,这是一款新工具,它通过 Slither 无与伦比的静态分析引擎来增强大型语言模型(LLM)。Slither-MCP 通过工具暴露 Slither 的静态分析 API,允许 LLM 更快地查找关键代码、更高效地浏览代码库,并最终提升智能合约编写和审计的性能,几乎对 LLM 的所有用例都有益处。
Slither-MCP 如何工作
Slither-MCP 是一个 MCP(模型上下文协议)服务器,它封装了 Slither 的静态分析功能,使其可以通过 MCP 访问。它可以分析 Solidity 项目(如 Foundry、Hardhat 等),并生成关于合约、函数、继承层次结构等的全面元数据。
当 LLM 使用 Slither-MCP 时,它不再需要依赖像 grep 和 read_file 这样的基础工具来识别特定函数在何处实现、谁是函数的调用者以及其他复杂且容易出错的任务。
因为 LLM 是概率性系统,在大多数情况下,它们只是概率上正确。Slither-MCP 利用传统的静态分析为基于 LLM 的分析设定了一个基准事实:它减少了令牌使用量,并增加了提示得到正确回答的概率。
示例:简化审计任务
考虑一个包含两个 ERC20 合约的项目:一个用于生产部署,另一个用于测试。LLM 的任务是审计合约对 ERC20.transfer() 的使用,并需要定位该函数的源代码。
在没有 Slither-MCP 的情况下,LLM 有两个选择:
- 尝试解析 ERC20 合约的导入路径,然后尝试调用
read_file来查看ERC20.transfer()的源代码。此选项通常需要多次调用read_file,特别是当对ERC20.transfer()的调用是通过从 ERC20 继承的子合约进行的时。无论如何,此选项容易出错且工具调用密集。 - 尝试使用
grep工具来定位ERC20.transfer()的实现。根据grep工具调用的结构方式,它可能会返回错误的 ERC20 合约。
这两个选项都不理想,容易出错,并且不太可能以高置信区间保证正确性。
使用 Slither-MCP,LLM 只需调用 get_function_source 来定位函数的源代码。
简单设置
Slither-MCP 易于设置,可以使用以下命令将其添加到 Claude Code:
|
|
通过将以下内容添加到您的 ~/.cursor/mcp.json 文件中,也很容易将 Slither-MCP 添加到 Cursor:
- 运行
sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx - 然后使用此配置:
|
|
目前,Slither-MCP 暴露了 Slither 分析引擎的一个子集,我们认为 LLM 消费这些功能会获益最大。这包括以下功能:
- 提取给定合约或函数的源代码进行分析
- 识别函数的调用者和被调用者
- 识别合约的派生成员和继承成员
- 根据签名定位函数的潜在实现(例如,为
IOracle.price(...)寻找具体定义) - 运行 Slither 全面的检测器套件并过滤结果
如果您对新 MCP 工具有请求或建议,我们很乐意听取您的意见。
许可
Slither-MCP 采用 AGPLv3 许可,与 Slither 使用的许可证相同。如果您在 Web 服务或 SaaS 产品中使用它,该许可证要求您发布应用程序的完整源代码。对于许多工具来说,这是不可接受的妥协。
为了帮助解决这个问题,我们现在为 Slither 和 Slither-MCP 提供双重许可。通过提供双重许可,Slither 和 Slither-MCP 可以用于支持基于 LLM 的安全 Web 应用程序,而无需发布您的整个源代码,也无需花费数年时间来复现其功能集。
如果您目前正在商业 Web 应用程序中使用 Slither,或者有兴趣使用它,请联系我们。