Skip to main content
Glama

add_heading

Add structured headings to Microsoft Word documents, specifying text and level for improved organization and readability. Helps manage content hierarchy efficiently.

Instructions

Add a heading to a Word document.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filenameYes
levelNo
textYes

Implementation Reference

  • Primary MCP tool handler for 'add_heading' registered with @mcp.tool() decorator. Implements the core logic using document resolver, heading styles, and fallback formatting.
    @mcp.tool() async def add_heading(filename: str, text: str, level: int = 1): """Add a heading to a Word document.""" try: # Validate level if level < 1 or level > 9: return f"Invalid heading level: {level}. Level must be between 1 and 9." # Use resolver to find the document doc, resolved_path = load_document_with_resolver(filename) # Add the heading from word_document_server.core.styles import ensure_heading_style ensure_heading_style(doc) try: heading = doc.add_heading(text, level=level) except Exception: # Fallback to direct formatting if style fails from docx.shared import Pt paragraph = doc.add_paragraph(text) paragraph.style = doc.styles['Normal'] run = paragraph.runs[0] run.bold = True if level == 1: run.font.size = Pt(16) elif level == 2: run.font.size = Pt(14) else: run.font.size = Pt(12) # Save the document save_document_with_resolver(doc, filename, resolved_path) return f"Heading '{text}' (level {level}) added to {filename}" except FileNotFoundError as e: return str(e) except Exception as e: return f"Failed to add heading: {str(e)}"
  • Supporting helper function for adding headings, with file validation and write checks. Similar logic to MCP handler but without resolver integration.
    async def add_heading(filename: str, text: str, level: int = 1) -> str: """Add a heading to a Word document. Args: filename: Path to the Word document text: Heading text level: Heading level (1-9, where 1 is the highest level) """ filename = ensure_docx_extension(filename) # Ensure level is converted to integer try: level = int(level) except (ValueError, TypeError): return "Invalid parameter: level must be an integer between 1 and 9" # Validate level range if level < 1 or level > 9: return f"Invalid heading level: {level}. Level must be between 1 and 9." if not os.path.exists(filename): return f"Document {filename} does not exist" # Check if file is writeable is_writeable, error_message = check_file_writeable(filename) if not is_writeable: # Suggest creating a copy return f"Cannot modify document: {error_message}. Consider creating a copy first or creating a new document." try: doc = Document(filename) # Ensure heading styles exist ensure_heading_style(doc) # Try to add heading with style try: heading = doc.add_heading(text, level=level) doc.save(filename) return f"Heading '{text}' (level {level}) added to {filename}" except Exception as style_error: # If style-based approach fails, use direct formatting paragraph = doc.add_paragraph(text) paragraph.style = doc.styles['Normal'] run = paragraph.runs[0] run.bold = True # Adjust size based on heading level if level == 1: run.font.size = Pt(16) elif level == 2: run.font.size = Pt(14) else: run.font.size = Pt(12) doc.save(filename) return f"Heading '{text}' added to {filename} with direct formatting (style not available)" except Exception as e: return f"Failed to add heading: {str(e)}"
  • Exports the add_heading function from content_tools for use across the tools package.
    from word_document_server.tools.content_tools import ( add_heading, add_paragraph, add_table, add_picture, add_page_break, add_table_of_contents, delete_paragraph, search_and_replace )

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/franlealp1/mcp-word'

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