trailofbits/slither-mcp

GitHub: trailofbits/slither-mcp

将Slither智能合约静态分析工具封装为MCP服务器,使AI助手能够直接分析Solidity代码的安全漏洞和结构信息。

Stars: 76 | Forks: 7

# Slither MCP 服务器 [![Tests](https://static.pigsec.cn/wp-content/uploads/repos/2026/03/8358191ad1212906.svg)](https://github.com/trailofbits/slither-mcp/actions/workflows/test.yml) [![Python 3.11+](https://img.shields.io/badge/python-3.11+-blue.svg)](https://www.python.org/downloads/) [![License: AGPL v3](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](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安全, 代理合约分析, 以太坊, 区块链安全, 安全扫描, 对称加密, 无后门, 时序注入, 智能合约审计, 智能合约开发, 继承关系分析, 自动化审计, 逆向工具, 错误基检测, 静态代码分析, 静态分析工具