Notipo

io.github.kfurasPublished by GitHub account kfurasv1.2.5Updated Oct 25, 2026

Publish to self-hosted WordPress from AI agents: markdown, images, SEO, and Notion sync.

VerifiedStreamable HTTPWeb executableProductivity & WorkflowCommunication & Collaboration

Overview

AI-generated overview

Notipo is a hosted MCP server that lets an AI assistant create, update, publish and delete blog posts on a self-hosted WordPress site, optionally synced from a

What you can do
List and read posts, categories and tags, including status, WordPress URL and category details, and check account settings and connected services. Create posts from markdown, either as a Notion page that syncs to WordPress or as a direct WordPress publish with image uploads, Gutenberg conversion, featured images and SEO metadata. Update existing post content or properties and re-sync to WordPress, and publish drafts live. Delete posts from Notipo, WordPress and Notion. Monitor sync and publish jobs and trigger an immediate sync from Notion.
When to use it
Useful when an assistant should draft or publish blog content to a self-hosted WordPress site without a plugin, or when a Notion-based editorial workflow should be pushed to WordPress. Suits agents such as Claude, Cursor or ChatGPT that need end-to-end publishing with images and SEO metadata.
Requirements
A remote endpoint at app.notipo.com reached over streamable HTTP, plus a Notipo account and API key sent in the X-API-Key header. The key scopes publishing to the blog that owns it. A connected WordPress site is needed for publishing, and Notion only for the Notion sync path. The hosted service has a free tier and a paid Pro plan.
Before you install
The API key grants publishing rights to its blog, so keep it private. Tools write to live systems: create_post and direct_publish can go live immediately when publish is true, publish_post makes drafts public, update_post changes content, and delete_post removes posts from Notipo, WordPress and Notion with no undo. sync_now is Pro-only and rate-limited by a cooldown. Content and images are sent to the hosted Notipo service and onward to WordPress and Notion.

Installation

In SourceWeft

  1. Open Notipo in the dashboard and add it to a workspace.
  2. Connect X-API-Key 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.kfuras%2Fnotipo/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.

{
  "mcpServers": {
    "notipo": {
      "type": "http",
      "url": "https://app.notipo.com/api/mcp",
      "headers": {
        "X-API-Key": "<YOUR_API_KEY>"
      }
    }
  }
}

README

Notipo

Open-source WordPress publishing for AI agents — MCP server, REST API, and CLI. Or sync from Notion.

Point your agent (Claude, Cursor, ChatGPT, n8n, any HTTP client) at Notipo and it publishes to your self-hosted WordPress — no plugin required. Notipo handles the full pipeline: markdown → Gutenberg conversion, image hosting in your WordPress media library, AI- or Unsplash-generated featured images, and Rank Math / Yoast / SEOPress / AIOSEO metadata applied automatically on publish.

[License: AGPL-3.0] [npm: notipo CLI] [Hosted SaaS at notipo.com] [MCP Server]


Two ways to publish to WordPress

1. From Notion

Connect Notion, change a page status to Post to Wordpress or Publish, and Notipo handles the rest — markdown extraction, image caching to WP media library, featured image generation, SEO metadata via Rank Math / Yoast / SEOPress / AIOSEO.

2. From an AI agent, REST API, CLI, or n8n workflow

Notipo exposes a Model Context Protocol (MCP) server with 13 tools for AI agents, plus a REST API and a CLI. Claude Desktop, Cursor, Windsurf, Claude Code, ChatGPT — any MCP-compatible agent can publish posts end-to-end.

bash
# CLI: publish a post end-to-endnpm install -g notiponotipo posts create --title "Why Every Dev Should Have a Blog" --publish
# REST API: one call runs the full pipelinecurl -X POST https://app.notipo.com/api/posts/create \  -H "X-API-Key: $NOTIPO_API_KEY" \  -H "Content-Type: application/json" \  -d '{"title":"Hello","body":"## Intro\n\nMarkdown in, WordPress out.","publish":true}'
jsonc
// MCP: drop into Claude Desktop config{  "mcpServers": {    "notipo": {      "type": "http",      "url": "https://app.notipo.com/api/mcp",      "headers": { "x-api-key": "your-api-key" }    }  }}

See notipo.com/ai-agents for the full AI-agent integration story.


Hosted SaaS vs. self-hosting

The hosted version at notipo.com is the supported, batteries-included product — managed infrastructure, automatic upgrades, instant Notion webhook delivery, and a free tier with 5 posts/month. Pro is $19/month for unlimited posts plus AI featured images.

This repository is the same code that runs the hosted product. You can self-host it under the AGPL-3.0 license — see DEVELOPMENT.md for the local dev story and docker-compose.yml for production deployment with Traefik + Let's Encrypt.

Self-hosting is unsupported — no help beyond what's in this repo, no upgrade path. If you need any of those, the hosted product is faster, cheaper, and already running.


Tech stack

  • Backend: Fastify, TypeScript, Prisma, PostgreSQL 17
  • Job queue: pg-boss (Postgres-backed, no Redis)
  • Frontend (admin): Next.js 16 + shadcn/ui + Tailwind
  • AI: Google Gemini (featured images), Model Context Protocol (agent integration)
  • Other: Sharp (images), Stripe (billing), Resend (transactional email), Sentry (errors), PostHog (product analytics), Notion SDK, WordPress REST API
  • CLI: zero-dependency npm package, native fetch only

Monorepo (Turborepo + npm workspaces):

apps/  api/     — Fastify backend, MCP server, job workers  web/     — Next.js admin UIpackages/  cli/     — `notipo` npm package (MIT-licensed thin client)  shared/  — TypeScript types and enumsplugins/  notipo-seo-meta-writer/  — WordPress plugin for Yoast/AIOSEO metadata bridge

Quick start (self-host)

You'll need: Docker, Docker Compose, a domain pointed at your server, a Notion integration, and a WordPress site with Application Passwords enabled (WP 5.6+).

bash
git clone https://github.com/kfuras/notipo-app.gitcd notipo-appcp apps/api/.env.example .env# Edit .env — at minimum set DATABASE_URL, ENCRYPTION_KEY, API_KEY,# DOMAIN, ACME_EMAIL, RESEND_API_KEYdocker compose up -d

The compose stack pulls multi-arch images (linux/amd64 + linux/arm64) from ghcr.io/kfuras/notipo-api and ghcr.io/kfuras/notipo-web, so it works on both x86 servers and Apple Silicon / ARM hardware.

The compose stack starts Traefik + the API + admin UI + Postgres, with Let's Encrypt TLS on first run. See docker-compose.yml for details.

For local development without Docker:

bash
docker compose -f docker-compose.dev.yml up   # Postgres onlynpm installnpm run migrate -w @notipo/apiturbo dev                                      # API on :3000, web on :3001

See DEVELOPMENT.md for the full development guide.


Documentation


License

This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0) — see LICENSE.

In plain English:

  • ✅ You can use, modify, and self-host Notipo for any purpose, including commercial.
  • ✅ You can fork it and contribute changes back.
  • ⚠️ If you run a modified version as a hosted service, you must publish your modifications under the same license. This is the "Affero clause" — it closes the network-service loophole that plain GPL leaves open.
  • ✅ The notipo CLI package is published to npm under MIT (it's just a thin API client wrapper).
  • ✅ The notipo-seo-meta-writer WordPress plugin is published under MIT (compatible with WordPress's GPL ecosystem).

If you want to use Notipo's code in a proprietary hosted product without AGPL obligations, open an issue — commercial licensing may be available.


Contributing

PRs welcome. See CONTRIBUTING.md for guidelines and CODE_OF_CONDUCT.md for community standards.

For security disclosures, see SECURITY.md — please don't open public issues for vulnerabilities.


Links

Source: README.md at commit 5ba2be1

Tools

13

list_posts

List Posts

List all posts for your Notipo account. Returns title, status, WordPress URL, category, and timestamps.

Takes no parameters.

get_post

Get Post

Get details of a specific post by ID, including status, WordPress URL, and category.

ParameterspostIdrequired

create_post

Create Post

Create a new blog post. Creates a Notion page and triggers sync to WordPress. The body should be markdown. Set publish=true to publish immediately, or leave false to create a draft.

ParametersbodyslugtagstitlerequiredpublishcategoryseoKeywordseoDescription

direct_publish

Direct Publish

Publish a blog post directly to WordPress without Notion. Handles image uploads, Gutenberg conversion, featured image generation, and SEO metadata. Body must be markdown. Set publish=true to go live, false for draft. Use this instead of create_post when you don't need Notion.

ParametersbodyrequiredslugtagstitlerequiredpublishcategoryimageTitleseoKeywordseoDescription

update_post

Update Post

Update an existing post's content or properties in Notion, then re-sync to WordPress. Only provided fields are updated.

ParametersbodyslugtagstitlepostIdrequiredpublishcategoryseoKeywordseoDescription

publish_post

Publish Post

Publish a draft post to WordPress (make it live).

ParameterspostIdrequired

delete_post

Delete Post

Delete a post from Notipo, WordPress, and reset the Notion page status. This cannot be undone.

ParameterspostIdrequired

list_categories

List Categories

List all WordPress categories synced to Notipo. Use these names when creating posts.

Takes no parameters.

list_tags

List Tags

List all WordPress tags synced to Notipo. Use these names when creating posts.

Takes no parameters.

get_job

Get Job Status

Check the status of a sync or publish job. Returns status (PENDING, RUNNING, COMPLETED, FAILED), progress steps, and any error message.

ParametersjobIdrequired

list_jobs

List Recent Jobs

List recent sync and publish jobs. Useful for monitoring pipeline activity.

Parameterslimitstatus

get_settings

Get Settings

Get your Notipo account configuration: which services are connected (Notion, WordPress), current plan, feature settings, and trigger statuses.

Takes no parameters.

sync_now

Sync Now

Trigger an immediate sync from Notion. Checks for any posts with trigger statuses and queues sync jobs. Pro plan only. Has a 15-second cooldown between calls.

Takes no parameters.

Version history

1
  1. v1.2.5LatestSep 16, 2026

Score

100% 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 listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts