🐡

ポケカの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
    ポケモンカードをキーワード検索

ビルド & 起動手順

  1. MCP サーバをビルド
    $ ./gradlew build
  2. Claude Desktop へ登録
    claude_desktop_config.json を用意して Settings › Developer › Edit Config で読み込みます
claude_desktop_config.json
{
  "mcpServers": {
    "ptcgmcp": {
      "command": "java",
      "args": [
        "-jar",
        "/absolute/path/to/ptcgmcp/mcp/build/libs/ptcgmcp-all.jar"
      ]
    }
  }
}

JAR のパスは手元環境に合わせて修正してください。

  1. Go API & Meilisearch/MySQL
    MeilisearchとMySQLはcompose.yamlを用意してDockerで立ち上げました。
# Go API
cd ptcgmcp/api
go run main.go

# Meilisearch / MySQL
$ docker compose up
  1. 使ってみる
    実際のやり取り例
    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