使用Slither-MCP提升Solidity LLM工具链能力
我们发布了Slither-MCP,这是一个通过工具暴露Slither静态分析API的新工具,它使用Slither无与伦比的静态分析引擎增强LLM。Slither-MCP通过工具使LLM能够更快地找到关键代码、更高效地导航代码库,并最终提高智能合约编写和审计性能,几乎惠及LLM的所有使用场景。
Slither-MCP如何工作
Slither-MCP是一个MCP服务器,它封装了Slither的静态分析功能,使其可以通过Model Context Protocol进行访问。它可以分析Solidity项目(Foundry、Hardhat等)并生成关于合约、函数、继承层次结构等的全面元数据。
当LLM使用Slither-MCP时,它不再需要依赖像grep和read_file这样的基本工具来识别某些函数的实现位置、函数的调用者以及其他复杂且容易出错的任务。
因为LLM是概率系统,在大多数情况下它们只是概率正确的。Slither-MCP使用传统静态分析为基于LLM的分析设定基础事实:它减少了token使用并提高了提示回答正确的概率。
示例:简化审计任务
考虑一个包含两个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
然后使用此配置:
|
|
图1:将Slither-MCP添加到Cursor
目前,Slither-MCP暴露了Slither分析引擎的一个子集,我们认为LLM消费这些功能将受益最多。这包括以下功能:
- 提取给定合约或函数的源代码进行分析
- 识别函数的调用者和被调用者
- 识别合约的派生和继承成员
- 基于签名定位函数的潜在实现(例如,为IOracle.price(…)找到具体定义)
- 运行Slither的全面检测器套件并过滤结果
如果您对新MCP工具有请求或建议,我们很乐意听取您的意见。
许可
Slither-MCP使用AGPLv3许可,与Slither使用的许可相同。此许可要求如果您在Web服务或SaaS产品中使用它,则必须发布应用程序的完整源代码。对于许多工具来说,这是一个不可接受的妥协。
为了帮助补救这一点,我们现在为Slither和Slither-MCP提供双重许可。通过提供双重许可,Slither和Slither-MCP可以用于支持基于LLM的安全Web应用程序,而无需发布您的整个源代码,也无需花费数年时间重现其功能集。
如果您目前正在商业Web应用程序中使用Slither,或有意使用它,请联系我们。