Marvel API MCP服务器

一个基于Azure Functions的MCP服务器,用于与Marvel开发者API交互,获取角色和漫画数据。

  • by DanWahlin
  • TypeScript
  • 混合部署
  • 1 星标
  • 更新于
在 GitHub 查看 danwahlin/marvel-mcp-azure-functions

使用说明

使用Azure功能的漫威MCP服务器

特性 • 工具 • 设置 • 配置MCP主机

MCP服务器 漫威开发者API,实现与角色和漫画数据的交互。 该项目的主要目标是展示如何使用Azure Functions托管的MCP服务器与API进行交互。

备注:此MCP服务器使用的所有数据都是从 官方Marvel API 并归漫威所有。该项目与漫威没有任何关联。

🔧 特性

  • 列出漫威角色:支持以下过滤器 nameStartsWith, limit, comics, series等等。
  • 按ID获取漫威角色:使用他们的工具获取任何角色的详细信息 characterId.
  • 为角色获取漫画:获取具有特定角色的漫画列表,并使用各种过滤器,如 format, dateRange等等。
  • 基于工具的MCP集成:使用模型上下文协议(MCP)工具(VS Code、Claude等)注册此服务器。
  • 环境配置:使用 .env 用于管理环境变量的文件,如 MARVEL_PUBLIC_KEY, MARVEL_PRIVATE_KEY 和 MARVEL_API_BASE.

🧰 工具

1. get_characters 🔍🦸‍♂️

  • 描述:使用可选过滤器获取漫威角色。
  • 输入:
    • name (可选字符串):完整字符名称。
    • nameStartsWith (可选字符串):名称以指定字符串开头的字符。
    • modifiedSince (可选字符串):ISO 8601日期字符串,用于过滤自该日期以来修改的字符。
    • comics, series, events, stories (可选字符串):以逗号分隔的ID列表,按相关实体进行筛选。
    • orderBy (可选字符串):用于对结果进行排序的字段,例如 name 或 -modified.
    • limit (可选数字):返回的最大结果数(1-100)。
    • offset (可选数字):分页时要跳过的结果数。
  • 退货:具有匹配字符的JSON响应。看 CharacterDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

2. get_character_by_id 🆔🧑‍🎤

  • 描述:通过漫威角色的唯一ID获取该角色。
  • 输入:
    • characterId (number):字符的唯一ID。
  • 退货:包含字符详细信息的JSON响应。看 CharacterDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

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 (数字):数字过滤器。
      • diamondCode, upc, isbn, ean, issn (string):标识符筛选器。
      • creators, series, events, stories, sharedAppearances, collaborators (string):以逗号分隔的相关实体ID列表。
      • orderBy (string):用于对结果进行排序的字段,例如 title 或 -modified.
      • limit, offset (数字):分页选项。
  • 退货:JSON响应,带有指定字符的漫画。看 ComicDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

4. get_comics 📖🕵️‍♂️

  • 描述:使用可选过滤器获取漫威漫画列表。
  • 输入:
    • format (可选字符串):按问题格式过滤(例如。, comic, digital comic, hardcover).
    • formatType (可选字符串):按问题格式类型筛选(comic 或 collection).
    • noVariants (可选布尔值):从结果集中排除变体(备用封面、二次打印、导演剪辑等)。
    • dateDescriptor (可选字符串):返回预定义日期范围内的漫画(lastWeek, thisWeek, nextWeek, thisMonth).
    • dateRange (可选字符串):返回自定义日期范围内的漫画。日期必须指定为 YYYY-MM-DD,YYYY-MM-DD.
    • title (可选字符串):仅返回标题与输入匹配的系列问题。
    • titleStartsWith (可选字符串):仅返回标题以输入开头的系列中的问题。
    • startYear (可选数字):仅返回开始年份与输入匹配的系列问题。
    • issueNumber (可选编号):仅返回序列号与输入匹配的问题。
    • diamondCode, digitalId, upc, isbn, ean, issn (可选字符串):按各种标识符过滤。
    • hasDigitalIssue (可选布尔值):仅包括数字结果。
    • modifiedSince (可选字符串):仅返回自指定日期以来修改过的漫画(ISO 8601格式)。
    • creators, characters, series, events, stories, sharedAppearances, collaborators (可选字符串):以逗号分隔的ID列表,按相关实体进行筛选。
    • orderBy (可选字符串):按一个或多个字段对结果集进行排序。在值中添加“-”以按降序排序(例如。, title, -modified).
    • limit (可选数字):将结果集限制为指定数量的资源(默认值:20,最大值:100)。
    • offset (可选数字):跳过结果集中指定数量的资源。
  • 退货:带有匹配漫画的JSON响应。看 ComicDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

5. get_comic_by_id 🆔📘

  • 描述:通过其唯一ID获取一部漫威漫画。
  • 输入:
    • comicId (数字):漫画的唯一ID。
  • 退货:带有漫画细节的JSON响应。看 ComicDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

6. get_characters_for_comic 🦸‍♀️📖

  • 描述:获取出现在特定漫画中的漫威角色。
  • 输入:
    • comicId (数字):漫画的唯一ID。
    • 可选过滤器:
      • name (可选字符串):按全名过滤字符。
      • nameStartsWith (可选字符串):筛选名称以指定字符串开头的字符。
      • modifiedSince (可选字符串):ISO 8601日期字符串,用于过滤自该日期以来修改的字符。
      • series, events, stories (可选字符串):以逗号分隔的相关实体ID列表。
      • orderBy (可选字符串):用于对结果进行排序的字段,例如 name 或 -modified.
      • limit (可选数字):返回的最大结果数(1-100)。
      • offset (可选数字):分页时要跳过的结果数。
  • 退货:JSON响应,其中字符出现在指定的漫画中。看 CharacterDataWrapperSchema 在……里面 src/schemas.ts 了解详情。

🛠️ 设置

注册一个 漫威开发者API 帐户并获取您的公共和私人API密钥。

如果要直接在MCP主机中访问MCP服务器,请跳到 与GitHub Copilot一起使用 或 与Claude Desktop一起使用 部分。

在本地运行服务器

  1. 需要Azure存储模拟器。有两种选择:

    • 在Docker容器中启动Azurite:

      docker run -p 10000:10000 -p 10001:10001 -p 10002:10002 \
          mcr.microsoft.com/azure-storage/azurite
      
    • 您可以使用 Azurite VS代码扩展。安装扩展后,运行 Azurite: Start 通过VS Code命令面板。

  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检查器URL:

    • 改变 Transport Type 向 SSE.
    • 进入 http://0.0.0.0:7071/runtime/webhooks/mcp/sse 对于URL。
    • 选择 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代码中与GitHub Copilot一起使用

备注:如果您已经使用Claude Desktop启用了MCP服务器,请添加 chat.mcp.discovery.enabled: true 在您的VS代码设置中,它将发现现有的MCP服务器列表。

如果要将MCP服务器与特定的仓库相关联,请创建 .vscode/mcp.json 包含此内容的文件:

{
  "inputs": [],
  "servers": {
     "marvel-mcp": {
       "type": "sse",
       "url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
     }
  }
}

如果要将MCP服务器与所有存储库相关联,请将以下内容添加到VS代码用户设置JSON中:

"mcp": {
 "servers": {
   "marvel-mcp": {
     "type": "sse",
     "url": "http://0.0.0.0:7071/runtime/webhooks/mcp/sse"
   }
 }
}

部署到Azure以实现远程MCP

运行这个 azd 命令为功能应用程序配置任何所需的Azure资源,并部署您的代码:

azd up

您可以选择加入示例中使用的ExpressRoute。为此,请先执行此操作 azd up

azd env set VNET_ENABLED true

另外, API管理 可用于提高MCP服务器的安全性和策略,以及 App Service内置身份验证 可用于设置您最喜欢的OAuth提供程序,包括Entra。

在GitHub Copilot中使用工具

  1. 现在可以发现mcp服务器,打开GitHub Copilot并选择 Agent 模式(非 Ask 或 Edit).

  2. 在副驾驶聊天文本字段中选择“刷新”按钮以刷新服务器列表。

  3. 选择“🛠️“按钮查看所有可能的工具,包括此仓库中的工具。

  4. 在聊天中提出一个问题,自然会调用其中一个工具,例如:

    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?
    

    备注:如果您看到“对不起,响应已由负责任的人工智能服务过滤。”,请尝试再次运行或重新表述提示。