Skip to main content
Glama

Office Word MCP Server

comment_tools.py5.02 kB
""" Comment extraction tools for Word Document Server. These tools provide high-level interfaces for extracting and analyzing comments from Word documents through the MCP protocol. """ import os import json from typing import Dict, List, Optional, Any from docx import Document from word_document_server.utils.file_utils import ensure_docx_extension from word_document_server.core.comments import ( extract_all_comments, filter_comments_by_author, get_comments_for_paragraph ) async def get_all_comments(filename: str) -> str: """ Extract all comments from a Word document. Args: filename: Path to the Word document Returns: JSON string containing all comments with metadata """ filename = ensure_docx_extension(filename) if not os.path.exists(filename): return json.dumps({ 'success': False, 'error': f'Document {filename} does not exist' }, indent=2) try: # Load the document doc = Document(filename) # Extract all comments comments = extract_all_comments(doc) # Return results return json.dumps({ 'success': True, 'comments': comments, 'total_comments': len(comments) }, indent=2) except Exception as e: return json.dumps({ 'success': False, 'error': f'Failed to extract comments: {str(e)}' }, indent=2) async def get_comments_by_author(filename: str, author: str) -> str: """ Extract comments from a specific author in a Word document. Args: filename: Path to the Word document author: Name of the comment author to filter by Returns: JSON string containing filtered comments """ filename = ensure_docx_extension(filename) if not os.path.exists(filename): return json.dumps({ 'success': False, 'error': f'Document {filename} does not exist' }, indent=2) if not author or not author.strip(): return json.dumps({ 'success': False, 'error': 'Author name cannot be empty' }, indent=2) try: # Load the document doc = Document(filename) # Extract all comments all_comments = extract_all_comments(doc) # Filter by author author_comments = filter_comments_by_author(all_comments, author) # Return results return json.dumps({ 'success': True, 'author': author, 'comments': author_comments, 'total_comments': len(author_comments) }, indent=2) except Exception as e: return json.dumps({ 'success': False, 'error': f'Failed to extract comments: {str(e)}' }, indent=2) async def get_comments_for_paragraph(filename: str, paragraph_index: int) -> str: """ Extract comments for a specific paragraph in a Word document. Args: filename: Path to the Word document paragraph_index: Index of the paragraph (0-based) Returns: JSON string containing comments for the specified paragraph """ filename = ensure_docx_extension(filename) if not os.path.exists(filename): return json.dumps({ 'success': False, 'error': f'Document {filename} does not exist' }, indent=2) if paragraph_index < 0: return json.dumps({ 'success': False, 'error': 'Paragraph index must be non-negative' }, indent=2) try: # Load the document doc = Document(filename) # Check if paragraph index is valid if paragraph_index >= len(doc.paragraphs): return json.dumps({ 'success': False, 'error': f'Paragraph index {paragraph_index} is out of range. Document has {len(doc.paragraphs)} paragraphs.' }, indent=2) # Extract all comments all_comments = extract_all_comments(doc) # Filter for the specific paragraph from word_document_server.core.comments import get_comments_for_paragraph as core_get_comments_for_paragraph para_comments = core_get_comments_for_paragraph(all_comments, paragraph_index) # Get the paragraph text for context paragraph_text = doc.paragraphs[paragraph_index].text # Return results return json.dumps({ 'success': True, 'paragraph_index': paragraph_index, 'paragraph_text': paragraph_text, 'comments': para_comments, 'total_comments': len(para_comments) }, indent=2) except Exception as e: return json.dumps({ 'success': False, 'error': f'Failed to extract comments: {str(e)}' }, indent=2)

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/GongRzhe/Office-Word-MCP-Server'

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