trailofbits/slither-mcp
GitHub: trailofbits/slither-mcp
将Slither智能合约静态分析工具封装为MCP服务器,使AI助手能够直接分析Solidity代码的安全漏洞和结构信息。
Stars: 76 | Forks: 7
# Slither MCP 服务器
[](https://github.com/trailofbits/slither-mcp/actions/workflows/test.yml)
[](https://www.python.org/downloads/)
[](https://www.gnu.org/licenses/agpl-3.0)
一个通过 [Slither](https://github.com/crytic/slither) 为 Solidity 智能合约提供静态分析功能的 Model Context Protocol (MCP) 服务器。
## 概述
该 MCP 服务器封装了 Slither 静态分析功能,使其可通过 Model Context Protocol 访问。它可以分析 Solidity 项目(Foundry, Hardhat 等)并生成关于合约、函数、继承层次结构等方面的综合元数据。
您也可以将 Slither MCP 用作易于使用的 Slither API,以适应其他用例。
## 功能特性
- **缓存机制**:Slither 运行结果会缓存到 `{$PROJECT_PATH}/artifacts/project_facts.json`,以加快后续加载速度
- **MCP 工具**:通过 MCP 工具查询合约和函数信息
- **安全分析**:运行 Slither 检测器并通过过滤访问结果
- **全面分析**:提取以下详细信息:
- 合约元数据(abstract, interface, library 标志)
- 函数签名和修饰符
- 继承层次结构
- 函数调用关系(internal, external, library calls)
- 安全漏洞和代码质量问题
- 源代码位置
虽然这是 v1.0 版本,但随着我们收到更多反馈,预计 API 会有所变化。
## 安装说明
本项目使用 [UV](https://github.com/astral-sh/uv) 进行包管理:
```
# 安装 dependencies
uv sync
# 或者以 development mode 安装
uv pip install -e .
```
## 使用方法
### 基本用法
启动 Slither MCP 服务器:
```
uv run slither-mcp
```
所有工具都接受一个 `path` 参数,用于指定要分析的 Solidity 项目。项目会自动缓存在 `/artifacts/project_facts.json` 中,以便后续查询更快。
### 在 Claude Code 中使用
```
claude mcp add --transport stdio --scope user slither -- uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp
```
### 在 Cursor 中使用
确保 uvx 在您的 Cursor 路径中,使用 `sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx`
在您的 `~/.cursor/mcp.json` 中:
```
{
"mcpServers": {
"slither-mcp": {
"command": "uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp",
}
}
}
```
## 指标与隐私
Slither MCP 包含可选择退出的指标收集功能,通过让我们了解 LLM 使用每个工具的频率及其成功调用率来帮助提高可靠性。指标默认**启用**,但可以永久禁用。
### 我们收集的内容
- 工具调用事件(使用了哪些工具)
- 成功/失败状态
**我们不收集**:工具调用参数、合约详细信息、函数名称或任何项目特定信息。
### 禁用指标
永久退出:
```
uv run slither-mcp --disable-metrics
```
**有关完整详细信息**,请参阅 [METRICS.md](METRICS.md)。
## MCP 工具
服务器公开用于查询合约和函数信息的工具。**所有工具都接受一个 `path` 参数**,用于指定要分析的 Solidity 项目目录。
### 查询工具
### 1. `list_contracts` - 列出带过滤器的合约
需要:`path`(项目目录)
按类型(concrete, abstract, interface, library)或路径模式过滤合约。
### 2. `get_contract` - 获取详细合约信息
检索完整的合约元数据,包括函数、继承和标志。
### 3. `get_contract_source` - 获取合约源代码
返回包含指定合约的 Solidity 文件的完整源代码。
### 4. `get_function_source` - 获取函数源代码
返回带有行号的特定函数的源代码。适用于针对性分析。
### 5. `list_functions` - 列出带过滤器的函数
按合约、可见性或修饰符过滤函数。
### 6. `function_callees` - 获取函数调用关系
返回函数的 internal, external 和 library callees,包括低级调用检测。
### 7. `function_callers` - 获取调用目标函数的函数
返回所有调用指定目标函数的函数,按调用类型分组。这是 `function_callees` 的逆向操作。
### 8. `get_inherited_contracts` - 获取合约继承
返回合约继承的所有合约的递归树(父合约和祖先合约)。
### 9. `get_derived_contracts` - 获取继承自该合约的合约
返回继承自某个合约的所有合约的递归树(子合约和后代合约)。
### 10. `list_function_implementations` - 查找函数实现
查找跨合约的函数签名的所有实现。
### 11. `list_detectors` - 列出可用的 Slither 检测器
返回关于 Slither 检测器的元数据,包括名称、描述、影响级别和置信度评级。支持按名称或描述过滤。
### 12. `run_detectors` - 获取带过滤的检测器结果
返回缓存的检测器结果。按检测器名称、影响级别 或置信度级别 过滤。
所有工具返回带有 `success` 布尔值以及数据字段或 `error_message` 的响应。有关详细的架构和用法,请参阅 `slither_mcp/tools/` 中的各个工具实现。
## 客户端使用
`slither-mcp` 包含一个类型化的 Python 客户端(`SlitherMCPClient`),用于以编程方式与 Slither MCP 服务器交互。这对于构建需要查询 Solidity 项目的工具、脚本或代理非常有用。
该客户端提供:
- 所有 MCP 工具的类型安全方法
- Pydantic 模型的自动序列化/反序列化
- 常用模式的辅助方法
- pydantic-ai 代理集成的工具包装器
有关详细的使用示例和文档,请参阅 [CLIENT_USAGE.md](CLIENT_USAGE.md)。
## 系统要求
- Python 3.11+
- Solidity 编译器设置(Foundry, Hardhat 或类似工具)
- Slither 及其依赖项
## 开发指南
### Pre-commit Hooks
安装 pre-commit hooks 以在提交前运行代码检查:
```
pre-commit install
```
### 运行测试
```
uv run pytest
```
标签:API封装, Foundry, Hardhat, MCP Server, Model Context Protocol, Python, Slither, Solidity, Web3安全, 代理合约分析, 以太坊, 区块链安全, 安全扫描, 对称加密, 无后门, 时序注入, 智能合约审计, 智能合约开发, 继承关系分析, 自动化审计, 逆向工具, 错误基检测, 静态代码分析, 静态分析工具