Document Loader MCP Server
Model Context Protocol (MCP) server for document parsing and content extraction
This MCP server provides tools to parse and extract content from various document formats including PDF, Word documents, Excel spreadsheets, PowerPoint presentations, and images.
Features
- PDF Text Extraction: Extract text content from PDF files using pdfplumber
- Word Document Processing: Convert DOCX/DOC files to markdown using markitdown
- Excel Spreadsheet Reading: Parse XLSX/XLS files and convert to markdown
- PowerPoint Presentation Processing: Extract content from PPTX/PPT files
- Image Loading: Load and display various image formats (PNG, JPG, GIF, BMP, TIFF, WEBP)
- Slide Image Extraction: Extract individual slides/pages as PNG images from PPTX, PPT, or PDF files using LibreOffice and poppler
Prerequisites
Installation Requirements
- Install
uvfrom Astral or the GitHub README - Install Python 3.10 or newer using
uv python install 3.10(or a more recent version)
Optional: Slide Image Extraction
The extract_slides_as_images tool requires external system packages:
- LibreOffice (for PPTX/PPT → PDF conversion):
- Ubuntu/Debian:
sudo apt install libreoffice - macOS:
brew install --cask libreoffice - Windows: Download from libreoffice.org
- Ubuntu/Debian:
- poppler-utils (for PDF → image rendering):
- Ubuntu/Debian:
sudo apt install poppler-utils - macOS:
brew install poppler - Windows: Download from GitHub and add to PATH
- Ubuntu/Debian:
Installation
| Kiro | Cursor | VS Code |
|---|---|---|
Configure the MCP server in your MCP client configuration:
{
"mcpServers": {
"awslabs.document-loader-mcp-server": {
"command": "uvx",
"args": ["awslabs.document-loader-mcp-server@latest"],
"env": {
"FASTMCP_LOG_LEVEL": "ERROR"
},
"disabled": false,
"autoApprove": []
}
}
}
For Kiro MCP configuration, see the Kiro IDE documentation or the Kiro CLI documentation for details.
For global configuration, edit ~/.kiro/settings/mcp.json. For project-specific configuration, edit .kiro/settings/mcp.json in your project directory.
Available Tools
read_document: Extract content from various document formats by specifying file_path and file_type ('pdf', 'docx', 'doc', 'xlsx', 'xls', 'pptx', 'ppt')read_image: Load image files for LLM viewing and analysisextract_slides_as_images: Extract slides/pages as individual PNG images from PPTX, PPT, or PDF files. Requires LibreOffice (for PPTX/PPT) and poppler-utils (for PDF-to-image rendering)
Environment Variables
FASTMCP_LOG_LEVEL: Set logging level (ERROR, INFO, DEBUG)MAX_FILE_SIZE_MB: Maximum allowed file size in megabytes (default: 50). Must be a positive integer.DOCUMENT_BASE_DIR: Base directory that constrains all file access (read_document,read_image, and both the input and output paths ofextract_slides_as_images). Every resolved path must be inside this directory or the request is denied. Defaults to the current working directory. Set it explicitly (e.g./var/app/documents) to define your sandbox. The sandbox is always enforced — there is no automatic bypass, including under CI (CI,GITHUB_ACTIONS) or test (PYTEST_CURRENT_TEST) environments.
Development
Setup
# Clone the repository
git clone https://github.com/awslabs/mcp.git
cd mcp/src/document-loader-mcp-server
# Install dependencies
uv sync
# Install in development mode
uv pip install -e .
Testing
# Run tests
uv run pytest
# Run with coverage
uv run pytest --cov=awslabs.document_loader_mcp_server
The test suite includes:
- Server functionality validation
- Document parsing tests with generated sample files
- Error handling verification
Sample Documents
The test suite automatically generates sample documents for testing:
- PDF with multi-page content
- DOCX with formatted text and lists
- XLSX with multiple sheets and data
- PPTX with slides and content
- Various image formats
Docker
You can also run this server in a Docker container. The image speaks MCP over
stdio (the Dockerfile does not expose an HTTP port), so use --interactive
and omit -p. Mount a host docs folder so tools can see files, and set
DOCUMENT_BASE_DIR to that mount (paths you pass to tools are container paths like /docs/report.pdf). Add :ro to the mount if you only read documents;
leave it writable for extract_slides_as_images.
docker build -t awslabs/document-loader-mcp-server .
docker run --rm --interactive \
-v "$PWD/docs:/docs" \
-e DOCUMENT_BASE_DIR=/docs \
-e FASTMCP_LOG_LEVEL=ERROR \
awslabs/document-loader-mcp-server
Example MCP client config:
{
"mcpServers": {
"awslabs.document-loader-mcp-server": {
"command": "docker",
"args": [
"run", "--rm", "--interactive",
"-v", "/path/to/docs:/docs",
"-e", "DOCUMENT_BASE_DIR=/docs",
"-e", "FASTMCP_LOG_LEVEL=ERROR",
"awslabs/document-loader-mcp-server"
]
}
}
}
License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
Contributing
We welcome contributions! Please see CONTRIBUTING.md for details.
Support
For issues and questions, please use the GitHub issue tracker.
Metadata
Release files for awslabs.document-loader-mcp-server 1.0.24
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| awslabs_document_loader_mcp_server-1.0.24.tar.gz | 200.0 kB | With provenance | Details for awslabs_document_loader_mcp_server-1.0.24.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| awslabs_document_loader_mcp_server-1.0.24-py3-none-any.whl | Python 3 | none | any | Details for awslabs_document_loader_mcp_server-1.0.24-py3-none-any.whl |
Total release size: 216.4 kB
Release files / awslabs_document_loader_mcp_server-1.0.24.tar.gz
| Download URL | awslabs_document_loader_mcp_server-1.0.24.tar.gz |
|---|---|
| Size | 200.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3d0a00a98455055fea44952803374de237e94d6ecca20d72617417015696f40c
|
|
BLAKE2b-256 checksum How to use checksums |
a42ba835b856bce78871ea0e144d036ad469d43b330d388e6c7945a229f0633d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logRelease files / awslabs_document_loader_mcp_server-1.0.24-py3-none-any.whl
| Download URL | awslabs_document_loader_mcp_server-1.0.24-py3-none-any.whl |
|---|---|
| Size | 16.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
22536f371bb2021d098a7e70deaab8858a84f375a362ab1c45aea0ed82f28694
|
|
BLAKE2b-256 checksum How to use checksums |
f622c090330636cc9c9df1de733123a98bae1e1f7f2b1f12f76a5d750be8b7be
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logSecurity for awslabs.document-loader-mcp-server 1.0.24
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
Full provenance
All 2 files in this release have been uploaded with provenance metadata.
Attestation for awslabs_document_loader_mcp_server-1.0.24.tar.gz
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Oct 30, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.