Some checks are pending
Security Scan / security-scan (push) Waiting to run
New tool in ImageProcessingMixin (sibling of pdf_to_markdown). Accepts either a markdown file path or inline markdown text, writes a PDF to a caller-specified output path. Engine selection auto-detects what's available on PATH, preferring quality: xelatex > pdflatex > tectonic > weasyprint > wkhtmltopdf. Caller can force a specific engine or pass raw pandoc args for advanced cases. pypandoc is gated behind a new [markdown] optional extra so the base install stays lean. The tool surfaces clear errors if pypandoc, pandoc, or all PDF engines are missing. Bumps to v2.2.0 (new feature, minor bump).
128 lines
3.0 KiB
TOML
128 lines
3.0 KiB
TOML
[project]
|
|
name = "mcp-pdf"
|
|
version = "2.2.0"
|
|
description = "Secure FastMCP server for comprehensive PDF processing - text extraction, OCR, table extraction, forms, annotations, and more"
|
|
authors = [{name = "Ryan Malloy", email = "ryan@malloys.us"}]
|
|
readme = "README.md"
|
|
license = {text = "MIT"}
|
|
requires-python = ">=3.10"
|
|
keywords = [
|
|
"mcp",
|
|
"fastmcp",
|
|
"pdf",
|
|
"ocr",
|
|
"text-extraction",
|
|
"table-extraction",
|
|
"pdf-processing",
|
|
"api",
|
|
"integration"
|
|
]
|
|
classifiers = [
|
|
"Development Status :: 4 - Beta",
|
|
"Intended Audience :: Developers",
|
|
"License :: OSI Approved :: MIT License",
|
|
"Programming Language :: Python :: 3",
|
|
"Programming Language :: Python :: 3.10",
|
|
"Programming Language :: Python :: 3.11",
|
|
"Programming Language :: Python :: 3.12",
|
|
"Topic :: Software Development :: Libraries :: Python Modules",
|
|
"Topic :: Text Processing :: General",
|
|
"Topic :: Office/Business",
|
|
]
|
|
dependencies = [
|
|
"fastmcp>=0.1.0",
|
|
"httpx>=0.25.0",
|
|
"pydantic>=2.0.0",
|
|
"python-dotenv>=1.0.0",
|
|
"PyMuPDF>=1.23.0",
|
|
"pdfplumber>=0.10.0",
|
|
"pytesseract>=0.3.10",
|
|
"pdf2image>=1.16.0",
|
|
"pypdf>=6.0.0",
|
|
"pandas>=2.0.0",
|
|
"Pillow>=10.0.0",
|
|
"markdown>=3.5.0",
|
|
]
|
|
|
|
[project.urls]
|
|
Homepage = "https://github.com/rsp2k/mcp-pdf"
|
|
Documentation = "https://github.com/rsp2k/mcp-pdf#readme"
|
|
Repository = "https://github.com/rsp2k/mcp-pdf.git"
|
|
Issues = "https://github.com/rsp2k/mcp-pdf/issues"
|
|
Changelog = "https://github.com/rsp2k/mcp-pdf/releases"
|
|
|
|
[project.scripts]
|
|
mcp-pdf = "mcp_pdf.server:main"
|
|
mcp-pdf-legacy = "mcp_pdf.server_legacy:main"
|
|
mcp-pdf-modular = "mcp_pdf.server_refactored:main"
|
|
|
|
[project.optional-dependencies]
|
|
# Form creation features (create_form_pdf, advanced form tools)
|
|
forms = [
|
|
"reportlab>=4.0.0",
|
|
]
|
|
|
|
# Advanced table extraction (camelot needs Ghostscript, tabula needs Java)
|
|
tables = [
|
|
"camelot-py[cv]>=0.11.0",
|
|
"tabula-py>=2.8.0",
|
|
]
|
|
|
|
# Markdown → PDF conversion (requires pandoc binary + a PDF engine such as
|
|
# xelatex, pdflatex, tectonic, weasyprint, or wkhtmltopdf)
|
|
markdown = [
|
|
"pypandoc>=1.13",
|
|
]
|
|
|
|
# All optional features
|
|
all = [
|
|
"reportlab>=4.0.0",
|
|
"camelot-py[cv]>=0.11.0",
|
|
"tabula-py>=2.8.0",
|
|
"pypandoc>=1.13",
|
|
]
|
|
|
|
# Development dependencies
|
|
dev = [
|
|
"pytest>=7.0.0",
|
|
"pytest-asyncio>=0.21.0",
|
|
"black>=23.0.0",
|
|
"ruff>=0.1.0",
|
|
"mypy>=1.0.0",
|
|
"build>=0.10.0",
|
|
"twine>=4.0.0",
|
|
"safety>=3.0.0",
|
|
"pip-audit>=2.0.0",
|
|
]
|
|
|
|
[build-system]
|
|
requires = ["hatchling"]
|
|
build-backend = "hatchling.build"
|
|
|
|
[tool.pytest.ini_options]
|
|
asyncio_mode = "auto"
|
|
addopts = "-v --tb=short"
|
|
testpaths = ["tests"]
|
|
python_files = ["test_*.py", "*_test.py"]
|
|
|
|
[tool.hatchling.build.targets.sdist]
|
|
include = [
|
|
"/src",
|
|
"/tests",
|
|
"/examples",
|
|
"README.md",
|
|
"LICENSE",
|
|
"MANIFEST.in",
|
|
]
|
|
|
|
[dependency-groups]
|
|
dev = [
|
|
"pip-audit>=2.9.0",
|
|
"pytest>=8.4.1",
|
|
"pytest-asyncio>=1.1.0",
|
|
"pytest-cov>=6.2.1",
|
|
"reportlab>=4.4.3",
|
|
"safety>=3.2.11",
|
|
"twine>=6.1.0",
|
|
]
|