Notipo

io.github.kfuras由 GitHub 账号 kfuras 发布v1.2.5更新于 Oct 25, 2026

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

已验证Streamable HTTP可网页运行效率与工作流沟通与协作

概览

AI 生成的概览

Notipo 是托管式 MCP 服务器,让 AI 助手在自托管 WordPress 上创建、更新、发布和删除博客文章,也可从 Notion 同步。

可以做什么
列出并读取文章、分类和标签,包括状态、WordPress 链接和分类信息,并查看账户设置与已连接服务。用 markdown 创建文章:可生成 Notion 页面并同步到 WordPress,或直接发布到 WordPress,自动处理图片上传、Gutenberg 转换、特色图片和 SEO 元数据。更新已有文章内容或属性并重新同步,把草稿发布上线。从 Notipo、WordPress 和 Notion 删除文章。查看同步与发布任务状态,并触发一次即时 Notion 同步。
适用场景
适合让助手把博客内容起草或发布到自托管 WordPress 而无需插件,也适合把基于 Notion 的编辑流程推送到 WordPress。适用于需要端到端发布、含图片和 SEO 元数据的 Claude、Cursor、ChatGPT 等代理。
运行要求
通过 streamable HTTP 访问 app.notipo.com 远程端点,需要 Notipo 账户和 API 密钥,放在 X-API-Key 请求头中。密钥的发布权限限于其所属博客。发布需要已连接的 WordPress 站点,Notion 仅用于 Notion 同步方式。托管服务有免费额度和付费 Pro 方案。
安装前请注意
API 密钥拥有其博客的发布权限,须妥善保密。工具会写入线上系统:publish 为 true 时 create_post 和 direct_publish 会立即上线,publish_post 会把草稿公开,update_post 会改动内容,delete_post 会从 Notipo、WordPress 和 Notion 删除文章且无法撤销。sync_now 仅限 Pro 且有冷却限制。内容和图片会发送到托管的 Notipo 服务,并进一步传给 WordPress 和 Notion。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Notipo,将其添加到工作区。
  2. 连接 X-API-Key 凭据。它们会被私密存储,绝不会在公开页面上展示。
  3. 为需要使用其工具的对话启用该服务。

Web executable,通过 Streamable HTTP。 远程服务在工作区中配置后即可从网页运行时运行。

交给智能体安装

把这段提示词粘贴到 Claude Code、Codex、Cursor 等智能体,或 SourceWeft 对话中。智能体会读取该服务器的安装指南,先向你展示发布者、端点和登录方式,经你同意后再把它添加到你的客户端。密钥不会写进任何命令。

阅读 https://sourceweft.com/mcp/io.github.kfuras%2Fnotipo/install.md,并按其中说明把这个 MCP 服务器接入我的客户端。修改任何配置之前,先告诉我它的发布者、端点和登录方式,等我确认。不要把 API 密钥写进命令或我会提交的文件;问我密钥应从哪里获取。

查看智能体所依据的安装指南

其他 MCP 客户端

把它添加到你客户端的 mcpServers 配置中。

{
  "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

来源:README.md,提交 5ba2be1

工具

13

list_posts

List Posts

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

无需输入参数。

get_post

Get Post

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

输入参数postId必填

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.

输入参数bodyslugtagstitle必填publishcategoryseoKeywordseoDescription

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.

输入参数body必填slugtagstitle必填publishcategoryimageTitleseoKeywordseoDescription

update_post

Update Post

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

输入参数bodyslugtagstitlepostId必填publishcategoryseoKeywordseoDescription

publish_post

Publish Post

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

输入参数postId必填

delete_post

Delete Post

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

输入参数postId必填

list_categories

List Categories

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

无需输入参数。

list_tags

List Tags

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

无需输入参数。

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.

输入参数jobId必填

list_jobs

List Recent Jobs

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

输入参数limitstatus

get_settings

Get Settings

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

无需输入参数。

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.

无需输入参数。

版本历史

1
  1. v1.2.5最新Sep 16, 2026

评分

已满足适用检查项的 100%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通必需25 分
  • 已声明认证方式必需10 分
  • 已列出工具必需15 分
  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分