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.

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.
npm install -g notipo
notipo posts create --title "Why Every Dev Should Have a Blog" --publish
curl -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}'
{
"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 UI
packages/
cli/ โ `notipo` npm package (MIT-licensed thin client)
shared/ โ TypeScript types and enums
plugins/
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+).
git clone https://github.com/kfuras/notipo-app.git
cd notipo-app
cp apps/api/.env.example .env
docker 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:
docker compose -f docker-compose.dev.yml up
npm install
npm run migrate -w @notipo/api
turbo dev
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