# PreteWorks API

> One key for the document-to-web pipeline: scrape, AI-extract, build & edit PDFs, fill forms.

- name: com.preteworks/preteworks-api
- version: 1.0.2
- connection class: R1 (autonomous)
- trust: 79/100 flags: no-repository
- quality: 85/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/com.preteworks%2Fpreteworks-api
- tools: https://api.protogrid.dev/v1/servers/com.preteworks%2Fpreteworks-api/tools

**An agent can connect on its own if it already holds `PRETEWORKS_API_TOKEN`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "preteworks-api": {
      "type": "http",
      "url": "https://api.preteworks.com/mcp",
      "headers": {
        "Authorization": "Bearer ${PRETEWORKS_API_TOKEN}"
      }
    }
  }
}
```

Placeholders to fill: `${PRETEWORKS_API_TOKEN}`.

## Trust

- hygiene: 80
- liveness: 99
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-97% ~updated-42d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 85/100 (good)

### protocol: 75 (weight 25)

- warn `protocol.modern`: newest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
- n/a `protocol.stateless`: only applies to 2026-07-28 servers
- pass `protocol.transport`: streamable HTTP
- n/a `protocol.list_ttl`: only applies to 2026-07-28 servers

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 86 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 29 of 29 tools declare readOnlyHint or destructiveHint
- fail `tools.directory_hints`: no tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: select_pages (idempotentHint); images_to_pdf (idempotentHint); crawl_site (destructiveHint, idempotentHint); …
- pass `tools.token_cost`: about 3,884 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 100 (weight 15)

- pass `stability.changes`: no tool changes in 30 days
- pass `stability.rug_pull`: no tool changed its meaning under the same name

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 29, about 3,884 tokens to load them all
- tool set hash: 7943cdec1f7db9b4b40afd57a066fe6c
- badge: [![protogrid quality](https://protogrid.dev/badge/com.preteworks/preteworks-api.svg)](https://protogrid.dev/servers/com.preteworks/preteworks-api)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

_No tool definition changes recorded._

## Remotes

- https://api.preteworks.com/mcp (streamable-http, auth api_key ${PRETEWORKS_API_TOKEN}, reachable true, uptime30d 0.9747899)

## Packages

_none_

## Tools (29)

- `answer_from_document`: Answer a question grounded ONLY in a source document — a web page, PDF, Office file, or raw text. Provide 'question' plus ONE source: 'url', 'pdf', 'file' (base64), or 'text'. Says so when the answer isn't in the document.
- `batch_scrape`: Fetch up to 10 public URLs and return each as clean Markdown, in one call — for research/RAG over several pages at once. Private/internal hosts are blocked.
- `crawl_site`: Fetch a URL plus up to 7 more same-origin pages it links to (≤8 total), each as clean Markdown. Bounded and synchronous. Private/internal hosts are blocked.
- `data_to_spreadsheet`: Turn rows of data into a downloadable XLSX (default) or CSV. 'rows' is an array of objects (keys → header row) or an array of arrays (first row is the header). Returns a file_id (for chaining) and a ~1h download URL.
- `docx_to_pdf`: Convert a .docx document (base64) to a PDF. Returns a file_id and a ~1h URL.
- `docx_to_text`: Extract the text of a .docx document (base64). Returns the text inline.
- `extract_data`: Extract specified fields from a web page, PDF, or Office file as JSON, using AI. Provide 'fields' plus ONE source: a 'url', a 'pdf' (file_id or base64), or a 'file' (base64 .docx/.xlsx/.csv). Returns a JSON object mapping each field to its value, or null when absent.
- `extract_pdf_text`: Extract the text content of a PDF — for RAG, summarization, or search. Accepts a file_id (from a prior tool) or a base64-encoded PDF, and returns the text inline. Not OCR: a scanned/image-only PDF returns little or no text.
- `file_to_markdown`: Convert a Word (.docx), Excel (.xlsx) or CSV file (base64) into clean Markdown — for RAG, agents and pipelines. DOCX keeps headings/lists/tables; spreadsheets become Markdown tables (one per sheet). Returns Markdown inline. Optional 'format' (docx|xlsx|csv) overrides auto-detection.
- `fill_pdf_form`: Fill a PDF's form fields from a map of field -> value; optionally flatten. Returns a file_id and a ~1h URL.
- `images_to_pdf`: Combine PNG/JPEG images (base64) into a PDF, one image per page. Returns a file_id and a ~1h URL.
- `map_site`: Discover the same-origin URLs linked from a page — the site map, with no page content fetched. Private/internal hosts are blocked.
- `markdown_to_pdf`: Render Markdown to a clean, print-styled PDF. Returns a file_id and a ~1h URL.
- `merge_pdfs`: Combine 2+ PDFs into a single PDF, in the order given. Inputs are file_ids (from prior tools) or base64 PDFs. Returns a file_id (for chaining) and a ~1h download URL.
- `number_pdf`: Stamp a page number on every page. position: bottom-center (default) | bottom-left | bottom-right | top-center | top-left | top-right. format supports {n} and {total}. Returns a file_id + ~1h URL.
- `pdf_info`: Read a PDF's metadata (title, author, subject, keywords, creator, producer, dates) plus page count and page size, as JSON.
- `read_pdf_form`: List a PDF's form fields (name, type, value, options) as JSON.
- `read_url`: Fetch a public http/https URL and return its main content as clean Markdown — ideal for giving an agent readable web content for research or RAG. Private/internal hosts are blocked.
- `render_document`: Render a structured document to a PDF from a named template (invoice, receipt, report). Money/totals are computed for you. Returns a file_id (for chaining) and a ~1h download URL.
- `render_html_to_pdf`: Render a full HTML document to a PDF. External subresources are blocked for safety — inline images/fonts as data: URIs. Returns a file_id (for chaining) and a ~1h download URL.
- `rotate_pdf`: Rotate every page of a PDF by 90, 180, or 270 degrees (clockwise). Returns a file_id (for chaining) and a ~1h download URL.
- `scrape_page`: Fetch a public http/https URL and return its rendered HTML, the links on the page, and page metadata (title/description/OpenGraph/canonical/favicon) — in one render. For clean Markdown use read_url instead. Private/internal hosts are blocked.
- `select_pages`: Keep only the specified pages of a PDF (e.g. [1,3,5]) and drop the rest, preserving order. Returns a file_id (for chaining) and a ~1h download URL.
- `set_pdf_metadata`: Set a PDF's title, author, subject, keywords (array or comma string) and/or creator. Only the fields you provide change. Returns a file_id + ~1h URL.
- `split_pdf`: Split a PDF into multiple PDFs — one per page by default, or by page ranges like '1-3;4-6'. Returns a file_id + URL per part.
- `summarize_document`: Summarize a web page, PDF, Office file (.docx/.xlsx/.csv), or raw text using AI. Provide ONE source: 'url', 'pdf' (file_id or base64), 'file' (base64), or 'text'. Optional 'max_words'. Returns the summary.
- `url_to_pdf`: Fetch a public http/https URL and render the live page to a PDF. Returns a file_id (chainable into the PDF tools) and a ~1h download URL. Private/internal hosts are blocked.
- `url_to_screenshot`: Fetch a public http/https URL and capture a PNG screenshot. Set full_page for the entire scroll height. Returns a file_id and a ~1h download URL.
- `watermark_pdf`: Stamp a diagonal grey text watermark (e.g. "DRAFT", "CONFIDENTIAL") across every page of a PDF. Returns a file_id (for chaining) and a ~1h download URL.
