Skip to main content
Glama

list-comments

Retrieve comments from Notion pages or blocks to track discussions and feedback within your workspace.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
page_idNoThe ID of the page to get comments from
block_idNoThe ID of the block to get comments from
start_cursorNoPagination cursor
page_sizeNoNumber of results to return (max 100)

Implementation Reference

  • MCP tool handler for 'list-comments': calls NotionService.listComments, handles pagination and errors, returns JSON-formatted results.
    async ({ page_id, block_id, start_cursor, page_size }) => {
      try {
        if (!page_id && !block_id) {
          return {
            content: [
              {
                type: "text",
                text: "Error: Either page_id or block_id must be provided",
              },
            ],
            isError: true,
          };
        }
    
        const result = await this.notionService.listComments({
          page_id,
          block_id,
          start_cursor,
          page_size,
        });
    
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(result, null, 2),
            },
          ],
        };
      } catch (error) {
        console.error("Error in list-comments tool:", error);
        return {
          content: [
            {
              type: "text",
              text: `Error: Failed to list comments - ${
                (error as Error).message
              }`,
            },
          ],
          isError: true,
        };
      }
    }
  • Zod input schema defining parameters for the list-comments tool: page_id or block_id (optional), pagination options.
    {
      page_id: z
        .string()
        .optional()
        .describe("The ID of the page to get comments from"),
      block_id: z
        .string()
        .optional()
        .describe("The ID of the block to get comments from"),
      start_cursor: z.string().optional().describe("Pagination cursor"),
      page_size: z
        .number()
        .min(1)
        .max(100)
        .optional()
        .describe("Number of results to return (max 100)"),
    },
  • Registration of the 'list-comments' tool on the MCP server within registerCommentTools().
    this.server.tool(
      "list-comments",
      {
        page_id: z
          .string()
          .optional()
          .describe("The ID of the page to get comments from"),
        block_id: z
          .string()
          .optional()
          .describe("The ID of the block to get comments from"),
        start_cursor: z.string().optional().describe("Pagination cursor"),
        page_size: z
          .number()
          .min(1)
          .max(100)
          .optional()
          .describe("Number of results to return (max 100)"),
      },
      async ({ page_id, block_id, start_cursor, page_size }) => {
        try {
          if (!page_id && !block_id) {
            return {
              content: [
                {
                  type: "text",
                  text: "Error: Either page_id or block_id must be provided",
                },
              ],
              isError: true,
            };
          }
    
          const result = await this.notionService.listComments({
            page_id,
            block_id,
            start_cursor,
            page_size,
          });
    
          return {
            content: [
              {
                type: "text",
                text: JSON.stringify(result, null, 2),
              },
            ],
          };
        } catch (error) {
          console.error("Error in list-comments tool:", error);
          return {
            content: [
              {
                type: "text",
                text: `Error: Failed to list comments - ${
                  (error as Error).message
                }`,
              },
            ],
            isError: true,
          };
        }
      }
    );
  • NotionService.listComments: core logic maps page_id/block_id to block_id and calls Notion SDK client.comments.list with pagination.
    async listComments(params: CommentQuery) {
      try {
        if (!params.page_id && !params.block_id) {
          throw new NotionAPIError(
            "Either page_id or block_id must be provided",
            "INVALID_REQUEST_PARAMETERS"
          );
        }
    
        // According to the Notion API docs, we should use block_id for both pages and blocks
        // Pages are technically blocks in Notion's data model
        const blockId = params.block_id || params.page_id;
    
        return await this.client.comments.list({
          block_id: blockId!, // Non-null assertion since we've checked above
          start_cursor: params.start_cursor,
          page_size: params.page_size,
        });
      } catch (error) {
        this.handleError(error);
      }
    }
  • TypeScript type and Zod schema for CommentQuery parameters used in NotionService.listComments.
    export const CommentQuerySchema = z.object({
      block_id: z.string().optional(),
      page_id: z.string().optional(),
      start_cursor: z.string().optional(),
      page_size: z.number().min(1).max(100).optional(),
    });
    
    export type CommentQuery = z.infer<typeof CommentQuerySchema>;

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/ramidecodes/mcp-server-notion'

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