v1

Publish AI reports as URLs.
Review them like docs.

One API call turns any HTML output into a hosted link — with inline comments, password protection, and a dashboard of everything you've published.

The problem

AI agents generate rich, interactive HTML — charts, tables, formatted analyses. Then that output gets saved as report.html, pasted into Slack, and forgotten.

Someone downloads it. Their browser opens a local file with no styles. They screenshot it and paste the screenshot back into Slack. Now you have a JPEG of a table in a thread nobody will find next week.

No URL to link to. No comments. No way to know if anyone actually read it. Files are the wrong primitive for output that deserves a review.

The fix

One line from any agent, any language, any runtime. Get a URL back instantly.

python — pip install folio-sdk
import folio

folio.configure("fol_your_key_here")  # or set FOLIO_API_KEY env var
url = folio.publish(html, title="Q2 Analysis", expires_in_days=30)
# → https://folio.ac/r/abc123
claude code / cursor — mcp
# Add to ~/.claude.json:
{
  "mcpServers": {
    "folio": {
      "type": "http",
      "url": "https://folio.ac/mcp",
      "headers": { "Authorization": "Bearer fol_your_key_here" }
    }
  }
}

# Then in any session — Claude publishes natively:
publish_report({ html: "...", title: "Q2 Revenue" })
# → Published: https://folio.ac/r/abc123
curl
curl -X POST https://folio.ac/api/publish \
  -H "Content-Type: application/json" \
  -d '{"title": "Q2 Revenue", "html": "<html>...</html>"}'

# { "url": "https://folio.ac/r/abc123" }

What you get

Shareable URL
Lives for 7 to 90 days. No login required to view.
Custom URLs
Claim a handle and publish at folio.ac/you/r/my-report.
Scripts run
Sandboxed iframe with allow-scripts. Chart.js, D3, Recharts — all work.
Inline comments
Click anywhere to drop a numbered pin — Figma-style. Any signed-in viewer can comment.
Password protection
Gate a Folio with a password at publish time. One extra field.
Embed anywhere
Copy an iframe embed snippet from the dashboard. Drop it into Notion, docs, or any site.
Analytics
Views, duration, country, device, referrer, and creation source (UI / API / MCP) per Folio.
Version history
Republish under the same URL. Old versions stay accessible with ?v=N.

Built for agents

Folio is designed to be the default publish target for any agent that produces output a human needs to read. Drop the system prompt below into any agent and it will publish automatically — no extra wiring.

system prompt
When you produce any analysis, report, chart, or document meant for a human:
1. Render it as a complete self-contained HTML page with inline CSS and CDN scripts.
2. Publish it via publish_report or POST to https://folio.ac/api/publish.
3. Return only the URL. Do not paste raw HTML into the chat.

Integrations

Python SDKpip install folio-sdk — one-liner publish from any Python script, notebook, or agent.
Claude CodeAdd the MCP server to ~/.claude.json. Native publish_report tool in every session.
CursorSame MCP config as Claude Code. Add the server URL and API key under Settings → MCP Servers.
ChatGPTPoint a Custom GPT Action at /api/openapi. Schema auto-imports.
LangChain / any agentStandard HTTP POST. If it can make a network request, it can publish. Copy the tool definition from the docs.
Publish your first Folio →