Skip to main content
Glama
andr3medeiros

PDF Manipulation MCP Server

pdf_add_annotation

Add annotations like text, comments, or highlights to PDF documents by specifying page, position, and content for document collaboration and markup.

Instructions

Add an annotation to a PDF.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
pdf_pathYes
page_numberYes
annotation_typeYes
xYes
yYes
widthYes
heightYes
contentYes

Implementation Reference

  • The primary handler function for the 'pdf_add_annotation' tool, decorated with @mcp.tool() for automatic registration in FastMCP. It adds text, highlight, underline, or strikeout annotations to a PDF page at specified coordinates using PyMuPDF.
    @mcp.tool() async def pdf_add_annotation( pdf_path: str, page_number: int, annotation_type: str, x: float, y: float, width: float, height: float, content: str ) -> str: """Add an annotation to a PDF.""" if not os.path.exists(pdf_path): return f"Error: PDF file not found: {pdf_path}" if not validate_pdf_file(pdf_path): return f"Error: Invalid PDF file: {pdf_path}" try: # Open PDF document doc = fitz.open(pdf_path) # Validate page number if not validate_page_number(doc, page_number): doc.close() return f"Error: Invalid page number {page_number}. Document has {len(doc)} pages." # Get the page page = doc[page_number] # Create rectangle for annotation rect = fitz.Rect(x, y, x + width, y + height) # Add annotation based on type if annotation_type == "text": annot = page.add_text_annot(rect, content) elif annotation_type == "highlight": annot = page.add_highlight_annot(rect) annot.set_info(content=content) elif annotation_type == "underline": annot = page.add_underline_annot(rect) annot.set_info(content=content) elif annotation_type == "strikeout": annot = page.add_strikeout_annot(rect) annot.set_info(content=content) else: doc.close() return f"Error: Invalid annotation type: {annotation_type}" # Update annotation appearance annot.update() # Generate output filename output_path = generate_output_filename(pdf_path) # Save the modified PDF doc.save(output_path) doc.close() return f"Successfully added {annotation_type} annotation to PDF. Output saved to: {output_path}" except Exception as e: return f"Error adding annotation to PDF: {str(e)}"

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/andr3medeiros/pdf-manipulation-mcp-server'

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