Skip to main content
Glama
DanWahlin
by DanWahlin

Azure Functions を使用した Marvel MCP サーバー

GitHub Codespacesでプロジェクトを開く ノードバージョン ライセンス

機能ツールセットアップMCPホストの構成

Marvel Developer API用のMCPサーバー。キャラクターやコミックデータとのインタラクションを可能にします。このプロジェクトの主な目的は、Azure FunctionsでホストされたMCPサーバーを使用してAPIを操作する方法を示すことです。

:このMCPサーバーで使用されるすべてのデータは、 Marvel公式APIから取得され、Marvelが所有しています。このプロジェクトはMarvelとは一切関係ありません。

🔧 機能

  • マーベルキャラクターの一覧: nameStartsWithlimitcomicsseriesなどのフィルターをサポートします。

  • ID で Marvel キャラクターを取得: キャラクターcharacterIdを使用して、任意のキャラクターの詳細情報を取得します。

  • キャラクターのコミック取得: formatdateRangeなどのさまざまなフィルターを使用して、特定のキャラクターが登場するコミックのリストを取得します。

  • ツールベースの MCP 統合: このサーバーをモデル コンテキスト プロトコル (MCP) ツール (VS Code、Claude など) に登録します。

  • 環境設定: .envファイルを使用して、 MARVEL_PUBLIC_KEYMARVEL_PRIVATE_KEYMARVEL_API_BASEなどの環境変数を管理します。

Related MCP server: Marvel MCP

🧰 ツール

1. get_characters 🔍🦸‍♂️

  • 説明: オプションのフィルターを使用して Marvel キャラクターを取得します。

  • 入力:

    • name (オプションの文字列): 完全なキャラクター名。

    • nameStartsWith (オプションの文字列): 指定された文字列で始まる名前の文字。

    • modifiedSince (オプションの文字列): この日付以降に変更された文字をフィルターする ISO 8601 日付文字列。

    • comicsserieseventsstories (オプションの文字列):関連エンティティでフィルタリングするためのIDのコンマ区切りリスト。

    • orderBy (オプションの文字列): name-modifiedなど、結果を並べ替えるフィールド。

    • limit (オプションの数値): 返される結果の最大数 (1~100)。

    • offset (オプションの数値): ページ区切りでスキップする結果の数。

  • 戻り値: 一致する文字を含むJSONレスポンス。詳細はsrc/schemas.tsCharacterDataWrapperSchema参照してください。

2. get_character_by_id 🆔🧑‍🎤

  • 説明: 一意の ID で Marvel キャラクターを取得します。

  • 入力:

    • characterId (数値): キャラクターの一意の ID。

  • 戻り値:キャラクターの詳細を含むJSONレスポンス。詳細はsrc/schemas.tsCharacterDataWrapperSchemaを参照してください。

3. get_comics_for_character 📚🎭

  • 説明: オプションのフィルターを使用して、特定のキャラクターが登場するコミックを取得します。

  • 入力:

    • characterId (数値): キャラクターの一意の ID。

    • オプションのフィルター:

      • formatformatType (文字列):コミック形式(例: comichardcover )でフィルタリングします。

      • noVariantshasDigitalIssue (ブール値): バリアントを除外するか、デジタル版のみを含めるかを指定するフラグ。

      • dateDescriptor (文字列): thisWeeknextWeekなどの定義済みの日付範囲。

      • dateRange (文字列): YYYY-MM-DD,YYYY-MM-DD形式のカスタム日付範囲。

      • titletitleStartsWith (文字列): タイトルまたはタイトルプレフィックスでフィルタリングします。

      • startYearissueNumberdigitalId (数値): 数値フィルター。

      • diamondCodeupcisbneanissn (文字列): 識別子フィルター。

      • creatorsserieseventsstoriessharedAppearancescollaborators (文字列): 関連するエンティティ ID のコンマ区切りリスト。

      • orderBy (文字列): title-modifiedなど、結果を並べ替えるフィールド。

      • limitoffset (数値):ページ区切りオプション。

  • 戻り値:指定されたキャラクターが登場するコミックを含むJSONレスポンス。詳細はsrc/schemas.tsComicDataWrapperSchemaを参照してください。

4. get_comics 📖🕵️‍♂️

  • 説明: オプションのフィルターを使用して、マーベルコミックのリストを取得します。

  • 入力:

    • format (オプションの文字列): 発行形式 (例: comicdigital comichardcover ) でフィルタリングします。

    • formatType (オプションの文字列): 発行形式の種類 ( comicまたはcollection ) でフィルタリングします。

    • noVariants (オプションのブール値): 結果セットからバリエーション (代替カバー、二次印刷、ディレクターズカットなど) を除外します。

    • dateDescriptor (オプションの文字列): 定義済みの日付範囲 ( lastWeekthisWeeknextWeekthisMonth ) 内のコミックを返します。

    • dateRange (オプションの文字列): 指定した日付範囲内のコミックを返します。日付はYYYY-MM-DD,YYYY-MM-DDの形式で指定する必要があります。

    • title (オプションの文字列): 入力と一致するタイトルを持つシリーズの問題のみを返します。

    • titleStartsWith (オプションの文字列): 入力で始まるタイトルのシリーズの問題のみを返します。

    • startYear (オプションの数値): 入力と一致する開始年を持つシリーズの問題のみを返します。

    • issueNumber (オプションの数値): 入力と一致する問題番号を持つシリーズの問題のみを返します。

    • diamondCodedigitalIdupcisbneanissn (オプションの文字列):さまざまな識別子でフィルタリングします。

    • hasDigitalIssue (オプションのブール値): デジタルで利用可能な結果のみを含めます。

    • modifiedSince (オプションの文字列): 指定された日付以降に変更されたコミックのみを返します (ISO 8601 形式)。

    • creatorscharactersserieseventsstoriessharedAppearancescollaborators (オプションの文字列): 関連エンティティでフィルタリングする ID のコンマ区切りリスト。

    • orderBy (オプションの文字列): 結果セットをフィールドで並べ替えます。降順で並べ替えるには、値に「-」を追加します(例: title-modified )。

    • limit (オプションの数値): 結果セットを指定されたリソース数に制限します (デフォルト: 20、最大: 100)。

    • offset (オプションの数値): 結果セット内の指定された数のリソースをスキップします。

  • 戻り値:一致するコミックを含むJSONレスポンス。詳細はsrc/schemas.tsComicDataWrapperSchemaを参照してください。

5. get_comic_by_id 🆔📘

  • 説明: 一意の ID で単一の Marvel コミックを取得します。

  • 入力:

    • comicId (数値): コミックの一意の ID。

  • 戻り値:コミックの詳細を含むJSONレスポンス。詳細はsrc/schemas.tsComicDataWrapperSchemaを参照してください。

6. get_characters_for_comic 🦸‍♀️📖

  • 説明: 特定のコミックに登場するマーベルキャラクターを取得します。

  • 入力:

    • comicId (数値): コミックの一意の ID。

    • オプションのフィルター:

      • name (オプションの文字列): フルネームで文字をフィルタリングします。

      • nameStartsWith (オプションの文字列): 指定された文字列で始まる名前の文字をフィルターします。

      • modifiedSince (オプションの文字列): この日付以降に変更された文字をフィルターする ISO 8601 日付文字列。

      • serieseventsstories (オプションの文字列): フィルタリングする関連エンティティ ID のコンマ区切りリスト。

      • orderBy (オプションの文字列): name-modifiedなど、結果を並べ替えるフィールド。

      • limit (オプションの数値): 返される結果の最大数 (1~100)。

      • offset (オプションの数値): ページ区切りでスキップする結果の数。

  • 戻り値:指定されたコミックに登場するキャラクターを含むJSONレスポンス。詳細はsrc/schemas.tsCharacterDataWrapperSchema参照してください。

🛠️ セットアップ

Marvel Developer APIアカウントにサインアップして、公開 API キーと秘密 API キーを取得します。

MCP ホストで MCP サーバーを直接使用する場合は、 「GitHub Copilot での使用」または「Claude Desktop での使用」セクションに進んでください。

ローカルでサーバーを実行する

  1. Azure ストレージ エミュレーターが必要です。次の 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を実行してください。

  2. このリポジトリをクローンします:

    git clone https://github.com/DanWahlin/marvel-mcp-azure-functions
  3. .env.templateの名前を.envに変更します。

  4. Marvel API の公開キーと秘密キーを.envファイルに追加します。

    MARVEL_PUBLIC_KEY=YOUR_PUBLIC_KEY MARVEL_PRIVATE_KEY=YOUR_PRIVATE_KEY MARVEL_API_BASE=https://gateway.marvel.com/v1/public
  5. 必要な依存関係をインストールし、プロジェクトをビルドします。

    npm install npm run build
  6. Azure Functions ホストをローカルで起動します。

    npm start
  7. (オプション) MCP Inspector を使用して MCP サーバーを試すには、次のコマンドを実行します。

    # Start the MCP Inspector npx @modelcontextprotocol/inspector node build/index.js

    ブラウザのコンソールに表示されている MCP Inspector URL にアクセスします。

    • Transport TypeSSEに変更します。

    • 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" } } }

リモート MCP 用に Azure にデプロイする

次のazdコマンドを実行して、必要な Azure リソースを使用して関数アプリをプロビジョニングし、コードをデプロイします。

azd up

サンプルで使用されているVNetにオプトインできます。これを行うには、 azd upの前に実行してください。

azd env set VNET_ENABLED true

さらに、 API Management を使用して MCP サーバーのセキュリティとポリシーを強化でき、App Service の組み込み認証を使用して Entra などのお気に入りの OAuth プロバイダーを設定することもできます。

GitHub Copilotのツールの使用

  1. mcp サーバーが検出可能になったので、GitHub Copilot を開いて、 Agentモード ( AskまたはEditはない) を選択します。

  2. Copilot チャット テキスト フィールドの「更新」ボタンを選択して、サーバー リストを更新します。

  3. 「🛠️」ボタンを選択すると、このリポジトリのツールも含め、使用可能なすべてのツールが表示されます。

  4. チャットに、ツールの 1 つが自然に呼び出されるような質問を投稿します。たとえば、次のようになります。

    List 10 marvel characters. Include images. What comics is Wolverine in? Which characters appear in the Avengers comics? What characters are in the Hedge Knight II: Sworn Sword (2007) comic?

    : 「申し訳ありません。応答は Responsible AI Service によってフィルター処理されました。」と表示された場合は、もう一度実行するか、プロンプトを言い換えてください。

-
security - not tested
A
license - permissive license
-
quality - not tested

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/DanWahlin/marvel-mcp-azure-functions'

If you have feedback or need assistance with the MCP directory API, please join our Discord server