Skip to main content
Glama
awkoy

notion-mcp-server

batch_mixed_operations

Execute multiple append, update, and delete operations on Notion blocks in a single request to streamline content management and reduce API calls.

Instructions

Perform a mix of append, update, and delete operations in a single request

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
operationsYesArray of mixed operations to perform in a single batch

Implementation Reference

  • The primary handler function for the batch_mixed_operations tool. It processes an array of mixed operations (append, update, delete) on Notion blocks, executes them sequentially using the Notion API, collects results, and returns a formatted response.
    export const batchMixedOperations = async (
      params: BatchMixedOperationsParams
    ): Promise<CallToolResult> => {
      try {
        const results = [];
        const operationCounts = {
          append: 0,
          update: 0,
          delete: 0,
        };
    
        for (const op of params.operations) {
          let response;
    
          switch (op.operation) {
            case "append":
              response = await notion.blocks.children.append({
                block_id: op.blockId,
                children: op.children,
              });
              operationCounts.append++;
              break;
    
            case "update":
              response = await notion.blocks.update({
                block_id: op.blockId,
                ...op.data,
              });
              operationCounts.update++;
              break;
    
            case "delete":
              response = await notion.blocks.delete({
                block_id: op.blockId,
              });
              operationCounts.delete++;
              break;
          }
    
          results.push({
            operation: op.operation,
            blockId: op.blockId,
            success: true,
            response,
          });
        }
    
        return {
          content: [
            {
              type: "text",
              text: `Successfully performed ${params.operations.length} operations (${operationCounts.append} append, ${operationCounts.update} update, ${operationCounts.delete} delete)`,
            },
            {
              type: "text",
              text: JSON.stringify(results, null, 2),
            },
          ],
        };
      } catch (error) {
        return handleNotionError(error);
      }
    };
  • Zod schema defining the input parameters for batch_mixed_operations: an array of discriminated union operations supporting append (with blockId and children), update (with blockId and data), or delete (with blockId).
    export const BATCH_MIXED_OPERATIONS_SCHEMA = {
      operations: z
        .array(
          z.discriminatedUnion("operation", [
            z.object({
              operation: z.literal("append"),
              blockId: z
                .string()
                .describe("The ID of the block to append children to"),
              children: z
                .array(TEXT_BLOCK_REQUEST_SCHEMA)
                .describe("Array of blocks to append as children"),
            }),
            z.object({
              operation: z.literal("update"),
              blockId: z.string().describe("The ID of the block to update"),
              data: TEXT_BLOCK_REQUEST_SCHEMA.describe("The block data to update"),
            }),
            z.object({
              operation: z.literal("delete"),
              blockId: z.string().describe("The ID of the block to delete/archive"),
            }),
          ])
        )
        .describe("Array of mixed operations to perform in a single batch"),
    };
  • Registration/dispatch logic within the 'notion_blocks' tool handler (registerBlocksOperationTool). Routes requests with action 'batch_mixed_operations' to the batchMixedOperations handler function.
    case "batch_mixed_operations":
      return batchMixedOperations(params.payload.params);
  • Inclusion of batch_mixed_operations as an action in the overarching BLOCKS_OPERATION_SCHEMA for the 'notion_blocks' MCP tool.
    z.object({
      action: z
        .literal("batch_mixed_operations")
        .describe(
          "Use this action to perform batch mixed operations on blocks."
        ),
      params: z.object(BATCH_MIXED_OPERATIONS_SCHEMA),
    }),
  • MCP tool registration for 'notion_blocks', which encompasses batch_mixed_operations as one of its dispatched actions via BLOCKS_OPERATION_SCHEMA and registerBlocksOperationTool.
    // Register combined blocks operation tool
    server.tool(
      "notion_blocks",
      "Perform various block operations (retrieve, update, delete, append children, batch operations)",
      BLOCKS_OPERATION_SCHEMA,
      registerBlocksOperationTool
    );

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

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