# PreteWorks API (remote · api.preteworks.com)

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

- Trust score: 74/100 (medium)
- Change this week: +3
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-26

## Components

- remote · `api.preteworks.com`: 74/100 (this document), [markdown](https://verifymcp.io/servers/com-preteworks-preteworks-api/api.md), [page](https://verifymcp.io/servers/com-preteworks-preteworks-api/api)

## Channel facts

- Endpoint: `https://api.preteworks.com/mcp`
- Transports: `streamable-http`
- Auth: `required`
- Version: `1.0.2`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-26.

- **Endpoint Security**: 57/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 13 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - HSTS check failed: the Strict-Transport-Security header is absent.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 81/100
  - AI-judged instruction clarity (excellent).
  - Tool/resource definitions use about 2770 tokens (~95/item across 29 items; 29 tools + 0 resources), lean.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 63/100
  - Stability observed for 19 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 97/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 92% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - All 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation.
  - An AI judge read all 30 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the PreteWorks API MCP server?

PreteWorks API is a hosted endpoint at https://api.preteworks.com/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http com-preteworks-preteworks-api 'https://api.preteworks.com/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "com-preteworks-preteworks-api": {
      "url": "https://api.preteworks.com/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "com-preteworks-preteworks-api": {
      "type": "http",
      "url": "https://api.preteworks.com/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.com-preteworks-preteworks-api]
url = "https://api.preteworks.com/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "com-preteworks-preteworks-api": {
      "type": "remote",
      "url": "https://api.preteworks.com/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add com-preteworks-preteworks-api --url 'https://api.preteworks.com/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  com-preteworks-preteworks-api:
    url: "https://api.preteworks.com/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "com-preteworks-preteworks-api": {
      "Transport": "http",
      "Url": "https://api.preteworks.com/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add com-preteworks-preteworks-api -t streamable-http -u 'https://api.preteworks.com/mcp'
```

### Other

```json
{
  "mcpServers": {
    "com-preteworks-preteworks-api": {
      "type": "http",
      "url": "https://api.preteworks.com/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-25 (score 74, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-23 (score 73, +1)

No change was recorded against any check on this day. Stability & Change Management went from 50 to 53. That category is still filling its 30-day observation window: 15 days of observed history at the previous scan, 16 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-21 (score 72, +1)

No change was recorded against any check on this day. Stability & Change Management went from 43 to 47. That category is still filling its 30-day observation window: 13 days of observed history at the previous scan, 14 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-19 (score 71, +1)

No change was recorded against any check on this day. Stability & Change Management went from 37 to 40. That category is still filling its 30-day observation window: 11 days of observed history at the previous scan, 12 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-17 (score 70, +1)

No change was recorded against any check on this day. Stability & Change Management went from 30 to 33. That category is still filling its 30-day observation window: 9 days of observed history at the previous scan, 10 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-15 (score 69, +1)

No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-12 (score 68, +1)

No change was recorded against any check on this day. Stability & Change Management went from 13 to 17. That category is still filling its 30-day observation window: 4 days of observed history at the previous scan, 5 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-10 (score 67, +1)

No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.

## MCP tools (29)

### `render_html_to_pdf` (~65 tokens)

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.

Input parameters:

- `html` (string, required): The complete HTML document to render.

### `number_pdf` (~137 tokens)

Number PDF pages

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.

Input parameters:

- `format` (string): e.g. '{n}' or '{n} / {total}' (default '{n}').
- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.
- `position` (string): Where to place it (default bottom-center).
- `start` (number): First page's number (default 1).

### `pdf_info` (~61 tokens)

Read PDF info

Read a PDF's metadata (title, author, subject, keywords, creator, producer, dates) plus page count and page size, as JSON.

Input parameters:

- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `set_pdf_metadata` (~103 tokens)

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.

Input parameters:

- `author` (string)
- `creator` (string)
- `keywords`
- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.
- `subject` (string)
- `title` (string)

### `render_document` (~160 tokens)

Generate a 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.

Input parameters:

- `data` (object, required): Template data. invoice/receipt: {seller:{name,address?,email?,logo_url?(data: URI)}, buyer?:{name,address?,email?}, number?, issued?/date?, due?, currency?, items:[{description,qty,unit_price}], tax_…
- `template` (string, required): Document template.

### `merge_pdfs` (~86 tokens)

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.

Input parameters:

- `pdfs` (array, required): 2+ PDF sources. Each: A file_id from a prior tool result, or a base64-encoded PDF.

### `select_pages` (~96 tokens)

Select PDF 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.

Input parameters:

- `pages` (string, required): Pages to keep, e.g. '1,3,5-7'.
- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `rotate_pdf` (~84 tokens)

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.

Input parameters:

- `degrees` (number, required): 90, 180, or 270.
- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `watermark_pdf` (~83 tokens)

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.

Input parameters:

- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.
- `text` (string, required): The watermark text.

### `extract_pdf_text` (~89 tokens)

Extract text from a PDF

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.

Input parameters:

- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `images_to_pdf` (~61 tokens)

Images to PDF

Combine PNG/JPEG images (base64) into a PDF, one image per page. Returns a file_id and a ~1h URL.

Input parameters:

- `images` (array, required): Base64-encoded PNG/JPEG images, one per page (max 20).

### `markdown_to_pdf` (~51 tokens)

Render Markdown to PDF

Render Markdown to a clean, print-styled PDF. Returns a file_id and a ~1h URL.

Input parameters:

- `markdown` (string, required): The Markdown to render.
- `title` (string): Document title.

### `split_pdf` (~92 tokens)

Split a 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.

Input parameters:

- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.
- `ranges` (string): e.g. '1-3;4-6'. Omit to split every page.

### `read_pdf_form` (~50 tokens)

Read a PDF form

List a PDF's form fields (name, type, value, options) as JSON.

Input parameters:

- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `fill_pdf_form` (~88 tokens)

Fill a PDF form

Fill a PDF's form fields from a map of field -> value; optionally flatten. Returns a file_id and a ~1h URL.

Input parameters:

- `fields` (object, required): Map of field name to value.
- `flatten` (boolean): Flatten the form after filling (default false).
- `pdf` (string, required): A file_id from a prior tool result, or a base64-encoded PDF.

### `file_to_markdown` (~116 tokens)

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.

Input parameters:

- `file` (string, required): Base64-encoded .docx, .xlsx or .csv file.
- `format` (string): Optional format hint; auto-detected if omitted.

### `data_to_spreadsheet` (~120 tokens)

Create a spreadsheet from rows

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.

Input parameters:

- `format` (string): Output format (default xlsx).
- `rows` (array, required): Array of objects (keys→columns) or array of arrays (first row = header).
- `sheet_name` (string): Worksheet name (default 'Sheet1').

### `batch_scrape` (~58 tokens)

Batch: URLs to Markdown

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.

Input parameters:

- `urls` (array, required): 1–10 http/https URLs.

### `crawl_site` (~77 tokens)

Crawl a site to Markdown

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.

Input parameters:

- `limit` (integer): Max pages incl. root (default 5, max 8).
- `url` (string, required): The root http/https URL.

### `map_site` (~48 tokens)

Map a site's URLs

Discover the same-origin URLs linked from a page — the site map, with no page content fetched. Private/internal hosts are blocked.

Input parameters:

- `url` (string, required): The http/https URL to map.

### `extract_data` (~169 tokens)

Extract structured data (AI)

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.

Input parameters:

- `fields` (array, required): Field names to extract, e.g. ['invoice total','due date'].
- `file` (string): A base64-encoded .docx, .xlsx or .csv file (converted to text first).
- `pdf` (string): A file_id from a prior tool result, or a base64-encoded PDF.
- `url` (string): A public http/https URL to read.

### `summarize_document` (~155 tokens)

Summarize a document (AI)

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.

Input parameters:

- `file` (string): A base64-encoded .docx, .xlsx or .csv file.
- `max_words` (integer): Approximate target length in words.
- `pdf` (string): A file_id from a prior tool, or a base64-encoded PDF.
- `text` (string): Raw text to summarize directly.
- `url` (string): A public http/https URL to read.

### `answer_from_document` (~153 tokens)

Answer a question from a document (AI)

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.

Input parameters:

- `file` (string): A base64-encoded .docx, .xlsx or .csv file.
- `pdf` (string): A file_id from a prior tool, or a base64-encoded PDF.
- `question` (string, required): The question to answer from the document.
- `text` (string): Raw text to answer from directly.
- `url` (string): A public http/https URL to read.

### `docx_to_text` (~44 tokens)

DOCX to text

Extract the text of a .docx document (base64). Returns the text inline.

Input parameters:

- `docx` (string, required): Base64-encoded .docx file.

### `docx_to_pdf` (~51 tokens)

DOCX to PDF

Convert a .docx document (base64) to a PDF. Returns a file_id and a ~1h URL.

Input parameters:

- `docx` (string, required): Base64-encoded .docx file.

### `read_url` (~58 tokens)

Read a web page as Markdown

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.

Input parameters:

- `url` (string, required): The http/https URL to read.

### `url_to_pdf` (~65 tokens)

Snapshot a web page as 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.

Input parameters:

- `url` (string, required): The http/https URL to snapshot.

### `url_to_screenshot` (~75 tokens)

Screenshot a web page

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.

Input parameters:

- `full_page` (boolean): Capture the full scroll height (default: viewport).
- `url` (string, required): The http/https URL to capture.

### `scrape_page` (~89 tokens)

Scrape a web page (HTML + links + metadata)

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.

Input parameters:

- `formats` (array): Which representations to return (default: all three).
- `url` (string, required): The http/https URL to scrape.

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/com-preteworks-preteworks-api/api#diagnostics

## Score history

- 2026-09-26: 74
- 2026-09-25: 74
- 2026-09-24: 73
- 2026-09-23: 73
- 2026-09-22: 72
- 2026-09-21: 72
- 2026-09-20: 71
- 2026-09-19: 71
- 2026-09-18: 70
- 2026-09-17: 70
- 2026-09-16: 69
- 2026-09-15: 69
- 2026-09-14: 68
- 2026-09-13: 68
- 2026-09-12: 68
- 2026-09-11: 67
- 2026-09-10: 67
- 2026-09-09: 66
- 2026-09-08: 66
- 2026-09-07: 64

## Common questions

### What is the PreteWorks API MCP server?

PreteWorks API is an MCP server listed in the public MCP registry as com.preteworks/preteworks-api. One key for the document-to-web pipeline: scrape, AI-extract, build & edit PDFs, fill forms. This page covers its hosted endpoint (https://api.preteworks.com/mcp).

### Is the PreteWorks API MCP server safe to use?

PreteWorks API scores 74 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the PreteWorks API MCP server expose?

PreteWorks API exposes 29 tools: render_html_to_pdf, number_pdf, pdf_info, set_pdf_metadata, render_document, and 24 more. Their descriptions and schemas cost roughly 2,584 tokens of context every time the server is loaded.

### Does the PreteWorks API MCP server require authentication?

No. We connected to PreteWorks API without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the PreteWorks API MCP server still maintained?

PreteWorks API is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://api.preteworks.com/mcp
- Authorisation metadata: https://api.preteworks.com/.well-known/oauth-protected-resource/mcp
- Website: https://api.preteworks.com/
- Changelog RSS feed: https://verifymcp.io/servers/com-preteworks-preteworks-api/api.xml
- Changelog JSON feed: https://verifymcp.io/servers/com-preteworks-preteworks-api/api.json
- HTML version of this page: https://verifymcp.io/servers/com-preteworks-preteworks-api/api
