Claude DesktopからDocker上のMCPサーバーを使ってGitHubのIssueを作成する

## はじめに

Claude DesktopからDocker上のMCPサーバーを使って、自分が管理するGitHubリポジトリにIssueを作成する方法を紹介します。
例えば、Claude Desktopを使ってClaudeに「○○リポジトリに古いライブラリがあるかを調べ、Issueを作成してください。」という指示を出したとします。このとき、ClaudeはMCPサーバに接続してリポジトリ内の古いライブラリを調べ、それが存在すればIssueを作成します。このように、MCPサーバーを使ってツールを呼び出しすことでコードの実行やデータの取得を行うことができます。

## 参考情報

https://modelcontextprotocol.io/introduction

https://azukiazusa.dev/blog/typescript-mcp-server

https://zenn.dev/su8/articles/edc7ac5a8e0046


## MCPとは

MCP(Model Context Protocol)は、異なるシステムやアプリケーション間でデータやコンテキストを効率的に共有するために設計された標準化されたプロトコルです。
[公式サイトのドキュメント](https://modelcontextprotocol.io/introduction)では、以下のように説明されています：

> MCP is an open protocol that standardizes how applications provide context to LLMs. Think of MCP like a USB-C port for AI applications. Just as USB-C provides a standardized way to connect your devices to various peripherals and accessories, MCP provides a standardized way to connect AI models to different data sources and tools.

> アプリケーションが LLM にコンテキストを提供する方法を標準化するオープン プロトコルです。MCP は、AI アプリケーション用の USB-C ポートのようなものです。USB-C がデバイスをさまざまな周辺機器やアクセサリに接続するための標準化された方法を提供するのと同様に、MCP は AI モデルをさまざまなデータ ソースやツールに接続するための標準化された方法を提供します。

従来は、LLMと様々なツールを連携させるためには、それぞれのツールに対応したAPIを使って連携を行っていました。しかし、MCPはそれらのAPIを統一することで、LLMと様々なツールを橋渡しし容易に連携させることができるようになります。公式サイトでは、多様なAIツールやシステム間の連携を'USB-C ポート'に例えて説明しています。

MCPを使うことで、ClaudeなどのLLMがPC上のデータや外部ツールと連携し、リアルタイムで情報を処理・提供する場面などで活用が見込まれます。例えば、Claude Desktopなどのチャット上で最新情報を取得したり、ファイル検索や共有が可能になるなど、業務効率化にも寄与します。

## 前提条件

- Docker Desktopがインストールされていること
  - MCPサーバーをDockerで起動するために必要です
- 自分が管理するGitHubリポジトリが存在すること
  - このリポジトリにIssueを作成するために必要です
- Claude Desktop 0.9.0以降（この記事ではWindows版 0.9.0を使用）

## Claude Desktopのセットアップ

### インストール

[Claude.ai公式サイト](https://claude.ai/download)からインストーラーをダウンロードしてインストールします。

![Claude Desktop](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/bd73d7ca-f26f-402d-8cc4-46abb02a0998.png)

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

GitHubのMCPサーバーがリポジトリにアクセスしIssueを作成するためのアクセストークンを作成します。

1. GitHubの[Fine-grained personal access tokens](https://github.com/settings/personal-access-tokens)にアクセス
2. 「Generate new token」をクリック
3. 以下の項目を設定：
   - トークンの名前と説明
   - トークンの有効期限
   - Repository Access: All repositories（自分が管理するリポジトリすべてにアクセス可能）
   - Repository permissions:
     - Contents: Read-only
     - Issues: Read and Write
     - Metadata: Read-only（自動設定）

![New Fine-grained personal access token](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/b9480655-0309-40cb-8b56-a1f680a5dea2.png)

![Repository permissions](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/89dafc3f-7227-4a59-a59d-28e458fc76c0.png)

「Generate token」をクリックすると権限の確認が表示されます。確認後、再度「Generate token」をクリックしてトークンを発行します。

**重要**: 発行されたトークンは一度しか表示されないため、必ずコピーして安全な場所に保存してください。

![トークン発行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/861f07f0-9b9c-4490-934b-4dd75546a021.png)

### MCPサーバーの設定

1. Claude Desktopを起動し、左上のハンバーガーメニューから「ファイル」→「設定」を選択
2. 設定ウィンドウから「開発者」を選択
3. 「構成を編集」をクリックしてエクスプローラーを開く
4. `claude_desktop_config.json`を編集（場所: `C:\Users\{ユーザー名}\AppData\Roaming\Claude\claude_desktop_config.json`）

以下の設定を追加します（`<YOUR_TOKEN>`を実際のトークンに置き換えてください）：

```json
{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "mcp/github"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
      }
    }
  }
}
```

設定後、Claude Desktopを再起動します。メニューから`終了`を選択して閉じ、再度起動します。ウィンドウを閉じただけでは設定が反映されないため注意してください。

![Claude Desktopを終了する](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/7c71e84a-60c1-4a6e-8040-5e80a233b681.png)

### Docker Desktopの起動

MCPサーバーのコンテナを実行するため、Docker Desktopを起動します。

![Docker Desktop](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/f514c604-4b8b-44be-b2fc-028dd5158b6b.png)

### 動作確認

Claude Desktopを起動すると、チャット画面にハンマーのアイコンが表示され、設定した権限に応じて利用可能なMCPツールが表示されます。
![ハンマーアイコン](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/41217074-8a2d-47d4-8cd5-9d131795ec30.png)

ハンマーのアイコンをクリックすると、利用可能なMCPツールが表示されます。

![利用可能なMCPツール](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/303d371a-67c9-4489-8c47-613d1d3308d3.png)

## 使用例：リポジトリの分析とIssue作成

以下のような質問を試してみましょう：

> revsystem/{リポジトリ名}に古いライブラリがあるかを調べてください。存在する場合はIssueを作成してください。

![プロンプト実行](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/074e69df-7baa-4053-abb8-ebf1ac215049.png)

Claudeは最初にGitHubのリポジトリを参照するツールの実行許可を求めます。

![ツール実行の許可](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/c9c932cc-50ff-4614-af41-a2b72776b3f5.png)

許可を与えると、Claudeはリポジトリを分析し、古いライブラリの有無を調査します。

![古いライブラリの調査](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/1163ee9f-0b4f-4a4d-be76-e7f70b99293e.png)

調査結果はチャット画面に表示され、必要に応じてIssueが作成されます。

![調査結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/b682df02-7d55-4a20-91a6-86509ca46ca6.png)

作成されたIssueの例：

![GitHubのIssue](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/c99fd093-e4a8-45d2-8da6-69d241d7f070.png)

なお、Claudeの分析結果は実行ごとに異なる場合があり、以下のように表形式で情報が整理されることもあります：

![GitHubのIssue_2](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/01b9b196-a0b6-4ed5-92f0-ce7f65b4ad8d.png)

## Dockerコンテナの確認

このようにDockerコンテナが起動していることを確認できます。
![Docker containerが起動している](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/61809/f8e904a7-1437-4a53-a4e4-7646e7c61f88.png)

## まとめ

MCPサーバーを使うことで、ノーコードでClaude DesktopからGitHubのリポジトリを参照し、必要に応じてIssueを作成することができました。この機能は、Slack連携など他のMCPサーバーと組み合わせることで、より高度な自動化も可能です。例えば、Issueが作成されたときにSlackに通知を送信し、チーム全体で情報を共有するといったワークフローも実現できます。

MCPの活用により、AIアシスタントと開発ツールの連携がより簡単になり、開発者の生産性向上に貢献することが期待できます。