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

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.25
File Size Uploaded Provenance Actions
awslabs_document_loader_mcp_server-1.0.25.tar.gz 208.9 kB With provenance Details for awslabs_document_loader_mcp_server-1.0.25.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for awslabs.document-loader-mcp-server 1.0.25
File Interpreter ABI Platform Actions
awslabs_document_loader_mcp_server-1.0.25-py3-none-any.whl Python 3 none any Details for awslabs_document_loader_mcp_server-1.0.25-py3-none-any.whl

Total release size: 225.3 kB

Release files / awslabs_document_loader_mcp_server-1.0.25.tar.gz

Download URL awslabs_document_loader_mcp_server-1.0.25.tar.gz
Size 208.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a2bc05b5174a70e6abad795f629c1d2cd043123ba7cb7e1777941528704114ed
BLAKE2b-256 checksum
How to use checksums
8d07ef32fe81a62b5cc2b2d82ae6d5426aa32ffa46a341276f1a0bdbd6634614
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 Nov 9, 2026.

Transparency log

Release files / awslabs_document_loader_mcp_server-1.0.25-py3-none-any.whl

Download URL awslabs_document_loader_mcp_server-1.0.25-py3-none-any.whl
Size 16.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70c60ce9bff830412d8a6bdd80950bd65c46442dd4bd907415d5ab66d7b2b075
BLAKE2b-256 checksum
How to use checksums
7ec600b1988aaf57edb10960d8cc1e843e39fa0c1402e5029dbbf790a31638e7
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 Nov 9, 2026.

Transparency log

Security for awslabs.document-loader-mcp-server 1.0.25

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

Both files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for awslabs_document_loader_mcp_server-1.0.25.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 Nov 9, 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