
Claudeでmcpにserenaを追加しようとしてハマった話
Claudeは常にファイルを丸読みする仕様なのに対し、serenaはLSPとしてコード解析を行い、必要な部分だけをピンポイントで把握します。そのため、使い方が適切であればTokenを大幅に節約できる優れたMCPサーバです。LSPおよびClaudeの動作仕様については、以下の記事を参考にしてください。
早速serenaを試してみたところ、頭を抱える事態に陥りました。
多くのユーザーが問題なく接続できている中で、つながらない状況に焦りを感じました。以下、原因の確認、接続までの設定および接続後の確認過程となります。
ClaudeでのMCPとの接続確認は claude —debug
コマンドで見ることができます。
Portを指定する
SerenaがMCP向けに開放しているポートは8000番です。
ただし、Claudeが8000番へ繋ぎに行くとは限りません。
対策としては、mcpに追加する際に Port
を明示的に指定する必要があります。今回は直接実行の例を示していますが、ローカル環境やDockerコンテナを使用する場合でも、同様にPort
を引数として指定することができます。
claude mcp add serena -- uvx --from git+https://github.com/oraios/serena serena-mcp-server --context ide-assistant --project $(pwd) --port 32000
動作後に知っておくべきこと
serenaに無事接続できたことをclaude —debug
で確認すると、おそらく多くの人が眉をひそめる表示に遭遇するでしょう。
初めてこの表示を見ると対策を考え始めてしまいますが、仕様なのです。非常に紛らわしいため、GitHubにIssueが立てられているほどです。
MCPは厄介な仕様として、サーバから渡された標準出力をすべてERRORとして表示します。設定されたサーバが情報をINFOレベルで出力しても、MCPはこれをERRORとしてリダイレクトします。この動作が気になる場合は、serenaを単独で起動してみましょう。そうすると、同じログがERRORではなくINFO扱いで表示されることがわかります。
あとがき
多くの導入記事ではPort指定が省略されており、この問題に気づくのが遅れました。この対処法がすべてのケースに適用できるわけではありませんが、デバッグログで8000番以外のポートに接続しようとしていることが確認できた場合は、明示的にポート番号を引数で指定すると解決できるかもしれません。