anujjoshi3105's picture
first commit
3d23b0f
import { z } from "zod";
import type { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { safeToolHandler } from "./base";
import * as service from "../../gfg/service";
/**
* Registers all GeeksforGeeks (GFG)-related MCP tools.
*/
export function register(mcp: McpServer): void {
// Get user rating
mcp.tool(
"gfg_get_rating",
"Fetches a GeeksforGeeks user's coding score/rating and star level.",
{ username: z.string().describe("The GFG username/handle") },
safeToolHandler(({ username }) => service.getUserRating(username))
);
// Get user submissions
mcp.tool(
"gfg_get_submissions",
"Fetches problem submissions for a GeeksforGeeks user with optional time-based filtering.",
{
handle: z.string().describe("The GFG username/handle"),
requestType: z.string().optional().describe("Type of request filter"),
year: z.string().optional().describe("Filter by year (e.g., '2024')"),
month: z.string().optional().describe("Filter by month (e.g., '01' for January)")
},
safeToolHandler(({ handle, requestType, year, month }) =>
service.getUserSubmissions({ handle, requestType, year, month })
)
);
// Get user posts
mcp.tool(
"gfg_get_posts",
"Fetches articles and posts authored by a GeeksforGeeks user.",
{
username: z.string().describe("The GFG username"),
fetch_type: z.string().optional().describe("Type of posts to fetch"),
page: z.number().optional().describe("Page number for pagination")
},
safeToolHandler(({ username, fetch_type, page }) =>
service.getUserPosts({ username, fetch_type, page })
)
);
// Get promotional events
mcp.tool(
"gfg_get_promotional_events",
"Fetches current and upcoming promotional events/contests on GeeksforGeeks.",
{
page_source: z.string().describe("The page source identifier"),
user_country_code: z.string().optional().describe("User's country code for localized events")
},
safeToolHandler(({ page_source, user_country_code }) =>
service.getPromotionalEvents({ page_source, user_country_code })
)
);
// Get contest leaderboard
mcp.tool(
"gfg_get_contest_leaderboard",
"Fetches the leaderboard for GeeksforGeeks coding contests.",
{
leaderboard_type: z.number().optional().describe("Type of leaderboard (numeric)"),
page: z.number().optional().describe("Page number for pagination"),
year_month: z.string().optional().describe("Filter by year and month (e.g., '2024-01')")
},
safeToolHandler(({ leaderboard_type, page, year_month }) =>
service.getContestLeaderboard({ leaderboard_type, page, year_month })
)
);
}