:// PLAINPORT

Interface manual

Plainport exposes the same catalog through current stateless MCP and versioned REST. Successful REST responses use { ok, data, meta }; failures use { ok, error, meta }.

REST

curl -X POST https://plainport.exportitnow.workers.dev/api/v1/fetch-markdown \
  -H "content-type: application/json" \
  -d '{"url":"https://example.com"}'

MCP

Connect a 2026-07-28 Streamable HTTP client to https://plainport.exportitnow.workers.dev/mcp. The transport is stateless: there is no initialization handshake or session identifier.

POST https://plainport.exportitnow.workers.dev/mcp
MCP-Protocol-Version: 2026-07-28
Mcp-Method: tools/list
Accept: application/json, text/event-stream

Catalog and limits

MCP toolREST endpointPrimary ceiling
fetch_markdownPOST /api/v1/fetch-markdown8 s, 5 redirects, 768 KiB remote body, 150k output characters
inspect_urlPOST /api/v1/inspect-url8 s, 5 redirects, 768 KiB only for GET
extract_metadataPOST /api/v1/extract-metadata8 s, 5 redirects, 768 KiB, 50 JSON-LD blocks
extract_linksPOST /api/v1/extract-links8 s, 5 redirects, 768 KiB, 500 links
parse_feedPOST /api/v1/parse-feed8 s, 5 redirects, 768 KiB, 100 items
parse_sitemapPOST /api/v1/parse-sitemap8 s, 5 redirects, 768 KiB, 1,000 entries
inspect_robotsPOST /api/v1/inspect-robots8 s, 5 redirects, 768 KiB, 50 sitemap declarations
html_to_markdownPOST /api/v1/html-to-markdown200k input characters, 150k output characters
diff_textPOST /api/v1/diff-text200k combined characters, 2,000 result parts, 8 ms diff budget
validate_json_schemaPOST /api/v1/validate-json-schema512 KiB request, 40 nesting levels, 100 returned errors

Per-IP rate limits are 30 fetch-backed calls/minute and 120 local transformations/minute. They apply equally to REST and MCP calls.

Errors

Errors include a stable code, a concise message, and a retryable flag. Upstream 5xx failures and timeouts are retryable; invalid inputs, blocked URLs, and unsupported media are not. HTTP 429 includes Retry-After: 60.

{
  "ok": false,
  "error": {
    "code": "FETCH_TIMEOUT",
    "message": "The remote server did not respond within 8000 ms.",
    "retryable": true
  },
  "meta": {
    "request_id": "…",
    "duration_ms": 8002
  }
}

Security and privacy

Only public HTTP/HTTPS targets on ports 80/443 are accepted. Redirects are revalidated. Cloudflare global fetch is configured as strictly public. Inputs and fetched content are processed in memory and discarded; full payloads and submitted URLs are not intentionally logged.

Machine discovery

OpenAPI 3.1.1 · llms.txt · llms-full.txt · MCP Registry manifest · MCP Server Card · sitemap.xml