SolidityScan MCP服务器
MCP(模型上下文协议)服务器,将SolidityScan智能合约安全分析作为MCP工具公开。从支持MCP的客户端使用它来扫描已部署的合约、Git项目、本地目录或内联Solidity源代码,并快速生成PDF报告。
你得到了什么
- 扫描合同:按地址对已部署的合约进行深度扫描
- scan_and_get_report_pdf:快速扫描+PDF报告链接
- scan_工程:扫描远程Git存储库
- scan_local_directory:扫描磁盘上的本地Solidity代码
- 扫描文件内容:扫描原始Solidity源(内存中)
- get_supportd_platforms_chains:发现支持的探索者和链
由SolidityScan SDK提供支持。
需求
- Node.js 18+
- SolidityScan API密钥设置为
SOLIDITYSCAN_API_KEY(或通行证apiToken根据请求)
安装
pnpm install
pnpm build在本地运行(dev):
pnpm dev运行内置服务器:
pnpm start如果作为包含二进制文件的包发布(solidityscan-mcp-server),您还可以运行:
npx solidityscan-mcp-server配置API密钥
为所有请求设置一次API密钥:
export SOLIDITYSCAN_API_KEY=""或通过 apiToken 通过单独的工具调用。
与MCP客户端一起使用
任何支持MCP的客户端都可以通过stdio连接到此服务器。示例:
克劳德桌面(示例)
将条目添加到您的 claude_desktop_config.json:
{
"mcpServers": {
"solidityscan": {
"command": "/usr/bin/env",
"args": ["node", "/absolute/path/to/dist/index.js"],
"env": {
"SOLIDITYSCAN_API_KEY": ""
}
}
}
}游标或其他MCP客户端
使用命令集注册新的MCP服务器 node 以及所指向的论点 dist/index.js (或CLI solidityscan-mcp-server 如果全局安装)。确保 SOLIDITYSCAN_API_KEY 在服务器环境中可用。
可用工具
| 工具 | 描述 | 所需输入 |
|---|---|---|
get_supported_platforms_chains | 列出支持的浏览器/平台及其链(映射到ID的名称) | – |
scan_contract | 按地址扫描已部署的合约 | contractAddress, platform, chain |
scan_and_get_report_pdf | 快速扫描并返回PDF报告链接 | contractAddress, platform, chain |
scan_project | 扫描Git存储库项目 | provider, projectUrl, projectName |
scan_local_directory | 扫描Solidity文件的本地目录 | directoryPath |
scan_file_content | 扫描原始Solidity源内容 | fileContent |
笔记:
- 使用
get_supported_platforms_chains发现有效platform名字和他们chain姓名/IDs。 - 虽然某些客户端UI可能不会标记
platform根据需要,此服务器需要它来解析链。
例子
首先,发现平台和链:
get_supported_platforms_chains示例响应(截断):
{
"etherscan": {
"id": "1",
"chains": { "mainnet": "1", "sepolia": "4", "holesky": "6" }
},
"polygonscan": {
"id": "3",
"chains": { "mainnet": "1", "testnet": "2", "amoy-testnet": "10" }
}
}扫描已部署的合约
{
"tool": "scan_contract",
"arguments": {
"contractAddress": "0x0000000000000000000000000000000000000000",
"platform": "etherscan",
"chain": "sepolia"
}
}快速扫描和PDF报告链接
{
"tool": "scan_and_get_report_pdf",
"arguments": {
"contractAddress": "0x0000000000000000000000000000000000000000",
"platform": "etherscan",
"chain": "sepolia"
}
}服务器以 https://solidityscan.com/qs-report/ // 链接。
扫描Git项目
{
"tool": "scan_project",
"arguments": {
"provider": "github",
"projectUrl": "https://github.com/org/repo",
"projectName": "MyDapp",
"projectBranch": "main",
"recurScans": false,
"skipFilePaths": []
}
}扫描本地目录
{
"tool": "scan_local_directory",
"arguments": {
"directoryPath": "/absolute/path/to/contracts",
"projectName": "LocalScan"
}
}扫描原始Solidity源内容
{
"tool": "scan_file_content",
"arguments": {
"fileName": "Sample.sol",
"projectName": "InlineScan",
"fileContent": "pragma solidity ^0.8.20; contract A { function f() external {} }"
}
}发展
- TypeScript入口点:
index.ts - 内置输出:
dist/index.js
脚本:
pnpm dev # Run with tsx (hot dev)
pnpm build # Compile TypeScript
pnpm start # Run compiled server
pnpm dev:http # Run Streamable HTTP server with tsx
pnpm start:http # Run compiled HTTP/SSE server
pnpm test:http-client # Launch HTTP server + client smoke test流式HTTP+SSE传输
server-http.ts通过Streamable HTTP传输承载MCP服务器,在单个端点中支持POST+SSE流。- 每个请求可能包括
Authorization: Bearer或X-API-Key;服务器缓存会话中看到的第一个密钥,并将其用于后续请求/订阅。 pnpm test:http-client在临时端口上启动HTTP服务器,启动StreamableHTTPClientTransport使用提供的标头,并运行listTools作为烟雾测试。集SOLIDITYSCAN_TEST_API_KEY(或重复使用SOLIDITYSCAN_API_KEY)使测试发送一个真正的密钥。
平台/链解析是如何工作的
- 平台可以按名称提供(例如。,
etherscan,polygonscan,blockscout,arbiscan等等)或根据索引中的平台ID。 - 链可以通过该平台的链名称来提供(例如。,
sepolia,mainnet,amoy-testnet)或者根据该平台下列出的链ID值。 - 如果提供了不支持的值,服务器将返回一个错误,其中包含所选平台的可用链列表。
故障排除
- 缺少API键:set
SOLIDITYSCAN_API_KEY或通过apiToken. - 不支持的平台/链:调用
get_supported_platforms_chains并使用列出的值。 - 找不到文件/目录:确保绝对路径存在并且服务器进程可以访问。
许可证
麻省理工学院
致谢
- 建立在
@modelcontextprotocol/sdk - 安全扫描通过
solidityscan
