ポケカのMCPサーバーを作って試してみた
はじめに
こんにちは、ソフトウェアエンジニアのなななと申します。
「Model Context Protocol (MCP) サーバを自作するのが流行っているらしい。どうせなら趣味のポケモンカードと掛け合わせてみたい!」──そんな軽い動機で ポケカのカード情報を AI に供給する MCP サーバ を作りました。
最終目標は 大会結果やメタゲームを AI と一緒に分析し、合理的にデッキ構築を支援して欲しい、ということで今回は第一歩として「カード情報検索」までをMCPサーバとして実装しました
システム構成
レイヤ | 役割 | 主要技術 |
---|---|---|
クライアント | Claude Desktop でチャットを開始 | Claude Desktop |
MCP サーバ | Claude ↔ ポケカ API の仲介・整形 | Kotlin (公式 SDK) |
カード API | カード検索 / 詳細 / デッキ検索 | Go (Echo) |
検索エンジン | 高速全文検索 | Meilisearch |
DB | 永続化 | MySQL |
MCPサーバからカードAPIを呼んで、テキストとしてクライアントとして返す形です。
コード
ptcgmcp/
├── api/ # Go 製ポケカ API
└── mcp/ # Kotlin MCP サーバ
GitHub リポジトリ: https://github.com/Katsumi-N/ptcgmcp
今回はシンプルに以下3つのMCP toolsを実装しました。
- get_card_detail
ポケモンカードの詳細情報を取得 - search_deck
デッキをキーワード検索 - search_pokemon_card
ポケモンカードをキーワード検索
ビルド & 起動手順
- MCP サーバをビルド
$ ./gradlew build
- Claude Desktop へ登録
claude_desktop_config.json を用意して Settings › Developer › Edit Config で読み込みます
{
"mcpServers": {
"ptcgmcp": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/ptcgmcp/mcp/build/libs/ptcgmcp-all.jar"
]
}
}
}
JAR のパスは手元環境に合わせて修正してください。
- Go API & Meilisearch/MySQL
MeilisearchとMySQLはcompose.yamlを用意してDockerで立ち上げました。
# Go API
cd ptcgmcp/api
go run main.go
# Meilisearch / MySQL
$ docker compose up
- 使ってみる
実際のやり取り例
Tweet: @tweet
Claude Log: https://claude.ai/share/d9704d5d-0baa-43f2-a0a8-2fce0754e25f
スクショ
とりあえずDBにCL宮城2025の優勝レシピと入っているカードの情報をDBに入れて動かしてみました。
AIが実際のカードの情報を元に文を生成していることがわかります!
もう少し踏み込んだ話をしてみます。
メタカードとしてよく採用される、「リーリエのピッピ」への対策について聞いてみました。
それっぽいことを言っていますが、正直微妙な回答ですね😅
もう少し環境の情報などを渡せればより良い回答が期待できそうです
Next step
- RAGで「最近の環境情報」などを読み込ませる
- デッキの情報をもっと登録して「よく採用されるカード」などを認識させる
まとめ
実際のポケカの情報を元にAIからレスポンスが返ってきたので感動しました。課題は結構ありますが、ポケカxAIの一つのサンプルとして参考になれば幸いです!
今回は主に検索APIをMCPサーバとして提供しましたが、最近の環境の情報などをRAGなどで包括的に提供できると、もっと合理的な観点で、AIが自律的に判断できるかなと思いました。
Discussion