Releases: ForLegalAI/mcp-ms-office-documents
v3.5 — Custom Filenames & Flexible S3 Auth
✨ New Features
Custom Output Filenames
All document tools (create_word_from_markdown, create_excel_from_markdown, create_powerpoint_presentation, create_email_draft, create_xml_file) now accept an optional file_name parameter. When provided, the generated file will use that name (without extension) instead of a randomly generated UUID.
AWS S3 — Default Credential Chain Support
The S3 backend no longer requires explicit credentials to be set. In addition to the existing explicit-credentials mode, you can now leave AWS_ACCESS_KEY and AWS_SECRET_ACCESS_KEY unset and boto3 will automatically discover credentials via the AWS default chain:
- IRSA (IAM Roles for Service Accounts) on EKS
- EC2 instance profiles / ECS task roles
- AWS SSO sessions (
aws sso login) - Environment variables /
~/.aws/credentials
Only S3_BUCKET is required in this mode. AWS_REGION is also optional — resolved automatically from environment or instance metadata.
🐛 Bug Fixes
DOCX Template Placeholder — Spurious Empty Paragraph Removed
Fixed a bug where replacing a standalone block-content placeholder in a .docx template would leave a spurious empty paragraph before the inserted content.
Config Normalization
_validate() in config.py now also normalizes and strips non-empty values, preventing issues caused by accidental surrounding whitespace in environment variables.
🔧 Maintenance
- fastmcp updated to 3.2.0
- Added Ruff linter configuration (
ruff.toml); all existing code passes linting - Improved module exports and type hints across tool packages
v3.4 - Bug fixes and small improvements
What's Changed
☁️ GCS Signed URL — Workload Identity Federation Support
Signed URL generation for Google Cloud Storage now supports Workload Identity Federation (WIF) and federated credentials. When no local service account key file is available, signing is automatically delegated to the IAM signBlob API, ensuring compatibility with ADC and federated auth flows.
📊 XLSX Table Rendering — Percent Auto-Formatting Removed
The heuristic that automatically formatted floats in the (0, 1] range as percentages in add_table_to_sheet has been removed. Header styling and large-number formatting (#,##0 for values ≥ 1000) remain intact.
✨ Office Document Generation — Quality-of-Life Improvements
Several improvements to XLSX and DOCX generation helpers:
- XLSX: Percentage number formats are now applied when a Markdown cell value ends with
%, with thousands separator support. - DOCX: Markdown tables are now supported in template placeholders, header/footer handling is improved across sections, and placeholder font color is correctly preserved.
- feat(gcs): enhance signed URL generation for WIF support by @pedrojreis in #40
- fix(helpers): remove automatic percentage formatting for <1 by @pedrojreis in #41
- various-improvements by @dvejsada in #44
Full Changelog: v3.3...v3.4
v3.3 New docx and excel features, simple auth
😎 New Features
📑 New features for docx generation:
- underlined and strikethrough text
- text alignment (right, center, left, justified)
- add picture from URL
- add automatic table of contents
- add text to header and footer
- add page break
🧮 New features for excel sheet:
- excel sheet generation now allows for creating multiple sheets in 1 workbook with possible references across sheets.
- set API key verification for MCP server (very simple basic auth)
Full changgelog
- Update package versions in requirements.txt for stability and compatibility, bump fasthtml to version 3 by @dvejsada in #35
- Implement API key authentication middleware and update configuration for optional API key support by @dvejsada in #36
- feat(gcs): enhance GCS configuration handling by @pedrojreis in #34
- feat(logging): enhance error handling and logging across document and email tools by @dvejsada in #37
- feat-docs-improvements by @dvejsada in #38
New Contributors
- @pedrojreis made their first contribution in #34
Full Changelog: v3.2...v3.3
XML bug fix
Fixed a bug with missing file type for XML upload.
🧮 XML file creation
New tool - XML file creation
Although not an MS office file, based our internal need for LLM to create XMLs, I have added the tool to this MCP server. Maybe somebody else will also have some use for it.
What's Changed
Full Changelog: v3.0...v3.1
v3.0 - Dynamic Word template tools
🎉 New Feature: Dynamic Word Template tools
Create professional Word documents from reusable templates with full markdown support!
✨ Highlights
- Template-based generation - Define DOCX templates with
{{placeholder}}syntax and register them as separate tools via YAML configuration - Full markdown support - All placeholder values support rich formatting including bold, italic, code, links, headings, and lists
- Flexible placement - Placeholders work in document body, tables, headers, and footers
- Style preservation - Original style from templates are preserved
📝 Markdown Formatting
| Format | Syntax | Result |
|---|---|---|
| Bold | **text** |
text |
| Italic | *text* |
text |
| Code | `code` |
code |
| Link | [text](url) |
text |
| Heading | # Heading |
Heading 1-6 |
| Bullet list | - item |
• item |
| Numbered list | 1. item |
1. item |
| Nested list | 3 spaces + marker | Indented item |
🚀 Quick Start
-
Create a Word template with placeholders:
Dear {{recipient_name}}, {{body}} Best regards, {{sender_name}} -
Configure in
config/docx_templates.yaml:templates: - name: letter description: Generate a letter with markdown support docx_path: letter_template.docx args: - name: recipient_name type: string required: true - name: body type: string required: true - name: sender_name type: string required: true
-
Use the automatically registered MCP tool to generate documents!
📋 Word Styles
For proper formatting, ensure your template includes these Word styles:
- Headings: Heading 1 through Heading 6
- Lists: List Bullet, List Bullet 2, List Bullet 3, List Number, List Number 2, List Number 3
- Other: Normal, Quote, Table Grid
💡 Tip: Customize these styles in your template to match your branding!
📚 Documentation
See the updated README for full documentation.
What's Changed
Full Changelog: v2.0...v3.0
v2.0 - 😎 Presentation improvements
New features
This release add new possibilities for presentation creation. It allows to create slides with tables, images, graphs, two-columns slides etc. (see the presentation example in the release). These new possibilities however brought some breaking changes for the custom presentation templates (see below).
In addition, new MinIO storage option has been added.
⚠️ BREAKING CHANGE - Slide Layout Indices Overview
This release brings breaking change for custom presentation templates. The order of the template slides now must be as follows (to adhere to build in pptx template):
| Index | Description |
|---|---|
| 0 | Title Slide |
| 1 | Title and Content |
| 2 | Section Header |
| 3 | Two Content (no subheaders) |
| 4 | Comparison (with subheaders) |
| 5 | Title Only |
| 6 | Blank |
What's Changed
New Contributors
Full Changelog: v1.3...v2.0
v1.3 ♻️ Server Refactoring
BREAKING CHANGES
This release brings breaking changes to server setup. See readme for current setup instructions. The breaking changes namely include the following:
- Env variables moved from docker-compose to .env file (see example in the repo).
- Custom templates folder must be mounted to app/custom_templates and the required naming of the custom template files have changed.
What's Changed
Complete refactoring of the MCP servers to allow for better maintenance and future extension. The refactor centralizes server settings and logging.
It should be now easier to contribute and develop new functions, contributions are definitely welcome.
Full Changelog: v1.2...v1.3
v1.2 - 💼 New storage options, bug fix
What's Changed
- Add Google Cloud Storage support as an upload strategy option
- Add Azure Blob Storage support as an upload strategy option
- Add configurable URL validity
- Fix remaining text in docx default template
Full Changelog: v1.1...v1.2
v1.1 - New Dynamic Email tools
🚀Major refactoring of email tool
Refactored the email tool. You may now mount your default email template that will be used for general email tool (thus having only a general content must) or you may even define you specific email tools by providing the html file and placeholder description in yaml (see Readme), fastmcp will dynamically create these as separate tools upon server startup. Perfect in cases where you want to ensure the e-mail formatting, structure and only need certain specific things generated by LLM.
Feel free to start a discussion if you are unsure how to configure the custom tool. 😉