The first draft was fine. That was the problem.
Nine hundred words, correct grammar, sensible structure, and completely unpublishable — because every paragraph was the same length, every list had exactly three parallel items, and it opened by introducing the author the way the previous eleven articles had. Nothing in it was wrong. It just read like it had been generated, which for a company blog is worse than reading badly.
That gap is what we spent the last stretch of engineering on, and today we are open-sourcing the result. Byline is an MCP server that turns an idea into a finished, published article — researched, illustrated, and live on your blog — from inside whatever AI tool you already work in. It is MIT licensed and lives at github.com/indianic/byline.
The model was never the hard part
Ask any capable model for a blog post and you get a blog post. That has been true for a while. What you do not get is anything that survives contact with an actual publishing platform, and that turns out to be where all the work is.

A concrete example. Ghost's Admin API accepts a post without the source=html query parameter, returns 201, and silently discards the entire body. No error. The post exists, it is empty, and nothing anywhere tells you why. We found that by publishing and then reading the post back — which is now something Byline does on every single write.
The one that still bothers me
The WordPress REST API does something worse. Schedule a post for a time that is not far enough ahead and it does not reject you. It rewrites the status from future to publish, returns 201, and the article goes live immediately. There is no error in the response. Nothing in the body says the status changed.
We measured the boundary against WordPress's own clock: 45 seconds of lead time published instantly, 60 seconds scheduled correctly. Ghost, given the same mistake, returns a 422 and writes nothing.
One input, two opposite outcomes, neither platform reporting a problem. Byline refuses that combination outright rather than picking a winner, and after every scheduled write it reads the post back and fails loudly if the platform published it anyway.
What actually makes writing read as machine-made
Here is the thing most tools get wrong. They ship a list of banned words — the handful of adjectives and stock phrases every model reaches for — and stop there. We have that list too, and it is the cheap half.
The expensive half is structural. Model-written prose gives itself away through evenness: paragraphs of uniform length, lists that are relentlessly parallel, an argument that never once concedes anything or commits to a position, and a byline that reintroduces itself in the opening line of every piece.
| The single strongest tell. Three consecutive paragraphs of similar length. A human writing quickly does not produce that; a model almost always does. |
So Byline draws a fresh opening, structure, narrative angle and prose texture for every article, from pools rather than from a fixed template. It also decides per article how much of the author reaches the page — and 60% of the time it never states your role or your years of experience at all. Someone who writes weekly does not reintroduce themselves weekly. Authority comes through a detail only somebody who did the work would know.
Let me be honest about the limit of that. We do not claim any of this defeats an AI detector, and you should be suspicious of anyone who does — it is not a claim that can be verified from inside a codebase, and we would not ship a promise we cannot test. What we do claim is narrower and checkable: the output does not carry the specific structural signatures that make generated prose obvious to a reader.
Nothing fails silently
The design rule underneath all of it, and the one that shaped the most code. Every tool either returns a result or an error naming the API and its HTTP status. Every write is read back and compared against what was sent. Every field a platform quietly dropped is reported.
Some of what that produced looks unhelpful until you have been bitten:
- It refuses to publish an article with no images unless you explicitly say the article has none.
- It refuses a scheduled time under two minutes away, because of the WordPress behaviour above.
- It refuses to blend two research providers into one article, because they return different shapes and you would lose the ability to trace a claim.
- It will not invent a statistic, a client, a date, or a prior article — the one mistake that cannot be undone after publishing.
What it does today, and what it does not
Today it publishes to Ghost and WordPress, writes in a persona you define, generates photographs (varied across lighting, setting, city and human moment so a blog does not end up looking like one stock library), schedules in the blog's timezone rather than yours, and optionally pulls dated research from Brave or Tavily.
It does not post to social platforms yet. It does not do video. The architecture is channel-agnostic on purpose — adding a destination is one folder and one registry line — but I would rather tell you what is built than what is planned.
It is free, it is MIT, and the measured platform behaviour is documented in the repository so the next person does not have to rediscover it the way we did. If you find something wrong with it, the issues tab is open.
Frequently asked questions
What is an MCP server?
MCP is a standard that lets an AI tool use programs running on your own machine. An MCP server exposes a set of actions the AI is allowed to take. Byline exposes 14, covering research, drafting, scoring, images and publishing, and runs entirely locally — there is no hosted service and no account.
Does Byline send my API keys anywhere?
No. Keys are read from a file on your machine and sent only in the authorization header of requests to your own blog and to the image or research APIs you configured. There is no telemetry and no hosted component.
Can it publish to platforms other than Ghost and WordPress?
Not today. Adding a platform means adding one folder and one line in the registry, and the repository documents exactly what that takes, including the checks a new platform has to pass before it is trusted.