Skip to main content
Glama
ZatesloFL

Google Workspace MCP Server

by ZatesloFL

debug_table_structure

Analyze and troubleshoot table structure in Google Docs to resolve data placement errors, verify dimensions, and plan data formatting. Identifies cell positions, content, and insertion points for precise debugging.

Instructions

ESSENTIAL DEBUGGING TOOL - Use this whenever tables don't work as expected.

USE THIS IMMEDIATELY WHEN:

  • Table population put data in wrong cells

  • You get "table not found" errors

  • Data appears concatenated in first cell

  • Need to understand existing table structure

  • Planning to use populate_existing_table

WHAT THIS SHOWS YOU:

  • Exact table dimensions (rows × columns)

  • Each cell's position coordinates (row,col)

  • Current content in each cell

  • Insertion indices for each cell

  • Table boundaries and ranges

HOW TO READ THE OUTPUT:

  • "dimensions": "2x3" = 2 rows, 3 columns

  • "position": "(0,0)" = first row, first column

  • "current_content": What's actually in each cell right now

  • "insertion_index": Where new text would be inserted in that cell

WORKFLOW INTEGRATION:

  1. After creating table → Use this to verify structure

  2. Before populating → Use this to plan your data format

  3. After population fails → Use this to see what went wrong

  4. When debugging → Compare your data array to actual table structure

Args: user_google_email: User's Google email address document_id: ID of the document to inspect table_index: Which table to debug (0 = first table, 1 = second table, etc.)

Returns: str: Detailed JSON structure showing table layout, cell positions, and current content

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
document_idYes
table_indexNo
user_google_emailYes

Implementation Reference

  • The core handler function for the 'debug_table_structure' tool. Decorated with @server.tool() for MCP registration. Fetches document via Google Docs API, uses find_tables helper to locate tables, then extracts detailed cell information including positions, content, and ranges, returning a JSON-formatted debug output.
    @server.tool()
    @handle_http_errors("debug_table_structure", is_read_only=True, service_type="docs")
    @require_google_service("docs", "docs_read")
    async def debug_table_structure(
        service,
        user_google_email: str,
        document_id: str,
        table_index: int = 0,
    ) -> str:
        """
        ESSENTIAL DEBUGGING TOOL - Use this whenever tables don't work as expected.
    
        USE THIS IMMEDIATELY WHEN:
        - Table population put data in wrong cells
        - You get "table not found" errors
        - Data appears concatenated in first cell
        - Need to understand existing table structure
        - Planning to use populate_existing_table
    
        WHAT THIS SHOWS YOU:
        - Exact table dimensions (rows × columns)
        - Each cell's position coordinates (row,col)
        - Current content in each cell
        - Insertion indices for each cell
        - Table boundaries and ranges
    
        HOW TO READ THE OUTPUT:
        - "dimensions": "2x3" = 2 rows, 3 columns
        - "position": "(0,0)" = first row, first column
        - "current_content": What's actually in each cell right now
        - "insertion_index": Where new text would be inserted in that cell
    
        WORKFLOW INTEGRATION:
        1. After creating table → Use this to verify structure
        2. Before populating → Use this to plan your data format
        3. After population fails → Use this to see what went wrong
        4. When debugging → Compare your data array to actual table structure
    
        Args:
            user_google_email: User's Google email address
            document_id: ID of the document to inspect
            table_index: Which table to debug (0 = first table, 1 = second table, etc.)
    
        Returns:
            str: Detailed JSON structure showing table layout, cell positions, and current content
        """
        logger.debug(f"[debug_table_structure] Doc={document_id}, table_index={table_index}")
    
        # Get the document
        doc = await asyncio.to_thread(
            service.documents().get(documentId=document_id).execute
        )
    
        # Find tables
        tables = find_tables(doc)
        if table_index >= len(tables):
            return f"Error: Table index {table_index} not found. Document has {len(tables)} table(s)."
    
        table_info = tables[table_index]
    
        import json
    
        # Extract detailed cell information
        debug_info = {
            'table_index': table_index,
            'dimensions': f"{table_info['rows']}x{table_info['columns']}",
            'table_range': f"[{table_info['start_index']}-{table_info['end_index']}]",
            'cells': []
        }
    
        for row_idx, row in enumerate(table_info['cells']):
            row_info = []
            for col_idx, cell in enumerate(row):
                cell_debug = {
                    'position': f"({row_idx},{col_idx})",
                    'range': f"[{cell['start_index']}-{cell['end_index']}]",
                    'insertion_index': cell.get('insertion_index', 'N/A'),
                    'current_content': repr(cell.get('content', '')),
                    'content_elements_count': len(cell.get('content_elements', []))
                }
                row_info.append(cell_debug)
            debug_info['cells'].append(row_info)
    
        link = f"https://docs.google.com/document/d/{document_id}/edit"
        return f"Table structure debug for table {table_index}:\n\n{json.dumps(debug_info, indent=2)}\n\nLink: {link}"
  • Helper function used by the tool to parse document structure and extract all tables with their dimensions, positions, and cell details from the raw Google Docs API response.
    def find_tables(doc_data: dict[str, Any]) -> list[dict[str, Any]]:
        """
        Find all tables in the document with their positions and dimensions.
        
        Args:
            doc_data: Raw document data from Google Docs API
        
        Returns:
            List of table information dictionaries
        """
        tables = []
        structure = parse_document_structure(doc_data)
        
        for idx, table_info in enumerate(structure['tables']):
            tables.append({
                'index': idx,
                'start_index': table_info['start_index'],
                'end_index': table_info['end_index'],
                'rows': table_info['rows'],
                'columns': table_info['columns'],
                'cells': table_info['cells']
            })
        
        return tables
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/ZatesloFL/google_workspace_mcp'

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