Koskamo

AI Engine for WordPress MCP

A free and unlimited MCP connection to any WordPress site, allowing users to write, edit, and organize content via ChatGPT or Claude. It supports summaries, drafts, quick edits, scheduling, and more, working with the user's own WordPress login and permissions without storing passwords.

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.

AI Engine for WordPress MCP logo, by Meow AppsVendor evidenceStreamable HTTPNo sign-inEndpoint checked 2026-11-01Operated by Meow Apps
MCP endpoint (Streamable HTTP)
https://connect.meowapps.com/mcp
Vendor documentation

What you can do with it

  • Summarize latest posts
  • Write a draft about news
  • Edit content and manage categories
  • Manage images and comments

Source and maintenance

Vendor evidenceRegistry 3.8.8

Protocol and capabilities

Server
AI Engine for WordPress 1
MCP protocol
2025-06-18
Tools
30 advertised
Resources
Not advertised
Resource templates
Not advertised
Prompts
4 advertised
Server-advertised capabilities
{
  "tools": {},
  "prompts": {}
}

Server-provided instructions

Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.

These tools work on the user's own self-hosted WordPress site through AI Engine, with the user's own WordPress permissions. Start by calling wp_get_site_info so you know which site this is (name, tagline, language hints, plugins). If the user has not said what they want, offer three concrete ideas based on their site: for example a short tour of their latest posts, a new draft in their voice, or a quick content audit (posts without a category, featured image or excerpt). New posts and pages are drafts unless the user asks to publish; say so when you create one, and give its edit link. Deleting only moves items to the trash.

Tools

30 advertised

wp_get_posts — List posts
Advertised by the server during the last successful anonymous check.
Advertised read-only

List posts, pages or another post type, newest first. Returns ID, title, status, excerpt and link for each, without the full content. Filter by post_type, post_status, search text, author (user ID or slug) or a date range. Returns 10 items unless limit is set; page with offset or paged.

wp_get_posts input schema
{
  "type": "object",
  "properties": {
    "after": {
      "type": "string"
    },
    "limit": {
      "type": "integer"
    },
    "paged": {
      "type": "integer"
    },
    "author": {
      "type": "integer",
      "description": "Filter by author user ID."
    },
    "before": {
      "type": "string"
    },
    "offset": {
      "type": "integer"
    },
    "search": {
      "type": "string"
    },
    "post_type": {
      "type": "string"
    },
    "author_name": {
      "type": "string",
      "description": "Filter by author user slug (nicename). Ignored if author is set."
    },
    "post_status": {
      "type": "string"
    },
    "author__not_in": {
      "type": "array",
      "items": {
        "type": "integer"
      },
      "description": "Exclude posts by these author user IDs."
    }
  }
}
wp_get_posts annotations
{
  "title": "List posts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_post — Get post
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get one post or page by ID: title, content, status, dates and permalink. Set content_format to "prose" to return the text without block markup.

wp_get_post input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    },
    "content_format": {
      "enum": [
        "full",
        "prose"
      ],
      "type": "string",
      "description": "full (default) returns raw content; prose strips block-attribute JSON, keeping prose, headings and block markers."
    }
  }
}
wp_get_post annotations
{
  "title": "Get post",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_post_snapshot — Get full post details
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get everything about one post by ID: all fields, custom fields, terms, featured image and author. Use include or exclude to limit the sections returned.

wp_get_post_snapshot input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer",
      "description": "Post ID"
    },
    "exclude": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: fields to exclude from post data. Options: content (useful for posts with huge content like many galleries)"
    },
    "include": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Optional: fields to include (default: all). Options: meta, terms, thumbnail, author"
    },
    "content_format": {
      "enum": [
        "full",
        "prose"
      ],
      "type": "string",
      "description": "full (default) returns raw content; prose strips block-attribute JSON (huge gallery blobs), keeping prose and block markers. Ignored if content is excluded."
    }
  }
}
wp_get_post_snapshot annotations
{
  "title": "Get full post details",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_count_posts — Count posts
Advertised by the server during the last successful anonymous check.
Advertised read-only

Count posts by status (published, draft, scheduled, pending, private, trash) for one post type. The default post type is post.

wp_count_posts input schema
{
  "type": "object",
  "properties": {
    "post_type": {
      "type": "string"
    }
  }
}
wp_count_posts annotations
{
  "title": "Count posts",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_post_types — List post types
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the public post types on the site with their key and label, such as post, page or product.

wp_get_post_types input schema
{
  "type": "object",
  "properties": {}
}
wp_get_post_types annotations
{
  "title": "List post types",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_post_meta — Get post custom fields
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the custom fields of a post by ID. Pass key to read a single field; without it, all custom fields are returned.

wp_get_post_meta input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    },
    "key": {
      "type": "string"
    }
  }
}
wp_get_post_meta annotations
{
  "title": "Get post custom fields",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_comments — List comments
Advertised by the server during the last successful anonymous check.
Advertised read-only

List comments with their post, author, content, date and approval status. Filter by post_id, status, search text, user_id or author_email. Returns 10 unless limit is set. With type set to "note", it lists the editor notes on posts, where an approval status of 1 means the note thread is resolved.

wp_get_comments input schema
{
  "type": "object",
  "properties": {
    "type": {
      "type": "string",
      "description": "Filter by comment type, e.g. \"comment\", \"pingback\", or \"note\" (WP 6.9 editor Notes). Omit to return all types."
    },
    "limit": {
      "type": "integer"
    },
    "paged": {
      "type": "integer"
    },
    "offset": {
      "type": "integer"
    },
    "search": {
      "type": "string"
    },
    "status": {
      "type": "string"
    },
    "post_id": {
      "type": "integer"
    },
    "user_id": {
      "type": "integer",
      "description": "Filter by the registered user ID of the commenter."
    },
    "author_email": {
      "type": "string",
      "description": "Filter by the commenter email address."
    }
  }
}
wp_get_comments annotations
{
  "title": "List comments",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_taxonomies — List taxonomies
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the taxonomies available for a post type, such as categories and tags.

wp_get_taxonomies input schema
{
  "type": "object",
  "properties": {
    "post_type": {
      "type": "string"
    }
  }
}
wp_get_taxonomies annotations
{
  "title": "List taxonomies",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_terms — List terms
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the terms of a taxonomy (for example every category), optionally filtered by search text or parent term.

wp_get_terms input schema
{
  "type": "object",
  "required": [
    "taxonomy"
  ],
  "properties": {
    "limit": {
      "type": "integer"
    },
    "parent": {
      "type": "integer"
    },
    "search": {
      "type": "string"
    },
    "taxonomy": {
      "type": "string"
    }
  }
}
wp_get_terms annotations
{
  "title": "List terms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_count_terms — Count terms
Advertised by the server during the last successful anonymous check.
Advertised read-only

Count the terms in a taxonomy.

wp_count_terms input schema
{
  "type": "object",
  "required": [
    "taxonomy"
  ],
  "properties": {
    "taxonomy": {
      "type": "string"
    }
  }
}
wp_count_terms annotations
{
  "title": "Count terms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_post_terms — Get post terms
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the terms attached to a post, optionally for one taxonomy only.

wp_get_post_terms input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    },
    "taxonomy": {
      "type": "string"
    }
  }
}
wp_get_post_terms annotations
{
  "title": "Get post terms",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_get_media — List media
Advertised by the server during the last successful anonymous check.
Advertised read-only

List items in the Media Library with their ID, title and URL. Filter by search text, uploader or date range. Returns 10 unless limit is set.

wp_get_media input schema
{
  "type": "object",
  "properties": {
    "after": {
      "type": "string"
    },
    "limit": {
      "type": "integer"
    },
    "author": {
      "type": "integer",
      "description": "Filter by uploader user ID."
    },
    "before": {
      "type": "string"
    },
    "search": {
      "type": "string"
    },
    "author_name": {
      "type": "string",
      "description": "Filter by uploader user slug (nicename). Ignored if author is set."
    }
  }
}
wp_get_media annotations
{
  "title": "List media",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_count_media — Count media
Advertised by the server during the last successful anonymous check.
Advertised read-only

Count the items in the Media Library, optionally within a date range.

wp_count_media input schema
{
  "type": "object",
  "properties": {
    "after": {
      "type": "string"
    },
    "before": {
      "type": "string"
    }
  }
}
wp_count_media annotations
{
  "title": "Count media",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_list_block_patterns — List block patterns
Advertised by the server during the last successful anonymous check.
Advertised read-only

List the block patterns available on the site (ready-made layouts from WordPress, the theme and plugins), with name, title, categories and description. Filter by search text or category. Set include_content to true to also get each pattern's block markup, which can be placed in a post with Update post or Edit post text.

wp_list_block_patterns input schema
{
  "type": "object",
  "properties": {
    "limit": {
      "type": "integer",
      "description": "Max patterns to return (default 50, max 500)."
    },
    "search": {
      "type": "string",
      "description": "Case-insensitive filter on title, name, description, and keywords."
    },
    "category": {
      "type": "string",
      "description": "Pattern category slug, e.g. \"featured\", \"call-to-action\", \"gallery\", \"testimonials\"."
    },
    "include_content": {
      "type": "boolean",
      "description": "Include each match's raw block markup (default false; can be large)."
    }
  }
}
wp_list_block_patterns annotations
{
  "title": "List block patterns",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_create_post — Create post
Advertised by the server during the last successful anonymous check.
Open-world

Create a post, page or item of another post type. post_title is required. post_content accepts HTML, blocks or Markdown. The status is draft unless post_status says otherwise, and the type is post unless post_type says otherwise. meta_input sets custom fields.

wp_create_post input schema
{
  "type": "object",
  "required": [
    "post_title"
  ],
  "properties": {
    "post_name": {
      "type": "string"
    },
    "post_type": {
      "type": "string"
    },
    "meta_input": {
      "type": "object",
      "description": "Custom fields as key/value pairs. Keys starting with an underscore (WordPress internals) are refused, except the Yoast SEO title, description and focus keyphrase."
    },
    "post_title": {
      "type": "string"
    },
    "post_status": {
      "type": "string"
    },
    "post_content": {
      "type": "string"
    },
    "post_excerpt": {
      "type": "string"
    }
  }
}
wp_create_post annotations
{
  "title": "Create post",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
wp_update_post — Update post
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Update an existing post by ID: title, content, excerpt, status, slug, date or custom fields. Pass the fields to change in fields and custom fields in meta_input. Set schedule_for to schedule publication. Passing post_category replaces all of the post's categories.

wp_update_post input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer",
      "description": "The ID of the post to update."
    },
    "fields": {
      "type": "object",
      "properties": {
        "post_name": {
          "type": "string"
        },
        "post_title": {
          "type": "string"
        },
        "post_status": {
          "type": "string"
        },
        "post_content": {
          "type": "string"
        },
        "post_excerpt": {
          "type": "string"
        },
        "post_category": {
          "type": "array",
          "items": {
            "type": "integer"
          }
        }
      },
      "additionalProperties": true
    },
    "meta_input": {
      "type": "object",
      "description": "Custom fields as key/value pairs. Keys starting with an underscore (WordPress internals) are refused, except the Yoast SEO title, description and focus keyphrase."
    },
    "schedule_for": {
      "type": "string",
      "description": "Schedule post for future publication. Provide local datetime (e.g., \"2026-02-02 09:00:00\"). Automatically sets status to \"future\" and calculates GMT from WordPress timezone."
    }
  }
}
wp_update_post annotations
{
  "title": "Update post",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
wp_alter_post — Edit post text
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Find and replace text inside one field of a post (for example its content), without sending the whole content again. Supports regular expressions with regex set to true and modifiers in flags.

wp_alter_post input schema
{
  "type": "object",
  "required": [
    "ID",
    "field",
    "search",
    "replace"
  ],
  "properties": {
    "ID": {
      "type": "integer",
      "description": "Post ID."
    },
    "field": {
      "type": "string",
      "description": "Field to modify: post_content, post_excerpt, or post_title."
    },
    "flags": {
      "type": "string",
      "description": "Optional PCRE modifier letters applied in regex mode, e.g. \"i\" (case-insensitive), \"s\" (dotall), \"m\" (multiline). Allowed: i, m, s, x, u, A, D, S, U, X, J."
    },
    "regex": {
      "type": "boolean",
      "description": "Treat search as a regex pattern (default: false)."
    },
    "search": {
      "type": "string",
      "description": "Text to search for, or (with regex=true) a bare PCRE pattern without delimiters, e.g. <!-- /wp:paragraph -->\\s*$"
    },
    "replace": {
      "type": "string",
      "description": "Replacement text. In regex mode, backreferences like $1 / \\1 are supported."
    }
  }
}
wp_alter_post annotations
{
  "title": "Edit post text",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
wp_write_blocks — Write blocks
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Write block editor content to an existing post from a list of block specs. Types and fields: paragraph (content), heading (content, level 1-6), list (items, ordered), quote (content, citation), image (url, alt, caption), buttons (buttons: text, url), group (blocks), columns (columns: arrays of blocks), separator, spacer (height), code (content), html (content). mode is replace (default), append or prepend.

wp_write_blocks input schema
{
  "type": "object",
  "required": [
    "ID",
    "blocks"
  ],
  "properties": {
    "ID": {
      "type": "integer",
      "description": "Target post/page ID (create it first with wp_create_post)."
    },
    "mode": {
      "enum": [
        "replace",
        "append",
        "prepend"
      ],
      "type": "string",
      "description": "replace (default) overwrites post_content; append/prepend add the blocks to the existing content."
    },
    "blocks": {
      "type": "array",
      "items": {
        "type": "object",
        "additionalProperties": true
      },
      "description": "Ordered array of block specs. Each item is an object with a \"type\" and the fields for that type (see the tool description)."
    }
  }
}
wp_write_blocks annotations
{
  "title": "Write blocks",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
wp_delete_post — Move post to trash
Advertised by the server during the last successful anonymous check.
Advertised destructive

Move a post, page or item of another post type to the trash by ID. It can be restored from the trash in WordPress.

wp_delete_post input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    }
  }
}
wp_delete_post annotations
{
  "title": "Move post to trash",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_set_featured_image — Set featured image
Advertised by the server during the last successful anonymous check.
Advertised destructive

Set the featured image of a post to a Media Library item, or remove it when media_id is empty.

wp_set_featured_image input schema
{
  "type": "object",
  "required": [
    "post_id"
  ],
  "properties": {
    "post_id": {
      "type": "integer"
    },
    "media_id": {
      "type": "integer"
    }
  }
}
wp_set_featured_image annotations
{
  "title": "Set featured image",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_create_term — Create term
Advertised by the server during the last successful anonymous check.

Create a term in a taxonomy, such as a new category or tag, with an optional slug, description and parent.

wp_create_term input schema
{
  "type": "object",
  "required": [
    "taxonomy",
    "term_name"
  ],
  "properties": {
    "slug": {
      "type": "string"
    },
    "parent": {
      "type": "integer"
    },
    "taxonomy": {
      "type": "string"
    },
    "term_name": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  }
}
wp_create_term annotations
{
  "title": "Create term",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_update_term — Update term
Advertised by the server during the last successful anonymous check.
Advertised destructive

Update the name, slug, description or parent of an existing term.

wp_update_term input schema
{
  "type": "object",
  "required": [
    "term_id",
    "taxonomy"
  ],
  "properties": {
    "name": {
      "type": "string"
    },
    "slug": {
      "type": "string"
    },
    "parent": {
      "type": "integer"
    },
    "term_id": {
      "type": "integer"
    },
    "taxonomy": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  }
}
wp_update_term annotations
{
  "title": "Update term",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_add_post_terms — Set post terms
Advertised by the server during the last successful anonymous check.
Advertised destructive

Attach terms to a post. With append set to true they are added to the existing terms; otherwise they replace all terms of that taxonomy on the post.

wp_add_post_terms input schema
{
  "type": "object",
  "required": [
    "ID",
    "terms"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    },
    "terms": {
      "type": "array",
      "items": {
        "type": "integer"
      }
    },
    "append": {
      "type": "boolean"
    },
    "taxonomy": {
      "type": "string"
    }
  }
}
wp_add_post_terms annotations
{
  "title": "Set post terms",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_upload_media — Upload media
Advertised by the server during the last successful anonymous check.
Open-world

Add a file to the Media Library, either from a public URL that WordPress downloads or from base64 content with a filename. Optional title, description and alt text.

wp_upload_media input schema
{
  "type": "object",
  "properties": {
    "alt": {
      "type": "string"
    },
    "url": {
      "type": "string",
      "description": "URL to download the file from. Use this OR base64/filename."
    },
    "title": {
      "type": "string"
    },
    "base64": {
      "type": "string",
      "description": "Base64-encoded file content. Must be used together with filename."
    },
    "filename": {
      "type": "string",
      "description": "Filename with extension (e.g. photo.jpg). Required when using base64."
    },
    "description": {
      "type": "string"
    }
  }
}
wp_upload_media annotations
{
  "title": "Upload media",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
wp_update_media — Update media details
Advertised by the server during the last successful anonymous check.
Advertised destructive

Update the title, caption, description or alt text of a Media Library item.

wp_update_media input schema
{
  "type": "object",
  "required": [
    "ID"
  ],
  "properties": {
    "ID": {
      "type": "integer"
    },
    "alt": {
      "type": "string"
    },
    "title": {
      "type": "string"
    },
    "caption": {
      "type": "string"
    },
    "description": {
      "type": "string"
    }
  }
}
wp_update_media annotations
{
  "title": "Update media details",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_create_comment — Add comment
Advertised by the server during the last successful anonymous check.
Open-world

Add a comment to a post. post_id and comment_content are required; author name, email, URL and approval status are optional.

wp_create_comment input schema
{
  "type": "object",
  "required": [
    "post_id",
    "comment_content"
  ],
  "properties": {
    "post_id": {
      "type": "integer"
    },
    "comment_author": {
      "type": "string"
    },
    "comment_content": {
      "type": "string"
    },
    "comment_approved": {
      "type": "string"
    },
    "comment_author_url": {
      "type": "string"
    },
    "comment_author_email": {
      "type": "string"
    }
  }
}
wp_create_comment annotations
{
  "title": "Add comment",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": false
}
wp_update_comment — Update comment
Advertised by the server during the last successful anonymous check.
Advertised destructiveOpen-world

Update a comment by ID: its content or its approval status (approve, hold or mark as spam).

wp_update_comment input schema
{
  "type": "object",
  "required": [
    "comment_ID"
  ],
  "properties": {
    "fields": {
      "type": "object",
      "properties": {
        "comment_content": {
          "type": "string"
        },
        "comment_approved": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "comment_ID": {
      "type": "integer"
    }
  }
}
wp_update_comment annotations
{
  "title": "Update comment",
  "readOnlyHint": false,
  "openWorldHint": true,
  "destructiveHint": true
}
wp_create_note — Add editor note
Advertised by the server during the last successful anonymous check.

Add an editor note to a block of a post (WordPress 6.9 or later), as shown in the editor's Notes panel. Locate the block with anchor_text (a short exact snippet of its text) or block_index, or reply to an existing note with parent_id.

wp_create_note input schema
{
  "type": "object",
  "required": [
    "content"
  ],
  "properties": {
    "content": {
      "type": "string",
      "description": "The note text."
    },
    "post_id": {
      "type": "integer",
      "description": "The post to annotate. Not needed for a reply."
    },
    "parent_id": {
      "type": "integer",
      "description": "Reply to this note instead of starting a new thread."
    },
    "anchor_text": {
      "type": "string",
      "description": "A short exact snippet of text from the block the note is about. The first block containing it is used."
    },
    "block_index": {
      "type": "integer",
      "description": "Alternative to anchor_text: 0-based position among the top-level blocks."
    }
  }
}
wp_create_note annotations
{
  "title": "Add editor note",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": false
}
wp_update_note — Update editor note
Advertised by the server during the last successful anonymous check.
Advertised destructive

Edit the text of an editor note, or mark its thread as resolved or reopen it.

wp_update_note input schema
{
  "type": "object",
  "required": [
    "note_id"
  ],
  "properties": {
    "status": {
      "enum": [
        "resolved",
        "open"
      ],
      "type": "string",
      "description": "Resolve or reopen the thread (top-level notes only)."
    },
    "content": {
      "type": "string",
      "description": "New text for the note."
    },
    "note_id": {
      "type": "integer"
    }
  }
}
wp_update_note annotations
{
  "title": "Update editor note",
  "readOnlyHint": false,
  "openWorldHint": false,
  "destructiveHint": true
}
wp_get_site_info — Get site information
Advertised by the server during the last successful anonymous check.
Advertised read-only

Get the site's name, tagline, address and time zone.

wp_get_site_info input schema
{
  "type": "object",
  "properties": {}
}
wp_get_site_info annotations
{
  "title": "Get site information",
  "readOnlyHint": true,
  "openWorldHint": false,
  "destructiveHint": false
}

Prompts

4 advertised

tour_my_site — Tour my site

Advertised by the server during the last successful anonymous check.

A short tour of your WordPress site: what it is about, the latest posts, and three ideas to improve it.

No arguments advertised.

write_a_draft — Write a draft post

Advertised by the server during the last successful anonymous check.

Write a new draft post on your site, in the voice of your existing posts.

topic
What the post is about (required)
audit_my_content — Audit my content

Advertised by the server during the last successful anonymous check.

Find what needs attention: posts without a category, featured image or excerpt, old drafts, pending comments.

No arguments advertised.

improve_a_post — Improve a post

Advertised by the server during the last successful anonymous check.

Review one of your posts and suggest improvements, then apply the ones you approve.

post
The title (or ID) of the post (required)

Resources

Not advertised

No resource definitions available.

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
288 ms
95th percentile latency
288 ms

Maintenance history

Public check and source-refresh events. Editorial and ownership records remain private.

  • · probe · passed · 288 ms · metadata changed · 30 tool(s), 4 prompt(s)

Connect from your client

Each snippet registers the same endpoint; pick the client you use.

This server is operated by the named third party. Listing and endpoint checks are not an endorsement or a security audit. Review the operator's permissions, terms, and data handling before connecting. How listings are checked and corrected.

Claude Code

Run this once in a terminal. It registers the remote server. Use --scope project to write .mcp.json for the repo.
Claude Code configuration
claude mcp add --transport http ai-engine-for-wordpress-mcp https://connect.meowapps.com/mcp

Codex

Run this once. Codex stores MCP servers in ~/.codex/config.toml (or .codex/config.toml in a trusted project).
Codex configuration
codex mcp add ai-engine-for-wordpress-mcp --url https://connect.meowapps.com/mcp

Cursor

Merge this server into .cursor/mcp.json in your project, then enable ai-engine-for-wordpress-mcp in your MCP settings.
Cursor configuration
{
  "mcpServers": {
    "ai-engine-for-wordpress-mcp": {
      "url": "https://connect.meowapps.com/mcp"
    }
  }
}

Cline

Merge this into cline_mcp_settings.json (Cline → MCP Servers → Configure).
Cline configuration
{
  "mcpServers": {
    "ai-engine-for-wordpress-mcp": {
      "type": "streamableHttp",
      "url": "https://connect.meowapps.com/mcp",
      "disabled": false
    }
  }
}

VS Code

Merge this server into .vscode/mcp.json. Use MCP: List Servers to start ai-engine-for-wordpress-mcp and inspect its tools.
VS Code configuration
{
  "servers": {
    "ai-engine-for-wordpress-mcp": {
      "type": "http",
      "url": "https://connect.meowapps.com/mcp"
    }
  }
}

Gemini CLI

Run this once. It writes .gemini/settings.json in the current project; pass --scope user for ~/.gemini/settings.json.
Gemini CLI configuration
gemini mcp add --transport http ai-engine-for-wordpress-mcp https://connect.meowapps.com/mcp

Claude Desktop

Merge this into claude_desktop_config.json (macOS: ~/Library/Application Support/Claude/, Windows: %APPDATA%\Claude\), then restart Claude Desktop.
Claude Desktop configuration
{
  "mcpServers": {
    "ai-engine-for-wordpress-mcp": {
      "url": "https://connect.meowapps.com/mcp"
    }
  }
}

Windsurf

Merge this into ~/.codeium/windsurf/mcp_config.json, then refresh MCP in Cascade. Windsurf remote servers use serverUrl, not url.
Windsurf configuration
{
  "mcpServers": {
    "ai-engine-for-wordpress-mcp": {
      "serverUrl": "https://connect.meowapps.com/mcp"
    }
  }
}

Let your agent find its tools

Find servers like AI Engine for WordPress MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.

Do you run AI Engine for WordPress MCP?

Prove ownership with a DNS record, a well-known file, or your Official MCP Registry entry, and your edits publish immediately. Proofs are re-checked weekly; admins can still hide or remove a listing.

Claim this listing