Interact with the Marvel Developer API to access data on characters and comics.
Features β’ Tools β’ Setup β’ Configuring an MCP Host
MCP Server for the Marvel Developer API, enabling interaction with characters and comics data. The main goal of the project is to show how an MCP server can be used to interact with APIs.
Note: All data used by this MCP server is fetched from the official Marvel API and owned by Marvel. This project is not affiliated with Marvel in any way.
nameStartsWith
, limit
, comics
, series
, etc.characterId
.format
, dateRange
, etc.marvel-content.html
) with all the content in it..env
file to manage environment variables like MARVEL_PUBLIC_KEY
, MARVEL_PRIVATE_KEY
and MARVEL_API_BASE
.get_characters
ππ¦ΈββοΈname
(optional string): Full character name.nameStartsWith
(optional string): Characters whose names start with the specified string.modifiedSince
(optional string): ISO 8601 date string to filter characters modified since this date.comics
, series
, events
, stories
(optional string): Comma-separated list of IDs to filter by related entities.orderBy
(optional string): Fields to order the results by, such as name
or -modified
.limit
(optional number): Maximum number of results to return (1β100).offset
(optional number): Number of results to skip for pagination.CharacterDataWrapperSchema
in src/schemas.ts
for details.get_character_by_id
ππ§βπ€characterId
(number): The unique ID of the character.CharacterDataWrapperSchema
in src/schemas.ts
for details.get_comics_for_character
ππcharacterId
(number): The unique ID of the character.format
, formatType
(string): Filter by comic format (e.g., comic
, hardcover
).noVariants
, hasDigitalIssue
(boolean): Flags to exclude variants or include only digital issues.dateDescriptor
(string): Predefined date ranges like thisWeek
, nextWeek
.dateRange
(string): Custom date range in the format YYYY-MM-DD,YYYY-MM-DD
.title
, titleStartsWith
(string): Filter by title or title prefix.startYear
, issueNumber
, digitalId
(number): Numeric filters.diamondCode
, upc
, isbn
, ean
, issn
(string): Identifier filters.creators
, series
, events
, stories
, sharedAppearances
, collaborators
(string): Comma-separated list of related entity IDs.orderBy
(string): Fields to order the results by, such as title
or -modified
.limit
, offset
(number): Pagination options.ComicDataWrapperSchema
in src/schemas.ts
for details.get_comics
ππ΅οΈββοΈformat
(optional string): Filter by the issue format (e.g., comic
, digital comic
, hardcover
).formatType
(optional string): Filter by the issue format type (comic
or collection
).noVariants
(optional boolean): Exclude variants (alternate covers, secondary printings, director's cuts, etc.) from the result set.dateDescriptor
(optional string): Return comics within a predefined date range (lastWeek
, thisWeek
, nextWeek
, thisMonth
).dateRange
(optional string): Return comics within a custom date range. Dates must be specified as YYYY-MM-DD,YYYY-MM-DD
.title
(optional string): Return only issues in series whose title matches the input.titleStartsWith
(optional string): Return only issues in series whose title starts with the input.startYear
(optional number): Return only issues in series whose start year matches the input.issueNumber
(optional number): Return only issues in series whose issue number matches the input.diamondCode
, digitalId
, upc
, isbn
, ean
, issn
(optional string): Filter by various identifiers.hasDigitalIssue
(optional boolean): Include only results which are available digitally.modifiedSince
(optional string): Return only comics which have been modified since the specified date (ISO 8601 format).creators
, characters
, series
, events
, stories
, sharedAppearances
, collaborators
(optional string): Comma-separated list of IDs to filter by related entities.orderBy
(optional string): Order the result set by a field or fields. Add a "-" to the value to sort in descending order (e.g., title
, -modified
).limit
(optional number): Limit the result set to the specified number of resources (default: 20, max: 100).offset
(optional number): Skip the specified number of resources in the result set.ComicDataWrapperSchema
in src/schemas.ts
for details.get_comic_by_id
ππcomicId
(number): The unique ID of the comic.ComicDataWrapperSchema
in src/schemas.ts
for details.get_characters_for_comic
π¦ΈββοΈπcomicId
(number): The unique ID of the comic.name
(optional string): Filter characters by full name.nameStartsWith
(optional string): Filter characters whose names start with the specified string.modifiedSince
(optional string): ISO 8601 date string to filter characters modified since this date.series
, events
, stories
(optional string): Comma-separated list of related entity IDs to filter by.orderBy
(optional string): Fields to order the results by, such as name
or -modified
.limit
(optional number): Maximum number of results to return (1β100).offset
(optional number): Number of results to skip for pagination.CharacterDataWrapperSchema
in src/schemas.ts
for details.Sign up for a Marvel Developer API account and get your public and private API keys.
If you want to run it directly in an MCP host, jump to the Use with Claude Desktop or Use with GitHub Copilot sections.
If you'd like to run MCP Inspector locally to test the server, follow these steps:
Clone this repository:
git clone https://github.com/DanWahlin/marvel-mcp
Rename .env.template
to .env
.
Add your Marvel API public and private keys to the .env
file.
MARVEL_PUBLIC_KEY=YOUR_PUBLIC_KEY
MARVEL_PRIVATE_KEY=YOUR_PRIVATE_KEY
MARVEL_API_BASE=https://gateway.marvel.com/v1/public
Install the required dependencies and build the project.
npm install
npm run build
(Optional) To try out the server using MCP Inspector run the following command:
# Start the MCP Inspector
npx @modelcontextprotocol/inspector node dist/index.js
Visit the MCP Inspector URL shown in the console in your browser. Change Arguments
to dist/index.js
and select Connect
. Select List Tools
to see the available tools.
Add the following to your claude_desktop_config.json
:
{
"mcpServers": {
"marvel-mcp": {
"type": "stdio",
"command": "npx",
// "command": "node",
"args": [
"-y",
"@codewithdan/marvel-mcp"
// "/PATH/TO/marvel-mcp/dist/index.js"
],
"env": {
"MARVEL_PUBLIC_KEY": "YOUR_PUBLIC_KEY",
"MARVEL_PRIVATE_KEY": "YOUR_PRIVATE_KEY",
"MARVEL_API_BASE": "https://gateway.marvel.com/v1/public"
}
}
}
}
To install Marvel MCP Server for Claude Desktop automatically via Smithery:
npx -y @smithery/cli install @DanWahlin/marvel-mcp --client claude
Note: If you already have the MCP server enabled with Claude Desktop, add
chat.mcp.discovery.enabled: true
in your VS Code settings and it will discover existing MCP server lists.
Add the following to your user settings file or add it to the .vscode/mcp.json
file if you only want it available in this repo (you can use MCP: Add Server from the command palette and select Global or Workspace):
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "marvel-public-api-key",
"description": "Marvel public API Key",
"password": true
},
{
"type": "promptString",
"id": "marvel-private-api-key",
"description": "Marvel private API Key",
"password": true
}
],
"servers": {
"marvel-mcp": {
"command": "npx",
// "command": "node",
"args": [
"-y",
"@codewithdan/marvel-mcp"
// "/PATH/TO/marvel-mcp/dist/index.js"
],
"env": {
"MARVEL_PUBLIC_KEY": "${input:marvel-public-api-key}",
"MARVEL_PRIVATE_KEY": "${input:marvel-private-api-key}",
"MARVEL_API_BASE": "https://gateway.marvel.com/v1/public"
}
}
}
}
Now that the mcp server is discoverable, open GitHub Copilot and select the Agent
mode (not Ask
or Edits
).
Select the "refresh" button in the Copilot chat text field to refresh the server list.
Select the "π οΈ" button to see all the possible tools, including the ones from this repo.
Put a question in the chat that would naturally invoke one of the tools, for example:
List 10 marvel characters.
What comics is Wolverine in?
Give me details about villains in the Marvel universe.
Which characters appear in the Avengers comics?
What characters are in the Hedge Knight II: Sworn Sword (2007) comic?
List 10 characters from Ant-Man comics.
Note: If you see "Sorry, the response was filtered by the Responsible AI Service.", try running it again or rephrasing the prompt.
Bonus: When you ask about characters or comics, the server will automatically create a marvel-content.html
file in your project root with a beautifully styled page containing all the character/comic information and images, then open it in your browser!
Interact with AWS resources using Single Sign-On (SSO). Supports SSO login, listing accounts/roles, and executing AWS CLI commands.
Interact with Heroku Platform resources securely using the Heroku CLI. Requires the Heroku CLI and a valid API key.
Interact with Webflow APIs to list and edit your site and CMS data.
A template for deploying a remote, authentication-free MCP server on Cloudflare Workers.
Interact with Speckle, the collaborative data hub that connects with your AEC tools.
A Rust-based server that integrates the Wazuh SIEM system with MCP-compatible applications.
Core AWS MCP server providing prompt understanding and server management capabilities.
An MCP server for interacting with the Coolify API to manage servers and applications.
Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a searchable Graphlit project.
Retrieve logs from the Mezmo observability platform.