Dicecodes AI Blog Writer writes blog posts for your WordPress site. It researches the subject first, writes in a voice you describe, scores its own draft against twenty-five checks, and rewrites what it finds wrong before anything is published.
Every feature is included. Nothing is locked or expires, and there are no credits or quotas. Your only cost is what your provider charges, and several charge nothing.
Full documentation, including a setup walkthrough and an explanation of every check it scores:
https://dicecodes.com/ai-blog-writer/
Two ways to run it
With your own API key. Choose a provider — OpenAI, Anthropic, Google Gemini, Groq, Mistral, DeepSeek, OpenRouter, xAI and more — paste a key, and the site does the writing. This is the way that can write on a schedule while you are away.
From Claude or ChatGPT. If you already pay for one of those, connect it to your site and it does the writing on the subscription you already have. No API key, no second bill, and nothing leaves your site — the connection comes in. It speaks the Model Context Protocol (MCP), so it is not tied to one app. Your writing rules, the checks and the publishing all stay here: the app supplies the model, the plugin supplies the judgement.
You can also run a model on your own machine with Ollama, LM Studio, Jan or llama.cpp, in which case nothing is sent anywhere at all.
How a post is written
- Research. Gathers current source material before writing a word, so the post is not assembled from memory alone.
- Outline. Plans the structure, then writes the draft section by section.
- Critique. Reads its own draft and lists what is vague, repetitive or padded.
- Revise. Rewrites to fix what it found. If the critique finds nothing, this pass is skipped rather than run for the sake of it.
- Verify. Checks that every link resolves and scores the draft. Anything below your threshold is held for review instead of published.
It can match an article you admire
Paste the address of any published post and the plugin reads its shape: how long it runs, how many sections, how long its sentences are, whether it uses tables and lists, how heavily it links out, how many figures it states, whether it says "I" or "you". Those measurements become your writing rules.
Structure only. None of the wording is copied, kept, or shown to a model — what it takes is public form, which belongs to nobody. There are also eight ready-made shapes to start from, from definitive guide to hands-on review.
It measures what it was asked for
Twenty-five checks run on the finished draft, and every one that fails is written back into the rewrite as an instruction rather than a number. Among them:
- Does the opening answer the question in its first two sentences, or clear its throat first?
- Does every section that states a figure carry a link beside it?
- Does it say anything the sources it read do not already say?
- Is the subject in the title, in a heading, and in the opening?
The loop is the point: a score you have to act on yourself is a report card, and a rewrite that never gets measured is a guess.
It writes in your voice
Describe your niche, your reader, your tone, your style rules, and the things you never write about. All of it is sent with every request, and a list of common AI tells is blocked by default. You can also store your own anecdotes and experience, which is the one thing AI writing structurally lacks.
It looks after the rest of your site
- Links each new post to your existing ones from inside the sentences, and goes back to link older posts to the new one
- Refuses a topic too similar to something you have already published
- Rewrites older posts in place when they go stale, keeping the same URL
- Adds a featured image, alt text, structured data and a contents outline
- Publishes author, reviewer, organisation and breadcrumb markup, an expertise signal search and answer engines read
- Adds a byline readers can see, with the author's own bio and profile links
- Plans around what is already ranking: the pages covering a topic are read, and the outline aimed at what they leave out
- Fills in Yoast, Rank Math or SEOPress fields when one is active, and writes the description and sharing tags itself when none is
What it does not do
It does not find topics for you. Every tool that does is reselling keyword-volume data, and that cannot be had for free — so charging nothing and supplying topics are not both possible. You bring the subject; the plugin does the rest.
It does not invent evidence. There is a field for your own figures, results and prices, and they are used as fact and checked against the finished draft. Nothing fills that field for you, because nothing can.
You stay in control
Drafts are the default. Volume limits are conservative. A monthly token cap stops runaway spend. Nothing publishes without settings you chose.
Changelog =
The complete history. The most recent releases are also in readme.txt;
everything is here, oldest at the bottom.
1.3.3
- A body sent by a connected app is narrowed before it becomes a post. The helper that turns HTML into blocks returns anything already carrying a block delimiter exactly as it arrived — right for markup this plugin wrote and reads back, wrong for markup that came from somewhere else, because a body merely beginning with one went into the post whole. The same helper was already being given narrowed input everywhere else it is used
- This is not a way in that was otherwise shut: the account behind a connection token belongs to somebody who can already publish. It matters because of where the words come from. They are written by a language model, and this plugin hands that model pages it fetched off the open web — so trusting the connection is not the same as trusting the text arriving over it, and the page that renders it is every reader's
- A test sends a script tag, an event attribute, a javascript: link and an iframe behind a block delimiter, and requires all four to be gone and the writing around them to survive
1.3.2
- Addresses the plugin did not choose are now fetched the careful way. Two were not: the research list typed into a settings field, and the results a search service hands back, which nobody on this site picked at all. Both went through the call that follows whatever it is handed — including to this server's own network, or to a cloud provider's metadata address. The voice reader had used the careful call for the same kind of input all along
- A page fetched from outside is now read only up to two megabytes. All that is wanted from one is its headings and an excerpt, both of which arrive early, and without a cap a page answering with a gigabyte is read into memory in full — and the request that dies of it is somebody's post
- The provider call deliberately keeps the plain fetch, because Ollama, LM Studio, Jan and llama.cpp all answer on localhost and the careful call refuses loopback. A test records that reason alongside the three other exemptions, so the next person to tidy this does not quietly break every local model
- The translation catalogue still announced itself as "Blogcraft" and declared the old text domain. The rename updated the filename and the scanner but not the header inside it, which is the part a translation tool actually reads. Both now come from the same constant as everything else
1.3.1
- Every AI provider now carries its own terms and privacy links. Ten of them — xAI, Moonshot, DeepSeek, Groq, OpenRouter, Mistral, Together, Fireworks, Cerebras and Hugging Face — were listed on one shared line saying the policies vary and to check whichever you pick. The directory asks for links per service, and that line had none
- Each entry also names the address it actually contacts, so what the plugin reaches and what the readme claims can be compared without reading the code
- Two picture services publish policy pages that are served to people but refuse automated readers. Both are now marked as such, the way fal.ai already was, because an automated link check reports a failure for a page that is genuinely there
- The self-hosted options — SearXNG, Ollama, LM Studio, Jan, llama.cpp and a custom endpoint — say plainly that the address is yours and reaches no third party, rather than being listed with nothing beside them
- Giving every service its own links pushed the section past the 5,000 characters the readme parser keeps, which would have cut the last services back off. It is written tighter and fits, and a test holds it there
- A test compares the readme against the code and the provider list: an address the plugin can reach and does not disclose fails, and so does a service named without either a policy link or a stated reason there is none
- Said why the two base64 calls in the key encryption are there. Both were suppressed warnings with no explanation beside them, which reads worse than the thing it was hiding
Older releases are listed in changelog.txt, which ships with the plugin.