@codewithdan/dc-comics-mcp
Version:
DC Comics APIs MCP Server using Comic Vine API
28 lines (27 loc) • 1.69 kB
JavaScript
import { markdownInstructions } from "../../instructions.js";
import { IssuesResponseSchema } from "../schemas.js";
import { GetIssuesForCharacterSchema } from "./schemas.js";
import { createEmptyResponse, DEFAULT_FIELD_LISTS, formatResourceId, performDcComicsSearch } from "../../utils.js";
export const get_issues_for_character = {
description: `Fetch DC Comics issues (comics) filtered by character ID and optional filters. ${markdownInstructions}`,
schema: GetIssuesForCharacterSchema,
handler: async (args) => {
const { characterId, ...rest } = GetIssuesForCharacterSchema.parse(args);
// Format character ID with the proper prefix
const formattedId = formatResourceId('CHARACTER', characterId);
// First get character details to confirm it exists
const characterSearchResults = await performDcComicsSearch(formattedId, 'character', 'id,name');
// Check if character was found
if (!characterSearchResults.results || characterSearchResults.results.length === 0) {
return createEmptyResponse(IssuesResponseSchema, rest.limit, rest.offset);
}
// Now search for issues with this character
// Use character name for better search results
const characterName = characterSearchResults.results[0].name || '';
// Set default field_list if not provided
let fieldList = rest.field_list || DEFAULT_FIELD_LISTS.ISSUE;
// Search for issues featuring this character
const issueSearchResults = await performDcComicsSearch(characterName, 'issue', fieldList, rest.limit, rest.offset);
return IssuesResponseSchema.parse(issueSearchResults);
}
};