Notipo MCP
An open-source MCP server and CLI that enables AI agents to publish content to self-hosted WordPress sites. It handles markdown-to-Gutenberg conversion, image hosting, featured image generation, and automatic SEO metadata application via plugins like Rank Math or Yoast.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://app.notipo.com/api/mcpWhat its tools do
13 tools, grouped by the hints the server advertises. Hints are self-declared, not verified behavior.
Can change data (6)
Checks and signals
Each line is separate evidence, not a trust score.
- Passed Endpoint answered the live check ·
- Availability 1 of 1 checks passed in 30 days
What you can do with it
- Publish posts end-to-end from AI agents like Claude or Cursor
- Sync Notion pages to WordPress by changing page status
- Generate AI-powered featured images for blog posts
- Apply SEO metadata automatically on publish
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- notipo 1.2.5
- MCP protocol negotiated in check
- 2025-11-25
- Tools
- 13 advertised
- Resources
- Not advertised
- Resource templates
- Not advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
}
}Tools
13 advertised
list_posts — List Posts
List all posts for your Notipo account. Returns title, status, WordPress URL, category, and timestamps.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"posts"
],
"properties": {
"posts": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"title",
"status",
"wpUrl",
"category",
"createdAt",
"updatedAt"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"wpUrl": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"description": "DRAFT | PUBLISHED | SYNCED | FAILED, etc."
},
"category": {
"type": [
"string",
"null"
]
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}get_post — Get Post
Get details of a specific post by ID, including status, WordPress URL, and category.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postId"
],
"properties": {
"postId": {
"type": "string",
"description": "The post ID"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"title",
"status",
"wpUrl",
"category",
"createdAt",
"updatedAt",
"wpPostId",
"notionPageId"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"wpUrl": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"description": "DRAFT | PUBLISHED | SYNCED | FAILED, etc."
},
"category": {
"type": [
"string",
"null"
]
},
"wpPostId": {
"type": [
"number",
"null"
]
},
"createdAt": {
"type": "string"
},
"updatedAt": {
"type": "string"
},
"notionPageId": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title"
],
"properties": {
"body": {
"type": "string",
"description": "Post content in markdown"
},
"slug": {
"type": "string",
"description": "Custom URL slug"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag names"
},
"title": {
"type": "string",
"description": "Post title"
},
"publish": {
"type": "boolean",
"default": false,
"description": "Publish immediately (true) or create as draft (false)"
},
"category": {
"type": "string",
"description": "Category name"
},
"seoKeyword": {
"type": "string",
"description": "SEO focus keyword"
},
"seoDescription": {
"type": "string",
"maxLength": 160,
"description": "Custom meta description for SEO (max 160 chars). Auto-derived from content if not set."
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId",
"notionPageId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Use get_job to poll status"
},
"notionPageId": {
"type": "string"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": false
}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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"title",
"body"
],
"properties": {
"body": {
"type": "string",
"description": "Post content in markdown (required)"
},
"slug": {
"type": "string",
"description": "Custom URL slug"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "Tag names"
},
"title": {
"type": "string",
"description": "Post title"
},
"publish": {
"type": "boolean",
"default": false,
"description": "Publish immediately (true) or create as draft (false)"
},
"category": {
"type": "string",
"description": "Category name"
},
"imageTitle": {
"type": "string",
"description": "Featured image title/text overlay"
},
"seoKeyword": {
"type": "string",
"description": "SEO focus keyword"
},
"seoDescription": {
"type": "string",
"maxLength": 160,
"description": "Custom meta description for SEO (max 160 chars)"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Use get_job to poll status"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": false
}update_post — Update Post
Update an existing post's content or properties in Notion, then re-sync to WordPress. Only provided fields are updated.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postId"
],
"properties": {
"body": {
"type": "string",
"description": "New content in markdown (replaces entire body)"
},
"slug": {
"type": "string",
"description": "New URL slug"
},
"tags": {
"type": "array",
"items": {
"type": "string"
},
"description": "New tag names"
},
"title": {
"type": "string",
"description": "New title"
},
"postId": {
"type": "string",
"description": "The post ID to update"
},
"publish": {
"type": "boolean",
"description": "Set true to also publish after updating"
},
"category": {
"type": "string",
"description": "New category name"
},
"seoKeyword": {
"type": "string",
"description": "New SEO focus keyword"
},
"seoDescription": {
"type": "string",
"maxLength": 160,
"description": "New meta description for SEO (max 160 chars)"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Use get_job to poll status"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": false
}publish_post — Publish Post
Publish a draft post to WordPress (make it live).
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postId"
],
"properties": {
"postId": {
"type": "string",
"description": "The post ID to publish"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "Use get_job to poll status"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": false
}delete_post — Delete Post
Delete a post from Notipo, WordPress, and reset the Notion page status. This cannot be undone.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"postId"
],
"properties": {
"postId": {
"type": "string",
"description": "The post ID to delete"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"deleted"
],
"properties": {
"deleted": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": true
}list_categories — List Categories
List all WordPress categories synced to Notipo. Use these names when creating posts.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"categories"
],
"properties": {
"categories": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"wpCategoryId"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"wpCategoryId": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}list_tags — List Tags
List all WordPress tags synced to Notipo. Use these names when creating posts.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"tags"
],
"properties": {
"tags": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"name",
"wpTagId"
],
"properties": {
"id": {
"type": "string"
},
"name": {
"type": "string"
},
"wpTagId": {
"type": [
"number",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobId"
],
"properties": {
"jobId": {
"type": "string",
"description": "The job ID returned from create_post, update_post, or publish_post"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"id",
"type",
"status",
"error",
"createdAt",
"completedAt",
"startedAt",
"post"
],
"properties": {
"id": {
"type": "string"
},
"post": {
"anyOf": [
{
"type": "object",
"required": [
"id",
"title",
"status",
"wpUrl"
],
"properties": {
"id": {
"type": "string"
},
"title": {
"type": "string"
},
"wpUrl": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string"
}
},
"additionalProperties": false
},
{
"type": "null"
}
]
},
"type": {
"type": "string",
"description": "SYNC_POST | PUBLISH_POST"
},
"error": {
"type": [
"string",
"null"
]
},
"result": {
"anyOf": [
{},
{
"type": "null"
}
]
},
"status": {
"type": "string",
"description": "PENDING | RUNNING | COMPLETED | FAILED"
},
"createdAt": {
"type": "string"
},
"startedAt": {
"type": [
"string",
"null"
]
},
"completedAt": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}list_jobs — List Recent Jobs
List recent sync and publish jobs. Useful for monitoring pipeline activity.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {
"limit": {
"type": "number",
"default": 10,
"maximum": 50,
"minimum": 1,
"description": "Number of jobs to return (default 10)"
},
"status": {
"enum": [
"PENDING",
"RUNNING",
"COMPLETED",
"FAILED"
],
"type": "string",
"description": "Filter by job status"
}
},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"jobs"
],
"properties": {
"jobs": {
"type": "array",
"items": {
"type": "object",
"required": [
"id",
"type",
"status",
"error",
"createdAt",
"completedAt"
],
"properties": {
"id": {
"type": "string"
},
"type": {
"type": "string",
"description": "SYNC_POST | PUBLISH_POST"
},
"error": {
"type": [
"string",
"null"
]
},
"status": {
"type": "string",
"description": "PENDING | RUNNING | COMPLETED | FAILED"
},
"createdAt": {
"type": "string"
},
"completedAt": {
"type": [
"string",
"null"
]
}
},
"additionalProperties": false
}
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}get_settings — Get Settings
Get your Notipo account configuration: which services are connected (Notion, WordPress), current plan, feature settings, and trigger statuses.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"notionConnected",
"wordpressConnected",
"plan",
"wpSeoPlugin",
"codeHighlighter"
],
"properties": {
"plan": {
"type": "string",
"description": "FREE | TRIAL | PRO"
},
"wpSeoPlugin": {
"type": [
"string",
"null"
],
"description": "RANK_MATH | YOAST | SEOPRESS | AIOSEO"
},
"codeHighlighter": {
"type": [
"string",
"null"
]
},
"notionConnected": {
"type": "boolean"
},
"wordpressConnected": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": true,
"destructiveHint": false
}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.
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"properties": {},
"additionalProperties": false
}{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"triggered",
"message"
],
"properties": {
"message": {
"type": "string"
},
"triggered": {
"type": "boolean"
}
},
"additionalProperties": false
}{
"readOnlyHint": false,
"destructiveHint": false
}Prompts
Not advertised
Resources
Not advertised
90-day uptime
A lightweight connection check about every six hours, sampled on hosts with many listings. It shows the server answered, not that its tools work.
- 2026-11-06: 1 of 1 checks answered
30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1383 ms
- 95th percentile latency
- 1383 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1383 ms · metadata changed · 13 tool(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http notipo-mcp https://app.notipo.com/api/mcpCodex
codex mcp add notipo-mcp --url https://app.notipo.com/api/mcpCursor
{
"mcpServers": {
"notipo-mcp": {
"url": "https://app.notipo.com/api/mcp"
}
}
}Cline
{
"mcpServers": {
"notipo-mcp": {
"type": "streamableHttp",
"url": "https://app.notipo.com/api/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"notipo-mcp": {
"type": "http",
"url": "https://app.notipo.com/api/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http notipo-mcp https://app.notipo.com/api/mcpClaude Desktop
https://app.notipo.com/api/mcpWindsurf
{
"mcpServers": {
"notipo-mcp": {
"serverUrl": "https://app.notipo.com/api/mcp"
}
}
}Let your agent find its tools
Find servers like Notipo MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.