import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import type { WikiPagesResponse } from "../types.js";
import { queryWikipedia, jsonResponse, textResponse, errorResponse } from "../api.js";
export function registerLanguagesTool(server: McpServer): void {
server.tool(
"wiki_get_languages",
"Get available language versions of a Wikipedia article",
{
title: z.string().describe("Article title"),
},
async ({ title }) => {
try {
const data = await queryWikipedia<WikiPagesResponse>({
action: "query",
titles: title,
prop: "langlinks",
lllimit: "500",
llprop: "url|autonym",
});
const pages = data.query?.pages ?? {};
const page = Object.values(pages)[0];
if (page?.missing !== undefined) {
return textResponse(`Article "${title}" not found`);
}
const languages = page?.langlinks?.map((lang) => ({
language: lang.autonym,
code: lang.lang,
title: lang.title,
url: lang.url,
})) ?? [];
return jsonResponse({
title: page?.title,
languageCount: languages.length,
languages,
});
} catch (error) {
return errorResponse(error);
}
}
);
}