anilist-mcp
Version:
AniList MCP server for accessing AniList API data
66 lines (65 loc) • 2.22 kB
JavaScript
import { z } from "zod";
export function registerRecommendationTools(server, anilist) {
// anilist.recommendation.get()
server.tool("get_recommendation", "Get an AniList recommendation by its ID", {
recommendID: z.number().describe("The AniList recommendation ID"),
}, {
title: "Get AniList Recommendation by ID",
readOnlyHint: true,
openWorldHint: true,
}, async ({ recommendID }) => {
try {
const recommendation = await anilist.recommendation.get(recommendID);
return {
content: [
{
type: "text",
text: JSON.stringify(recommendation, null, 2),
},
],
};
}
catch (error) {
return {
content: [{ type: "text", text: `Error: ${error.message}` }],
isError: true,
};
}
});
// anilist.recommendation.getList()
server.tool("get_recommendations_for_media", "Get AniList recommendations for a specific media", {
mediaID: z.number().describe("The AniList media ID"),
page: z
.number()
.optional()
.default(1)
.describe("Target a specific page number for recommendations"),
perPage: z
.number()
.optional()
.default(25)
.describe("Limit the page amount (max 25 per AniList limits)"),
}, {
title: "Get AniList Recommendations for Media",
readOnlyHint: true,
openWorldHint: true,
}, async ({ mediaID, page, perPage }) => {
try {
const recommendationList = await anilist.recommendation.getList(mediaID, page, perPage);
return {
content: [
{
type: "text",
text: JSON.stringify(recommendationList, null, 2),
},
],
};
}
catch (error) {
return {
content: [{ type: "text", text: `Error: ${error.message}` }],
isError: true,
};
}
});
}