Marvel MCP Server using Azure Functions について
Marvel MCP Server using Azure Functionsは、公式Marvel APIを介してキャラクターやコミックを検索するMCPツールを提供します。MCPホストの利用者向けで、Azure Functionsによるサーバー運用例も示します。
主な機能
- 01条件を指定したキャラクター検索
- 02IDによるキャラクター詳細取得
- 03条件を指定したコミック一覧
- 04特定キャラクターが登場するコミック検索
- 05コミックに登場するキャラクター検索
- 06Azure Functionsでの設定とデプロイ
活用シーン
- 01名前や関連エンティティからキャラクターを検索
- 02キャラクターが登場するコミックを確認
- 03コミックに登場するキャラクターを調査
- 04AzureにリモートMCPサーバーをデプロイ
MCP 対応
MCPクライアント向けに、Marvelのキャラクターやコミックを検索するツールを提供し、ID検索や条件付き一覧取得に対応します。SSEでMCPホストに接続でき、Azure Functionsにもデプロイできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
Marvel Developer API 用の MCP サーバーです。キャラクターやコミックのデータを操作できます。このプロジェクトの主な目的は、Azure Functions でホストされた MCP サーバーを使用して API と連携する方法を紹介することです。
注意:この MCP サーバーで使用するすべてのデータは、公式 Marvel API から取得され、Marvel が所有しています。このプロジェクトは Marvel とは一切関係ありません。
🔧 機能
- Marvel キャラクターの一覧表示:
nameStartsWith、limit、comics、seriesなどのフィルターに対応しています。 - ID による Marvel キャラクターの取得:
characterIdを使用して、任意のキャラクターの詳細情報を取得します。 - キャラクターに関連するコミックの取得:特定のキャラクターが登場するコミックの一覧を、
format、dateRangeなどのさまざまなフィルターを指定して取得します。 - ツールベースの MCP 連携:このサーバーを Model Context Protocol(MCP)ツール(VS Code、Claude など)に登録できます。
- 環境設定:
.envファイルを使用して、MARVEL_PUBLIC_KEY、MARVEL_PRIVATE_KEY、MARVEL_API_BASEなどの環境変数を管理します。
🧰 ツール
1. get_characters 🔍🦸♂️
- 説明:任意のフィルターを指定して Marvel キャラクターを取得します。
- 入力:
name(省略可能な文字列):キャラクターの正式名称。nameStartsWith(省略可能な文字列):指定した文字列で名前が始まるキャラクター。modifiedSince(省略可能な文字列):この日付以降に変更されたキャラクターに絞り込むための ISO 8601 日付文字列。comics、series、events、stories(省略可能な文字列):関連エンティティによる絞り込みに使用する、ID のカンマ区切りリスト。orderBy(省略可能な文字列):結果の並べ替えに使用するフィールド。nameや-modifiedなどを指定します。limit(省略可能な数値):返す結果の最大数(1~100)。offset(省略可能な数値):ページネーションでスキップする結果の数。
- 戻り値:一致するキャラクターを含む JSON レスポンス。詳細は
src/schemas.tsのCharacterDataWrapperSchemaを参照してください。
2. get_character_by_id 🆔🧑🎤
- 説明:一意の ID を指定して Marvel キャラクターを取得します。
- 入力:
characterId(数値):キャラクターの一意の ID。
- 戻り値:キャラクターの詳細を含む JSON レスポンス。詳細は
src/schemas.tsのCharacterDataWrapperSchemaを参照してください。
3. get_comics_for_character 📚🎭
- 説明:特定のキャラクターが登場するコミックを、任意のフィルターを指定して取得します。
- 入力:
characterId(number):キャラクターの一意の ID。- 任意のフィルター:
format、formatType(string):コミックの形式で絞り込みます(例:comic、hardcover)。noVariants、hasDigitalIssue(boolean):バリアントを除外するか、デジタル版の号のみを含めるかを指定するフラグ。dateDescriptor(string):thisWeek、nextWeekなど、定義済みの日付範囲。dateRange(string):YYYY-MM-DD,YYYY-MM-DD形式で指定するカスタムの日付範囲。title、titleStartsWith(string):タイトルまたはタイトルの先頭部分で絞り込みます。startYear、issueNumber、digitalId(number):数値によるフィルター。diamondCode、upc、isbn、ean、issn(string):識別子によるフィルター。creators、series、events、stories、sharedAppearances、collaborators(string):関連エンティティ ID のカンマ区切りリスト。orderBy(string):結果の並べ替えに使用するフィールド。titleや-modifiedなどを指定します。limit、offset(number):ページネーションのオプション。
- 戻り値:指定したキャラクターが登場するコミックを含む JSON レスポンス。詳細は
src/schemas.tsのComicDataWrapperSchemaを参照してください。
4. get_comics 📖🕵️♂️
- 説明:任意のフィルターを指定して、Marvel コミックの一覧を取得します。
- 入力:
format(任意の string):号の形式で絞り込みます(例:comic、digital comic、hardcover)。formatType(任意の string):号の形式タイプ(comicまたはcollection)で絞り込みます。noVariants(任意の boolean):バリアント(別カバー、第2刷、ディレクターズカットなど)を結果から除外します。dateDescriptor(任意の string):定義済みの日付範囲(lastWeek、thisWeek、nextWeek、thisMonth)内のコミックを返します。dateRange(任意の string):カスタムの日付範囲内のコミックを返します。日付はYYYY-MM-DD,YYYY-MM-DD形式で指定してください。title(任意の string):タイトルが入力値に一致するシリーズの号のみを返します。titleStartsWith(任意の string):タイトルが入力値で始まるシリーズの号のみを返します。startYear(任意の number):開始年が入力値に一致するシリーズの号のみを返します。issueNumber(任意の number):号番号が入力値に一致するシリーズの号のみを返します。diamondCode、digitalId、upc、isbn、ean、issn(任意の string):各種識別子で絞り込みます。hasDigitalIssue(任意の boolean):デジタル版が提供されている結果のみを含めます。modifiedSince(任意の string):指定日以降に変更されたコミックのみを返します(ISO 8601形式)。creators、characters、series、events、stories、sharedAppearances、collaborators(任意の string):関連エンティティで絞り込むための ID のカンマ区切りリスト。orderBy(任意の string):1つまたは複数のフィールドで結果を並べ替えます。降順にするには値の先頭に「-」を付けます(例:title、-modified)。limit(任意の number):結果に含めるリソース数を指定します(デフォルト:20、最大:100)。offset(任意の number):結果から指定した数のリソースをスキップします。
- 戻り値:条件に一致するコミックを含む JSON レスポンス。詳細は
src/schemas.tsのComicDataWrapperSchemaを参照してください。
5. get_comic_by_id 🆔📘
- 説明:一意の ID を指定して、Marvel コミックを1冊取得します。
- 入力:
comicId(number):コミックの一意の ID。
- 戻り値:コミックの詳細を含む JSON レスポンス。詳細は
src/schemas.tsのComicDataWrapperSchemaを参照してください。
6. get_characters_for_comic 🦸♀️📖
- 説明:特定のコミックに登場するMarvelのキャラクターを取得します。
- 入力:
comicId(数値):コミックの一意のIDです。- オプションのフィルター:
name(オプションの文字列):フルネームでキャラクターを絞り込みます。nameStartsWith(オプションの文字列):名前が指定した文字列で始まるキャラクターを絞り込みます。modifiedSince(オプションの文字列):この日付以降に更新されたキャラクターを絞り込むためのISO 8601形式の日付文字列です。series、events、stories(オプションの文字列):関連するエンティティIDをカンマ区切りで指定したリストで絞り込みます。orderBy(オプションの文字列):結果の並べ替えに使用するフィールドです。nameや-modifiedなどを指定します。limit(オプションの数値):返す結果の最大数です(1~100)。offset(オプションの数値):ページネーションでスキップする結果の数です。
- 戻り値:指定したコミックに登場するキャラクターを含むJSONレスポンスです。詳細は
src/schemas.tsのCharacterDataWrapperSchemaを参照してください。
🛠️ セットアップ
Marvel Developer APIのアカウントに登録し、公開APIキーと秘密APIキーを取得します。
MCP ホストでMCPサーバーを直接使用する場合は、GitHub Copilotでの使用またはClaude Desktopでの使用のセクションに進んでください。
サーバーをローカルで実行する
-
Azure Storage Emulatorが必要です。方法は2つあります。
-
DockerコンテナーでAzuriteを起動します。
docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \ mcr.microsoft.com/azure-storage/azurite -
Azurite VS Code拡張機能を使用できます。拡張機能をインストールしたら、VS Codeのコマンドパレットから
Azurite: Startを実行します。
-
-
このリポジトリをクローンします。
git clone https://github.com/DanWahlin/marvel-mcp-azure-functions -
.env.templateの名前を.envに変更します。 -
Marvel APIの公開キーと秘密キーを
.envファイルに追加します。MARVEL_PUBLIC_KEY=YOUR_PUBLIC_KEY MARVEL_PRIVATE_KEY=YOUR_PRIVATE_KEY MARVEL_API_BASE=https://gateway.marvel.com/v1/public -
必要な依存関係をインストールし、プロジェクトをビルドします。
npm install npm run build -
Azure Functionsホストをローカルで起動します。
npm start -
(オプション)MCP Inspectorを使用してMCPサーバーを試すには、次のコマンドを実行します。
# Start the MCP Inspector npx @modelcontextprotocol/inspector node build/index.jsコンソールに表示されたMCP InspectorのURLをブラウザーで開きます。
Transport TypeをSSEに変更します。- URLに
http://0.0.0.0:7071/runtime/webhooks/mcp/sseを入力します。 Connectボタンを選択します。List Toolsを選択します。- ツールを選択して試します。
MCP ホストの構成
Claude Desktopでの使用
次の内容をclaude_desktop_config.jsonに追加します。
{
"mcpServers": {
"marvel-mcp": {
"type": "sse",
"url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
}
}
}
VS CodeのGitHub Copilotでの使用
注:Claude DesktopですでにMCPサーバーを有効にしている場合は、VS Codeの設定に
chat.mcp.discovery.enabled: trueを追加すると、既存のMCPサーバーリストが検出されます。
MCPサーバーを特定のリポジトリに関連付ける場合は、次の内容を含む.vscode/mcp.jsonファイルを作成します。
{
"inputs": [],
"servers": {
"marvel-mcp": {
"type": "sse",
"url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
}
}
}
MCPサーバーをすべてのリポジトリに関連付ける場合は、次の内容をVS Codeのユーザー設定JSONに追加します。
"mcp": {
"servers": {
"marvel-mcp": {
"type": "sse",
"url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
}
}
}
Azure にリモート MCP をデプロイする
この azd コマンドを実行して、必要な Azure リソースとともに関数アプリをプロビジョニングし、コードをデプロイします。
azd up
サンプルで VNet を使用するように選択できます。その場合は、azd up の実行前に次の操作を行います。
azd env set VNET_ENABLED true
さらに、API Management を使用して MCP サーバーのセキュリティとポリシーを強化したり、App Service の組み込み認証を使用して、Entra を含む任意の OAuth プロバイダーを設定したりできます。
GitHub Copilot でツールを使用する
-
MCP サーバーが検出可能になったので、GitHub Copilot を開き、
Agentモード(AskまたはEditではありません)を選択します。 -
Copilot のチャット入力欄にある「更新」ボタンを選択して、サーバーリストを更新します。
-
「🛠️」ボタンを選択すると、このリポジトリのツールを含む、利用可能なすべてのツールが表示されます。
-
次のように、ツールのいずれかが自然に呼び出されるような質問をチャットに入力します。
マーベルのキャラクターを10人リストアップしてください。画像も含めてください。 ウルヴァリンはどのコミックに登場しますか? アベンジャーズのコミックにはどのキャラクターが登場しますか? コミック『Hedge Knight II: Sworn Sword』(2007年)にはどのキャラクターが登場しますか?注: 「Sorry, the response was filtered by the Responsible AI Service.」と表示された場合は、もう一度実行するか、プロンプトの表現を変えてみてください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。