使用Slither-MCP提升Solidity LLM工具链的智能化水平

Slither-MCP是一款新工具,它将Slither无与伦比的静态分析引擎与大型语言模型相结合,通过工具暴露Slither的静态分析API,使LLM能更快定位关键代码、更高效导航代码库,从而提升智能合约编写与审计的性能。

Slither-MCP的工作原理

Slither-MCP是一个MCP服务器,它封装了Slither的静态分析功能,并通过模型上下文协议使其可被访问。它可以分析Solidity项目(如Foundry、Hardhat等),并生成关于合约、函数、继承层次结构等的全面元数据。

当LLM使用Slither-MCP时,它不再需要依赖诸如grepread_file之类的初级工具来识别特定函数的实现位置、函数的调用者以及其他复杂且容易出错的任务。

由于LLM是概率系统,在大多数情况下它们只是概率上正确。Slither-MCP通过使用传统的静态分析为基于LLM的分析设定了一个基本事实:它减少了令牌使用,并提高了提示被正确回答的概率。

示例:简化审计任务

考虑一个包含两个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

也可以轻松地将Slither-MCP添加到Cursor,只需将以下内容添加到您的~/.cursor/mcp.json

  1. 运行 sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx
  2. 然后使用此配置:
    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 设计