Skip to main content
Glama

API-get-block-children

Retrieve child blocks from a Notion page or block to access nested content and structure within your Notion workspace.

Instructions

Retrieve block children

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
block_idYesIdentifier for a [block](ref:block)
start_cursorNoIf supplied, this endpoint will return a page of results starting after the cursor provided. If not supplied, this endpoint will return the first page of results.
page_sizeNoThe number of items from the full list desired in the response. Maximum: 100

Implementation Reference

  • Core implementation of the API-get-block-children tool. Fetches the first page of block children, then parallelizes subsequent paginated pages (using next_cursor) in batches of 5, merges all results into a single complete response without has_more.
    private async handleBlockChildrenParallel( operation: OpenAPIV3.OperationObject & { method: string; path: string }, params: any, options?: RecursiveExplorationOptions ) { if (options?.runInBackground) { console.log(`Starting Notion API parallel processing: ${operation.method.toUpperCase()} ${operation.path}`); } // Get first page const initialResponse = await this.httpClient.executeOperation(operation, params); if (initialResponse.status !== 200) { if (options?.runInBackground) { console.error('Response error:', initialResponse.data); } return { content: [{ type: 'text', text: JSON.stringify(initialResponse.data) }], }; } const results = initialResponse.data.results || []; let nextCursor = initialResponse.data.next_cursor; // Array for parallel processing const pageRequests = []; const maxParallelRequests = 5; // Limit simultaneous requests if (options?.runInBackground) { console.log(`Retrieved ${results.length} blocks from first page`); } // Request subsequent pages in parallel if available while (nextCursor) { // Clone parameters for next page const nextPageParams = { ...params, start_cursor: nextCursor }; // Add page request pageRequests.push( this.httpClient.executeOperation(operation, nextPageParams) .then(response => { if (response.status === 200) { if (options?.runInBackground) { console.log(`Retrieved ${response.data.results?.length || 0} blocks from additional page`); } return { results: response.data.results || [], next_cursor: response.data.next_cursor }; } return { results: [], next_cursor: null }; }) .catch(error => { if (options?.runInBackground) { console.error('Error retrieving page:', error); } return { results: [], next_cursor: null }; }) ); // Execute parallel requests when batch size reached or no more pages if (pageRequests.length >= maxParallelRequests || !nextCursor) { if (options?.runInBackground) { console.log(`Processing ${pageRequests.length} pages in parallel...`); } const pageResponses = await Promise.all(pageRequests); // Merge results for (const response of pageResponses) { results.push(...response.results); // Set next cursor for next batch if (response.next_cursor) { nextCursor = response.next_cursor; } else { nextCursor = null; } } // Reset request array pageRequests.length = 0; } // Exit loop if no more pages if (!nextCursor) break; } if (options?.runInBackground) { console.log(`Retrieved ${results.length} blocks in total`); } // Return merged response const mergedResponse = { ...initialResponse.data, results, has_more: false, next_cursor: null }; return { content: [{ type: 'text', text: JSON.stringify(mergedResponse) }], }; }
  • Dispatch in the main CallToolRequestSchema handler that specifically routes 'API-get-block-children' calls to the custom parallel handler instead of direct HTTP execution.
    // Optimized parallel processing for API-get-block-children if (name === 'API-get-block-children') { // Create basic options for logging control const blockOptions: RecursiveExplorationOptions = { runInBackground: false, // Default to not showing logs for regular API calls }; return await this.handleBlockChildrenParallel(operation, params, blockOptions); }
  • Generic registration of all converted OpenAPI operations as MCP tools in the ListToolsRequestSchema handler, including 'API-get-block-children'.
    Object.entries(this.tools).forEach(([toolName, def]) => { def.methods.forEach(method => { const toolNameWithMethod = `${toolName}-${method.name}`; const truncatedToolName = this.truncateToolName(toolNameWithMethod); tools.push({ name: truncatedToolName, description: method.description, inputSchema: method.inputSchema as Tool['inputSchema'], }) console.log(`- ${truncatedToolName}: ${method.description}`) }) })
  • Initializes the tools registry and operation lookup (including API-get-block-children) by converting the OpenAPI specification using OpenAPIToMCPConverter.
    const converter = new OpenAPIToMCPConverter(openApiSpec) const { tools, openApiLookup } = converter.convertToMCPTools() this.tools = tools this.openApiLookup = openApiLookup

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

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