aqua でインストールしたツールが MCP Server で実行できない場合の解決方法
本記事では MCP Server および MCP Server が実行するコマンドを CLI Version Manager の aqua でインストールし、 Cline で実行しようとしたところ、それらの実行に失敗してしまった件の原因と解決策を紹介します。
なお、自分は LLM や MCP Server にはあまり詳しくないので不正確なことを書くかもしれませんが、その場合は優しく指摘してもらえると助かります。
また今回取り上げる MCP Server とその MCP Server が実行するコマンドの詳細は伏せておきます。
記事中の MCP Server やコマンド名は実際のものとは異なります。
なお、今回の問題は aqua に限った話ではなく、 asdf や *env のようなバージョンマネージャー全般で起こりうる問題なはずです。
今回の問題は Cline で起こりましたが、 Cline 以外でどうかは分かりません。
要約
- aqua の問題ではない
- Cline は PATH 環境変数を引き継がないので、 AQUA_GLOBAL_CONFIG を
cline_mcp_settings.json
で明示的に設定した方が良い - Cline は MCP Server をルートディレクトリで実行するっぽい
- MCP Server を aqua でインストールする場合は AQUA_GLOBAL_CONFIG を使って global にインストールするのが良い
- MCP Server 上でコマンドを実行する場合は実行ディレクトリを明示的に指定しないと aqua.yaml が無視されて思わぬ結果になるかも
ある CLI ツールを実行する MCP Server を開発していた知人から、そのツールを aqua でインストールすると MCP 経由でツールが実行できないという相談を受けました。
相談を受けて、まずはその MCP Server のバイナリを aqua でインストールし、 Cline から実行するためにcline_mcp_settings.json
を設定しました。
{
"mcpServers": {
"hello-mcp-server-foo": {
"command": "hello-mcp-server",
"args": [
"foo"
],
"transportType": "stdio",
"disabled": false,
"autoApprove": []
}
}
}
すると MCP Server の起動に失敗しました。
time="2025-05-30T22:22:37+09:00" level=fatal msg="aqua failed" aqua_version=2.51.2 doc="https://aquaproj.github.io/docs/reference/codes/004" env=darwin/arm64 error="command is not found" exe_name=hello-mcp-server program=aqua MCP error -32000: Connection closed
aqua を使ってインストールしたはずの hello-mcp-server
がないと怒られています。
ただし、 terminal では hello-mcp-server
を実行できました。
aqua のエラーログが出ていることから $(aqua root-dir)/bin
に symbolic link は作られていてかつ $PATH
は通っているようですが、 (aqua-proxy ではなく) aqua が hello-mcp-server
をみつけられていません。
hello-mcp-server
は Go で実装されていたので、ビルドして ~/go/bin
配下にインストールしてその絶対パスを指定すると hello-mcp-server
は実行できました。
"command": "/home/suzuki-shunsuke/go/bin/hello-mcp-server",
すると今度は hello-mcp-server が aqua でインストールしたコマンド foo を実行するのに失敗していました。
Error: failed to check foo command: exit status 1 MCP error -32000: Connection closed
これが元々相談されていたエラーです。
terminal 上では問題なく foo は実行できました。
一旦 aqua でインストールした hello-mcp-server
が実行できない問題はおいといて、 foo
が実行できない原因を調べました。
問題の MCP Server のコードを見ると https://github.com/mark3labs/mcp-go を使っていて、
server.NewMCPServer で MCPServer を生成する前に foo version
コマンドを実行して foo コマンドがインストールされているかチェックしていました。
そのチェックで foo version
コマンドが失敗して上記のエラーを吐いていました。
Cline は MCP Server をルートディレクトリで実行するっぽい
foo
コマンドは 2 つの aqua.yaml でインストールされていました。
- カレントディレクトリ (hello-mcp-server のリポジトリ直下)
- AQUA_GLOBAL_CONFIG
カレントディレクトリにある aqua.yaml が無視されるということは、 foo version
がカレントディレクトリで実行されていないのではないかと思い、実行ディレクトリをデバッグで出力してみたところ、 root directory で実行されているようでした。
つまり Cline が MCP Server をルートディレクトリで実行しているのかなと思います (Cline のドキュメントをちゃんと調べたりしてませんが、そう見えます)。
aqua や asdf のようなバージョンマネージャーでツールを管理する場合、ツールのバージョンは実行ディレクトリに依存します。
そのため、先述のように MCPServer を生成する前にコマンドがインストールされているかをチェックすることは原理上できません。
そこで MCPServer を生成する前にコマンドがインストールされているかチェックするコードを消すことで元々の問題を解決できました。
元々このチェックはインストールされていない場合に早めにエラーを返すためにされていただけなので、消しても大きな問題はありませんでした。
Cline では PATH 以外の環境変数が引き継がれない
また、ルートディレクトリで実行していてカレントディレクトリの aqua.yaml が無視されている場合であっても、本来 AQUA_GLOBAL_CONFIG が参照されるはずですが、されませんでした。
これは foo version
コマンド実行時に AQUA_GLOBAL_CONFIG が渡ってないのではないかと思い、
cline_mcp_settings.json
で AQUA_GLOBAL_CONFIG を設定すると解決しました。
"env": {
"AQUA_GLOBAL_CONFIG": "/home/suzuki-shunsuke/repos/src/github.com/aquaproj/aqua-registry/aqua-all.yaml"
},
先述の MCP Server hello-mcp-server
が実行できない問題もこれで解決しました。
これについては issue がありました。
修正 PR もありましたが、おそらく Security 上の理由で意図的に環境変数を渡してないのだと思うので、この修正が取り込まれる可能性は低いのではないかと思います。
最後に
aqua でインストールしたツールが Cline, MCP Server 経由で実行できない問題を調べました。
ターミナル上で実行できるのに Cline, MCP Server 経由で実行できない場合は、環境変数 (PATH, AQUA_GLOBAL_CONFIG) やコマンドを実行しているディレクトリがどこかを確認すると良いかと思います。
Discussion