Name | docx-mcp JSON |
Version |
0.1.1
JSON |
| download |
home_page | None |
Summary | A MCP (Model Context Protocol) service for Word document processing, providing document structure extraction, content modification and file management capabilities. |
upload_time | 2025-07-24 12:13:03 |
maintainer | None |
docs_url | None |
author | None |
requires_python | >=3.8 |
license | MIT |
keywords |
document
docx
mcp
microsoft
office
processing
word
|
VCS |
 |
bugtrack_url |
|
requirements |
No requirements were recorded.
|
Travis-CI |
No Travis.
|
coveralls test coverage |
No coveralls.
|
# DOCX MCP 服务
一个基于 MCP (Model Context Protocol) 的 Word 文档处理服务,提供文档结构提取、内容修改和文件管理功能。
## ✨ 功能特性
- 📄 **文档结构提取**: 从 .docx 文件中提取段落、表格等结构化内容
- ✏️ **内容修改**: 支持批量修改文档中的文本内容
- ☁️ **云存储集成**: 自动上传修改后的文档到阿里云 OSS
- 🔗 **URL 支持**: 支持从 URL 直接下载和处理文档
- 🛠️ **MCP 兼容**: 完全兼容 MCP 协议,可集成到支持 MCP 的 AI 助手中
## 📋 系统要求
- Python 3.13+
- uvx (推荐) 或 uv (Python 包管理器)
### 为什么选择 uvx?
- 🚀 **即开即用**: 无需本地安装,直接运行
- 🔒 **环境隔离**: 自动管理依赖环境,避免冲突
- 📦 **轻量部署**: 类似 npx,适合工具型应用
- 🔄 **自动更新**: 每次运行使用最新版本
## 🚀 快速开始
### 安装方式
#### 方式一:从本地运行 uvx(当前推荐)
```bash
# 在项目目录下运行
uvx --from . docx-mcp
# 或使用 uv tool run
uv tool run --from . docx-mcp
```
#### 方式二:发布后使用 uvx(未来推荐)
```bash
# 发布到 PyPI 后可以直接运行
uvx docx-mcp
```
#### 方式三:本地开发安装
```bash
# 使用 uv 安装依赖
uv sync
# 或使用 pip 从 pyproject.toml 安装
pip install -e .
```
### 配置 MCP 服务
#### 使用 uvx 从本地运行(当前推荐配置)
在 Cursor 的 `mcp.json` 配置文件中添加以下配置:
```json
{
"mcpServers": {
"docx_filler_service": {
"command": "cmd",
"args": [
"/c",
"uvx",
"--from",
"C:\\Users\\你的用户名\\Desktop\\docx_mcp",
"docx-mcp"
]
}
}
}
```
#### 使用 uvx 从 PyPI(发布后)
```json
{
"mcpServers": {
"docx_filler_service": {
"command": "cmd",
"args": [
"/c",
"uvx",
"docx-mcp"
]
}
}
}
```
#### 使用本地 uv(开发模式)
```json
{
"mcpServers": {
"docx_filler_service": {
"command": "cmd",
"args": [
"/c",
"uv",
"--directory",
"C:\\Users\\你的用户名\\Desktop\\docx_mcp",
"run",
"main.py"
]
}
}
}
```
### 启动服务
```bash
# 使用 uvx 从本地运行(当前推荐)
uvx --from . docx-mcp
# 使用 uvx 从 PyPI(发布后)
uvx docx-mcp
# 使用 uv 运行(开发模式)
uv run main.py
# 或直接运行
python main.py
```
## 📦 发布到 PyPI
如果您想要发布包以便全局使用 uvx:
### 快速配置(推荐)
```bash
# 1. 运行凭证配置脚本
python setup_pypi_credentials.py
# 2. 运行发布脚本
python publish.py
```
### 手动配置
```bash
# 1. 设置 PyPI 凭证
$env:TWINE_USERNAME = "your-pypi-username"
$env:TWINE_PASSWORD = "your-pypi-password"
# 2. 构建包
uv build
# 3. 发布到 PyPI
pip install twine
twine upload dist/*
```
发布后,任何人都可以直接使用:
```bash
uvx docx-mcp
```
## 🔧 API 功能
### 1. 提取文档结构
```python
extract_document_structure(document_url: str) -> Dict
```
从 URL 下载 .docx 文件并提取其结构,为每个元素分配唯一 ID。
**参数:**
- `document_url`: .docx 文件的 URL 链接
**返回:** 包含文档结构的字典,每个元素都有唯一的 ID
### 2. 应用文档修改
```python
apply_modifications_to_document(
original_file_content_base64: str,
patches_json: str
) -> str
```
将一系列修改应用到 .docx 文件,返回修改后的文件内容。
**参数:**
- `original_file_content_base64`: 原始 .docx 文件的 Base64 编码
- `patches_json`: JSON 格式的修改指令列表
**示例修改指令:**
```json
[
{
"element_id": "p_0",
"new_content": "新的段落内容"
},
{
"element_id": "table_0_cell_0_0",
"new_content": "新的表格单元格内容"
}
]
```
### 3. 获取修改后的文档
```python
get_modified_document(
original_file_content_base64: str,
patches_json: str
) -> str
```
`apply_modifications_to_document` 的别名,用于更清晰地表达获取最终结果的意图。
### 4. 准备文档下载
```python
prepare_document_for_download(
original_file_content_base64: str,
patches_json: str
) -> Dict
```
将修改后的文档上传到阿里云 OSS,返回下载链接。
**返回示例:**
```json
{
"success": true,
"download_url": "https://ggb-lzt.oss-cn-shenzhen.aliyuncs.com/modified_document_xxx.docx",
"file_name": "modified_document_xxx.docx"
}
```
### 5. 从 URL 处理文档
```python
process_document_from_url(
document_url: str,
patches_json: str
) -> Dict
```
直接从 URL 下载文档,应用修改,然后上传到 OSS。
## 📁 项目结构
```
docx_mcp/
├── core/ # 核心功能模块
│ ├── docx_processor.py # 文档处理器
│ └── models.py # 数据模型定义
├── dist/ # 构建输出目录
│ ├── docx_mcp-0.1.0-py3-none-any.whl
│ └── docx_mcp-0.1.0.tar.gz
├── main.py # MCP 服务主入口
├── pyproject.toml # 项目配置和依赖定义
├── requirements.txt # 备用依赖文件(兼容性)
├── uv.lock # uv 锁定文件
├── LICENSE # MIT 许可证
├── PUBLISH.md # 发布指南
├── PRE_PUBLISH_CHECKLIST.md # 发布前检查清单
├── READY_TO_PUBLISH.md # 发布准备说明
├── setup_pypi_credentials.py # PyPI 凭证配置脚本
├── publish.py # 自动化发布脚本
├── env.example # 环境变量配置模板
└── README.md # 项目文档
```
## 🔐 配置说明
### 阿里云 OSS 配置
推荐使用环境变量配置 OSS 访问信息。复制 `env.example` 文件并重命名为 `.env`,然后填入您的实际配置:
```bash
# 复制配置模板
cp env.example .env
```
在 `.env` 文件中设置:
```bash
OSS_ACCESS_KEY=your_access_key_here
OSS_SECRET_KEY=your_secret_key_here
OSS_BUCKET_NAME=your_bucket_name
OSS_DOMAIN=https://your-bucket.oss-cn-shenzhen.aliyuncs.com/
```
或者在系统环境变量中设置:
```bash
# Windows PowerShell
$env:OSS_ACCESS_KEY = "your_access_key_here"
$env:OSS_SECRET_KEY = "your_secret_key_here"
$env:OSS_BUCKET_NAME = "your_bucket_name"
$env:OSS_DOMAIN = "https://your-bucket.oss-cn-shenzhen.aliyuncs.com/"
# PyPI 发布凭证(可选)
$env:TWINE_USERNAME = "your-pypi-username"
$env:TWINE_PASSWORD = "your-pypi-password"
# Linux/macOS
export OSS_ACCESS_KEY="your_access_key_here"
export OSS_SECRET_KEY="your_secret_key_here"
export OSS_BUCKET_NAME="your_bucket_name"
export OSS_DOMAIN="https://your-bucket.oss-cn-shenzhen.aliyuncs.com/"
# PyPI 发布凭证(可选)
export TWINE_USERNAME="your-pypi-username"
export TWINE_PASSWORD="your-pypi-password"
```
⚠️ **安全提示**:
- 请不要将敏感信息提交到版本控制系统
- `.env` 文件已添加到 `.gitignore` 中
- 生产环境建议使用更安全的密钥管理方案
## 🛠️ 开发指南
### 数据模型
项目使用 Pydantic 定义数据模型:
```python
class DocumentPatch(BaseModel):
element_id: str # 元素唯一标识符
new_content: Any # 新内容(支持多种类型)
```
### 扩展功能
要添加新的文档处理功能:
1. 在 `core/docx_processor.py` 中实现处理逻辑
2. 在 `main.py` 中使用 `@mcp.tool()` 装饰器注册新的 MCP 工具
3. 更新相关的数据模型
## 🤝 贡献指南
1. Fork 本仓库
2. 创建功能分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 开启 Pull Request
## 📝 许可证
本项目基于 MIT 许可证开源 - 查看 [LICENSE](LICENSE) 文件了解详情。
## 🔗 相关链接
- [MCP 官方文档](https://modelcontextprotocol.io/)
- [FastMCP 框架](https://github.com/pydantic/fastmcp)
- [python-docx 文档](https://python-docx.readthedocs.io/)
- [阿里云 OSS Python SDK](https://help.aliyun.com/document_detail/32026.html)
## ❓ 常见问题
### Q: uvx 和 uv 有什么区别?
A: uvx 是用于运行独立 Python 工具的工具,类似 npx。它会自动处理依赖和环境隔离,更适合工具型应用。uv 主要用于项目依赖管理和开发。
### Q: 如何处理大文件?
A: 服务支持通过 Base64 编码处理大文件,但建议文件大小不超过 50MB。
### Q: 支持哪些文档格式?
A: 目前仅支持 .docx 格式(Office 2007+ 格式)。
### Q: 如何自定义 OSS 配置?
A: 修改 `main.py` 中的 `OSS_CONFIG` 字典,或考虑使用环境变量。
### Q: uvx 找不到命令怎么办?
A: 确保已安装 uv,然后 uvx 会自动可用。如果仍有问题,可以使用 `uv tool run docx-mcp` 替代。
---
💡 **提示**: 如有问题或建议,欢迎提交 Issue 或 Pull Request!
Raw data
{
"_id": null,
"home_page": null,
"name": "docx-mcp",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "Your Name <your.email@example.com>",
"keywords": "document, docx, mcp, microsoft, office, processing, word",
"author": null,
"author_email": "Your Name <your.email@example.com>",
"download_url": "https://files.pythonhosted.org/packages/54/c5/6c8a1085924831f8b89cc8aa1ba6fab53d9a9583895dc14c9c77293bfadb/docx_mcp-0.1.1.tar.gz",
"platform": null,
"description": "# DOCX MCP \u670d\u52a1\n\n\u4e00\u4e2a\u57fa\u4e8e MCP (Model Context Protocol) \u7684 Word \u6587\u6863\u5904\u7406\u670d\u52a1\uff0c\u63d0\u4f9b\u6587\u6863\u7ed3\u6784\u63d0\u53d6\u3001\u5185\u5bb9\u4fee\u6539\u548c\u6587\u4ef6\u7ba1\u7406\u529f\u80fd\u3002\n\n## \u2728 \u529f\u80fd\u7279\u6027\n\n- \ud83d\udcc4 **\u6587\u6863\u7ed3\u6784\u63d0\u53d6**: \u4ece .docx \u6587\u4ef6\u4e2d\u63d0\u53d6\u6bb5\u843d\u3001\u8868\u683c\u7b49\u7ed3\u6784\u5316\u5185\u5bb9\n- \u270f\ufe0f **\u5185\u5bb9\u4fee\u6539**: \u652f\u6301\u6279\u91cf\u4fee\u6539\u6587\u6863\u4e2d\u7684\u6587\u672c\u5185\u5bb9\n- \u2601\ufe0f **\u4e91\u5b58\u50a8\u96c6\u6210**: \u81ea\u52a8\u4e0a\u4f20\u4fee\u6539\u540e\u7684\u6587\u6863\u5230\u963f\u91cc\u4e91 OSS\n- \ud83d\udd17 **URL \u652f\u6301**: \u652f\u6301\u4ece URL \u76f4\u63a5\u4e0b\u8f7d\u548c\u5904\u7406\u6587\u6863\n- \ud83d\udee0\ufe0f **MCP \u517c\u5bb9**: \u5b8c\u5168\u517c\u5bb9 MCP \u534f\u8bae\uff0c\u53ef\u96c6\u6210\u5230\u652f\u6301 MCP \u7684 AI \u52a9\u624b\u4e2d\n\n## \ud83d\udccb \u7cfb\u7edf\u8981\u6c42\n\n- Python 3.13+\n- uvx (\u63a8\u8350) \u6216 uv (Python \u5305\u7ba1\u7406\u5668)\n\n### \u4e3a\u4ec0\u4e48\u9009\u62e9 uvx\uff1f\n\n- \ud83d\ude80 **\u5373\u5f00\u5373\u7528**: \u65e0\u9700\u672c\u5730\u5b89\u88c5\uff0c\u76f4\u63a5\u8fd0\u884c\n- \ud83d\udd12 **\u73af\u5883\u9694\u79bb**: \u81ea\u52a8\u7ba1\u7406\u4f9d\u8d56\u73af\u5883\uff0c\u907f\u514d\u51b2\u7a81\n- \ud83d\udce6 **\u8f7b\u91cf\u90e8\u7f72**: \u7c7b\u4f3c npx\uff0c\u9002\u5408\u5de5\u5177\u578b\u5e94\u7528\n- \ud83d\udd04 **\u81ea\u52a8\u66f4\u65b0**: \u6bcf\u6b21\u8fd0\u884c\u4f7f\u7528\u6700\u65b0\u7248\u672c\n\n## \ud83d\ude80 \u5feb\u901f\u5f00\u59cb\n\n### \u5b89\u88c5\u65b9\u5f0f\n\n#### \u65b9\u5f0f\u4e00\uff1a\u4ece\u672c\u5730\u8fd0\u884c uvx\uff08\u5f53\u524d\u63a8\u8350\uff09\n\n```bash\n# \u5728\u9879\u76ee\u76ee\u5f55\u4e0b\u8fd0\u884c\nuvx --from . docx-mcp\n\n# \u6216\u4f7f\u7528 uv tool run\nuv tool run --from . docx-mcp\n```\n\n#### \u65b9\u5f0f\u4e8c\uff1a\u53d1\u5e03\u540e\u4f7f\u7528 uvx\uff08\u672a\u6765\u63a8\u8350\uff09\n\n```bash\n# \u53d1\u5e03\u5230 PyPI \u540e\u53ef\u4ee5\u76f4\u63a5\u8fd0\u884c\nuvx docx-mcp\n```\n\n#### \u65b9\u5f0f\u4e09\uff1a\u672c\u5730\u5f00\u53d1\u5b89\u88c5\n\n```bash\n# \u4f7f\u7528 uv \u5b89\u88c5\u4f9d\u8d56\nuv sync\n\n# \u6216\u4f7f\u7528 pip \u4ece pyproject.toml \u5b89\u88c5\npip install -e .\n```\n\n### \u914d\u7f6e MCP \u670d\u52a1\n\n#### \u4f7f\u7528 uvx \u4ece\u672c\u5730\u8fd0\u884c\uff08\u5f53\u524d\u63a8\u8350\u914d\u7f6e\uff09\n\n\u5728 Cursor \u7684 `mcp.json` \u914d\u7f6e\u6587\u4ef6\u4e2d\u6dfb\u52a0\u4ee5\u4e0b\u914d\u7f6e\uff1a\n\n```json\n{\n \"mcpServers\": {\n \"docx_filler_service\": {\n \"command\": \"cmd\",\n \"args\": [\n \"/c\",\n \"uvx\",\n \"--from\",\n \"C:\\\\Users\\\\\u4f60\u7684\u7528\u6237\u540d\\\\Desktop\\\\docx_mcp\",\n \"docx-mcp\"\n ]\n }\n }\n}\n```\n\n#### \u4f7f\u7528 uvx \u4ece PyPI\uff08\u53d1\u5e03\u540e\uff09\n\n```json\n{\n \"mcpServers\": {\n \"docx_filler_service\": {\n \"command\": \"cmd\",\n \"args\": [\n \"/c\",\n \"uvx\",\n \"docx-mcp\"\n ]\n }\n }\n}\n```\n\n#### \u4f7f\u7528\u672c\u5730 uv\uff08\u5f00\u53d1\u6a21\u5f0f\uff09\n\n```json\n{\n \"mcpServers\": {\n \"docx_filler_service\": {\n \"command\": \"cmd\",\n \"args\": [\n \"/c\",\n \"uv\",\n \"--directory\",\n \"C:\\\\Users\\\\\u4f60\u7684\u7528\u6237\u540d\\\\Desktop\\\\docx_mcp\",\n \"run\",\n \"main.py\"\n ]\n }\n }\n}\n```\n\n### \u542f\u52a8\u670d\u52a1\n\n```bash\n# \u4f7f\u7528 uvx \u4ece\u672c\u5730\u8fd0\u884c\uff08\u5f53\u524d\u63a8\u8350\uff09\nuvx --from . docx-mcp\n\n# \u4f7f\u7528 uvx \u4ece PyPI\uff08\u53d1\u5e03\u540e\uff09\nuvx docx-mcp\n\n# \u4f7f\u7528 uv \u8fd0\u884c\uff08\u5f00\u53d1\u6a21\u5f0f\uff09\nuv run main.py\n\n# \u6216\u76f4\u63a5\u8fd0\u884c\npython main.py\n```\n\n## \ud83d\udce6 \u53d1\u5e03\u5230 PyPI\n\n\u5982\u679c\u60a8\u60f3\u8981\u53d1\u5e03\u5305\u4ee5\u4fbf\u5168\u5c40\u4f7f\u7528 uvx\uff1a\n\n### \u5feb\u901f\u914d\u7f6e\uff08\u63a8\u8350\uff09\n\n```bash\n# 1. \u8fd0\u884c\u51ed\u8bc1\u914d\u7f6e\u811a\u672c\npython setup_pypi_credentials.py\n\n# 2. \u8fd0\u884c\u53d1\u5e03\u811a\u672c\npython publish.py\n```\n\n### \u624b\u52a8\u914d\u7f6e\n\n```bash\n# 1. \u8bbe\u7f6e PyPI \u51ed\u8bc1\n$env:TWINE_USERNAME = \"your-pypi-username\"\n$env:TWINE_PASSWORD = \"your-pypi-password\"\n\n# 2. \u6784\u5efa\u5305\nuv build\n\n# 3. \u53d1\u5e03\u5230 PyPI\npip install twine\ntwine upload dist/*\n```\n\n\u53d1\u5e03\u540e\uff0c\u4efb\u4f55\u4eba\u90fd\u53ef\u4ee5\u76f4\u63a5\u4f7f\u7528\uff1a\n```bash\nuvx docx-mcp\n```\n\n## \ud83d\udd27 API \u529f\u80fd\n\n### 1. \u63d0\u53d6\u6587\u6863\u7ed3\u6784\n\n```python\nextract_document_structure(document_url: str) -> Dict\n```\n\n\u4ece URL \u4e0b\u8f7d .docx \u6587\u4ef6\u5e76\u63d0\u53d6\u5176\u7ed3\u6784\uff0c\u4e3a\u6bcf\u4e2a\u5143\u7d20\u5206\u914d\u552f\u4e00 ID\u3002\n\n**\u53c2\u6570:**\n- `document_url`: .docx \u6587\u4ef6\u7684 URL \u94fe\u63a5\n\n**\u8fd4\u56de:** \u5305\u542b\u6587\u6863\u7ed3\u6784\u7684\u5b57\u5178\uff0c\u6bcf\u4e2a\u5143\u7d20\u90fd\u6709\u552f\u4e00\u7684 ID\n\n### 2. \u5e94\u7528\u6587\u6863\u4fee\u6539\n\n```python\napply_modifications_to_document(\n original_file_content_base64: str, \n patches_json: str\n) -> str\n```\n\n\u5c06\u4e00\u7cfb\u5217\u4fee\u6539\u5e94\u7528\u5230 .docx \u6587\u4ef6\uff0c\u8fd4\u56de\u4fee\u6539\u540e\u7684\u6587\u4ef6\u5185\u5bb9\u3002\n\n**\u53c2\u6570:**\n- `original_file_content_base64`: \u539f\u59cb .docx \u6587\u4ef6\u7684 Base64 \u7f16\u7801\n- `patches_json`: JSON \u683c\u5f0f\u7684\u4fee\u6539\u6307\u4ee4\u5217\u8868\n\n**\u793a\u4f8b\u4fee\u6539\u6307\u4ee4:**\n```json\n[\n {\n \"element_id\": \"p_0\",\n \"new_content\": \"\u65b0\u7684\u6bb5\u843d\u5185\u5bb9\"\n },\n {\n \"element_id\": \"table_0_cell_0_0\",\n \"new_content\": \"\u65b0\u7684\u8868\u683c\u5355\u5143\u683c\u5185\u5bb9\"\n }\n]\n```\n\n### 3. \u83b7\u53d6\u4fee\u6539\u540e\u7684\u6587\u6863\n\n```python\nget_modified_document(\n original_file_content_base64: str, \n patches_json: str\n) -> str\n```\n\n`apply_modifications_to_document` \u7684\u522b\u540d\uff0c\u7528\u4e8e\u66f4\u6e05\u6670\u5730\u8868\u8fbe\u83b7\u53d6\u6700\u7ec8\u7ed3\u679c\u7684\u610f\u56fe\u3002\n\n### 4. \u51c6\u5907\u6587\u6863\u4e0b\u8f7d\n\n```python\nprepare_document_for_download(\n original_file_content_base64: str, \n patches_json: str\n) -> Dict\n```\n\n\u5c06\u4fee\u6539\u540e\u7684\u6587\u6863\u4e0a\u4f20\u5230\u963f\u91cc\u4e91 OSS\uff0c\u8fd4\u56de\u4e0b\u8f7d\u94fe\u63a5\u3002\n\n**\u8fd4\u56de\u793a\u4f8b:**\n```json\n{\n \"success\": true,\n \"download_url\": \"https://ggb-lzt.oss-cn-shenzhen.aliyuncs.com/modified_document_xxx.docx\",\n \"file_name\": \"modified_document_xxx.docx\"\n}\n```\n\n### 5. \u4ece URL \u5904\u7406\u6587\u6863\n\n```python\nprocess_document_from_url(\n document_url: str, \n patches_json: str\n) -> Dict\n```\n\n\u76f4\u63a5\u4ece URL \u4e0b\u8f7d\u6587\u6863\uff0c\u5e94\u7528\u4fee\u6539\uff0c\u7136\u540e\u4e0a\u4f20\u5230 OSS\u3002\n\n## \ud83d\udcc1 \u9879\u76ee\u7ed3\u6784\n\n```\ndocx_mcp/\n\u251c\u2500\u2500 core/ # \u6838\u5fc3\u529f\u80fd\u6a21\u5757\n\u2502 \u251c\u2500\u2500 docx_processor.py # \u6587\u6863\u5904\u7406\u5668\n\u2502 \u2514\u2500\u2500 models.py # \u6570\u636e\u6a21\u578b\u5b9a\u4e49\n\u251c\u2500\u2500 dist/ # \u6784\u5efa\u8f93\u51fa\u76ee\u5f55\n\u2502 \u251c\u2500\u2500 docx_mcp-0.1.0-py3-none-any.whl\n\u2502 \u2514\u2500\u2500 docx_mcp-0.1.0.tar.gz\n\u251c\u2500\u2500 main.py # MCP \u670d\u52a1\u4e3b\u5165\u53e3\n\u251c\u2500\u2500 pyproject.toml # \u9879\u76ee\u914d\u7f6e\u548c\u4f9d\u8d56\u5b9a\u4e49\n\u251c\u2500\u2500 requirements.txt # \u5907\u7528\u4f9d\u8d56\u6587\u4ef6\uff08\u517c\u5bb9\u6027\uff09\n\u251c\u2500\u2500 uv.lock # uv \u9501\u5b9a\u6587\u4ef6\n\u251c\u2500\u2500 LICENSE # MIT \u8bb8\u53ef\u8bc1\n\u251c\u2500\u2500 PUBLISH.md # \u53d1\u5e03\u6307\u5357\n\u251c\u2500\u2500 PRE_PUBLISH_CHECKLIST.md # \u53d1\u5e03\u524d\u68c0\u67e5\u6e05\u5355\n\u251c\u2500\u2500 READY_TO_PUBLISH.md # \u53d1\u5e03\u51c6\u5907\u8bf4\u660e\n\u251c\u2500\u2500 setup_pypi_credentials.py # PyPI \u51ed\u8bc1\u914d\u7f6e\u811a\u672c\n\u251c\u2500\u2500 publish.py # \u81ea\u52a8\u5316\u53d1\u5e03\u811a\u672c\n\u251c\u2500\u2500 env.example # \u73af\u5883\u53d8\u91cf\u914d\u7f6e\u6a21\u677f\n\u2514\u2500\u2500 README.md # \u9879\u76ee\u6587\u6863\n```\n\n## \ud83d\udd10 \u914d\u7f6e\u8bf4\u660e\n\n### \u963f\u91cc\u4e91 OSS \u914d\u7f6e\n\n\u63a8\u8350\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u914d\u7f6e OSS \u8bbf\u95ee\u4fe1\u606f\u3002\u590d\u5236 `env.example` \u6587\u4ef6\u5e76\u91cd\u547d\u540d\u4e3a `.env`\uff0c\u7136\u540e\u586b\u5165\u60a8\u7684\u5b9e\u9645\u914d\u7f6e\uff1a\n\n```bash\n# \u590d\u5236\u914d\u7f6e\u6a21\u677f\ncp env.example .env\n```\n\n\u5728 `.env` \u6587\u4ef6\u4e2d\u8bbe\u7f6e\uff1a\n\n```bash\nOSS_ACCESS_KEY=your_access_key_here\nOSS_SECRET_KEY=your_secret_key_here\nOSS_BUCKET_NAME=your_bucket_name\nOSS_DOMAIN=https://your-bucket.oss-cn-shenzhen.aliyuncs.com/\n```\n\n\u6216\u8005\u5728\u7cfb\u7edf\u73af\u5883\u53d8\u91cf\u4e2d\u8bbe\u7f6e\uff1a\n\n```bash\n# Windows PowerShell\n$env:OSS_ACCESS_KEY = \"your_access_key_here\"\n$env:OSS_SECRET_KEY = \"your_secret_key_here\"\n$env:OSS_BUCKET_NAME = \"your_bucket_name\"\n$env:OSS_DOMAIN = \"https://your-bucket.oss-cn-shenzhen.aliyuncs.com/\"\n\n# PyPI \u53d1\u5e03\u51ed\u8bc1\uff08\u53ef\u9009\uff09\n$env:TWINE_USERNAME = \"your-pypi-username\"\n$env:TWINE_PASSWORD = \"your-pypi-password\"\n\n# Linux/macOS\nexport OSS_ACCESS_KEY=\"your_access_key_here\"\nexport OSS_SECRET_KEY=\"your_secret_key_here\"\nexport OSS_BUCKET_NAME=\"your_bucket_name\"\nexport OSS_DOMAIN=\"https://your-bucket.oss-cn-shenzhen.aliyuncs.com/\"\n\n# PyPI \u53d1\u5e03\u51ed\u8bc1\uff08\u53ef\u9009\uff09\nexport TWINE_USERNAME=\"your-pypi-username\"\nexport TWINE_PASSWORD=\"your-pypi-password\"\n```\n\n\u26a0\ufe0f **\u5b89\u5168\u63d0\u793a**: \n- \u8bf7\u4e0d\u8981\u5c06\u654f\u611f\u4fe1\u606f\u63d0\u4ea4\u5230\u7248\u672c\u63a7\u5236\u7cfb\u7edf\n- `.env` \u6587\u4ef6\u5df2\u6dfb\u52a0\u5230 `.gitignore` \u4e2d\n- \u751f\u4ea7\u73af\u5883\u5efa\u8bae\u4f7f\u7528\u66f4\u5b89\u5168\u7684\u5bc6\u94a5\u7ba1\u7406\u65b9\u6848\n\n## \ud83d\udee0\ufe0f \u5f00\u53d1\u6307\u5357\n\n### \u6570\u636e\u6a21\u578b\n\n\u9879\u76ee\u4f7f\u7528 Pydantic \u5b9a\u4e49\u6570\u636e\u6a21\u578b\uff1a\n\n```python\nclass DocumentPatch(BaseModel):\n element_id: str # \u5143\u7d20\u552f\u4e00\u6807\u8bc6\u7b26\n new_content: Any # \u65b0\u5185\u5bb9\uff08\u652f\u6301\u591a\u79cd\u7c7b\u578b\uff09\n```\n\n### \u6269\u5c55\u529f\u80fd\n\n\u8981\u6dfb\u52a0\u65b0\u7684\u6587\u6863\u5904\u7406\u529f\u80fd\uff1a\n\n1. \u5728 `core/docx_processor.py` \u4e2d\u5b9e\u73b0\u5904\u7406\u903b\u8f91\n2. \u5728 `main.py` \u4e2d\u4f7f\u7528 `@mcp.tool()` \u88c5\u9970\u5668\u6ce8\u518c\u65b0\u7684 MCP \u5de5\u5177\n3. \u66f4\u65b0\u76f8\u5173\u7684\u6570\u636e\u6a21\u578b\n\n## \ud83e\udd1d \u8d21\u732e\u6307\u5357\n\n1. Fork \u672c\u4ed3\u5e93\n2. \u521b\u5efa\u529f\u80fd\u5206\u652f (`git checkout -b feature/AmazingFeature`)\n3. \u63d0\u4ea4\u66f4\u6539 (`git commit -m 'Add some AmazingFeature'`)\n4. \u63a8\u9001\u5230\u5206\u652f (`git push origin feature/AmazingFeature`)\n5. \u5f00\u542f Pull Request\n\n## \ud83d\udcdd \u8bb8\u53ef\u8bc1\n\n\u672c\u9879\u76ee\u57fa\u4e8e MIT \u8bb8\u53ef\u8bc1\u5f00\u6e90 - \u67e5\u770b [LICENSE](LICENSE) \u6587\u4ef6\u4e86\u89e3\u8be6\u60c5\u3002\n\n## \ud83d\udd17 \u76f8\u5173\u94fe\u63a5\n\n- [MCP \u5b98\u65b9\u6587\u6863](https://modelcontextprotocol.io/)\n- [FastMCP \u6846\u67b6](https://github.com/pydantic/fastmcp)\n- [python-docx \u6587\u6863](https://python-docx.readthedocs.io/)\n- [\u963f\u91cc\u4e91 OSS Python SDK](https://help.aliyun.com/document_detail/32026.html)\n\n## \u2753 \u5e38\u89c1\u95ee\u9898\n\n### Q: uvx \u548c uv \u6709\u4ec0\u4e48\u533a\u522b\uff1f\nA: uvx \u662f\u7528\u4e8e\u8fd0\u884c\u72ec\u7acb Python \u5de5\u5177\u7684\u5de5\u5177\uff0c\u7c7b\u4f3c npx\u3002\u5b83\u4f1a\u81ea\u52a8\u5904\u7406\u4f9d\u8d56\u548c\u73af\u5883\u9694\u79bb\uff0c\u66f4\u9002\u5408\u5de5\u5177\u578b\u5e94\u7528\u3002uv \u4e3b\u8981\u7528\u4e8e\u9879\u76ee\u4f9d\u8d56\u7ba1\u7406\u548c\u5f00\u53d1\u3002\n\n### Q: \u5982\u4f55\u5904\u7406\u5927\u6587\u4ef6\uff1f\nA: \u670d\u52a1\u652f\u6301\u901a\u8fc7 Base64 \u7f16\u7801\u5904\u7406\u5927\u6587\u4ef6\uff0c\u4f46\u5efa\u8bae\u6587\u4ef6\u5927\u5c0f\u4e0d\u8d85\u8fc7 50MB\u3002\n\n### Q: \u652f\u6301\u54ea\u4e9b\u6587\u6863\u683c\u5f0f\uff1f\nA: \u76ee\u524d\u4ec5\u652f\u6301 .docx \u683c\u5f0f\uff08Office 2007+ \u683c\u5f0f\uff09\u3002\n\n### Q: \u5982\u4f55\u81ea\u5b9a\u4e49 OSS \u914d\u7f6e\uff1f\nA: \u4fee\u6539 `main.py` \u4e2d\u7684 `OSS_CONFIG` \u5b57\u5178\uff0c\u6216\u8003\u8651\u4f7f\u7528\u73af\u5883\u53d8\u91cf\u3002\n\n### Q: uvx \u627e\u4e0d\u5230\u547d\u4ee4\u600e\u4e48\u529e\uff1f\nA: \u786e\u4fdd\u5df2\u5b89\u88c5 uv\uff0c\u7136\u540e uvx \u4f1a\u81ea\u52a8\u53ef\u7528\u3002\u5982\u679c\u4ecd\u6709\u95ee\u9898\uff0c\u53ef\u4ee5\u4f7f\u7528 `uv tool run docx-mcp` \u66ff\u4ee3\u3002\n\n---\n\n\ud83d\udca1 **\u63d0\u793a**: \u5982\u6709\u95ee\u9898\u6216\u5efa\u8bae\uff0c\u6b22\u8fce\u63d0\u4ea4 Issue \u6216 Pull Request\uff01\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A MCP (Model Context Protocol) service for Word document processing, providing document structure extraction, content modification and file management capabilities.",
"version": "0.1.1",
"project_urls": {
"Documentation": "https://github.com/yourusername/docx_mcp#readme",
"Homepage": "https://github.com/yourusername/docx_mcp",
"Issues": "https://github.com/yourusername/docx_mcp/issues",
"Repository": "https://github.com/yourusername/docx_mcp"
},
"split_keywords": [
"document",
" docx",
" mcp",
" microsoft",
" office",
" processing",
" word"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "348f5220df53514992375402e040f7bd2176e284cd2014389997a88f25dbbc14",
"md5": "b5fae977e6074c8f63e46042536c0a8f",
"sha256": "7187e6e2b383e7c86e9a4cd4584a1a286679f416fed0d5c9a5f8031053943fcf"
},
"downloads": -1,
"filename": "docx_mcp-0.1.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "b5fae977e6074c8f63e46042536c0a8f",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 72636,
"upload_time": "2025-07-24T12:13:00",
"upload_time_iso_8601": "2025-07-24T12:13:00.648401Z",
"url": "https://files.pythonhosted.org/packages/34/8f/5220df53514992375402e040f7bd2176e284cd2014389997a88f25dbbc14/docx_mcp-0.1.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "54c56c8a1085924831f8b89cc8aa1ba6fab53d9a9583895dc14c9c77293bfadb",
"md5": "9205781389e5a4ee3f486e9aba029131",
"sha256": "31b409b22b054612c4de01a0f023dad5ac30356bf6173e115537aa8602ca2821"
},
"downloads": -1,
"filename": "docx_mcp-0.1.1.tar.gz",
"has_sig": false,
"md5_digest": "9205781389e5a4ee3f486e9aba029131",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 57353,
"upload_time": "2025-07-24T12:13:03",
"upload_time_iso_8601": "2025-07-24T12:13:03.224927Z",
"url": "https://files.pythonhosted.org/packages/54/c5/6c8a1085924831f8b89cc8aa1ba6fab53d9a9583895dc14c9c77293bfadb/docx_mcp-0.1.1.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-24 12:13:03",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "yourusername",
"github_project": "docx_mcp#readme",
"github_not_found": true,
"lcname": "docx-mcp"
}