一个基于模型上下文协议(MCP)的服务器,利用 Slither 为 Solidity 智能合约提供静态分析能力。
此 MCP 服务器封装了 Slither 静态分析功能,使其可通过模型上下文协议进行访问。它能够分析 Solidity 项目(Foundry、Hardhat 等),并生成关于合约、函数、继承层次结构等的全面元数据。
您也可以将 Slither MCP 作为易于使用的 Slither API 用于其他场景。
{$PROJECT_PATH}/artifacts/project_facts.json,以便后续更快加载虽然这是 v1.0 版本,但我们预计随着收到更多反馈,API 可能会发生变化。
本项目使用 UV 进行包管理:
# 安装依赖
uv sync
# 或以开发模式安装
uv pip install -e .
启动 Slither MCP 服务器:
uv run slither-mcp
所有工具都接受一个 path 参数,用于指定要分析的 Solidity 项目。项目会自动缓存到 <path>/artifacts/project_facts.json,以便后续查询更快。
claude mcp add --transport stdio --scope user slither -- uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp
确保 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。
该服务器暴露了用于查询合约和函数信息的工具。所有工具都接受一个 path 参数,用于指定要分析的 Solidity 项目目录。
list_contracts - 使用过滤器列出合约必要条件:path(项目目录)
按合约类型(concrete、abstract、interface、library)或路径模式进行过滤。
get_contract - 获取详细合约信息检索完整的合约元数据,包括函数、继承关系和标志。
get_contract_source - 获取合约源代码返回包含指定合约的 Solidity 文件的完整源代码。
get_function_source - 获取函数源代码返回特定函数的源代码,并包含行号。适用于聚焦分析。
list_functions - 使用过滤器列出函数按合约、可见性或修饰符过滤函数。
function_callees - 获取函数调用关系返回函数的内部、外部和库被调用者,包括低级调用检测。
function_callers - 获取调用目标函数的函数返回所有调用指定目标函数的函数,按调用类型(内部、外部、库)分组。这是 function_callees 的逆操作。
get_inherited_contracts - 获取合约继承关系返回合约继承的所有合约(父合约和祖先合约)的递归树。
get_derived_contracts - 获取继承自该合约的合约返回所有继承自某合约的合约(子合约和后代合约)的递归树。
list_function_implementations - 查找函数实现查找跨合约的某个函数签名的所有实现。
list_detectors - 列出可用的 Slither 检测器返回关于 Slither 检测器的元数据,包括名称、描述、影响等级和置信度评级。支持按名称或描述过滤。
run_detectors - 获取检测器结果并支持过滤返回缓存的检测器结果。可按检测器名称、影响等级(High、Medium、Low、Informational)或置信度等级(High、Medium、Low)过滤。
所有工具返回的响应都包含一个 success 布尔值,以及数据字段或 error_message。有关详细架构和用法,请参阅 slither_mcp/tools/ 中各工具的实现。
slither-mcp 包包含一个类型化的 Python 客户端(SlitherMCPClient),用于以编程方式与 Slither MCP 服务器交互。这对于构建需要查询 Solidity 项目的工具、脚本或智能体非常有用。
客户端提供:
有关详细的使用示例和文档,请参阅 CLIENT_USAGE.md。
安装预提交钩子以在提交前运行 linting:
pre-commit install
uv run pytest