MCP server · ready for agents

The document layer
for AI agents.

Documents in, structured data out, styled documents back — one MCP server. Extraction that never guesses a value, and PDFs locked to your templates so the thousandth looks exactly like the first.

extract
PDFs → grounded data
create_pdf
Markdown → themed PDF
0 bytes
of your documents stored
agent · extract → create_pdf
// documents in → structured data out
{ "tool": "extract", "preset": "invoice" }
{ "vendor": "Acme Co", "total": 1240.5 }
  confidence 0.98 · grounded on page 1

// structured data → styled document back
{ "tool": "create_pdf", "template": "invoice-summary" }
→ 200 OK  summary.pdf · 84 KB
INKRUN
Invoice Summary
Acme Co · Q2 2026
rendered
The round trip
Documents in. Structured data out. Styled documents back.

Agent workflows start with a document and end with one — an invoice arrives, data comes out, a summary goes back to the customer. Inkrun is both directions behind one MCP server, one API key, and one credit meter.

1 · Documents in
Send a PDF, get grounded fields.
inspect_document sizes up any PDF for free — page count, scanned-vs-digital, and what extraction will cost — then extract pulls the fields you asked for with a preset or your own JSON Schema.
inspect_documentextractextract_tables
2 · Structured data out
Every value found, never guessed.
Each field comes back with per-field confidence and the page it was found on. A value that can't be grounded in the document is null plus a warning — not a plausible fabrication your pipeline trusts.
datafieldswarnings
3 · Styled documents back
Render the result on-brand.
The same server renders Markdown into themed PDFs with create_pdf — typography, colors and page geometry locked to your templates, so output can't drift.
create_pdfcreate_template
Inspection is free. Deterministic extraction from 1 credit per document; a PDF render is 1 credit.
Extraction docs
MCP server
A drop-in tool your agent calls to render PDFs on demand.
REST API
One POST request. Markdown in, a themed PDF out.
Brand styles
Fonts, colors, logos and macros — set once, reused.
Template gallery
Reports, proposals and more, ready to ship.
For developers

A Markdown to PDF API without the Chromium babysitting.

You've fought this before: Puppeteer in a Lambda, fonts that render differently in CI, page breaks that split tables in half. Inkrun runs the headless-Chromium fleet so you don't. Send Markdown, name a template, get back a PDF that looks the same on render one and render ten thousand.

terminalBASH
curl -X POST https://inkrun.dev/api/v1/render \
  -H "Authorization: Bearer sk_..." \
  -H "Accept: application/pdf" \
  -d '{"markdown": "# Invoice #1042\n...", "template": "quarterly-report"}' \
  --output invoice.pdf

# → invoice.pdf · themed, print-ready, deterministic
No HTML to write.No CSS to debug.No browser to keep alive.
Before & after
One Markdown file in. A document worth sending out.

Your content stays plain text. Inkrun drops it into a controlled theme, so every render comes out consistent and on-brand.

report.mdMD
# Q2 Revenue Report

**Inkrun Inc.** · Prepared June 2026

## Summary

Revenue grew **18%** quarter over quarter,
driven by new enterprise accounts.

> Net retention hit 112% — our best yet.

## By region

| Region   | Revenue | Growth |
| -------- | ------- | ------ |
| Americas | $1.2M   | +14%   |
| EMEA     | $840K   | +22%   |
| APAC     | $610K   | +31%   |

- 47 new logos
- 3 expansions
report.pdfPDF

Q2 Revenue Report

Inkrun Inc. · Prepared June 2026

Summary

Revenue grew 18% quarter over quarter, driven by new enterprise accounts.

Net retention hit 112% — our best yet.

By region

RegionRevenueGrowth
Americas$1.2M+14%
EMEA$840K+22%
APAC$610K+31%
  • 47 new logos
  • 3 expansions
1 / 1
For teams that write in Markdown

Write in Markdown. Ship documents that look designed.

Your source of truth is already plain text — repos, wikis, meeting notes. Inkrun is the export button those tools should have had: pick a template once, and every SOW, runbook, and report your team sends out looks like it came from the same design department. Because it did.

Browse the templates
How it works
From prompt to polished PDF in three steps.
1
Pick a template
Start from the gallery or upload your own. Tune fonts, colors, logos and macros.
2
Connect your agent
Add the MCP server or call the REST endpoint with your API key.
3
Render on demand
Your LLM sends JSON; Inkrun returns a pixel-perfect, on-brand PDF.
Your documents
The first question you should ask a document API.

What happens to my documents? Here is the whole answer — and the data-handling page traces every claim to the code that enforces it.

Processing-only by default
Your document is processed in memory and the result is returned inline. Source bytes are never written to storage. A debug window for extraction results is opt-in and bounded (24 or 72 hours) — the default keeps nothing.
Grounded, never guessed
Every extracted value carries the page it was found on and a real confidence score. A field that can't be grounded in the document comes back null with a warning — never a plausible guess.
No training on your documents
Inkrun never trains models on customer documents. Model-tier requests are sent with the provider data-collection opt-out and zero-data-retention routing flags on every single call.
Honest about what leaves
The deterministic tier runs entirely on our servers — nothing leaves. The optional model tier sends extracted text and layout (never your file) to model providers via OpenRouter; the opt-in OCR tier sends rasterized page images. Both are documented, flagged no-store, and only run when you choose them.

EU-resident processing is coming on a higher tier.

Customer story
“Our agent re-issues a supplier invoice in the time it used to take to open one.”

Harbourline Bookkeeping runs outsourced accounts payable for 140 small businesses. Every month, roughly 5,000 supplier invoices arrive in 5,000 layouts — and every rebillable one used to be retyped by hand into Harbourline's own template before it could go out to a client.

Their internal AI agent now does it in one Inkrun call: extract_and_generate pulls the vendor, line items and totals out of the supplier PDF and renders them straight onto Harbourline's letterhead. Missing fields come back as visible blanks with warnings — never invented values — so the team reviews exceptions instead of retyping everything.

“The part that sold us wasn't the speed — it was that it refuses to make things up. A blank field and a warning is something my team can work with.”
Head of Operations, Harbourline Bookkeeping
~4 min → <15 s
per re-issued invoice
~300 h / month
moved from data entry to review
2 credits
per invoice — extract + render, billed as one
See the invoice round-trip use case
Pricing
Start free. Upgrade when your agents ship.

Every plan includes a monthly credit allowance and a per-key rate limit — 1 PDF render = 1 credit. Keys pick up your plan’s limits automatically — no config required.

Free
$0/ month

For trying Inkrun and personal projects.

20
credits / month
1 request / sec
rate limit
  • Full template & theme library
  • REST API + MCP server
  • Inline & stored PDF delivery
  • Community support
Start free
ProMost popular
$20/ month

For production agents and teams.

500
credits / month
5 requests / sec
rate limit
  • Everything in Free
  • Priority rendering queue
  • Render history & analytics
  • Email support
Upgrade to Pro
Team
$99/ month

For automated pipelines that outgrow Pro.

5,000
credits / month
20 requests / sec
rate limit
  • Everything in Pro
  • Usage-based overage
  • 10 MiB documents
  • Priority support
Upgrade to Team
Enterprise
$199/ month

For high-volume pipelines and platforms.

20,000
credits / month
50 requests / sec
rate limit
  • Everything in Team
  • Custom quotas & rate limits
  • Invoiced billing
  • Dedicated support
Contact sales
What a credit buys

One meter for the whole round trip — rendering and extraction draw from the same monthly allowance. You're only ever charged for the extraction tier that actually ran.

PDF render
1 credit
The historical unit — nothing changed
Inspect a document
Free
Pages, scanned-vs-digital, cost estimates
Deterministic extraction
1 credit up to 20 pages
+1 credit / 20 pages after
Grounded fields from the text layer
Model extraction
3 credits up to 5 pages
+1 credit / 5 pages after
Text-grounded model escalation
OCR extraction
10 credits up to 5 pages
+2 credits / 5 pages after
Opt-in, scanned pages only
FAQ

Questions developers and their agents ask.

How do I extract structured data from a PDF with an AI agent?

Add Inkrun's MCP connector and your agent gets an extract tool: send the PDF plus a preset (invoice, receipt, contract_terms, table_dump, full_text) or your own JSON Schema, and get back schema-shaped data with per-field confidence. inspect_document first tells you what it will cost — for free.

What happens to my documents?

They're processed in memory and never stored — source bytes are never written to disk, and results are returned inline. Deterministic extraction never leaves our servers, we never train on your documents, and the optional model tier is sent with no-store routing flags. See the data-handling page for the full posture.

What does extraction cost?

Inspection is free. Deterministic extraction is 1 credit per document (up to 20 pages), the model tier is 3, and opt-in OCR is 10. A PDF render is 1 credit — one meter for the whole round trip.

How do I generate a PDF from Markdown with an API?

One POST to /api/v1/render with your Markdown and a template name returns the PDF bytes or a download URL. Quickstart takes under a minute.

How do I get a PDF out of Claude / an AI agent?

Add Inkrun's MCP connector once. Then ask your agent for "a proposal as a PDF" and it calls create_pdf with the content; you get a themed document back as a link.

Can I control the design?

Yes — templates. A template is a theme plus your accent color, fonts and page size. Content never carries styling, so output can't drift off-brand.

Is rendering deterministic?

Yes. Fonts are self-hosted and embedded, CSS is inlined, no network fetches at render time. Same input, same output — reproducible and air-gap friendly.