PDF reports as a service.
An asynchronous microservice that turns JSON or
.toon payloads into print-ready PDFs — with hierarchical
layouts, MCP tools and OpenAPI docs. The rendering pipeline runs on
isis-report-lib.
- Python
- Robyn
- MCP
- OpenAPI
- MIT
What it does
The HTTP and MCP layer over the report pipeline.
-
Async by design
Built on Robyn, with non-blocking endpoints for report generation and a health check for your platform.
-
JSON endpoint
POST /app/tabular-jsonacceptsmeta,layout(optional) anddata. -
.toonendpointPOST /app/tabular-toontakes the compact indented notation and parses it into the same payload. -
MCP tools
A native MCP server at
POST /mcpexposes report generation to AI assistants over JSON-RPC 2.0. -
OpenAPI + Swagger
The schema lives at
/openapi.json; the Swagger UI is served at/docs. -
Shared rendering
Jinja2 and Playwright live in isis-report-lib, the same library published on PyPI.
Architecture
Client → Robyn API → report service → Jinja2/Playwright → PDF.
Quick start
Clone, install dependencies, run on port 5000.
git clone https://github.com/thepaneb/isis_report.git
cd isis_report
# Installs dependencies and Playwright
./dev/dependencies.sh
python app/run.py
The server listens on http://localhost:5000. Swagger UI:
/docs · OpenAPI schema: /openapi.json.
curl -X POST http://localhost:5000/app/tabular-json \
-H "Content-Type: application/json" \
-d '{
"meta": {"title": "Sales Order", "sub_title": "2024", "mode": "exact"},
"layout": {
"company": {"label": "Company", "format_mask": "str", "alignment": "left"},
"orders": {
"order": {"label": "Code", "format_mask": "int", "alignment": "right"},
"total": {"label": "Total", "format_mask": "float", "alignment": "right"}
}
},
"data": [
{"company": "ACME", "orders": [{"order": 750, "total": 4000}]}
]
}' \
-o report.pdf
Endpoints
Everything the service exposes.
| Method | Path | What it does |
|---|---|---|
| POST | /app/tabular-json | PDF from a JSON payload. |
| POST | /app/tabular-toon | PDF from .toon text. |
| GET | /app/status | Health check with uptime. |
| POST | /mcp | MCP server (JSON-RPC 2.0) with report tools. |
| GET | /docs · /openapi.json | Swagger UI and OpenAPI schema. |
Links
- Source & setupgithub.com/thepaneb/isis_report
- isis-report-libThe rendering library behind the service
- PyPIInstall the library directly
The service is the HTTP/MCP layer over the library: it parses the payload, delegates
rendering to isis-report-lib and streams the PDF back.