使用Slither-MCP提升Solidity LLM工具链能力

本文介绍Trail of Bits发布的Slither-MCP工具,该工具通过Model Context Protocol将Slither静态分析引擎集成到LLM中,显著提升智能合约审计和开发的效率与准确性,包含具体功能和使用方法。

使用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有两个选择:

  1. 尝试解析ERC20合约的导入路径,然后尝试调用read_file查看ERC20.transfer()的源代码。这个选项通常需要多次调用read_file,特别是如果对ERC20.transfer()的调用是通过从ERC20继承的子合约进行的。无论如何,这个选项容易出错且工具调用密集。

  2. 尝试使用grep工具定位ERC20.transfer()的实现。根据grep工具调用的结构方式,它可能返回错误的ERC20合约。

这两个选项都不理想,容易出错,并且不太可能以高置信区间正确。

使用Slither-MCP,LLM只需调用get_function_source来定位函数的源代码。

简单设置

Slither-MCP易于设置,可以使用以下命令添加到Claude Code:

1
claude mcp add --transport stdio slither -- uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp

也很容易通过将以下内容添加到您的~/.cursor/mcp.json来将Slither-MCP添加到Cursor:

运行sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx

然后使用此配置:

1
2
3
4
5
6
7
{
 "mcpServers": {
    "slither-mcp": {
      "command": "uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp"
    }
  }
}

图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,或有意使用它,请联系我们。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计