📄 MCP办公文档服务器
让你的人工智能助手通过一个提示创建专业的Office文档——PowerPoint、Word、Excel、电子邮件和XML。
](https://hub.docker.com/)  
______________________________________________________________________
📋 目录
______________________________________________________________________
💡 这是什么?
这是一个 MCP(模型上下文协议)服务器 它在Docker中运行,使AI助手(如Claude、Cursor或任何兼容MCP的客户端)能够按需生成真正的Office文件。
只需让你的AI _“创建销售演示文稿”_ 或 _“起草欢迎电子邮件”_ --它将为您生成一个即用型文件。
无需编码。 安装、连接并开始创建。
______________________________________________________________________
✨ 一览特性
| 文档类型 | 工具 | 亮点 |
|---|---|---|
| 📊 幻灯片 | create_powerpoint_presentation | 标题、章节和内容幻灯片·4:3或16:9格式·自定义模板 |
| 📝 字 | create_word_from_markdown | 用Markdown写,得到一个 .docx ·标题、列表、表格、链接、格式 |
| 📈 Excel | create_excel_from_markdown | Markdown表格→ .xlsx ·支持公式和单元格引用 |
| 📧 电子邮件 | create_email_draft | HTML电子邮件草稿(.eml)·主题、收件人、优先级、语言 |
| 🗂️ 可扩展标记语言 | create_xml_file | 格式良好的XML文件·如果缺少,则自动验证并添加XML声明 |
所有工具都接受可选 file_name 参数。提供后,输出文件将使用该名称(不带扩展名),而不是随机生成的标识符。
额外奖励——动态模板:
- 📧 可重复使用的电子邮件模板 --在YAML中定义参数化的电子邮件布局。每个都成为自己的工具,带有键入的参数(例如。,
first_name,promo_code). - 📝 可重用的Word模板 --创建
.docx文件与{{placeholders}}每个模板都成为一个AI工具。占位符支持完整的Markdown。
输出选项:
- 本地 --保存到的文件
output/文件夹 - 云 --上传到S3、谷歌云存储、Azure Blob或MinIO,并获得限时下载链接
______________________________________________________________________
🚀 快速开始
起床跑步 3个步骤:
1.下载撰写文件
curl -L -o docker-compose.yml https://raw.githubusercontent.com/dvejsada/mcp-ms-office-docs/main/docker-compose.yml已经克隆了仓库?跳过此步骤-- docker-compose.yml 已经在那里了。2.设置您的环境
cp .env.example .env默认设置即用即用——文件将保存在本地 output/.
3.启动服务器
docker-compose up -d✅ 完成! 您的MCP端点已准备就绪: http://localhost:8958/mcp
______________________________________________________________________
⚙️ 配置
服务器是通过您的环境变量配置的 .env 文件。
基本设置
| 变量 | 描述 | 默认值 |
|---|---|---|
DEBUG | 启用调试日志记录(1, true, yes) | _关_ |
API_KEY | 使用API密钥保护服务器(请参阅下面的身份验证) | _(残疾)_ |
UPLOAD_STRATEGY | 保存文件的位置: LOCAL, S3, GCS, AZURE, MINIO | LOCAL |
SIGNED_URL_EXPIRES_IN | 云下载链接的有效期(秒) | 3600 |
🔐 Authentication
集 API_KEY 在你的 .env 要求为所有请求提供API密钥:
API_KEY=your-secret-key客户端可以在以下任何标头中发送密钥:
| 标题 | 格式 |
|---|---|
Authorization | Bearer your-secret-key |
Authorization | your-secret-key |
x-api-key | your-secret-key |
离开 API_KEY 空或未设置,允许所有请求无需身份验证。
☁️ AWS S3 Storage
集 UPLOAD_STRATEGY=S3 并提供:
| 变量 | 描述 | 必填 |
|---|---|---|
S3_BUCKET | S3存储桶名称 | ✅ 总是 |
AWS_ACCESS_KEY | AWS访问密钥ID | ⚠️ 见下文 |
AWS_SECRET_ACCESS_KEY | AWS秘密访问密钥 | ⚠️ 见下文 |
AWS_REGION | AWS区域(例如。, us-east-1) | ⚠️ 见下文 |
凭证模式:
- 显式凭据 --设置所有三个
AWS_ACCESS_KEY,AWS_SECRET_ACCESS_KEY,以及AWS_REGION。建议用于简单设置。
- AWS默认凭证链 --不设置凭据变量,boto3将自动从标准链中发现凭据:
- AWS_ACCESS_KEY_ID / AWS_SECRET_ACCESS_KEY 环境变量 - 共享凭据/配置文件(~/.aws/credentials) - AWS SSO会话(aws sso login)——有利于地方发展 - IRSA(服务帐户的IAM角色) --用于AWS EKS部署 - ECS容器凭据/EC2实例元数据(IMDSv2)
仅在此模式下 S3_BUCKET 是必需的;区域会自动解析。
☁️ Google Cloud Storage
集 UPLOAD_STRATEGY=GCS 并提供:
| 变量 | 描述 |
|---|---|
GCS_BUCKET | GCS存储桶名称 |
GCS_CREDENTIALS_PATH | 服务帐户JSON路径(默认值: /app/config/gcs-credentials.json) |
通过以下方式装载凭据文件 docker-compose.yml 数量。
☁️ Azure Blob Storage
集 UPLOAD_STRATEGY=AZURE 并提供:
| 变量 | 描述 |
|---|---|
AZURE_STORAGE_ACCOUNT_NAME | 存储帐户名称 |
AZURE_STORAGE_ACCOUNT_KEY | 存储帐户密钥 |
AZURE_CONTAINER | Blob容器名称 |
AZURE_BLOB_ENDPOINT | _(可选)_ 主权云的自定义端点 |
☁️ MinIO / S3-Compatible Storage
集 UPLOAD_STRATEGY=MINIO 并提供:
| 变量 | 描述 | 默认值 |
|---|---|---|
MINIO_ENDPOINT | MinIO服务器URL(例如。, https://minio.example.com) | _(必填)_ |
MINIO_ACCESS_KEY | 访问密钥 | _(必填)_ |
MINIO_SECRET_KEY | 密钥 | _(必填)_ |
MINIO_BUCKET | 存储桶名称 | _(必填)_ |
MINIO_REGION | 地区 | us-east-1 |
MINIO_VERIFY_SSL | 验证SSL证书 | true |
MINIO_PATH_STYLE | 使用路径样式URL(建议用于MinIO) | true |
确保存储桶存在,并且您的凭据具有 PutObject/GetObject 权限。
______________________________________________________________________
🎨 自定义模板
您可以通过提供自己的模板来定制生成文档的外观。
静态模板
将文件放置在 custom_templates/ 文件夹:
| 文档 | 文件名 | 注释 |
|---|---|---|
| PowerPoint 4:3 | custom_pptx_template_4_3.pptx | |
| PowerPoint 16:9 | custom_pptx_template_16_9.pptx | |
| Word | custom_docx_template.docx | |
| 电子邮件包装器 | custom_email_template.html | 基于 default_templates/default_email_template.html |
动态电子邮件模板
创建可重复使用的参数化电子邮件布局,您的AI可以自动填写。
📧 How to set up dynamic email templates
1. 创建 config/email_templates.yaml:
templates:
- name: welcome_email
description: Welcome email with optional promo code
html_path: welcome_email.html # must be in custom_templates/ or default_templates/
annotations:
title: Welcome Email
args:
- name: first_name
type: string
description: Recipient's first name
required: true
- name: promo_code
type: string
description: Optional promotional code (HTML formatted)
required: false2. 在中创建HTML文件 custom_templates/welcome_email.html:
Welcome {{first_name}}!
We're excited to have you on board.
{{{promo_code_block}}}
Regards,
Support Team
它是如何工作的:
- 每个模板在启动时都会成为一个单独的AI工具
- 自动添加标准电子邮件字段(主题、收件人、抄送、密件抄送、优先级、语言)
- 使用
{{variable}}对于转义文本,{{{variable}}}用于原始HTML
动态Word(DOCX)模板
使用创建可重复使用的Word文档 {{placeholders}} 支持完整的Markdown格式。
📝 How to set up dynamic DOCX templates
1. 创建 config/docx_templates.yaml:
templates:
- name: formal_letter
description: Generate a formal business letter
docx_path: letter_template.docx # must be in custom_templates/ or default_templates/
annotations:
title: Formal Letter Generator
args:
- name: recipient_name
type: string
description: Full name of the recipient
required: true
- name: recipient_address
type: string
description: Recipient's address
required: true
- name: subject
type: string
description: Letter subject
required: true
- name: body
type: string
description: Main body of the letter (supports markdown)
required: true
- name: sender_name
type: string
description: Sender's name
required: true
- name: date
type: string
description: Letter date
required: false
default: ""2. 使用占位符创建Word文档并另存为 custom_templates/letter_template.docx:
{{date}}
{{recipient_name}}
{{recipient_address}}
Subject: {{subject}}
{{body}}
{{sender_name}}它是如何工作的:
- 每个模板在启动时都会成为一个单独的AI工具
- 占位符可以位于文档正文、表格、页眉和页脚中
- 占位符值支持完整的Markdown(粗体、斜体、列表、标题……)
- 保留占位符位置的原始字体
🎯 Word style requirements for custom templates
为了正确格式化,请确保这些样式存在于您的 .docx 模板:
| 类别 | 样式 |
|---|---|
| 标题 | 标题1-标题6 |
| 项目符号列表 | 列表项目符号、列表项目符号2、列表项目字符3 |
| 编号列表 | 列表编号、列表编号2、列表编号3 |
| 其他 | 普通、报价、表格网格 |
提示: 在模板中自定义这些样式(字体、大小、颜色、间距)——服务器将使用您的样式。
______________________________________________________________________
🔌 连接您的AI客户端
将您的MCP兼容客户端指向服务器端点:
http://localhost:8958/mcp热门客户示例:
Claude Desktop
添加到您的Claude Desktop MCP配置中:
{
"mcpServers": {
"office-documents": {
"url": "http://localhost:8958/mcp"
}
}
}LibreChat
将服务器添加到您的 librechat.yaml 配置下 mcpServers:
mcpServers:
office-documents:
type: streamableHttp
url: http://mcp-office-docs:8958/mcp注: 如果LibreChat和此服务器在同一个Docker网络中运行,请使用容器名称(mcp-office-docs)作为主机名。如果它们单独运行,请使用http://localhost:8958/mcp相反。
要将这两个服务放置在同一网络上,请在您的 docker-compose.yml:
services:
mcp-office-docs:
# ...existing config...
networks:
- shared
librechat:
# ...existing config...
networks:
- shared
networks:
shared:
driver: bridgeCursor / Other MCP Clients
使用SSE/流式HTTP传输,并将端点URL设置为:
http://localhost:8958/mcp如果启用了身份验证,请根据客户端的要求添加API密钥头。
______________________________________________________________________
🤝 贡献
欢迎投稿!如果你想帮助改进这个项目:
- 分叉 存储库
- 创建分支 针对您的功能或修复(
git checkout -b my-feature) - 承诺 您的更改(
git commit -m "Add my feature") - 推 到您的分行(
git push origin my-feature) - 打开拉取请求
无论是错误报告、新功能想法、文档改进还是代码贡献,所有输入都会受到赞赏。请随意打开 问题 开始讨论。
