We built this because we had the same problem.

We run several websites — a Shopify MCP tool, a Google Ads MCP tool, and a few others. Each one needed a blog. Writing wasn't the hard part — Claude handles that well. The painful part was everything after: logging into each CMS, pasting content, formatting it, adding images, publishing. Multiply that across five sites and it becomes a real time sink.

So we built PublishMCP. An MCP connector that lets Claude write and publish articles directly, with articles stored centrally and served to whichever site needs them via a simple JSON API.

Who is PublishMCP for?

PublishMCP is built for custom websites — sites where you control the code and can add a few lines to fetch and display articles from an API. If your site is built with ASP.NET, PHP, JavaScript, or any other platform that can make HTTP requests, PublishMCP works for you.

If your site runs on a different platform, here's what we recommend instead:

Shopify stores

Don't use PublishMCP for Shopify. Instead, install ShopMCP — a dedicated Shopify MCP connector that gives Claude full access to your store. ShopMCP can write and publish blog articles and pages, but it also does much more: bulk product editing, price updates, theme changes, collection management, navigation, and 60+ other Shopify-specific tools. It's the right tool for Shopify merchants.

WordPress sites

There are several MCP connectors for WordPress available, though we haven't personally tested them. One option worth looking at is InstaWP (affiliate link) which offers WordPress MCP functionality. Search for "WordPress MCP" to find current options — the ecosystem is growing quickly.

Custom sites and everything else

If you're running a custom site and just need a clean way for Claude to publish articles — stored in one place, served via API, optionally listed on newsorwhat.com for backlinks — PublishMCP is exactly what you need. Read on.

How the publishing flow works

When you connect PublishMCP to Claude and ask it to publish an article, three things happen in sequence.

Step 1 — Claude writes and calls publish_article

Tell Claude what you want published. For example:

"Write an article about how to speed up a WordPress site, generate a header image for it, and publish it for mysite.com"

Claude writes the article, generates and uploads the image to your PublishMCP account, then calls the publish_article tool. Here's exactly what gets saved:

  • Article content — slug, title, summary, full body HTML, category, tags
  • Article image — generated and stored on our CDN, linked to the article by URL
  • Domain — which of your sites this article belongs to

Everything is stored in your PublishMCP account. You can see all your articles in the Articles dashboard, preview them, and unpublish or delete them at any time. Claude confirms it's saved and gives you the slug.

If you ever want to move to a different platform — Shopify, WordPress, or anything else — just use the "Download articles as CSV" button in your account settings. You get a CSV file with all your content that you can hand to Claude: "import these articles to my Shopify store." Your content is always yours.

Step 2 — Your site fetches articles from the JSON API

Your website reads articles from our public API endpoint:

https://www.publishmcp.net/api/?aid=YOUR_ID&secret=YOUR_SECRET&domain=yoursite.com

The API returns a JSON array of your published articles. Your site renders them however you like. Here's what it looks like in ASP.NET C#:

string url = "https://www.publishmcp.net/api/?aid=1&secret=YOUR_SECRET&domain=yoursite.com";
string json = new WebClient().DownloadString(url);
var articles = JsonConvert.DeserializeObject<List<Article>>(json);
// bind to repeater, render as HTML

It works identically in PHP, JavaScript, Python — anything that can make an HTTP request. For a single article with full body HTML, add &slug=your-article-slug to the URL.

Step 3 — Articles appear on newsorwhat.com (optional)

If you enable syndication in your account settings, every article you publish also appears on newsorwhat.com as a teaser — title, summary, and a link back to the article on your own site. Your site stays the canonical source, so there's no duplicate content penalty. You get a do-follow backlink and referral traffic from readers who click through.

Why we built it this way

The architecture is intentionally simple. Articles live in one place — your PublishMCP account — and any number of your websites can read from them. We run articles from the same account across four different domains. Claude publishes to the right domain by passing a domain parameter. Each site fetches only its own articles.

The alternative — a separate CMS per site — meant four logins, four editors, four places to check what's been published. With PublishMCP, Claude is the only interface. We describe what we want published, Claude writes it and saves it, and it appears on the right site within seconds.

What the MCP tools actually look like

When Claude has PublishMCP connected, it has access to these tools:

ToolWhat it does
publish_articleWrite and save a new article with slug, title, body, domain
update_articleEdit any field on an existing article by slug
delete_articleUnpublish an article
list_articlesList all your articles, filterable by domain or status
get_articleRead full article body — useful before editing
upload_imageUpload an article image, get back a CDN URL
generate_imageGenerate an AI article image via OpenRouter
list_search_console_sitesSee your Google Search Console properties
search_console_top_queriesFind what people search to find your site
search_console_pagesSee which pages get the most organic traffic

The Search Console tools are worth highlighting. Before writing an article, Claude can check which search queries bring people to your site and which pages are underperforming. It can then write an article targeting exactly those queries. That's how we use it — data first, then writing.

Getting started — connect Claude in 3 steps

  1. Create a free account at publishmcp.net — 30-day trial, no credit card required
  2. Go to MCP Settings and generate your connector URL
  3. In Claude: Settings → Connectors → Add custom connector → paste the URL

That's it. Tell Claude to publish your first article: "write and publish an article about X for mysite.com"

How to show articles on your website

Your articles are stored in your PublishMCP account and served via a JSON API. You need to add one page to your site that reads from the API and displays the articles. You can write this code yourself or just paste the example below into Claude and ask it to adapt it for your site.

The API returns a JSON array for the listing and a single object for one article:

# List all articles
GET https://www.publishmcp.net/api/?aid=YOUR_ID&secret=YOUR_SECRET&domain=yoursite.com

# Single article with full body
GET https://www.publishmcp.net/api/?aid=YOUR_ID&secret=YOUR_SECRET&slug=your-article-slug

PHP example

Paste this into Claude and say "adapt this for my site":

<?php
$aid    = 'YOUR_ID';
$secret = 'YOUR_SECRET';
$domain = 'yoursite.com';
$slug   = isset($_GET['slug']) ? $_GET['slug'] : '';

if ($slug) {
    $url  = "https://www.publishmcp.net/api/?aid=$aid&secret=$secret&slug=" . urlencode($slug);
    $data = json_decode(file_get_contents($url), true);
    echo "<h1>" . htmlspecialchars($data['title']) . "</h1>";
    echo "<p>" . htmlspecialchars($data['summary']) . "</p>";
    echo $data['body_html'];
} else {
    $url      = "https://www.publishmcp.net/api/?aid=$aid&secret=$secret&domain=" . urlencode($domain);
    $articles = json_decode(file_get_contents($url), true);
    foreach ($articles as $a) {
        echo "<h2><a href='?slug=" . urlencode($a['slug']) . "'>" . htmlspecialchars($a['title']) . "</a></h2>";
        echo "<p>" . htmlspecialchars($a['summary']) . "</p>";
    }
}
?>

Python example (Flask)

import requests
from flask import Flask, request
app = Flask(__name__)

AID    = 'YOUR_ID'
SECRET = 'YOUR_SECRET'
DOMAIN = 'yoursite.com'
API    = 'https://www.publishmcp.net/api/'

@app.route('/articles')
def articles():
    slug = request.args.get('slug')
    if slug:
        r = requests.get(API, params={'aid': AID, 'secret': SECRET, 'slug': slug})
        a = r.json()
        return f"<h1>{a['title']}</h1><p>{a['summary']}</p>{a['body_html']}"
    else:
        r = requests.get(API, params={'aid': AID, 'secret': SECRET, 'domain': DOMAIN})
        items = r.json()
        html = ''.join(f"<h2><a href='/articles?slug={a['slug']}'>{a['title']}</a></h2><p>{a['summary']}</p>" for a in items)
        return html

Replace YOUR_ID, YOUR_SECRET, and yoursite.com with the values from your MCP Settings page. Your API credentials are shown there ready to copy.