Skip to main content

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

  1. Install uv from Astral or the GitHub README
  2. 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):
  • 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

Installation

Kiro Cursor VS Code
Add to Kiro Install MCP Server Install on 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 analysis
  • extract_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 of extract_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)

Source distribution for awslabs.document-loader-mcp-server 1.0.24
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)

Table of built distributions (wheels) for awslabs.document-loader-mcp-server 1.0.24
File Interpreter ABI Platform Actions
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 log

Release 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 log

Security 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.

Select from 2 files

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 log

A 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.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page