Spring AI MCP Proof of Concept について
Spring AI MCP Proof of Concept は、Spring AI 開発者向けの Docker ベースのローカル GitHub MCP サーバー構成です。GitHub API へのアクセスに加え、REST エンドポイント、ヘルスチェック、任意の Web UI を備えています。
主な機能
- 01コンテナ化された GitHub MCP サーバー
- 02GitHub 操作用 REST エンドポイント
- 03Docker Compose によるデプロイ
- 04ヘルスチェックと監視
- 05任意の Web UI
活用シーン
- 01Spring AI アプリから GitHub データにアクセス
- 02リポジトリ、Issue、プルリクエストの取得
- 03開発環境でローカル GitHub MCP サーバーを実行
MCP 対応
GitHub MCP サーバーを実行し、MCP クライアントに GitHub API へのアクセスを提供します。HTTP エンドポイントと Spring AI の設定例が含まれています。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
このサーバーのパッケージやリモートエンドポイントはまだ取得できていません。プロジェクトの README の手順に従ってください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Spring AI MCP Proof of Concept
このリポジトリには、GitHub Model Context Protocol(MCP)サーバーをローカルで実行するための、Docker ベースのセットアップが含まれています。Spring AI アプリケーションでの利用を想定しており、MCP プロトコルを通じて GitHub API とやり取りするための標準的な方法を提供します。
機能
- GitHub MCP サーバー:GitHub API へのアクセスを提供するコンテナ化された MCP サーバー
- RESTful API:Spring AI アプリケーションに簡単に統合できる HTTP エンドポイント
- Docker Compose:Docker によるシンプルなローカルデプロイ
- ヘルスモニタリング:ヘルスチェックとモニタリングを組み込みで提供
- 開発向け設定:ホットリロードと開発に適した設定
前提条件
- Docker と Docker Compose がインストールされていること
- 適切なスコープが設定された GitHub Personal Access Token
- Node.js 18 以降(ローカル開発用)
クイックスタート
1. リポジトリをクローンする
git clone https://github.com/shesadri/spring-ai-mcp-poc.git
cd spring-ai-mcp-poc
2. 環境変数を設定する
cp .env.example .env
.env ファイルを編集し、GitHub Personal Access Token を追加します。
GITHUB_PERSONAL_ACCESS_TOKEN=your_github_token_here
MCP_SERVER_PORT=3000
NODE_ENV=development
3. GitHub トークンを生成する
- GitHub Settings > Developer settings > Personal access tokens に移動します
- 「Generate new token (classic)」をクリックします
- 次のスコープを選択します。
repo(プライベートリポジトリへのフルアクセス)read:user(ユーザープロフィールデータの読み取り)read:org(組織データの読み取り)
- 生成したトークンを
.envファイルにコピーします
4. サービスを起動する
docker-compose up -d
次のサービスが起動します。
- GitHub MCP サーバー(ポート 3000)
- Web UI(任意、ポート 8080)
5. セットアップを確認する
サーバーが実行中かどうかを確認します。
curl http://localhost:3000/health
次のように表示されます。
{
"status": "healthy",
"timestamp": "2025-06-01T04:22:00.000Z"
}
API エンドポイント
GitHub MCP サーバーは、次の REST API エンドポイントを公開します。
リポジトリ操作
- リポジトリを取得:
GET /api/repos/{owner}/{repo} - ユーザーのリポジトリ一覧を取得:
GET /api/users/{username}/repos?type={all|owner|member}
Issue 操作
- Issue の一覧を取得:
GET /api/repos/{owner}/{repo}/issues?state={open|closed|all} - Issue を作成:
POST /api/repos/{owner}/{repo}/issues
プルリクエスト操作
- プルリクエストの一覧を取得:
GET /api/repos/{owner}/{repo}/pulls?state={open|closed|all}
API 呼び出しの例
# Get repository information
curl http://localhost:3000/api/repos/octocat/Hello-World
# List user repositories
curl http://localhost:3000/api/users/octocat/repos
# List open issues
curl http://localhost:3000/api/repos/octocat/Hello-World/issues?state=open
# Create a new issue
curl -X POST http://localhost:3000/api/repos/octocat/Hello-World/issues \
-H "Content-Type: application/json" \
-d '{
"title": "Test issue",
"body": "This is a test issue created via MCP server",
"labels": ["bug", "help wanted"]
}'
# List pull requests
curl http://localhost:3000/api/repos/octocat/Hello-World/pulls
Spring AI との統合
この MCP サーバーは Spring AI アプリケーションに統合できます。設定例は次のとおりです。
Spring Boot の設定
# application.yml
spring:
ai:
mcp:
servers:
github:
url: http://localhost:3000
enabled: true
timeout: 30s
Java 統合の例
@Service
public class GitHubMCPService {
@Value("${mcp.github.base-url:http://localhost:3000}")
private String baseUrl;
private final RestTemplate restTemplate;
public GitHubMCPService(RestTemplate restTemplate) {
this.restTemplate = restTemplate;
}
public Repository getRepository(String owner, String repo) {
String url = baseUrl + "/api/repos/" + owner + "/" + repo;
return restTemplate.getForObject(url, Repository.class);
}
public List<Issue> getIssues(String owner, String repo, String state) {
String url = baseUrl + "/api/repos/" + owner + "/" + repo + "/issues?state=" + state;
return Arrays.asList(restTemplate.getForObject(url, Issue[].class));
}
public Issue createIssue(String owner, String repo, CreateIssueRequest request) {
String url = baseUrl + "/api/repos/" + owner + "/" + repo + "/issues";
return restTemplate.postForObject(url, request, Issue.class);
}
}
開発
Docker を使わないローカル開発
- サーバーディレクトリを作成します。
mkdir mcp-github-server
cd mcp-github-server
- Node.js プロジェクトを初期化します。
npm init -y
npm install @modelcontextprotocol/sdk-nodejs @octokit/rest express cors dotenv
- サーバーの実装を docker-compose.yml からコピーします
- ローカルで実行します。
npm start
モニタリングとログ
サーバーログを表示します。
docker-compose logs -f github-mcp-server
コンテナの状態を確認します。
docker-compose ps
設定
環境変数
| 変数 | 説明 | デフォルト |
|---|---|---|
GITHUB_PERSONAL_ACCESS_TOKEN | API アクセス用の GitHub PAT | 必須 |
MCP_SERVER_PORT | MCP サーバーのポート | 3000 |
NODE_ENV | Node.js 環境 | development |
Docker Compose サービス
- github-mcp-server:メインの MCP サーバーコンテナ
- mcp-web-ui:テスト用の任意の Web インターフェース
トラブルシューティング
よくある問題
- 認証エラー:GitHub トークンに必要なスコープが設定されていることを確認してください
- ポートの競合:ポート 3000 が使用中の場合は、
.envのMCP_SERVER_PORTを変更してください - 権限がありません:Docker に指定したポートへのバインド権限があることを確認してください
デバッグモード
デバッグログを有効にします。
NODE_ENV=development docker-compose up
セキュリティに関する考慮事項
- 実際のトークンを含む
.envファイルを絶対にコミットしないでください - GitHub トークンには必要最小限のスコープを使用してください
- 本番環境へのデプロイには GitHub Apps の使用を検討してください
- 本番環境での使用時にはレート制限を実装してください
コントリビューション
- リポジトリをフォークします
- フィーチャーブランチを作成します
- 変更を加えます
docker-compose upでテストします- プルリクエストを送信します
ライセンス
このプロジェクトは MIT License の下でライセンスされています。詳細については LICENSE ファイルを参照してください。
Related Projects
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。