{"name":"io.github.NameetP/pdfmux","slug":"nameetp-pdfmux","title":"pdfmux","description":"PDF-to-Markdown extraction that audits its own output and flags any extractor's silent drops.","url":"https://mcp.market/server/nameetp-pdfmux","rating":null,"grade":"C","score":65,"certified":false,"status":"active","category":"other","tags":[],"presence":{"score":36,"stars":82,"forks":14,"downloads_week":null,"last_push_at":"2026-09-12T02:47:28.000Z","license":"MIT"},"uptime":null,"claimed":false,"transport":"pypi","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/NameetP/pdfmux","website":"https://pdfmux.com","version":"1.8.7","remotes":[],"packages":[{"registryType":"pypi","identifier":"pdfmux","version":"1.8.7","runtimeHint":"pdfmux","transport":{"type":"stdio"},"runtimeArguments":[{"isRequired":true,"value":"serve","type":"positional"}],"environmentVariables":[{"description":"Optional Google AI API key. Enables the paid Gemini Flash fallback for pages where all local backends report low confidence. pdfmux runs 100% locally without this.","format":"string","isSecret":true,"name":"GEMINI_API_KEY"}]}],"tools":[{"name":"analyze_pdf","description":"Quick PDF triage — classify type and audit page quality without full extraction. Returns page count, type detection, per-page quality breakdown, and estimated extraction difficulty. Much cheaper than convert_pdf for initial assessment.","write_action":false,"price_micros":0,"input_schema":null},{"name":"batch_convert","description":"Convert all PDFs in a directory to Markdown. Returns a summary with per-file results.","write_action":false,"price_micros":0,"input_schema":null},{"name":"convert_pdf","description":"Convert a PDF to AI-readable Markdown. Automatically detects the PDF type and picks the best extraction method. Returns confidence score and warnings when extraction is limited.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_pdf","description":"Convert a PDF to AI-readable Markdown.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_streaming","description":"Stream extraction events for a PDF as NDJSON.","write_action":false,"price_micros":0,"input_schema":null},{"name":"extract_structured","description":"Extract structured data from a PDF — tables as JSON, key-value pairs, and optionally map to a JSON schema. Returns tables with headers/rows, detected key-value pairs with auto-normalization (dates, amounts, rates), and schema-mapped output if a schema is provided.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_pdf_metadata","description":"Get PDF metadata instantly — page count, file size, document type, and whether it has tables. No extraction performed. Use this first to decide which tool to call next: convert_pdf for full text, analyze_pdf for quality audit, or extract_structured for tables.","write_action":false,"price_micros":0,"input_schema":null},{"name":"verify_extraction","description":"Audit an extraction of a PDF for silently-dropped pages — the failure where an extractor returns nothing for a page that has real text while reporting success. Pass extracted_text with another engine's output (Reducto, Mistral OCR, LlamaParse, Docling, an in-house parser — as JSON, Markdown, or plain text) to certify THAT engine against the source PDF; omit it to have pdfmux extract the document i","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":65,"grade":"C","scanned_at":"2026-09-24T21:40:10.546Z","report":{"scannerVersion":"0.1.9","scannedAt":"2026-09-24T21:40:10.517Z","components":{"code":{"score":13,"max":25,"notes":["158 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":6,"max":15,"notes":["static API keys via environment variables"]},"maintenance":{"score":15,"max":15,"notes":["last push 13 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"pdfmux-1.8.7/.claude/worktrees/nifty-colden-3d35cb/npm-wrapper/index.js: …on\"]) { try { const version = execSync(`${cmd} --version 2>&1`, { encoding: \"utf8\"…"}],"inputs":{"packages":[{"registryType":"pypi","identifier":"pdfmux","version":"1.8.7","found":true,"license":"MIT","dependencyCount":46,"publishedAt":"2026-07-27T17:39:25.212387Z","repositoryUrl":"https://github.com/NameetP/pdfmux"}],"repo":{"found":true,"owner":"NameetP","repo":"pdfmux","archived":false,"pushedAt":"2026-09-12T02:47:28Z","stars":82,"forks":14,"openIssues":4,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/93118951?v=4","ownerCreatedAt":"2021-10-25T07:33:37Z","license":"MIT"},"icon":{"url":"https://pdfmux.com/favicon.png","source":"site","width":128,"height":128},"presence":{"stars":82,"forks":14,"downloadsWeek":null,"license":"MIT","lastPushAt":"2026-09-12T02:47:28.000Z","score":36}}}},"grade_history":[],"reviews":[]}