oJo — HTML to image and PDF

so.ojoPublished by ojo.soOfficial publisherv0.9.0Updated Oct 30, 2026

Fill an HTML template with JSON and get a hosted PDF or image link. Free previews, no key.

VerifiedStreamable HTTPWeb executableDeveloper ToolsMedia & Design

Overview

AI-generated overview

oJo renders HTML/Handlebars templates into hosted PNG images and PDFs, with free full-resolution preview links that need no account.

What you can do
  • Create a free, self-contained preview link that renders an HTML/Handlebars draft at full resolution in the browser
  • Render HTML or an existing template to a hosted PNG image and get its public URL
  • Render HTML or templates to a PDF of up to 100 pages, optionally combining several templates and HTML into one document
  • List, fetch, create and update reusable templates stored in the account
  • Optionally return a small downscaled thumbnail to confirm a render succeeded
When to use it
Useful when an assistant needs to turn HTML or a template plus JSON data into a shareable image or PDF, for example social cards, invoices or reports, and to iterate on the design with free previews before spending credits on a final render.
Requirements
Runs as a remote endpoint at mcp.ojo.so with sign-in, or locally via npx @ojodotso/mcp-server over stdio. An oJo account and API key in OJO_API_KEY are optional; without it only preview links are available. Optional OJO_API_BASE_URL and OJO_WEB_BASE_URL override the API and web hosts. Network access to the oJo API is required.
Before you install
Rendering images and PDFs with a key consumes account credits (PDFs cost 1 credit per 20 pages), so repeated renders spend money. Template updates overwrite the existing template and affect API renders immediately. Preview drafts are encoded in the URL hash and not stored server-side, but the link is shareable by anyone who has it. The API key is a secret passed as OJO_API_KEY.

Installation

In SourceWeft

  1. Open oJo — HTML to image and PDF in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/so.ojo%2Fmcp-server/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "ojo-html-to-image-and-pdf": {
      "type": "http",
      "url": "https://mcp.ojo.so/mcp"
    }
  }
}

README

@ojodotso/mcp-server

oJo turns an HTML template and your JSON data into a PDF or PNG at a hosted link, from the REST API, any MCP client or the editor. This package is oJo's Model Context Protocol server. Live previews are free and need no account; an oJo API key adds hosted PNG and PDF links and reusable templates through the user's own account. Transport is local stdio; the API boundary is HTTP to https://api.ojo.so/v1 only.

Most clients can connect to https://mcp.ojo.so/mcp directly and sign in, without installing anything: see https://ojo.so/docs/mcp-server. This package is the local alternative.

Quick start — no account needed

Point your MCP client at the package. With no API key the server starts in preview-only mode: create_preview_link renders HTML into a live, full-resolution image preview, free and unlimited, with no oJo account.

json
{  "mcpServers": {    "ojo": {      "command": "npx",      "args": ["-y", "@ojodotso/mcp-server"]    }  }}
bash
claude mcp add ojo -- npx -y @ojodotso/mcp-server

Adding a key

A key unlocks the permanent PNG or PDF URL — the thing you can put in an email, a social card or an API response — plus reusable templates. Create one at https://ojo.so/dashboard/api and pass it as OJO_API_KEY:

json
{  "mcpServers": {    "ojo": {      "command": "npx",      "args": ["-y", "@ojodotso/mcp-server"],      "env": { "OJO_API_KEY": "sk_..." }    }  }}
bash
claude mcp add ojo -e OJO_API_KEY=sk_... -- npx -y @ojodotso/mcp-server

Works the same for Claude Desktop, Cursor, and Claude Code.

Tools

Only create_preview_link is registered without an API key; the rest talk to the oJo API, so advertising them keyless would offer tools that can only fail.

ToolPurposeCreditNeeds a key
create_preview_linkBuild a free, full-resolution /preview link for an HTML/Handlebars draft.—no
generate_image_from_htmlRender plain HTML (with inline CSS) to a PNG; returns its public URL.1yes
generate_image_from_templateRender an existing template, optionally overriding variables via modify.1yes
generate_pdf_from_htmlRender plain HTML (with inline CSS) to a PDF of up to 100 pages, A4 unless a CSS @page rule sets the size; returns its public URL, page count and credits spent. A longer document is refused and costs nothing.1 per 20 pagesyes
generate_pdf_from_templateRender an existing template to a PDF, optionally overriding variables via modify, or build one PDF of up to 100 pages from many templates and HTML with pages.1 per 20 pagesyes
list_templatesList the templates available to the account.—yes
get_templateFetch one template's HTML and variable defaults.—yes
create_templateCreate a reusable template from plain HTML/Handlebars.—yes
update_templateReplace a template's HTML, and its variable defaults when given, under the same ID. Overwrites: API renders use the new version at once.—yes

The design loop

Iterate with create_preview_link, then render. It returns an https://ojo.so/preview#draft=… URL that renders the draft live in the browser through the same engine as the final PNG, at full resolution. The draft is gzipped into the URL hash, so it never reaches a server and nothing is stored — the link is self-contained and shareable with a human reviewer. For a PDF the preview shows the screen rendering, not the page breaks.

Both image tools also accept inspect: true, which returns a 512px-wide downscaled thumbnail alongside the URL. That is a confirmation that the render succeeded, not a design surface — it is too small to judge layout or typography.

Guiding prompt

author_ojo_template — teaches the Handlebars helper catalog, the Template Variables (schema/defaults) vs Modify Payload (per-render data) model, viewport conventions, and the preview-first design loop.

Configuration

  • OJO_API_KEY (optional) — your oJo API key. Without it the server runs in preview-only mode; with it the full tool surface is registered.
  • OJO_API_BASE_URL (optional) — defaults to https://api.ojo.so/v1.
  • OJO_WEB_BASE_URL (optional) — the web app that serves /preview for create_preview_link. Defaults to https://ojo.so; point it at a local http://localhost:3000 when developing against a self-hosted web app.

Develop

bash
pnpm installpnpm buildpnpm testpnpm check

Source: README.md at commit 96e00b8

Tools

1

Version history

6
  1. v0.9.0LatestOct 30, 2026
  2. v0.8.0Oct 20, 2026
  3. v0.7.0Oct 8, 2026
  4. v0.6.0Oct 7, 2026
  5. v0.5.0Sep 29, 2026
  6. v0.4.0Sep 16, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts