Skip to main content
Glama

GitHub Notifications MCP Server

list-repo-notifications.ts3.21 kB
/** * Tool implementation for listing repository notifications */ import { z } from "zod"; import { githubGet } from "../utils/api.js"; import { formatNotification, formatError } from "../utils/formatters.js"; import { NotificationResponse } from "../types/github-api.js"; /** * Schema for list-repo-notifications tool input parameters */ export const listRepoNotificationsSchema = z.object({ owner: z.string().describe("The account owner of the repository"), repo: z.string().describe("The name of the repository"), all: z.boolean().optional().describe("If true, show notifications marked as read"), participating: z.boolean().optional().describe("If true, only shows notifications where user is directly participating"), since: z.string().optional().describe("ISO 8601 timestamp - only show notifications updated after this time"), before: z.string().optional().describe("ISO 8601 timestamp - only show notifications updated before this time"), page: z.number().optional().describe("Page number for pagination"), per_page: z.number().optional().describe("Number of results per page (max 100)") }); /** * Tool implementation for listing repository notifications */ export async function listRepoNotificationsHandler(args: z.infer<typeof listRepoNotificationsSchema>) { try { const perPage = args.per_page || 30; const page = args.page || 1; // Make request to GitHub API const notifications = await githubGet<NotificationResponse[]>(`/repos/${args.owner}/${args.repo}/notifications`, { params: { all: args.all, participating: args.participating, since: args.since, before: args.before, page: page, per_page: perPage, } }); // If no notifications, return simple message if (notifications.length === 0) { return { content: [{ type: "text", text: `No notifications found for repository ${args.owner}/${args.repo} with the given criteria.` }] }; } // Format the notifications for better readability const formattedNotifications = notifications.map(formatNotification).join("\n\n"); // Check for pagination - simplified approach without headers let paginationInfo = ""; if (notifications.length === perPage) { paginationInfo = "\n\nMore notifications may be available. You can view the next page by specifying 'page: " + (page + 1) + "' in the request."; } return { content: [{ type: "text", text: `${notifications.length} notifications found for repository ${args.owner}/${args.repo}: ${formattedNotifications}${paginationInfo}` }] }; } catch (error) { return { isError: true, content: [{ type: "text", text: formatError(`Failed to fetch notifications for repository ${args.owner}/${args.repo}`, error) }] }; } } /** * Register this tool with the server */ export function registerListRepoNotificationsTool(server: any) { server.tool( "list-repo-notifications", "List GitHub notifications for a specific repository", listRepoNotificationsSchema.shape, listRepoNotificationsHandler ); }

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/mcollina/mcp-github-notifications'

If you have feedback or need assistance with the MCP directory API, please join our Discord server