Slither-MCP的工作原理
Slither-MCP是一个MCP服务器,它封装了Slither的静态分析功能,并通过模型上下文协议使其可被访问。它可以分析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:
|
|
也可以轻松地将Slither-MCP添加到Cursor,只需将以下内容添加到您的~/.cursor/mcp.json:
- 运行
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,或者有兴趣使用它,请联系我们。