Write it anywhere. Merge it yourself.

A remote MCP server for ashutoshverma.dev to read, create, delete drafts posts and publish them.

Six tools read the site, serve the drafting rules, save drafts, and open a pull request. Publishing stops at the pull request — the merge button is somewhere the model cannot reach.

The posts that got written were the ones that survived the laptop.

Publishing meant opening the laptop, finding the repo, copying a template, getting the metadata block exactly right, committing, pushing, waiting for Vercel. Drafting from a phone was not possible at all.

So the idea you had on a train did not survive. This server is the shortest path from that idea to a preview URL, and deliberately nothing more.

How a thought becomes a page

  1. 1.0Draft

    In any Claude client — Code, Desktop, the browser, the phone. get_skill serves the rules for the kind of content you are writing, plus be-human, the voice. The model does the writing; the server only moves bytes.

  2. 2.0Save

    save_draft writes real MDX into workshop, a private repo. It commits straight to main, because nothing in there is public yet. A draft can be read back, rewritten, or thrown away.

  3. 3.0Publish

    publish validates the draft against the site’s own live schema, cuts a branch on portfolio, and opens a pull request. Say “publish it” twice and you still get exactly one.

  4. 4.0Merge

    Vercel builds a preview of the pull request. You read the preview, then you press merge. There is no tool for this stage, and that is the point — the model has no path to that button.

Six tools

The model is the caller here, not a person. Tool names and error strings are its whole interface, which makes their wording part of the product rather than polish.

Tool What it does Reach
list_content An index of writings, projects and posts site · read
get_content One item, whole, by slug site · read
get_skill The rules for one kind of content, plus the voice workshop · read
save_draft Write or replace a draft workshop · write
publish Open a pull request on the public site portfolio · PR only
discard_draft Delete a draft workshop · write

The tool opens the pull request. A person merges it.

Everything else follows from that. A slug that is already published cannot be touched without an explicit revise flag. No repo is ever cloned, so there is no stale checkout waiting to surprise anyone. Auth is one unguessable secret in the URL path — there is exactly one user, which is the one case OAuth adds nothing to.

The phone is the dangerous client: no diff to read, and a distracted reader. Every refusal in the design exists for that case.

What it runs on

Runtime
Bun · TypeScript, strict
Server
Elysia · the MCP TypeScript SDK
Validation
Zod, at every boundary
Tooling
Biome · bun:test
Host
Fly.io — one small machine that stops itself when idle
Storage
None. Every read and write goes through the GitHub API
Status
All six tools built.

An idea on a train now reaches a preview URL with no laptop involved.