Skip to main content
Glama
GongRzhe

Office Word MCP Server

protect_document

Add password protection to Microsoft Word documents to restrict unauthorized access and secure sensitive information.

Instructions

Add password protection to a Word document.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
filenameYes
passwordYes

Implementation Reference

  • Core handler function implementing password protection logic using msoffcrypto to encrypt the Word document.
    async def protect_document(filename: str, password: str) -> str:
        """Add password protection to a Word document.
    
        Args:
            filename: Path to the Word document
            password: Password to protect the document with
        """
        filename = ensure_docx_extension(filename)
    
        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:
            return f"Cannot protect document: {error_message}"
    
        try:
            # Read the original file content
            with open(filename, "rb") as infile:
                original_data = infile.read()
    
            # Create an msoffcrypto file object from the original data
            file = msoffcrypto.OfficeFile(io.BytesIO(original_data))
            file.load_key(password=password) # Set the password for encryption
    
            # Encrypt the data into an in-memory buffer
            encrypted_data_io = io.BytesIO()
            
            file.encrypt(password=password, outfile=encrypted_data_io) 
    
            # Overwrite the original file with the encrypted data
            with open(filename, "wb") as outfile:
                outfile.write(encrypted_data_io.getvalue())
    
            
            base_path, _ = os.path.splitext(filename)
            metadata_path = f"{base_path}.protection"
            if os.path.exists(metadata_path):
                os.remove(metadata_path)
    
            return f"Document {filename} encrypted successfully with password."
    
        except Exception as e:
            # Attempt to restore original file content on failure
            try:
                if 'original_data' in locals():
                    with open(filename, "wb") as outfile:
                        outfile.write(original_data)
                    return f"Failed to encrypt document {filename}: {str(e)}. Original file restored."
                else:
                     return f"Failed to encrypt document {filename}: {str(e)}. Could not restore original file."
            except Exception as restore_e:
                 return f"Failed to encrypt document {filename}: {str(e)}. Also failed to restore original file: {str(restore_e)}"
  • MCP tool registration using FastMCP @mcp.tool() decorator. Thin wrapper delegating to protection_tools.protect_document.
    @mcp.tool()
    def protect_document(filename: str, password: str):
        """Add password protection to a Word document."""
        return protection_tools.protect_document(filename, password)
  • Export of protect_document function from protection_tools module for use in main.py.
    from word_document_server.tools.protection_tools import (
        protect_document, add_restricted_editing,
        add_digital_signature, verify_document
    )

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

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