Blog Automation

io.github.shsoftwaresolutioncomPublished by GitHub account shsoftwaresolutioncomv1.0.1Updated Nov 7, 2026

Write blog articles with AI and publish them to WordPress, Shopify and 30+ platforms.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowBusiness & CommerceAI & ML

Overview

AI-generated overview

Blog Automation lets an assistant plan blog ideas, generate articles with AI, and publish or schedule them to WordPress and other sites.

What you can do
  • List, create and track blog ideas with keywords, audience and priority
  • Generate articles with AI as background jobs and check job status
  • List and read articles, including HTML and SEO fields, and check their status, schedule and last error
  • Publish an article now or schedule it for a given time or the next free slot
  • Check token balance and prices, and list connected sites and templates
When to use it
Use it when you want an assistant to run a blog pipeline end to end: brainstorming and storing ideas, drafting articles, then publishing or scheduling them on connected sites. It fits content teams already using Blog Automation who want to drive it from Claude, ChatGPT, Cursor or another MCP client.
Requirements
A Blog Automation account on a plan with API access (Starter or Pro) and an API key with the needed scopes. Local use runs the npm package @blogautomation/mcp-server on Node 22 with the key in BA_API_KEY; remote use connects to the hosted endpoint and authenticates with OAuth or an Authorization bearer key. Network access to the Blog Automation API.
Before you install
The API key is a live credential; scope it narrowly, for example leaving out articles:publish so the assistant can only write drafts. write_article consumes tokens, so generation costs money, and publish_article or scheduling changes live content on connected sites. Publishing and token-spending tools are annotated so clients can ask before acting. The remote endpoint accepts browser requests only from configured origins.

Installation

In SourceWeft

  1. Open Blog Automation in the dashboard and add it to a workspace.
  2. Connect the required credentials. They are stored privately and never shown on public pages.
  3. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.shsoftwaresolutioncom%2Fblog-automation-mcp/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config. The client completes OAuth sign-in on first connect.

{
  "mcpServers": {
    "blog-automation": {
      "type": "http",
      "url": "https://mcp.blog-automation.com/mcp"
    }
  }
}

README

Blog Automation MCP server

Model Context Protocol server for Blog Automation (https://blog-automation.com): plan ideas, write articles with AI, publish or schedule them on WordPress and check the token balance – from Claude, ChatGPT, Cursor or any MCP client. It is a thin wrapper around the Customer API https://app.blog-automation.com/api/v1/ext (app repo blogposter-app, server/routes/ext.js, docs/API.md). Node 22, @modelcontextprotocol/sdk 1.32, zod 4. Package @blogautomation/mcp-server, command blog-automation-mcp.

Tools

ToolAPI callNotes
list_ideasGET /ideasstatus, siteId, limit, cursor – read only
create_ideaPOST /ideastitle (+ keyword, notes, audience, priority 1–3, language, siteId); Idempotency-Key
write_articlePOST /articles/generate { …, async: true } → 202 { job }, then GET /jobs/{id} every 3 suses tokens; waits ≈ 50 s, then returns jobId (→ job_status); answer without HTML; Idempotency-Key
job_statusGET /jobs/{id}running / done (article) / failed (error)
list_articlesGET /articlesstatus list, siteId, q, limit, cursor (no HTML)
get_articleGET /articles/{id}with HTML and SEO fields
article_statusGET /articles/{id}/statusstatus, schedule, WordPress link, last error, job
publish_articlePOST /articles/{id}/publish or, with at, POST /articles/{id}/scheduleat = ISO time or "next" (next free slot = "add to calendar")
token_balanceGET /tokensbalance, lots, prices
list_sitesGET /sitesWordPress sites (ids for siteId)
list_templatesGET /templatesbuilt-in b:… and own templates

Errors come back as readable tool results with isError: true: 401 (key invalid/revoked), 402 (not enough tokens: needed / balance), 403 insufficient_scope (which scope is missing) / plan_required (which plans have the API), 404, 429 (seconds from Retry-After).

API key

Blog Automation → Entwickler / API → "API-Key erstellen" (plans Starter and Pro). Scopes: articles:read, articles:write, ai:generate (write_article), articles:publish (publish_article), ideas:read, ideas:write, templates:read, sites:read, account:read (token_balance). Leave out what the assistant should not do – e.g. without articles:publish it can write drafts but never publish.

Use it

stdio (local; the key comes from BA_API_KEY):

bash
npx -y @blogautomation/mcp-server          # once published; from this repo: node mcp/src/cli.js

Claude Desktop (claude_desktop_config.json) / Cursor (~/.cursor/mcp.json) – same block:

json
{ "mcpServers": { "blog-automation": { "command": "npx", "args": ["-y", "@blogautomation/mcp-server"], "env": { "BA_API_KEY": "ba_live_…" } } } }

Claude Code: claude mcp add blog-automation --env BA_API_KEY=ba_live_… -- npx -y @blogautomation/mcp-server

Streamable HTTP (remote clients – ChatGPT connectors / developer mode, Claude "custom connector", Cursor via URL):

bash
blog-automation-mcp --http --port 8787 --host 127.0.0.1 --origin https://chatgpt.com,https://claude.ai
  • Endpoint POST /mcp (stateless, JSON responses), health check GET /healthz. GET/DELETE on /mcp → 405 (no sessions).
  • Every request must send Authorization: Bearer ba_live_…; the key is used only for that request's API calls – not stored, not logged. Missing or malformed → 401 with WWW-Authenticate: Bearer.
  • Requests with an Origin header are only accepted from --origin / BA_MCP_ORIGINS (DNS-rebinding protection); without the option browser requests are refused, server-to-server calls (no Origin) work.
  • Binds 127.0.0.1 by default; put it behind the reverse proxy (TLS) for public use, e.g. https://mcp.blog-automation.com/mcp.
  • OAuth (since 1.1.0): clients that only do OAuth – ChatGPT apps / developer mode, Claude custom connectors, MCP Inspector – just get the URL https://mcp.blog-automation.com/mcp. The 401 points to /.well-known/oauth-protected-resource (RFC 9728), which names https://app.blog-automation.com as authorization server (dynamic client registration, PKCE S256). The person signs in to Blog Automation, sees the requested permissions and clicks "Erlauben"; the access token is a 1-hour API key, refreshed automatically, revocable under Entwickler / API. Env: BA_MCP_RESOURCE (public /mcp URL), BA_OAUTH_ISSUER (app base URL).

ChatGPT app

ChatGPT → Settings → Apps & Connectors → Advanced → Developer mode → "Create" → name "Blog Automation", MCP server URL https://mcp.blog-automation.com/mcp, authentication OAuth → sign in → allow. All tools carry readOnlyHint / destructiveHint annotations, so ChatGPT asks before writing (tokens) or publishing. Listing in the ChatGPT app directory: SUBMISSION.md.

BA_API_BASE overrides the API (e.g. https://pre.blog-automation.com/api/v1/ext).

Develop

bash
cd mcp && npm install && npm test     # node:test – 7 tests, fake API (no network, no key)

Tests: tools/list (names, annotations, schemas), request shape of every tool, Idempotency-Key, async job polling (done / still running / failed), publish vs. schedule, error mapping (401/402/403/404/429), HTTP transport (healthz, 401, Origin 403, 405, tools/list + call with the request's key).

Source: README.md at commit b018190

Tools

0
This server asks you to sign in, so SourceWeft could not read its tools without an account and has not indexed them. What a connected account sees can depend on that account and its permissions.

Version history

1
  1. v1.0.1LatestNov 7, 2026

Score

75% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listed15 pts

    Answer tools/list without a credential, or ship a package that starts in a sandbox without one.

  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts

    Declare a license in the repository or the registry entry.