Skip to main content
Glama
mcollina

GitHub Notifications MCP Server

list-notifications

Retrieve and manage GitHub notifications for the authenticated user, with options to filter by participation status, read state, and time range.

Instructions

List GitHub notifications for the authenticated user

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
allNoIf true, show notifications marked as read
participatingNoIf true, only shows notifications where user is directly participating
sinceNoISO 8601 timestamp - only show notifications updated after this time
beforeNoISO 8601 timestamp - only show notifications updated before this time
pageNoPage number for pagination
per_pageNoNumber of results per page (max 100)

Implementation Reference

  • The main handler function that executes the tool logic: fetches GitHub notifications based on parameters, formats them for readability, handles pagination info, and manages errors.
    export async function listNotificationsHandler(args: z.infer<typeof listNotificationsSchema>) {
      try {
        const perPage = args.per_page || 50;
        const page = args.page || 1;
        
        // Make request to GitHub API
        const notifications = await githubGet<NotificationResponse[]>("/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 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:
    
    ${formattedNotifications}${paginationInfo}`
          }]
        };
      } catch (error) {
        return {
          isError: true,
          content: [{
            type: "text",
            text: formatError("Failed to fetch notifications", error)
          }]
        };
      }
    }
  • Zod schema defining the input parameters for the list-notifications tool, including optional filters like all, participating, timestamps, and pagination.
    export const listNotificationsSchema = z.object({
      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)")
    });
  • The registration function that adds the list-notifications tool to the MCP server, specifying name, description, schema, and handler.
    export function registerListNotificationsTool(server: any) {
      server.tool(
        "list-notifications",
        "List GitHub notifications for the authenticated user",
        listNotificationsSchema.shape,
        listNotificationsHandler
      );
    }
  • src/server.ts:38-38 (registration)
    Invocation of the registration function during server initialization to register the tool.
    registerListNotificationsTool(server);
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It mentions 'for the authenticated user', implying authentication is needed, but doesn't detail permissions, rate limits, pagination behavior, or what the output looks like. For a tool with 6 parameters and no output schema, this leaves significant gaps in understanding how it behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words. It earns its place by concisely stating the tool's function, making it easy to parse and understand quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (6 parameters, no output schema, and no annotations), the description is incomplete. It doesn't explain return values, authentication details, or behavioral traits like pagination or error handling. For a tool with multiple filtering options and sibling tools, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, meaning all parameters are documented in the input schema with clear descriptions (e.g., 'all' shows read notifications, 'participating' filters to direct participation). The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline for high schema coverage without compensating value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('List') and resource ('GitHub notifications for the authenticated user'), providing a specific verb+resource combination. However, it doesn't explicitly distinguish this tool from its sibling 'list-repo-notifications', which suggests it might list all notifications vs. repository-specific ones, but this differentiation isn't stated in the description itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'list-repo-notifications' or other notification-related siblings. It lacks context about prerequisites, such as authentication requirements, or exclusions, leaving the agent to infer usage from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

Latest Blog Posts

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