PDF text and table extraction plus metadata. Supports OCR for scanned documents.
Runs on your machine from its package; the steps are below.
At most: only reads or looks up information.
Odel charges nothing per call. The publisher may charge for its own service.
Runs locally over stdio
This server isn't hosted — your MCP client launches it from a package registry. Use one of the commands below, or drop the config into your client (e.g. Claude Desktop).
Run
uvx techtenstein-pdf-mcp
MCP client config
{
"mcpServers": {
"techtenstein-pdf": {
"command": "uvx",
"args": [
"techtenstein-pdf-mcp"
]
}
}
}MCP server that gives your Claude, Cline, or Cursor session the ability to extract text, tables, and metadata from any PDF URL — including scanned PDFs via OCR. Powered by the Techtenstein PDF Extract API.
pdf_extract_text(pdf_url, ocr=False) — Extract all text from a PDF as clean plain textpdf_extract_tables(pdf_url) — Extract all tables as structured row arrayspdf_metadata(pdf_url) — Get title, author, page count, creation date, encryption statusAdd to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"techtenstein-pdf": {
"command": "uvx",
"args": ["techtenstein-pdf-mcp"],
"env": {
"TECHTENSTEIN_API_KEY": "your_key_from_techtenstein.com"
}
}
}
}
Restart Claude Desktop. pdf_extract_text, pdf_extract_tables, and pdf_metadata will appear as available tools.
Cline auto-detects MCP servers from your Claude Desktop config. Same setup as above works.
Add to ~/.cursor/mcp.json:
{
"mcpServers": {
"techtenstein-pdf": {
"command": "uvx",
"args": ["techtenstein-pdf-mcp"],
"env": {"TECHTENSTEIN_API_KEY": "your_key"}
}
}
}
Free tier (50 extractions/day, no card): https://apis.techtenstein.com
Paid tiers start at $5/month for 2,000 extractions.
Once installed, ask Claude:
"Extract the tables from this earnings report PDF: https://example.com/q4.pdf"
Claude will call pdf_extract_tables and return a clean structured view of every table on the page.
Or for scanned documents:
"This PDF is a scanned invoice. Extract the text: https://example.com/invoice.pdf"
Claude will call pdf_extract_text(pdf_url, ocr=True) and read the image-based text via OCR.
{
"text": "Full extracted body text...",
"page_count": 12,
"word_count": 3450,
"ms": 240
}
{
"tables": [
{
"page": 3,
"rows": [
["Product", "Q1", "Q2", "Q3", "Q4"],
["Widget A", "1200", "1350", "1420", "1600"]
]
}
]
}
MIT