MCP固体分析工具
使用Slither和自定义解析工具进行Solidity智能合约分析的模型上下文协议(MCP)服务器。
已部署MCP
https://mcp-ethonline-production.up.railway.app/mcp
此代码的作用
该项目提供了一个全面的工具包,用于通过多种方法分析Solidity智能合约:
固体分析器(parser_solidity.py)
- AST生成:使用Solidity编译器将Solidity代码编译为抽象语法树
- 合同抽取:分析合约、函数、修饰符、事件、结构和枚举
- 版本管理:根据pragma指令自动检测并安装正确的Solidity编译器版本
- 位置跟踪:为每个函数提供精确的源代码位置(行号、偏移量)
- 缓存:缓存编译AST以提高重复分析的性能
- 进度记录:跟踪调试和监控的编译步骤
更顺畅的整合(slither_wrapper.py)
- 静态分析:对Solidity合约运行Slither安全分析
- 漏洞检测:确定常见的安全问题、气体优化和最佳实践违规
- 编译器管理:处理Solidity编译器安装和版本切换
- 流输出:提供分析进度和结果
- 错误处理:优雅地处理编译错误和缺少的依赖关系
MCP服务器(server.py)
- 协议实现:实现AI工具集成的模型上下文协议
- 工具注册:将分析功能作为MCP工具公开
- 资源管理:提供对缓存的AST和分析结果的访问
- API终点:为合约分析提供类似REST的接口
安装
先决条件
- Python 3.11+
- 紫外线 包管理器
- Docker(可选,用于容器化部署)
设置
选项1:本地安装
- 克隆存储库:
git clone
cd mcp_modules- 安装依赖项:
uv sync- 安装滑套(如果尚未安装):
pip install slither-analyzer选项2:Docker安装
- 克隆存储库:
git clone
cd mcp_modules- 使用Docker Compose构建和运行:
# Build and start the container
docker-compose up --build
# Run in detached mode
docker-compose up -d --build
# View logs
docker-compose logs -f
# Stop the container
docker-compose down- 或者直接使用Docker构建和运行:
# Build the image
docker build -t mcp-modules .
# Run the container
docker run -p 3000:3000 -v mcp_cache:/tmp/ast_cache mcp-modules用法
运行测试
局部测试
uv run pytest -qDocker测试
# Run tests in Docker container
docker-compose run --rm mcp-modules uv run pytest -q
# Or with direct Docker command
docker run --rm mcp-modules uv run pytest -q启动MCP服务器
地方发展
uv run server.pyDocker开发
# Using Docker Compose (recommended)
docker-compose up --build
# Using Docker directly
docker run -p 3000:3000 mcp-modules发展模式
地方发展
uv run mcp dev server.pyDocker开发
# Mount source code for live development
docker run -p 3000:3000 -v $(pwd)/mcp_modules:/app/mcp_modules mcp-modules示例用法
解析实体代码
from mcp_modules.parser_solidity import run
# Parse a simple contract
code = """
pragma solidity ^0.8.0;
contract Example {
function hello() public pure returns (string memory) {
return "Hello, World!";
}
}
"""
result = run(code, engine="solc", auto_version=True)
print(f"Found {len(result['contracts'])} contracts")使用Slither进行分析
from mcp_modules.slither_wrapper import analyze_contract
# Run security analysis
analysis = analyze_contract(code, stream_logs=True)
print(f"Found {len(analysis['findings'])} security issues")访问缓存AST
# Get specific AST node by position
ast_node = get_ast_node(
hash="abc12345",
src="1:10:0", # start:length:fileIndex
limit=5
)项目结构
mcp_modules/
├── mcp_modules/ # Main package
│ ├── common/ # Common utilities
│ ├── validation/ # Validation schemas
│ ├── parser_solidity.py # Solidity parser
│ └── slither_wrapper.py # Slither integration
├── tests/ # Test suite
├── server.py # MCP server entry point
├── pyproject.toml # Project configuration
├── Dockerfile # Docker container definition
├── docker-compose.yml # Docker Compose configuration
├── .dockerignore # Docker ignore file
└── README.md # This fileDocker配置
该项目包括全面的Docker支持:
Dockerfile功能
- 基本图像:Python 3.11纤薄以获得最佳大小
- 系统相关性:包括Solidity编译的构建工具
- 包管理:用途
uv用于快速解决依赖关系 - 缓存管理:持久AST缓存卷
- 健康检查:内置容器健康监测
Docker编写功能
- 服务管理:轻松启动/停止/重新启动
- 体积持久性:AST缓存在容器重启后仍然有效
- 端口映射:MCP服务器可在端口3000上访问
- 发展模式:用于实时开发的源代码挂载
- 健康监测:自动健康检查和重启策略
集装箱体积
mcp_cache:编译AST文件的持久存储- 用于开发的源代码挂载(可选)
待办事项
- 解析器同时将所有内容放在一堆中(如果同时为多个合同传输代码)
API
MCP工具可用
服务器公开了以下MCP工具:
parse_solidity
- 目的:解析Solidity代码并提取合约结构
- 输入:Solidity源代码,可选编译器版本
- 输出:合同定义、功能、事件,以及职位信息
- 特性:自动版本检测、AST缓存、进度记录
analyze_with_slither
- 目的:使用Slither运行全面的安全分析
- 输入:Solidity源代码,分析选项
- 输出:安全调查结果、气体优化、违反最佳实践
- 特性:实时流媒体、错误恢复、编译器管理
get_ast_node
- 目的:从缓存的编译结果中检索特定的AST节点
- 输入:AST哈希、源位置或JSON指针
- 输出:带有元数据的AST子树
- 特性:灵活的查询,基于职位的查找
list_cached_asts
- 目的:列出所有缓存的AST文件及其元数据
- 输入:无
- 输出:缓存统计信息、文件信息
- 特性:缓存管理、调试支持
滑动包装
这 slither_wrapper.py 模块提供:
analyze_contract():合同分析的主要功能_ensure_solc_for_source():Solidity编译器版本管理_ensure_solc_auto_by_pragma():基于pragma的自动编译器检测
固体分析器
这 parser_solidity.py 模块提供:
run():具有全面选项的主解析功能_extract_contracts_with_members():合同结构提取_src_span():从AST节点提取源位置_line_from_offset():根据字符偏移量计算行号- 合同结构分析
- 函数和变量提取
- 导入依赖关系解决
配置
该项目使用 pyproject.toml 用于配置。关键依赖关系包括:
slither-analyzer:静态分析工具solc-select:Solidity编译器管理pytest:测试框架
贡献
- 分叉存储库
- 创建要素分支
- 进行更改
- 添加新功能的测试
- 运行测试套件
- 提交拉取请求
许可证
此项目根据MIT许可证获得许可-请参阅 许可证 文件以获取详细信息。
