reonyanarticle/scryfall-mcp
If you are the rightful owner of scryfall-mcp and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to dayong@mcphub.com.
Scryfall MCP Server provides Magic: The Gathering card information via the Model Context Protocol for AI assistants.
Scryfall MCP Server
Magic: The Gatheringのカード情報をMCP (Model Context Protocol)経由でAIアシスタントに提供するサーバー。
概要
Scryfall MCP Serverは、Magic: The Gatheringのカード検索と情報取得をAIアシスタントから利用できるようにするMCPサーバーです。自然言語での検索(特に日本語サポート)、レート制限、エラーハンドリング、多言語対応などの機能を提供します。
主要機能
- 自然言語カード検索: 日本語・英語での自然な検索クエリに対応
- Phase 1 能力フレーズ検索: 「死亡時」「戦場に出たとき」などの基本的な能力フレーズに対応
- Phase 2 長文クエリ対応: 「死亡時にカードを1枚引く黒いクリーチャー」などの複雑なクエリに対応
- キーワード能力検索: 「飛行」「速攻」などのキーワード能力に対応
- 動的な最新セット検索: 「最新のエクスパンション」などのクエリで自動的に最新セットを取得
- MCP準拠の構造化出力: TextContent、EmbeddedResourceによる高品質なデータ提供
- リアルタイム進捗報告: FastMCP Context注入による詳細なログとプログレス通知
- レート制限: Scryfall API制限に準拠した安全なリクエスト管理(スレッドセーフ実装)
- サーキットブレーカー: 障害時の自動復旧機能
- 自動補完: カード名の入力補助機能
- 高精度検索: Scryfall検索構文への自動変換
- Scryfall推奨キャッシュ: 最低24時間のキャッシュTTLでAPI負荷を軽減
クイックスタート
前提条件
- Python 3.11+
- uv (推奨) または pip
- Claude Desktop または MCP対応AIアシスタント
インストール
# リポジトリのクローン
git clone https://github.com/reonyanarticle/scryfall-mcp.git
cd scryfall-mcp
# 依存関係のインストール
uv sync
# テストの実行
uv run pytest
MCP サーバーとしての使用
1. Claude Desktop での設定
Claude Desktop の設定ファイル (claude_desktop_config.json) に以下を追加してください。
macOS/Linux: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"scryfall": {
"command": "uv",
"args": [
"--directory",
"/path/to/scryfall-mcp",
"run",
"scryfall-mcp"
],
"env": {
"SCRYFALL_MCP_USER_AGENT": "YourApp/1.0 (your-email@example.com)"
}
}
}
}
重要: SCRYFALL_MCP_USER_AGENTの設定が必要です。以下のいずれかの形式で連絡先情報を含めてください。
- メールアドレス:
YourApp/1.0 (yourname@example.com) - GitHubリポジトリ:
YourApp/1.0 (https://github.com/username/repo)
設定せずに使用しようとすると、検索ツールが以下のセットアップガイドを表示します。
🔧 Scryfall API 初回セットアップ
Scryfall APIをご利用いただくには、以下の設定を行ってください:
1. Claude Desktop設定ファイルを開く
2. 以下の内容を追加
3. プレースホルダーを実際の値に置き換え
4. Claude Desktopを再起動
詳細情報: https://scryfall.com/docs/api
設定後: Claude Desktopを再起動してください。
2. 利用可能なツール
Claude Desktop で以下のツールが利用可能になります:
search_cards
- カード検索(日本語・英語対応)
- 自然言語クエリからScryfall構文への自動変換
- 最大175件の結果を取得
autocomplete_card_names
- カード名の入力補完
- 部分一致検索
- 多言語対応
3. 使用例
Claude Desktop で以下のように質問できます。
# 日本語での検索
「赤いクリーチャーを検索して」
「稲妻のカード情報を教えて」
# 能力フレーズでの検索(Phase 2: 長文クエリ対応)
「死亡時にカードを1枚引く黒いクリーチャーを探して」
「戦場に出たときにトークンを生成する白いクリーチャーを教えて」
「攻撃したときにダメージを与える赤いクリーチャーを検索」
「死亡時にカードを引く飛行を持つ青いクリーチャーを探して」
# 英語での検索
"Search for blue counterspells"
"Find Lightning Bolt card details"
# 自動補完
「Light で始まるカード名を教えて」
スタンドアロンでの使用
# MCPサーバーの起動(stdio mode)
uv run scryfall-mcp
# または開発モードで起動
SCRYFALL_MCP_DEBUG=true SCRYFALL_MCP_LOG_LEVEL=DEBUG uv run scryfall-mcp
📖 使用例
カード検索
# 基本的な検索
search_cards(query="Lightning Bolt")
# 日本語での検索
search_cards(query="白いクリーチャー", language="ja")
# フォーマット指定検索
search_cards(query="青いカウンター", format_filter="standard")
# Phase 2 長文クエリでの検索(Issue #4対応)
search_cards(query="死亡時にカードを1枚引く黒いクリーチャー", language="ja")
# -> "死亡時に〜" パターンマッチング: o:"when ~ dies" o:"draw a card" c:b t:creature
search_cards(query="戦場に出たときにトークンを生成する白いクリーチャー", language="ja")
# -> ETBトリガー + 効果: o:"enters the battlefield" o:"create" c:w t:creature
search_cards(query="攻撃したときにダメージを与える赤いクリーチャー", language="ja")
# -> 攻撃トリガー + 効果: o:"whenever ~ attacks" o:"deals damage" c:r t:creature
search_cards(query="死亡時にカードを引く飛行を持つ青いクリーチャー", language="ja")
# -> 複数能力の組み合わせ: o:"when ~ dies" o:"draw" keyword:flying c:u t:creature
# 動的な最新セット検索(Issue #3対応)
search_cards(query="最新のエクスパンション", language="ja")
# -> 自動的に最新のエクスパンションセットコードに変換: s:<latest_set_code>
# -> 1週間キャッシュでAPI負荷を軽減
自動補完
# カード名の補完
autocomplete_card_names(query="Light")
# -> ["Lightning Bolt", "Lightning Strike", "Lightning Helix"]
🏗️ アーキテクチャ
scryfall-mcp/
├── src/scryfall_mcp/
│ ├── api/ # Scryfall API クライアント
│ │ ├── client.py # HTTPクライアント実装
│ │ ├── rate_limiter.py # レート制限・サーキットブレーカー
│ │ └── sets.py # セット情報取得・キャッシング (NEW)
│ ├── cache/ # 2層キャッシュシステム
│ │ ├── backends.py # Memory/Redis/Composite
│ │ └── manager.py # キャッシュマネージャー
│ ├── i18n/ # 国際化・多言語対応
│ │ ├── constants.py # 静的語彙データ (NEW)
│ │ ├── locales.py # ロケール管理
│ │ └── mappings/ # 言語マッピング
│ ├── search/ # 検索パイプライン
│ │ ├── parser.py # 自然言語解析
│ │ ├── builder.py # クエリ構築
│ │ └── presenter.py # MCP出力フォーマット
│ ├── tools/ # MCPツール実装
│ │ └── search.py # 検索ツール
│ ├── server.py # MCPサーバーエントリポイント
│ ├── settings.py # 実行時設定管理
│ └── models.py # データモデル・型定義
├── tests/ # テストスイート
├── docs/ # ドキュメント
└── AGENT.md # AI開発者向けガイド
主要コンポーネント
- API Client: レート制限・リトライ・サーキットブレーカー搭載(asyncio.Lockによるスレッドセーフ実装)
- Cache System: L1 (Memory) + L2 (Redis) の2層キャッシュ(24時間TTL、Scryfall推奨値準拠)
- Search Pipeline: Parser → Builder → Presenter の責務分離
- i18n System: contextvarsベースの並行安全なロケール管理
- MCP Tools: 構造化レスポンス対応の検索・補完ツール(Context注入による進捗報告機能付き)
- Lifecycle Management: asynccontextmanagerベースの起動・シャットダウン処理
設定
環境変数で動作をカスタマイズできます:
# User-Agent設定(必須)
SCRYFALL_MCP_USER_AGENT="YourApp/1.0 (your-email@example.com)"
# レート制限設定
SCRYFALL_MCP_RATE_LIMIT_MS=100
# 言語設定
SCRYFALL_MCP_DEFAULT_LOCALE=ja
# キャッシュ設定(Scryfall推奨: 最低24時間)
SCRYFALL_MCP_CACHE_ENABLED=true
SCRYFALL_MCP_CACHE_BACKEND=memory
SCRYFALL_MCP_CACHE_TTL_SEARCH=86400 # 24時間(秒)
SCRYFALL_MCP_CACHE_TTL_DEFAULT=86400 # 24時間(秒)
詳細は を参照してください。
開発
テスト実行
# 全テスト実行(389テスト)
uv run pytest
# カバレッジ付きテスト
uv run pytest --cov=scryfall_mcp
# MCP統合テスト(Content構造検証)
uv run pytest tests/integration/test_mcp_content_validation.py -v
# 特定テストのみ
uv run pytest tests/api/test_client.py -v
コード品質チェック
# リント
uv run ruff check src/ tests/
# フォーマット
uv run ruff format src/ tests/
# 型チェック
uv run mypy src/
CI/CD
GitHub Actionsで以下のチェックを自動実行。
テストスイート:
- Python 3.11, 3.12マトリックステスト
- MCP統合テスト(stdio transport)
- MCP Inspector互換性テスト
品質チェック:
- Ruff linter(全コード)
- Mypy strict mode type check
- Bandit + Safety セキュリティスキャン
環境変数: CIではSCRYFALL_MCP_USER_AGENTを設定必須。
export SCRYFALL_MCP_USER_AGENT="GitHub-Actions-CI/1.0 (github-actions@github.com)"
MCP仕様準拠
このサーバーはModel Context Protocol仕様に完全準拠しています:
プロトコル対応
- MCPバージョン: 2024-11-05
- 通信方式: stdio (標準入出力)
- コンテンツタイプ: TextContent、EmbeddedResource
- ライフサイクル管理: asynccontextmanagerベースの起動・シャットダウン
構造化レスポンス
- カード情報を
EmbeddedResourceとして構造化 - カスタムURIスキーマ:
card://scryfall/{id} - 画像URLをテキストとして提供(MCP仕様準拠のため)
- エラーメッセージを多言語対応の
TextContentとして返却
観測可能性
- FastMCP Context注入による進捗報告
ctx.info(): 詳細ログ出力ctx.report_progress(): リアルタイム進捗通知ctx.error(): エラーログ記録
詳細な実装については を参照してください。
ドキュメント
- - PR受け付けルール・コーディング規約
- - MCPツール詳細仕様
- - i18n実装詳細
- - 開発環境・コーディング規約
- - 環境変数・設定項目
- - MCP統合テスト方法
- - 設計思想・技術的制約
コントリビューション
Scryfall MCP Serverへのコントリビューションを歓迎します。
クイックスタート
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
詳細ガイド
プルリクエストの受け付けルール、コーディング規約、テスト要件などの詳細は を参照してください。
重要な要件:
- 全テスト合格
- 型チェック (
mypy) 合格 - リント (
ruff) 合格 - NumPy styleのdocstring必須
- カバレッジ90%以上
ライセンス
このプロジェクトはMITライセンスの下で公開されています。詳細は ファイルを参照してください。
謝辞
- Scryfall - Magic: The Gathering データAPI
- Model Context Protocol - AIアシスタント統合プロトコル
サポート
- Issues: GitHub Issues
- Discussions: GitHub Discussions
Magic: The Gathering is a trademark of Wizards of the Coast LLC.