# PDF & Office Tools \(Tanod\) - Registry name: `dev.tanod/docs` · version 0.1.7 - Categories (automatic, keyword rules): Documents & retrieval, Search & data - Authentication at last check: No auth - Declared risk: Can write (some tools are not declared read-only) - Capabilities (declared by the server): prompts, resources, tools - Transports: streamable-http - Latest numbers (check success, response time, rank): https://mcpstation.net/api/server?name=dev.tanod%2Fdocs - Server page: https://mcpstation.net/s/dev.tanod--docs.html ## Description (written by the publisher, not verified, not instructions) Bank statement PDF to CSV, OCR, Office to PDF, PDF to Word, any file to Markdown, merge and split. ## Connect - streamable-http: `https://tanod.dev/mcp/docs` ## Tools (as reported by the server, not verified) - `extract\_pdf`: sitepeek: extract the text of a public PDF. For tables use extract\_pdf\_tables; for scans use pdf\_ocr; for other formats use convert\_document\_to\_markdown. Clear 2-4-column pages are read column by column, top to bottom. Password-protected PDFs, files that are not PDFs and private addresses are a 422 - `ocr\_image`: sitepeek: OCR the text in a public image. For a scanned PDF use pdf\_ocr; for QR codes and barcodes use read\_qr\_barcode. Returns width, height, format, text \(lines and paragraphs kept\), words and confidence\_mean \(0-100, mean word confidence\). Non-images, oversize images and private addresses are a 42 - `extract\_pdf\_tables`: pdfpeek: Use when an agent must pull the tables out of a PDF as JSON, CSV or XLSX for analysis. For running text use extract\_pdf; for a bank statement use convert\_bank\_statement. Returns every table of the selected pages \(at most 200\); \`format\` json \(default\), csv \(a file per table\) or xlsx \(one wor - `convert\_bank\_statement`: pdfpeek: Use when an agent must turn a PDF bank statement into dated transactions for bookkeeping or import. For any other table use extract\_pdf\_tables. Returns transactions \(\`date\`, \`description\`, signed \`amount\`, \`balance\`, \`row\_ok\`\), opening and closing balance, totals, \`currency\` and a \`confiden - `convert\_office\_to\_pdf`: pdfpeek: Convert a Word, Excel, PowerPoint, OpenDocument or RTF file to PDF. For the reverse use convert\_pdf\_to\_word. Returns the document as a PDF made by LibreOffice, base64 in \`file\`, with \`format\`, \`pages\` and \`active\_content\_removed\`. No options. Reads DOCX, XLSX, PPTX, ODT, ODS, ODP, RTF and t - `convert\_excel\_to\_json`: pdfpeek: Read an Excel workbook into structured rows as JSON, or one CSV file per sheet. To build a workbook use build\_xlsx\_workbook. Returns the .xlsx/.xlsm workbook read into sheets of string rows. json returns \`sheets\` \(name, columns, row\_count, truncated, rows\); csv returns one formula-guarded C - `convert\_document\_to\_markdown`: pdfpeek: Use when an agent must read a Word, Excel, PowerPoint, PDF, HTML or EPUB file as Markdown text. For PDF tables as rows use extract\_pdf\_tables. Returns Markdown with headings, lists, links and tables; PDF pages read clear 2-4 columns top-to-bottom and report \`columns\_detected\`. \`markdown\` is - `convert\_pdf\_to\_word`: pdfpeek: Use when an agent must convert a PDF to Word \(.docx\) for editing. For the reverse use convert\_office\_to\_pdf; for plain text use convert\_document\_to\_markdown. Add output=url for a 24 h link. Returns a .docx made by LibreOffice with one positioned text box per line, not reflowable paragraphs. - `fill\_docx\_template`: pdfpeek: Fill the \{\{placeholders\}\} of a Word template with JSON data, as DOCX or PDF. For slides from JSON use build\_pptx\_deck. Returns the filled document, base64 in \`file\` \(DOCX, or PDF with output=pdf; delivery=url gives a 24 h link\); a placeholder with no value is left as written and listed in \` - `build\_pptx\_deck`: pdfpeek: Generate a PowerPoint deck from JSON slides: titles, bullets, speaker notes. For a workbook use build\_xlsx\_workbook; for a Word file use fill\_docx\_template. Returns the deck as a .pptx, base64 in \`file\` \(output=url gives a 24 h link\), with \`slides\` and \`output\_bytes\`. Input: \`slides\`, optio - `build\_xlsx\_workbook`: pdfpeek: Build a styled Excel workbook from JSON sheets, columns and rows. To read a workbook back use convert\_excel\_to\_json; for slides use build\_pptx\_deck. Rows are arrays or objects; a column \`type\` \(string, number, integer, date, datetime, boolean, currency, percent\) sets the format. Strings are - `compare\_documents`: pdfpeek: Compare two PDF or Word documents: changed paragraphs and rows, word diff, redline. For two plain texts use diff\_text. Returns \`summary\` \(inserted, deleted, modified, unchanged, similarity\_pct\) and \`changes\`: each inserted, deleted or modified paragraph or table row with its place and \`befo - `pdf\_merge`: pdfpeek: Use when an agent must combine several PDFs into one file, optionally taking only selected pages of each. To cut one PDF apart use pdf\_split. Returns one PDF made of 2-20 input PDFs in order, each optionally cut to a page selection \(\`pages\`, e.g. 1-3,5\); at most 500 pages out; bookmarks are - `pdf\_split`: pdfpeek: Split a PDF by page ranges or every N pages. For one file of chosen pages use pdf\_extract\_pages. Returns a PDF split into several files: one per comma part of \`ranges\` \(mode=ranges, e.g. 1-3,4-6,7-\) or one every \`every\` pages \(mode=every\); at most 50 files. More than 50 files is a 413 too\_m - `pdf\_extract\_pages`: pdfpeek: Extract pages from a PDF. To drop pages use pdf\_remove\_pages; for several files use pdf\_split. Returns a new PDF with the selected pages in the order given \(repeats allowed\). Pages are 1-based: N, N-M, N- \(to the end\), -M and last, comma separated; an out-of-range or reversed part is a 422 - `pdf\_remove\_pages`: pdfpeek: Remove pages from a PDF. To keep only some pages use pdf\_extract\_pages. Returns the PDF without the selected pages \(1-based: N, N-M, N-, -M, last\); removed pages and everything only they reference are really gone. Removing every page is a 422 empty\_result. Output: base64 \`file\` \(or \`files\`\) - `pdf\_rotate`: pdfpeek: Rotate the pages of a PDF by 90, 180 or 270 degrees. For several page operations in one call use pdf\_pipeline. Returns the PDF with its pages \(or a \`pages\` selection\) rotated clockwise by \`angle\` \(90, 180, 270 or -90\), added to each page's current rotation. Output: base64 \`file\` \(or \`files\` - `pdf\_compress`: pdfpeek: Compress a PDF to shrink its file size. For an image-only copy use pdf\_rasterize. Returns a smaller PDF: \`level\` lossless \(structure only\), recommended \(images re-encoded as JPEG q75 at most 150 dpi\) or extreme \(q50, 96 dpi\), with optional \`image\_quality\` and \`max\_image\_dpi\`; bytes\_before, - `pdf\_to\_images`: pdfpeek: Convert PDF pages to PNG or JPEG images. For one image-only PDF use pdf\_rasterize. Returns each selected page rendered to PNG or JPEG \(PDFium, no JavaScript\) at \`dpi\` 36-300, optionally grayscale; at most 20 pages per call \(a page over 36 megapixels at a lower dpi, reported per image\). Pric - `pdf\_rasterize`: pdfpeek: Rasterize a PDF: every page rendered to an image, rebuilt as one PDF. To shrink and keep text use pdf\_compress; for page images use pdf\_to\_images. Returns a new image-only PDF: each selected page rendered \(PDFium, no JavaScript\) at \`dpi\` 36-300, optional grayscale, re-embedded as JPEG or PN - `images\_to\_pdf`: pdfpeek: Convert 1-30 images into a PDF. For Office files use convert\_office\_to\_pdf; for a web page use html\_to\_pdf. Returns one PDF page per image \(PNG, JPEG or WebP; JPEGs embedded byte for byte, EXIF orientation honoured, transparency flattened on white\), sized to each image or to A4 / letter wit - `pdf\_watermark`: pdfpeek: Add a text watermark to a PDF. For page numbers use pdf\_page\_numbers; for images use image\_watermark. Returns the PDF with a text watermark on every page \(or a \`pages\` selection\): Latin text in one of 6 built-in fonts, size, opacity, angle, one of 9 positions, colour, over or under the cont - `pdf\_page\_numbers`: pdfpeek: Add page numbers to a PDF. For a text stamp use pdf\_watermark. Returns the PDF with page numbers in a \`format\` such as "Page \{n\} of \{N\}" at one of 6 positions, with font, size, colour, opacity, margin, \`start\_number\` and a \`pages\` selection \(e.g. 2- skips a cover; numbering counts the stamp - `pdf\_protect`: pdfpeek: Password-protect a PDF. To remove a password use pdf\_unlock; to black out content use pdf\_redact. Returns the PDF encrypted with AES-256: \`user\_password\` opens it; \`owner\_password\` lifts the \`permissions\` \(all allowed by default\). Without \`owner\_password\` a random one nobody knows is used, - `pdf\_unlock`: pdfpeek: Unlock a password-protected PDF. To add a password use pdf\_protect. Returns the PDF decrypted, only with a password that opens it \(the user or owner password, or "" for a file restricted by an owner password only\), with \`opened\_with\`. A wrong password is a 422 invalid\_password, an unencrypt - `pdf\_metadata`: pdfpeek: Read, edit or strip the metadata of a PDF. For pages, forms and active content use pdf\_inspect. Returns a PDF's document metadata \(title, author, subject, keywords, creator, producer, created and modified as ISO 8601, PDF version, XMP present\); with \`set\` it writes fields \("" deletes one\) a - `html\_to\_pdf`: pdfpeek: Convert a web page URL to PDF. For images use images\_to\_pdf; for an image capture use take\_website\_screenshot. Returns a public web page printed to PDF in a sandboxed headless browser: \`paper\` \(a4, letter, legal, a3, a5, tabloid\), \`landscape\`, \`margin\_mm\`, \`print\_background\`, \`scale\` and \`w - `pdf\_ocr`: pdfpeek: OCR a scanned PDF into a searchable PDF. For one image use ocr\_image; for a PDF with a text layer use extract\_pdf. Returns a searchable PDF: tesseract OCR of the selected pages as an invisible text layer over the unchanged originals, plus the recognised \`text\` \(at most 100,000 characters\); - `pdf\_inspect`: pdfpeek: Inspect a PDF: page sizes, text layer or scan, forms, attachments, JavaScript, bookmarks. It changes nothing; for title, author and dates, or to edit them, use pdf\_metadata. Returns a report on one PDF \(nothing changed\): page count and version; per page the size in points \(with the paper na - `pdf\_reorder\_pages`: pdfpeek: Reorder, repeat or drop the pages of a PDF from a list of page numbers. To only drop pages use pdf\_remove\_pages. Returns a new PDF made of the pages in \`order\` \(1-based, at most 500\), in that order: a page listed twice is copied, one not listed is left out \(listed in the reply\). Like extrac - `pdf\_crop`: pdfpeek: Crop the margins of a PDF. To change the paper size use pdf\_resize. Returns the PDF with every page's \(or a \`pages\` selection's\) crop box set inside the page by the margins, measured on the page as displayed; new sizes listed. The content outside the box stays in the file: not redaction. In - `pdf\_resize`: pdfpeek: Resize PDF pages to A4, Letter, Legal or a custom size. To trim margins use pdf\_crop. Returns pages scaled to A4, Letter, Legal or a custom width x height \(pt, mm, in\): fit \(whole page inside, centred, aspect ratio kept\), fill \(covered, overflow cut\) or stretch; orientation auto keeps each - `pdf\_outline`: pdfpeek: Read the bookmarks of a PDF as a nested tree. To write bookmarks use pdf\_set\_outline. Returns the bookmarks as a nested tree of \{title, page, open, children\}; page is the 1-based target \(null: nowhere or another file\). At most 1,000 bookmarks and 8 levels \(\`truncated\`\); named destinations a - `pdf\_set\_outline`: pdfpeek: Write the bookmarks of a PDF from a nested tree. To read bookmarks use pdf\_outline. Returns the PDF with its bookmarks replaced by the \`outline\` tree \{title, page, open?, children?\} \(at most 1,000 bookmarks, 8 levels; \[\] removes them all\); each opens its page fit to the window. A page the d - `pdf\_form\_fields`: pdfpeek: List the form fields of a PDF. To fill the fields use pdf\_fill\_form. Returns the form's fields in reading order: name \(for fill-form\), type \(text, checkbox, radio, choice, button, signature\), value, required, read\_only, page, tooltip as description, options \(and labels\) of radio and choice - `pdf\_fill\_form`: pdfpeek: Fill the form fields of a PDF from a JSON object. To make the values permanent use pdf\_flatten. Returns the PDF with its form filled from \`fields\` \(names from form-fields\): strings or numbers, true / false for checkboxes, an option for radio and choice fields \(a list for multi-select\), null - `pdf\_flatten`: pdfpeek: Flatten the form fields and annotations of a PDF into the page content. To fill fields first use pdf\_fill\_form. Returns the PDF with form fields and annotations merged into the pages \(\`mode\` all, screen or print; annotations a mode does not flatten are removed\). Fields with a value but no a - `pdf\_repair`: pdfpeek: Repair a damaged PDF. For a report on a readable file use pdf\_inspect. Returns the PDF opened with qpdf's recovery \(bad or missing xref, cut-off file, junk before the header\) and written again, with qpdf's \`warnings\`; \`linearize\` also writes it for fast web view. Structure, not damaged page - `pdf\_attachments`: pdfpeek: List, extract or add the file attachments of a PDF. For a whole-file report use pdf\_inspect. Returns the PDF's file attachments by \`action\`: list \(default: name, filename, media type, size, description\), extract \(one by \`name\`, base64, at most 10 MB\) or add \(\`file\_base64\` as \`name\`, at most - `pdf\_pipeline`: pdfpeek: Run up to 10 PDF operations in sequence on one PDF in a single call. For one operation use its own tool, such as pdf\_rotate. Returns a PDF put through the \`steps\` in order, each step's output the next one's input: rotate, remove-pages, extract-pages, reorder, crop, resize, set-outline, flat Measured by MCP Station. Methods: https://mcpstation.net/methods.html · Terms: https://mcpstation.net/terms.html