
Solhint Mcp
io.github.vschernoffv0.1.2更新于 Oct 8, 2026
MCP server for Solhint — lint and autofix Solidity smart contracts from any MCP client
概览
让助手使用 Solhint 对项目中的 Solidity 智能合约进行 lint 与自动修复,并解释规则、查看配置。
- 功能
- 将 Solhint 封装为 MCP 工具:lint_solidity 和 lint_file 用于检查 Solidity 源码字符串或单个 .sol 文件,lint_project 用于按项目相对 glob 检查,fix_solidity 和 fix_file 用于应用 Solhint 自带的自动修复,explain_rule 用于查询任意内置规则的文档,get_config 用于查看项目的 Solhint 配置。修复工具会在修复后重新 lint,因此报告的是真正剩余的问题。它通过 JavaScript API 运行 Solhint,而不是调用命令行。
- 适用场景
- 适合助手处理 Solidity 项目、需要在不调用 shell lint 命令的情况下检查或整理合约的场景。也适合要求 lint 调用不能偏离项目自身配置、并希望内联获得规则说明的代理工作流。
- 运行要求
- 需要 Node.js 20 或更高版本;以 npm 包 solhint-mcp 通过 stdio 安装运行。每个 Solidity 项目一个服务器进程,启动时以项目根目录为工作目录。未声明账户、API 密钥或环境变量。优先使用项目安装的兼容 Solhint(>=6.1.0 <7.0.0),否则使用内置版本。
安装
在 SourceWeft 中
- 打开 控制台中的 Solhint Mcp,将其添加到工作区。
- 为需要使用其工具的对话启用该服务。
Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。
其他 MCP 客户端
参照 仓库 中的启动说明。
README
solhint-mcp
An MCP server that exposes Solhint as tools for any MCP client — Claude Code, OpenAI Codex, Cursor, Windsurf, Claude Desktop, and anything else that speaks the protocol. Nothing in it is specific to one vendor.
The server runs Solhint through its JavaScript API. It does not start a shell, invoke
npx solhint, make update checks, or parse CLI output.
Solhint's maintainer merged a change pointing Solhint's CLI at this package (protofire/solhint#801). It ships in the next Solhint release.
Requirements
- Node.js 20 or newer.
- One server process per Solidity project.
The process working directory is the project root. Start another server process for a different project.
Installation
Most clients are configured with a JSON block. Add this to your client's MCP configuration, with the Solidity project as the working directory:
On native Windows, clients that launch servers through npx generally need
"command": "cmd" with "args": ["/c", "npx", "-y", "solhint-mcp"].
Client-specific shortcuts
Claude Code — from the Solidity project directory:
The default local scope associates the server with the current project. Use
--scope project before -- if the configuration should be committed in .mcp.json.
On native Windows, Claude Code requires cmd /c:
OpenAI Codex — Codex uses TOML, not the JSON block above, and shares one configuration across the Codex CLI, the ChatGPT desktop app and the IDE extension. From the Solidity project directory:
Or add it by hand to ~/.codex/config.toml, or to .codex/config.toml to scope it
to one project:
Cursor / Windsurf — add the JSON block above to the editor's MCP settings.
Claude Desktop — installation is separate from Claude Code. This package is a
stdio npm server, not a packaged Desktop Extension (.mcpb). Configure it as a local
development MCP server only if the client launches it with the Solidity project as its
working directory. See Anthropic's current
local-server instructions.
Tools
lint_project autodetects contracts/**/*.sol, then src/**/*.sol, and finally
**/*.sol. Paths and patterns outside the project root are rejected.
The fix_* tools apply Solhint's own autofixes and then re-lint, so what they report
as remaining is what is genuinely left rather than the pre-fix report. fix_solidity
returns the corrected source and touches nothing on disk. fix_file previews by
default and only writes when called with write: true — Solhint's CLI asks for a
backup before --fix, and an MCP client should not rewrite someone's contracts
without being asked either.
explain_rule reads the documentation Solhint ships with each rule, so it covers the
whole registry and always describes the version this project runs: description,
category, default severity, configurable options, notes and the good/bad examples when
the rule defines them.
If your repository already documents a lint command
An agent follows an explicit instruction in your repository over a tool description.
If AGENTS.md, CLAUDE.md, .cursorrules or a similar agent playbook says how to
lint, for example:
the agent will run that command and never reach for these tools. That is reasonable behaviour, not a misconfiguration, but it means the server goes unused until you say it is there. Mention it alongside the command:
The two are complementary. The command is what a person and CI run. The tools are what
an agent runs, and their advantage is that the invocation cannot drift: no unquoted
** collapsing to a single level, no forgotten config, no stray flag. A shell glob
written by hand can silently cover a fraction of a project; lint_project cannot.
Configuration
lint_solidity uses configuration in this order:
- The complete
configobject supplied to the tool. - The configuration found in the project root.
{ "extends": "solhint:recommended" }.
An explicit config replaces the project config; it is not merged. File and project linting use Solhint's per-file configuration hierarchy and the same recommended fallback when no configuration exists.
The server prefers a compatible solhint (>=6.1.0 <7.0.0) installed by the project.
If none exists, it uses its bundled, tested version. An installed but incompatible
project version produces an explicit error. Pass --bundled-solhint only when you
intentionally want the bundled version.
Solhint 6.0.x is excluded because its plugin loader can terminate the host process when a configured plugin cannot be loaded, which is unsafe for an in-process MCP server.
Protocol and current limitations
The server uses @modelcontextprotocol/server 2.x over stdio. It supports the current
2026-07-28 lifecycle and the SDK's legacy compatibility path.
Solhint currently resolves shareable configs and plugins relative to process.cwd().
That is why this release supports one project per process. A third-party plugin that
writes to stdout synchronously is redirected to stderr while linting so it cannot corrupt
the MCP channel. Full plugin isolation, cancellation, and lint timeouts are deferred to a
worker-based release.
Docker
The server lints whatever directory it starts in, so the Solidity project is mounted at
/project, which is the image's working directory. -i is required because the server
speaks MCP over stdio; no port is exposed. A Solhint installed in the mounted project
takes precedence over the image's own copy.
MCP Registry
Listed as io.github.vschernoff/solhint-mcp. server.json in this repository is the
registry manifest; its name must stay identical to mcpName in package.json, and
both version fields must match the published npm version, or a registry publish is
rejected.
Credits and licence
MIT. The linting runner, tool surface and test suite were originally written by Diego Bale (@dbale-arg) for protofire/solhint and moved here with his agreement, so the MCP server can be maintained and released independently of Solhint's release cycle. See NOTICE for the file-level breakdown.
Solhint is maintained by Protofire. This package depends on it; it is not part of it.
来源:README.md,提交 3843bea
工具
0版本历史
1- v0.1.2最新Oct 8, 2026


