🔥

Claude DesktopからClaude CodeにMCPサーバーを追加したらエラーが出た話【Claude Code】

に公開

背景

  • 現在Claude CodeのMaxプラン($100)を契約し、Claude Codeでどこまでやれるのかを試して遊んでいる。
  • React + FastAPI + Postgresの単純な3層スキーマのアプリケーションをAWSにデプロイするためのシンプルな構成をTerraformで記述させていた。
  • 手放しでTerraformを書かせると案外沼ったので、なにか軸となる参照対象が欲しくて使えるMCPサーバーがないか調べてみた。
  • AWS Terraform MCP Serverという、AWSリソースのTerraformを書くときのベスプラを提供してくれるMCPサーバーらしい(ざっくり)。
  • Claude Codeが直接ベスプラのドキュメントを読みながらTerraformのコードを書いてくれるならとても嬉しいので、使ってみることにした。

AWS Terraform MCP Server - 公式
awslabs/terraform_mcp_server - GitHubリポジトリ

動作環境

  • MacBook Pro (Apple M3 Pro) - macOS Sonoma 14.7.1
  • Cursor 0.50.5

やったこと

  • コマンドでもclaude add mcpというものが用意されているし、Claude Desktopが入っている人はそこで使用しているMCPサーバーをimportするコマンドclaude mcp add-from-claude-desktopが用意されている。
  • 今回はclaude add mcpでの追加がよくわからなかったので、Claude Desktopに登録済みのMCPサーバーを追加するやり方で行った

再現手順

  1. Claude Desktopを開く
  2. 画面左上の Claude > 設定 を開く
  3. 「開発者」タブに移動し、「構成を編集」ボタンを押す
  4. Finderが開くので、claude_desktop_config.jsonを開く
  5. 開いたclaude_desktop_config.jsonに以下のコードを追加する
claude_desktop_config.json
{
  "mcpServers": {
    "awslabs.terraform-mcp-server": {
      "command": "uvx",
      "args": [
        "awslabs.terraform-mcp-server@latest"
      ],
      "env": {
        "FASTMCP_LOG_LEVEL": "ERROR"
      }
    }
  }
}
  1. claude_desktop_config.jsonを閉じてClaude Desktopを再起動する
  2. 手順1~3でもう一度開発者用設定を開き、以下のようにrunningステータスになっているかを確認する
  3. ターミナルでClaude Codeプロジェクトが存在するディレクトリに移動する
  4. 以下のコマンドでClaude DesktopからMCPサーバーの設定をimportする
    claude mcp add-from-claude-desktop
    
  5. 先ほどClaude Desktopに登録したMCPサーバーが出てくるので、選択してEnter
  6. ターミナルを再起動し、Claude Codeを起動
    claude
    
  7. Claude Codeに適当に質問してみる

発生したエラー

  • Claude Codeが先程のMCPサーバーに接続された状態で質問をすると、以下のエラーが発生した。
API Error: 400 {"type":"error","error":{"type":"invalid_request_error","message":"tools.17.custom.name: String should match pattern '^[a-zA-Z0-9_-]{1,64}$'"}}
  • 訳:tools[17].custom.name に設定した名前が「英数字・_・- だけで1〜64文字以内」という規則に違反している。

解決方法

  • mcpServer名に使われている.-等に置き換える

解決手順

  1. ~/.claude.jsonを開く
  2. jsonファイルの projects > path/to/your/project > mcpServers を見つける
  3. 以下のようにコードを修正する
.claude.json
{
  "projects": {
    ...,
    "path/to/your/project": {
      ...,
      "mcpServers": {
-       "awslabs.terraform-mcp-server": {
+       "awslabs-terraform-mcp-server": {
          "command": "uvx",
          "args": [
            "awslabs.terraform-mcp-server@latest"
          ],
          "env": {
            "FASTMCP_LOG_LEVEL": "ERROR"
          }
        }
      },
      ...
    },
  },
}
  1. Claude Codeを起動し、/mcpコマンドを打って接続されていることを確認する
  2. なにか質問してみる

まとめ

  • Claude DesktopでのMCPサーバー名の制約と、Claude CodeでのMCPサーバー名の制約が違うことによって発生するエラーだった。
  • Claude系の製品にMCPサーバーを接続する手順は色々あり、わかりやすいものがなかなか出てこないので困った。
  • Claude Desktopは~/Library/Application Support/Claude/claude_desktop_config.jsonに設定jsonを追加する形が良さそう。
  • Claude Codeは~/.claude.jsonの中の該当プロジェクトに設定jsonを追加する形が良さそう。
  • これでまだ戦える!!
  • AWS Terraform MCP Serverに接続したClaude Codeくんのパワーアップ度合いはまた別問題なので別途検証します。

参考記事

https://dev.classmethod.jp/articles/aws-terraform-mcp-server-overview/#%25E3%2582%2584%25E3%2581%25A3%25E3%2581%25A6%25E3%2581%25BF%25E3%2582%258B

Discussion