Branded letters,
from any Claude chat.

Built as a Claude MCP tool. Ask Claude for a letter — “draft a renewal note for Mr Khan, effective May 1st” — and it writes the body, renders it on your letterhead, and posts a shareable short link back into the conversation. No tab switching, no form to fill.

Letters, from a Claude chat.

Claude · MCP tool·write_letter
A
You

C
Claude
A&A
Renewal — Mr Khanletter.practa.ai/k4n9z2

I write to confirm Mr Khan's contract renewal for the calendar year, effective 1 May 2026…

signed·PDF ready

Live preview · simplified

Why we built it.

This one we built for a client. They send formal letters constantly — contract confirmations, project intents, vendor notes, renewal acknowledgements — multiple a week, sometimes a day. Each one was a twenty-minute round trip: open Word, paste the letterhead, retype the body, get the spacing right, export to PDF, send it over.

The first version was the obvious thing — a form. Recipient, subject, body, sender, date. It worked, and it cut the loop down to a few minutes. But then we shipped the second version, and that's the one that mattered.

We exposed the generator as a Claude MCP tool. The client already used Claude all day. So now they don't open the form. They don't open anything. They're mid-conversation about the renewal, they say “draft Khan's confirmation, send it to him,” Claude calls write_letter, the rendered PDF lands as a short link in the same chat. The tool disappears. That's the whole story.

The fastest workflow is the one that doesn't make you open a tool.

What's inside.

01Ask Claude. Get a letter.

The generator runs as an MCP server. Once it's registered in the client's Claude setup, the tool write_letter is callable from any Claude conversation — the desktop app, Claude Code, the API, anywhere Claude lives. The user never sees a form.

The brief flows in as natural language. Claude infers the recipient, subject, tone, and any structured fields. The MCP server renders the PDF on the client's letterhead and returns a short link, which Claude posts back into the chat. The whole loop is one prompt.

02Letterhead, exactly yours.

We set up a per-client React-PDF template — logo, colors, fonts, address block, registered numbers, signature panel. Every letter renders against that template at full PDF fidelity. The MCP tool call resolves to the exact same renderer as the form.

For occasions where the user does want to edit before sending, the generator still ships a form-based UI with a live preview. Same renderer, same template, just a different way in.

Form · Preview·live
Recipient
Mr Khan
Subject
Contract renewal
Body
Confirming for FY 2026…
Sender
Alim Maasri
Date
29 Apr 2026
A&A
Alim

03Share a short link, not a PDF.

Whether the letter came from Claude or from the form, the output is identical: a short URL like letter.practa.ai/k4n9z2. Send it on WhatsApp, email, wherever. The recipient sees the letter in their browser, can download the PDF — everything stays branded. View tracking tells you if it's been opened.

Links live 90 days by default; pin one to keep it indefinitely. After expiry the PDF is deleted, only the metadata stays in the dashboard for accounting.

Shared letters·0 this week
Mr Khan
letter.practa.ai/k4n9z2
2m ago
Mountainside Co
letter.practa.ai/m7p3qw
1h ago
Chatbase Ltd
letter.practa.ai/c2x8yt
yesterday
AA Goodwill
letter.practa.ai/g9b4ed
2d ago

04Chain it with everything else.

Because the generator is just an MCP tool, Claude can chain it with every other tool the client has. “Draft Khan's renewal, file the matter in Notion, and put a follow-up on the calendar for next Friday” becomes one prompt. The letter is part of the same flow as the task and the reminder, not a separate trip.

Under the hood.

What makes the MCP-first design work in practice.

  • MCP serverTool name: write_letter. Inputs: recipient, subject, body (or brief — Claude rewrites), sender. Returns a signed short link. Runs locally or hosted; either way, latency under a second.
  • Per-client templatesEach client gets a custom React-PDF template — exact match to their existing letterhead. Logo, colors, fonts, address block, signature panel, registered numbers.
  • Form fallbackSame renderer is exposed as a web UI for cases where the user wants to edit before send. Both paths produce identical output.
  • Drawn signature supportSender can draw a signature in the form preview; embedded as SVG in the PDF. Default-signature script for unattended (MCP) generation.
  • Shareable short linksletter.practa.ai/{slug} — links resolve to a viewer (PDF + metadata). 90-day default expiry, pin to keep. View tracking with timestamps and rough region.
  • Audit logEvery letter generated, edited, downloaded, shared — logged with who, when, and which surface (MCP / form). Important for legal/compliance contexts.
MCP
tool — call from any Claude chat
20m → 1 prompt
per letter, end to end
1
shared renderer, two surfaces
90 days
default link lifespan, pin to keep

A few questions.

Anything else: hello@practa.ai.

Model Context Protocol. It's the standard Anthropic uses to let Claude call external tools. Once we register the Letter Generator as an MCP tool in the client's Claude setup, Claude can invoke it directly mid-conversation. The user never sees the underlying form — they just ask, Claude calls the tool, the letter comes back.

Yes — we set up a per-client React-PDF template with your logo, colors, fonts, address block, and signature block. The rendered PDF is pixel-faithful to whatever you'd produce in Word, just generated in seconds instead of minutes.

Not at all. They get a standard short link — letter.practa.ai/{slug} — that opens in any browser. The MCP layer is between you and the tool; the recipient just sees a branded letter.

Stop opening tools. Just ask Claude.

The Letter Generator is one of the workflows we ship under the standard Practa subscription — and a glimpse of how MCP changes everything we build. If a tool can be a chat, it should be.