Kamy
PDF generation API for developers. Ship invoices, receipts, contracts, and reports with gorgeous defaults.
Install
# SDK — in your app
npm i @kamydev/sdk
# CLI — globally for scripts, CI, previews
npm i -g @kamydev/cliimport Kamy from "@kamydev/sdk";
const kamy = new Kamy({ apiKey: process.env.KAMY_API_KEY! });
const pdf = await kamy.render({
template: "invoice",
data: { invoiceNumber: "INV-001", total: 1500, currency: "USD" },
});
console.log(pdf.url); // signed URL, valid 1 hourWhat's New
Date | Change |
Apr 2026 |
|
Apr 2026 | SDK now ships OpenAPI-generated types — |
Apr 2026 | Per-template JSON Schema validation at render time via Ajv (formats enabled). Previously only |
Apr 2026 |
|
Apr 2026 | OpenAPI 3.0.3 spec now covers all 19 |
Apr 2026 |
|
Apr 2026 |
|
Apr 2026 |
|
Apr 2026 |
|
Apr 2026 |
|
Full per-release detail in CHANGELOG.md.
Architecture
Kamy is a Turborepo monorepo containing:
Package | Description |
| Next.js 15 app — landing page, dashboard, REST API |
| Cloudflare Worker — MCP server for AI coding agents |
| Nextra docs site |
|
|
|
|
|
|
|
|
|
|
Prerequisites
Node.js 22+
pnpm 10+
Supabase CLI (
brew install supabase/tap/supabase)Wrangler CLI (
pnpm add -g wrangler) — for MCP server
Local Development
# 1. Install dependencies
pnpm install
# 2. Copy env file and fill in values
cp .env.example apps/web/.env.local
# 3. Start local Supabase (requires Docker)
supabase start
# 4. Apply database migrations
supabase db reset
# 5. Generate TypeScript types from schema
supabase gen types typescript --local > packages/shared/src/types/database.ts
# 6. Start all apps in dev mode
pnpm devThe web app runs at https://kamy.dev
Commands
pnpm dev # Start all apps with Turbopack (hot reload)
pnpm build # Production build all apps
pnpm typecheck # TypeScript check across all packages
pnpm lint # Biome lint + format check
pnpm lint:fix # Biome auto-fix
pnpm test # Run all tests (Vitest unit + Playwright E2E)
pnpm test:unit # Vitest unit tests only
pnpm test:e2e # Playwright E2E tests only
pnpm clean # Remove all build artifactsDatabase
Migrations live in supabase/migrations/. They are applied in order by timestamp.
# Reset and reseed local DB
supabase db reset
# Create a new migration
supabase migration new <name>
# Push to remote Supabase project
supabase db pushDeployment
Web app: Deployed to Vercel on merge to
mainMCP server: Deployed to Cloudflare Workers via
wrangler deployDatabase: Hosted on Supabase Cloud
Environment Variables
See .env.example for all required variables with descriptions.
Tech Stack
Framework: Next.js 15 (App Router, React Server Components, Turbopack)
Language: TypeScript 5.7+ strict
Database: Supabase (Postgres 16 + Auth + Storage)
Styling: Tailwind CSS v4 (Oxide engine)
Payments: Stripe (Meters API)
PDF Engine: Browserless.io v2
Email: Resend + React Email
Observability: Sentry + PostHog + Axiom
Testing: Vitest + Playwright + MSW
Open Plugins
This repository ships an Open Plugins distribution so AI coding agents (Cursor, Claude Code, and any other Open-Plugins-compatible tool) can install Kamy as a single plugin and get a ready-to-use PDF pipeline.
The plugin bundles four components at the repo root:
Path | Component | Purpose |
| Manifest | Name, version, metadata, declared components |
| Skill | Teaches the agent when and how to render PDFs |
| Rule | Coding conventions for |
| Sub-agent | Specialised template-design agent (Handlebars + print CSS) |
| MCP server | Hosted MCP at |
To install the plugin in a supported agent, point it at this
repository (https://github.com/rakanalalami/kamy) and follow the
host's plugin-install flow. The agent will read the manifest and
load the components automatically.
See the Open Plugins specification for the full schema.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/rakanalalami/kamy'
If you have feedback or need assistance with the MCP directory API, please join our Discord server