Claude CodeからMCPを利用する、Claude CodeをMCPとして利用する

みなさんこんにちは！

ここ2週間くらいはXでもずーっとClaude Codeの話題で盛り上がっていて、AI開発の時代が本格化したなーと思っています。

雑な指示でもとても上手に実装してくれますが、外部ツールとMCP連携できたらもっと便利になります。

今回はClaude CodeからMCPを利用する方法、というよりもそのための設定について書いていきます。

## MCP（Model Context Protocol）の技術概要

MCPは、Large Language Modelが外部システムと標準化されたプロトコルで通信するためのフレームワークです。

例
- GitHub API連携による自動Issue/PR管理
- ファイルシステムへの直接アクセス
- データベースへクエリ実行
- 外部API統合

などなど、便利な外部ツールを自然言語で利用できるようになります。

## 設定ファイルの配置先

Claude DesktopとClaude Codeでは設定ファイルの場所が異なります。
（macOSを利用しているので、その前提で説明していきます。）

### Claude Desktop（GUI版）

- `~/Library/Application Support/Claude/claude_desktop_config.json`

### Claude Code（CLI版）

- `~/.claude.json`

## GitHub MCPサーバーの設定手順

GitHubと連携しておくととても便利なので、GitHubのローカルMCPサーバーと接続するための設定について書いていきます。

詳しいこと、細かいことは公式の設定を参照されるとよいと思います。
（fine-grained tokensの設定とか、Dockerのインストールとか）

### GitHub API アクセス用のトークンを作成

1. GitHub Settings → Developer settings → Personal access tokens
2. "Generate new token (Fine-grained tokens)"を選択
3. 必要な権限と利用可能リポジトリを設定
    - Contents、Issue、Metadata、Pull Requestsあたりが許可されていれば便利です
4. トークンを取得・保存

### MCPサーバー設定

`~/.claude.json`にMCPサーバー設定を追加します。

`${GITHUB_PERSONAL_ACCESS_TOKEN}`は`~/.zshrc`に保存していてもいいですし、べたっと貼り付けておいてもまぁよいと思います。

もしかするとJSONのルートに`mcpServers`セクションがない場合もあるかもしれないので、その場合は追加しましょう。

```json
{
  ...
  "tipsHistory": {
    ...
  },
  ...
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_ACCESS_TOKEN}"
      }
    }
  },
  "projects": {
    ...
  }
}
```

### 複数アカウント対応

組織アカウントと個人アカウントを分離した設定例です。
トークンが別のものになっていればよいだけです。

```json
{
  "mcpServers": {
    "github_a": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_WORK_TOKEN}"
      }
    },
    "github_b": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "${GITHUB_PERSONAL_TOKEN}"
      }
    }
  }
}
```

この設定により、異なるGitHubアカウントに対する操作を独立して実行可能になります！

### 動作確認

設定後の検証：

```bash
❯ claude mcp list
github_a: docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server
github_b: docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-server
```

実際の利用例：

```bash
❯ claude "〇〇のリポジトリで最新のIssueを3つ表示"
```

これでClaude CodeからMCPサーバーを利用できるようになります。

## Claude CodeをMCPサーバーとして利用する

書いている途中でこんな記事を見つけました。

https://zenn.dev/kazuph/articles/5a6cc61ae21940

上で書いていたのでは、Claude CodeからMCPを利用する方法ですが、Claude Code自体をMCPサーバーとして起動してClaude Desktopなどから利用する方法もあるみたいです。

Claude Desktopの設定（`~/Library/Application Support/Claude/claude_desktop_config.json`）にClaude Code自体をMCPサーバーとして動作させる設定を書いてみましょう。

```json
{
  "mcpServers": {
	"claude_code": {
		"command": "/usr/local/bin/claude",
		"args": ["mcp", "serve"],
		"env": {}
	}   
  }
}
```

Claude Desktopから触ってみると、こんな感じでClaude Codeが実行できてそうでした！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/203944/b6ef3b70-7038-45fd-bb23-def30518bfa0.png)

（japan-demというのは最近作ったツールです。）

https://qiita.com/nokonoko_1203/items/fb9756986fc722d87220

この設定により、Claude間の相互通信が可能になりました！

## まとめ

Claude CodeとMCPサーバーの統合により開発がさらに楽になりそうですね！

皆さんも使ってみてください！