mcpField
S
solhint-mcp

solhint-mcp

ローカル
github.com/vschernoff開発ツール06 日前に更新

solhint-mcp について

solhint-mcpは、Solidityプロジェクトを扱うエージェントにSolhintの検査と自動修正機能を提供するMCPサーバーです。ソース、単一ファイル、プロジェクト全体を検査し、結果が不完全になり得る設定警告も報告します。

主な機能

  1. 01Solidityソース・ファイル・プロジェクトの検査
  2. 02ソースとファイルの自動修正
  3. 03Solhintルール説明の参照
  4. 04プロジェクト設定の確認
  5. 05検査の不完全状態と警告の報告

活用シーン

  1. 01エージェントによる開発中のSolidityファイル検査
  2. 02プロジェクト設定を使った全体検査
  3. 03Solhint自動修正のプレビューまたは適用
  4. 04ルールや設定警告の調査

MCP 対応

stdio経由で、検査、自動修正、ルール説明、設定確認など7つのSolhintツールをMCPクライアントに公開します。各サーバープロセスは1つのSolidityプロジェクトディレクトリを対象にします。

設定

ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。

mcp.json · 共通設定
{
"mcpServers": {
"vschernoff-solhint": {
"command": "npx",
"args": [
"-y",
"solhint-mcp"
]
}
}
}
起動コマンドnpx -y solhint-mcp

ローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。

パッケージ
npmsolhint-mcp0.1.7

ツール

7

掲載時のツール一覧 · 5 日前に更新

パラメーター型必須説明
codestringはいlint 対象の Solidity ソースコード
configobjectいいえ省略可能な完全な Solhint 設定オブジェクト

詳細

solhint-mcp

Solhintを使って、あらゆる MCP クライアント(Claude Code、OpenAI Codex、Cursor、Windsurf、Claude Desktop など、プロトコルに対応するもの)から Solidity スマートコントラクトのリントと自動修正を行えます。特定のベンダーに依存する機能はありません。

エージェントには、lint_solidity、lint_file、lint_project、fix_solidity、fix_file、explain_rule、get_config の7つのツールが提供されます。

Solhint の CLI からこのパッケージが案内されています — protofire/solhint#801。Solhint 6.2.5 に含まれています。

インストール

Solidity プロジェクトを作業ディレクトリとして、MCP クライアントの設定に以下を追加します。

{
  "mcpServers": {
    "solhint": {
      "command": "npx",
      "args": ["-y", "solhint-mcp"]
    }
  }
}

Node.js 20 以降が必要です。ネイティブ Windows でサーバーを起動できないクライアントでは、"command": "cmd" と "args": ["/c", "npx", "-y", "solhint-mcp"] が必要になる場合があります。Node はシェルを介さずに npx.cmd を直接起動できません。

1つのサーバープロセスでリントするプロジェクトは1つです。作業ディレクトリがプロジェクトのルートになるため、別のプロジェクトでは別のプロセスを起動してください。そのプロジェクトにインストールされている Solhint が、ここにバンドルされているものより優先されます。

Solhint の実行方法

サーバーは JavaScript API を通じて Solhint を呼び出します。シェルを起動したり、npx solhint を実行したり、更新を確認したり、CLI の出力を解析したりすることはありません。

クライアント別の簡単な設定方法

Claude Code — Solidity プロジェクトのディレクトリで実行します。

claude mcp add solhint -- npx -y solhint-mcp

デフォルトのローカルスコープでは、サーバーが現在のプロジェクトに関連付けられます。設定を .mcp.json に含めてコミットする場合は、-- の前に --scope project を指定してください。ネイティブ Windows でサーバーを起動できない場合、通常は npx を cmd /c でラップすれば解決します。Node はシェルを介さずに npx.cmd を直接起動できません。

claude mcp add solhint -- cmd /c npx -y solhint-mcp

OpenAI Codex — Codex は上記の JSON ブロックではなく TOML を使い、Codex CLI、ChatGPT デスクトップアプリ、IDE 拡張機能で設定を共有します。Solidity プロジェクトのディレクトリで実行します。

codex mcp add solhint -- npx -y solhint-mcp

または、~/.codex/config.toml に手動で追加するか、1つのプロジェクトにスコープを限定する場合は .codex/config.toml に追加します。

[mcp_servers.solhint]
command = "npx"
args = ["-y", "solhint-mcp"]

Cursor / Windsurf — 上記の JSON ブロックをエディターの MCP 設定に追加します。

Claude Desktop — Claude Code とは別途インストールが必要です。このパッケージは stdio npm サーバーであり、パッケージ化された Desktop Extension(.mcpb)ではありません。クライアントが Solidity プロジェクトを作業ディレクトリとして起動する場合にのみ、ローカル開発用 MCP サーバーとして設定してください。Anthropic の最新のローカルサーバーの手順を参照してください。

ツール

ツール入力説明
lint_solidity{ code, config? }Solidity のソース文字列を lint します
lint_file{ filePath }プロジェクト内の .sol ファイルを1つ lint します
lint_project{ pattern? }プロジェクト相対の glob を lint します
fix_solidity{ code, config? }Solidity のソース文字列を自動修正します
fix_file{ filePath, write? }.sol ファイルを1つ自動修正します
explain_rule{ ruleId }linter に含まれる任意のルールを説明します
get_config{}プロジェクトの Solhint 設定を表示します

lint_project は、まず contracts/**/*.sol、次に src/**/*.sol、最後に **/*.sol を自動検出します。プロジェクトのルート外を指すパスとパターンは拒否されます。

省略可能な config 引数では、ルールマップと組み込みの solhint:recommended および solhint:all プリセットを指定できます。extends のパス、共有可能な設定 パッケージ名、または plugins は指定できません。Solhint はこれらを require で読み込むため、 ツール引数からそれらを受け入れると、ツールを呼び出せるものなら誰でもサーバープロセスで コードを実行できてしまいます。これらはプロジェクト独自の .solhint.json で宣言してください。 このファイルは、そのディレクトリで npx solhint を実行するのと同じ信頼レベルです。

実行の健全性

Solhint は、読み込めないプラグインや認識できないルール ID を警告として報告したうえで、 そのまま lint を実行します。つまり、プロジェクトが要求したチェックの一部が行われません。 検出結果だけを表示するツールの出力は、壊れた設定でも問題なくチェックできたものとして 受け取られてしまいます。

そこで、これらの警告は検出結果の前に捕捉して報告されます。

⚠️ This run was degraded — Solhint checked less than the project asked for.
- Could not load solhint-plugin-foo, make sure it's installed and exports valid rules. Ignoring it.
- Rule 'no-such-rule' doesn't exist

Treat the result below as incomplete until this is fixed. A finding that is absent may
only mean the rule never ran.

Solhint はルールを読み込むときにしか警告を出さないため、get_config は使い捨ての lint を実行して 同じ診断を引き出します。設定が妥当かどうかを確認したい人が参照するのは get_config だからです。

fix_* ツールは Solhint 独自の自動修正を適用してから再度 lint を実行するため、 報告される残りの問題は修正前の結果ではなく、実際に残っているものです。fix_solidity は 修正済みのソースを返し、ディスク上のファイルには触れません。fix_file はデフォルトでは プレビューのみを行い、write: true を指定して呼び出した場合にのみ書き込みます。 Solhint の CLI は --fix の前にバックアップを求めます。同様に、MCP クライアントも 依頼なしに誰かのコントラクトを書き換えるべきではありません。

explain_rule は Solhint に同梱されている各ルールのドキュメントを読み込むため、 レジストリ全体を網羅し、常にこのプロジェクトが実行するバージョンについて説明します。 説明、カテゴリ、デフォルトの重大度、設定可能なオプション、注記、およびルールで定義されている 場合は適切な例と不適切な例が含まれます。

リポジトリに lint コマンドがすでに記載されている場合

エージェントは、ツールの説明よりもリポジトリ内の明示的な指示に従います。 たとえば、AGENTS.md、CLAUDE.md、.cursorrules などのエージェント向け手順書に lint の方法が記載されている場合は、次のようになります。

- Solidity lint: `npm run lint:sol`

エージェントはそのコマンドを実行し、これらのツールには目もくれません。これは妥当な動作であり、 設定ミスではありませんが、ツールが使えることを伝えるまではサーバーが使われないということです。 コマンドとあわせて、ツールについても記載してください。

- Solidity lint: prefer the `solhint` MCP tools (`lint_file`, `lint_project`,
  `fix_file`, `explain_rule`, `get_config`) when that server is configured; they run this project's
  own Solhint with its config. Fall back to `npm run lint:sol` when the server is
  unavailable.

この2つは互いに補完し合います。コマンドは人と CI が実行するものです。ツールはエージェントが 実行するもので、呼び出し方法がぶれないことが利点です。引用符で囲まれていない ** が 1階層だけに展開されたり、設定を忘れたり、余計なフラグが付いたりすることはありません。 手書きのシェル glob ではプロジェクトの一部しか対象にならないことがありますが、 lint_project ではそのようなことは起こりません。

設定

lint_solidity は、次の順序で設定を使用します。

  1. ツールに渡された config オブジェクト全体。
  2. プロジェクトルートで見つかった設定。
  3. { "extends": "solhint:recommended" }。

明示的に指定した設定はプロジェクトの設定を置き換え、マージはされません。ファイル単位およびプロジェクト単位の lint では、Solhint のファイルごとの設定階層を使用し、設定がない場合は同じ推奨設定にフォールバックします。

サーバーは、プロジェクトにインストールされた互換性のある solhint(>=6.1.0 <7.0.0)を優先します。該当するものがない場合は、同梱のテスト済みバージョンを使用します。互換性のないバージョンがプロジェクトにインストールされている場合は、明示的なエラーが発生します。同梱バージョンを意図的に使用する場合に限り、--bundled-solhint を渡してください。

Solhint 6.0.x は対象外です。設定されたプラグインを読み込めない場合、そのプラグインローダーがホストプロセスを終了させることがあり、インプロセスの MCP サーバーにとって安全ではないためです。

プロトコルと現在の制限事項

サーバーは、stdio 経由で @modelcontextprotocol/server 2.x を使用します。現在の 2026-07-28 のライフサイクルと、SDK のレガシー互換パスをサポートしています。

Solhint は現在、共有可能な設定とプラグインを process.cwd() を基準に解決します。そのため、このリリースでは 1 プロセスにつき 1 つのプロジェクトをサポートします。標準出力に同期的に書き込むサードパーティ製プラグインは、lint 中に標準エラー出力へリダイレクトされるため、MCP チャネルを破損させることはありません。プラグインの完全な隔離、キャンセル、lint のタイムアウトは、ワーカーベースのリリースまで保留されています。

Docker

docker build -t solhint-mcp .
docker run -i --rm -v "$PWD":/project solhint-mcp

サーバーは起動したディレクトリを lint するため、Solidity プロジェクトは、イメージの作業ディレクトリである /project にマウントします。サーバーは stdio 経由で MCP を使用するため、-i が必要です。ポートは公開されません。マウントしたプロジェクトにインストールされている Solhint は、イメージに含まれる Solhint より優先されます。

MCP Registry

io.github.vschernoff/solhint-mcp として登録されています。このリポジトリの server.json はレジストリマニフェストです。その name は package.json の mcpName と同一である必要があり、両方のバージョンフィールドは公開されている npm バージョンと一致していなければなりません。一致しない場合、レジストリへの公開は拒否されます。

クレジットとライセンス

MIT。lint ランナー、ツールのインターフェース、テストスイートは Diego Bale(@dbale-arg)による実装で、本人の同意のもと、MIT ライセンスに基づいてここで使用しています。ファイル単位の内訳については、NOTICE を参照してください。

Solhint は Protofire によって保守されています。このパッケージは Solhint に依存していますが、Solhint の一部ではありません。

コメント

MCP は初めてですか?

プロトコルの概要から最初のサーバーの導入まで、よくある疑問にまとめて答えます。

AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。