Chúng tôi giới thiệu Slither-MCP, một công cụ mới giúp tăng cường sức mạnh cho các LLM (mô hình ngôn ngữ lớn) bằng cách tận dụng engine phân tích tĩnh ưu việt của Slither. Slither-MCP mang lại lợi ích cho hầu hết mọi trường hợp sử dụng LLM, cho phép LLM tìm kiếm các đoạn mã quan trọng nhanh hơn, điều hướng cơ sở mã hiệu quả hơn, và cuối cùng là cải thiện hiệu suất viết và kiểm toán hợp đồng thông minh.
Cách Slither-MCP hoạt động
Slither-MCP là một máy chủ MCP bao bọc chức năng phân tích tĩnh của Slither, giúp nó có thể truy cập được thông qua Giao thức Ngữ cảnh Mô hình (Model Context Protocol). Nó có thể phân tích các dự án Solidity (Foundry, Hardhat, v.v.) và tạo ra siêu dữ liệu toàn diện về các hợp đồng, hàm, hệ thống phân cấp kế thừa và hơn thế nữa.
Khi một LLM sử dụng Slither-MCP, nó không còn phải dựa vào các công cụ thô sơ như grep và read_file để xác định nơi các hàm nhất định được triển khai, ai là người gọi hàm và các tác vụ phức tạp, dễ xảy ra lỗi khác.
Vì LLM là các hệ thống xác suất, trong hầu hết các trường hợp, chúng chỉ đúng một cách xác suất. Slither-MCP giúp thiết lập một sự thật cơ bản cho phân tích dựa trên LLM bằng cách sử dụng phân tích tĩnh truyền thống: nó giảm việc sử dụng token và tăng xác suất trả lời đúng một lời nhắc.
Ví dụ: Đơn giản hóa một nhiệm vụ kiểm toán
Xem xét một dự án chứa hai hợp đồng ERC20: một được sử dụng trong triển khai sản xuất và một được sử dụng trong các thử nghiệm. Một LLM được giao nhiệm vụ kiểm toán việc sử dụng ERC20.transfer() của một hợp đồng và cần xác định vị trí mã nguồn của hàm.
Nếu không có Slither-MCP, LLM có hai lựa chọn:
- Cố gắng phân giải đường dẫn nhập của hợp đồng ERC20, sau đó cố gắng gọi
read_fileđể xem nguồn củaERC20.transfer(). Tùy chọn này thường yêu cầu nhiều lệnh gọi đếnread_file, đặc biệt nếu lệnh gọi đếnERC20.transfer()là thông qua một hợp đồng con được kế thừa từ ERC20. Bất kể, tùy chọn này sẽ dễ xảy ra lỗi và tốn nhiều lệnh gọi công cụ. - Cố gắng sử dụng công cụ grep để xác định vị trí triển khai của
ERC20.transfer(). Tùy thuộc vào cách cấu trúc lệnh gọi công cụ grep, nó có thể trả về sai hợp đồng ERC20.
Cả hai tùy chọn đều không lý tưởng, dễ xảy ra lỗi và không có khả năng chính xác với khoảng tin cậy cao.
Sử dụng Slither-MCP, LLM chỉ cần gọi get_function_source để xác định vị trí mã nguồn của hàm.
Thiết lập đơn giản
Slither-MCP rất dễ thiết lập và có thể được thêm vào Claude Code bằng lệnh sau:
claude mcp add --transport stdio slither -- uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp
Cũng có thể dễ dàng thêm Slither-MCP vào Cursor bằng cách thêm đoạn sau vào ~/.cursor/mcp.json của bạn:
Run sudo ln -s ~/.local/bin/uvx /usr/local/bin/uvx
Then use this config:
{
"mcpServers": {
"slither-mcp": {
"command": "uvx --from git+https://github.com/trailofbits/slither-mcp slither-mcp"
}
}
}

Hiện tại, Slither-MCP cung cấp một tập hợp con của engine phân tích của Slither mà chúng tôi tin rằng LLM sẽ có lợi nhất khi sử dụng. Điều này bao gồm các chức năng sau:
- Trích xuất mã nguồn của một hợp đồng hoặc hàm nhất định để phân tích
- Xác định người gọi và người được gọi của một hàm
- Xác định các thành viên kế thừa và dẫn xuất của hợp đồng
- Xác định vị trí các triển khai tiềm năng của một hàm dựa trên chữ ký (ví dụ: tìm các định nghĩa cụ thể cho
IOracle.price(...)) - Chạy bộ dò tìm toàn diện của Slither và lọc kết quả
Nếu bạn có yêu cầu hoặc đề xuất cho các công cụ MCP mới, chúng tôi rất muốn nghe từ bạn.
Cấp phép
Slither-MCP được cấp phép AGPLv3, cùng giấy phép mà Slither sử dụng. Giấy phép này yêu cầu xuất bản mã nguồn đầy đủ của ứng dụng của bạn nếu bạn sử dụng nó trong một dịch vụ web hoặc sản phẩm SaaS. Đối với nhiều công cụ, đây không phải là một sự thỏa hiệp chấp nhận được.
Để giúp khắc phục điều này, chúng tôi hiện đang cung cấp cấp phép kép cho cả Slither và Slither-MCP. Bằng cách cung cấp cấp phép kép, Slither và Slither-MCP có thể được sử dụng để cung cấp năng lượng cho các ứng dụng web bảo mật dựa trên LLM mà không cần xuất bản toàn bộ mã nguồn của bạn và không phải mất nhiều năm để tái tạo bộ tính năng của nó.
Nếu bạn hiện đang sử dụng Slither trong ứng dụng web thương mại của mình hoặc quan tâm đến việc sử dụng nó, vui lòng liên hệ.
Giải thích thuật ngữ:
- LLM (Mô hình ngôn ngữ lớn): Một loại mô hình AI có khả năng hiểu và tạo ra văn bản giống như con người, thường được sử dụng trong các ứng dụng như chatbot, dịch thuật và tạo nội dung.
- Static Analysis (Phân tích tĩnh): Phương pháp phân tích mã nguồn mà không cần thực thi chương trình, giúp phát hiện các lỗi tiềm ẩn, lỗ hổng bảo mật và các vấn đề khác.
- Solidity: Một ngôn ngữ lập trình được sử dụng để viết các hợp đồng thông minh trên blockchain Ethereum.
- MCP (Model Context Protocol – Giao thức Ngữ cảnh Mô hình): Một giao thức cho phép các LLM tương tác với các công cụ và dịch vụ bên ngoài để thu thập thông tin và thực hiện các tác vụ.
- ERC20: Một tiêu chuẩn kỹ thuật cho các token có thể thay thế (fungible tokens) được phát hành trên blockchain Ethereum.
- AGPLv3: Một giấy phép mã nguồn mở yêu cầu bất kỳ ai sửa đổi và phân phối phần mềm phải công khai mã nguồn của họ, đặc biệt khi phần mềm được sử dụng như một dịch vụ mạng.
- SaaS (Software as a Service – Phần mềm như một dịch vụ): Một mô hình phân phối phần mềm trong đó ứng dụng được lưu trữ bởi nhà cung cấp và cung cấp cho khách hàng qua internet.