AI Engine for WordPress
com.meowapps/ai-enginemeowapps.comstreamable-httpv3.8.7Scanned
Free MCP server for WordPress: Claude and ChatGPT connect with OAuth. No account, cap or API key.
30 tools: 10 can delete or cancel things, 5 change things and 15 only read.
- Reads private data · 0
- Reads text others write · 17
- Can send data out · 7
- No findings
Anlyon alternative
15 of these tools change something. Run those as governed actions.
Declare what an action changes, and Anlyon puts it under a shared limit, binds every approval to the exact request, and grades the outcome. It works on any HTTPS API you can describe as an action.
Anlyon does not run, proxy or govern this MCP server. A tool your own code calls directly is not routed through Anlyon and is not governed by it.
Import an OpenAPI spec →Tools
Grouped by what each tool does, most consequential first. Open one for its reasons and full description; descriptions are the publisher's own words.
30 tools
Deletes or cancels 10Claude Code: deny
wp_add_post_termsAttach terms to a post.Can send data outNo findings
Why it is in this group
- The name "wp_add_post_terms" says "add": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- outboundThe name "wp_add_post_terms" says "add" and "post": it writes something other people read.
Description, as the server wrote it 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.
Annotations the server declares
- title: Set post terms
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_alter_postFind and replace text inside one field of a post (for example its content), without sending the whole content again.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_alter_post" says "post": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "wp_alter_post" says "post": it sends or publishes something to other people.
Description, as the server wrote it 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.
Annotations the server declares
- title: Edit post text
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
wp_delete_postMove a post, page or item of another post type to the trash by ID.No findings
Why it is in this group
- The name "wp_delete_post" says "delete": a word for removing or ending something.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Move a post, page or item of another post type to the trash by ID. It can be restored from the trash in WordPress.
Annotations the server declares
- title: Move post to trash
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_set_featured_imageSet the featured image of a post to a Media Library item, or remove it when media_id is empty.No findings
Why it is in this group
- The name "wp_set_featured_image" says "set": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Set the featured image of a post to a Media Library item, or remove it when media_id is empty.
Annotations the server declares
- title: Set featured image
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_update_commentUpdate a comment by ID: its content or its approval status (approve, hold or mark as spam).Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_update_comment" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "wp_update_comment" says "update" and "comment": it writes something other people read.
Description, as the server wrote it Update a comment by ID: its content or its approval status (approve, hold or mark as spam).
Annotations the server declares
- title: Update comment
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
wp_update_mediaUpdate the title, caption, description or alt text of a Media Library item.No findings
Why it is in this group
- The name "wp_update_media" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update the title, caption, description or alt text of a Media Library item.
Annotations the server declares
- title: Update media details
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_update_noteEdit the text of an editor note, or mark its thread as resolved or reopen it.No findings
Why it is in this group
- The name "wp_update_note" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Edit the text of an editor note, or mark its thread as resolved or reopen it.
Annotations the server declares
- title: Update editor note
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_update_postUpdate an existing post by ID: title, content, excerpt, status, slug, date or custom fields.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_update_post" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "wp_update_post" says "update" and "post": it writes something other people read.
Description, as the server wrote it 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.
Annotations the server declares
- title: Update post
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
wp_update_termUpdate the name, slug, description or parent of an existing term.No findings
Why it is in this group
- The name "wp_update_term" says "update": a word for a change.
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Update the name, slug, description or parent of an existing term.
Annotations the server declares
- title: Update term
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
wp_write_blocksWrite block editor content to an existing post from a list of block specs.Reads text others writeNo findings
Why it is in this group
- The name "wp_write_blocks" says "write": a word for a change.
- The server marks it destructive (destructiveHint: true).
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
Description, as the server wrote it 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.
Annotations the server declares
- title: Write blocks
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: true
Changes things 5Claude Code: ask
wp_create_commentAdd a comment to a post.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_create_comment" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "wp_create_comment" says "create" and "comment": it writes something other people read.
Description, as the server wrote it Add a comment to a post. post_id and comment_content are required; author name, email, URL and approval status are optional.
Annotations the server declares
- title: Add comment
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
wp_create_noteAdd an editor note to a block of a post (WordPress 6.9 or later), as shown in the editor's Notes panel.No findings
Why it is in this group
- The name "wp_create_note" says "create": a word for a change.
Description, as the server wrote it 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.
Annotations the server declares
- title: Add editor note
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
wp_create_postCreate a post, page or item of another post type.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_create_post" says "create": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe name "wp_create_post" says "create" and "post": it writes something other people read.
Description, as the server wrote it 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.
Annotations the server declares
- title: Create post
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
wp_create_termCreate a term in a taxonomy, such as a new category or tag, with an optional slug, description and parent.No findings
Why it is in this group
- The name "wp_create_term" says "create": a word for a change.
Description, as the server wrote it Create a term in a taxonomy, such as a new category or tag, with an optional slug, description and parent.
Annotations the server declares
- title: Create term
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
wp_upload_mediaAdd a file to the Media Library, either from a public URL that WordPress downloads or from base64 content with a filename.Reads text others writeCan send data outNo findings
Why it is in this group
- The name "wp_upload_media" says "upload": a word for a change.
What it can reach
- untrusted-inputThe server marks it openWorldHint: true: it reaches things outside the server's own data.
- outboundThe input takes a URL (input.url): a request to a URL can carry data to whoever runs it.
Description, as the server wrote it 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.
Annotations the server declares
- title: Upload media
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
Only reads 15Show 15 read-only tools
wp_count_mediaCount the items in the Media Library, optionally within a date range.No findings
Why it is in this group
- The name "wp_count_media" says "count": a word for reading.
Description, as the server wrote it Count the items in the Media Library, optionally within a date range.
Annotations the server declares
- title: Count media
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_count_postsCount posts by status (published, draft, scheduled, pending, private, trash) for one post type.Reads text others writeNo findings
Why it is in this group
- The name "wp_count_posts" says "count": a word for reading.
What it can reach
- untrusted-inputThe name "wp_count_posts" says "count" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "count" and "post": it reads posts, which other people can write.
Description, as the server wrote it Count posts by status (published, draft, scheduled, pending, private, trash) for one post type. The default post type is post.
Annotations the server declares
- title: Count posts
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_count_termsCount the terms in a taxonomy.No findings
Why it is in this group
- The name "wp_count_terms" says "count": a word for reading.
Description, as the server wrote it Count the terms in a taxonomy.
Annotations the server declares
- title: Count terms
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_commentsList comments with their post, author, content, date and approval status.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_comments" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_comments" says "get" and "comment": it reads comments, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "comment": it reads comments, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List comments
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_mediaList items in the Media Library with their ID, title and URL.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_media" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "list" and "url": it reads web pages, which anyone can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List media
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_postGet one post or page by ID: title, content, status, dates and permalink.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_post" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_post" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get post
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_post_metaGet the custom fields of a post by ID.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_post_meta" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_post_meta" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "post": it reads posts, which other people can write.
Description, as the server wrote it Get the custom fields of a post by ID. Pass key to read a single field; without it, all custom fields are returned.
Annotations the server declares
- title: Get post custom fields
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_post_snapshotGet everything about one post by ID: all fields, custom fields, terms, featured image and author.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_post_snapshot" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_post_snapshot" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "get" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: Get full post details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_post_termsList the terms attached to a post, optionally for one taxonomy only.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_post_terms" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_post_terms" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
Description, as the server wrote it List the terms attached to a post, optionally for one taxonomy only.
Annotations the server declares
- title: Get post terms
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_post_typesList the public post types on the site with their key and label, such as post, page or product.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_post_types" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_post_types" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
Description, as the server wrote it List the public post types on the site with their key and label, such as post, page or product.
Annotations the server declares
- title: List post types
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_postsList posts, pages or another post type, newest first.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_posts" says "get": a word for reading.
What it can reach
- untrusted-inputThe name "wp_get_posts" says "get" and "post": it reads posts, which other people can write.
- untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
Description, as the server wrote it 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.
Annotations the server declares
- title: List posts
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_site_infoGet the site's name, tagline, address and time zone.No findings
Why it is in this group
- The name "wp_get_site_info" says "get": a word for reading.
Description, as the server wrote it Get the site's name, tagline, address and time zone.
Annotations the server declares
- title: Get site information
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_taxonomiesList the taxonomies available for a post type, such as categories and tags.Reads text others writeNo findings
Why it is in this group
- The name "wp_get_taxonomies" says "get": a word for reading.
What it can reach
- untrusted-inputThe description's first sentence says "list" and "post": it reads posts, which other people can write.
Description, as the server wrote it List the taxonomies available for a post type, such as categories and tags.
Annotations the server declares
- title: List taxonomies
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_get_termsList the terms of a taxonomy (for example every category), optionally filtered by search text or parent term.No findings
Why it is in this group
- The name "wp_get_terms" says "get": a word for reading.
Description, as the server wrote it List the terms of a taxonomy (for example every category), optionally filtered by search text or parent term.
Annotations the server declares
- title: List terms
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wp_list_block_patternsList the block patterns available on the site (ready-made layouts from WordPress, the theme and plugins), with name, title, categories and description.No findings
Why it is in this group
- The name "wp_list_block_patterns" says "list": a word for reading.
Description, as the server wrote it 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.
Annotations the server declares
- title: List block patterns
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Exfil surface
Which tools read private data, which read text someone else can write, and which can send data out. One of each is a path a prompt injection can use.
No private-data, untrusted-input, outbound path in this server alone: no tool is tagged private-data.
- Reads private data0
- Reads files, mail, messages, databases, secrets, calendars or repositories.
- Reads text others write17
- Brings in text someone else can write: web pages, inbound email, messages, issues and comments.
- Can send data out7
- Can carry data to people or systems: it sends, posts or publishes, or takes a recipient, channel or URL.
Other servers in the same agent add their own tools to these paths. Audit your whole setup to see them together.
Findings
Matches of fixed checks, with the text they matched.
No check matched anything in these tool definitions. That is not a safety guarantee.
History
Changes to its tool definitions and to its remote endpoint, newest first.
No change seen yet. Its tools are rescanned every day, and a remote endpoint is looked at once a week.
Install
Pinned to version 3.8.7. Values in angle brackets are yours to fill in.
claude mcp add --transport http ai-engine https://connect.meowapps.com/mcpclaude mcp add --transport http ai-engine https://connect.meowapps.com/mcpRun in a terminal.
Claude Code permissions
Allow the reads, ask before a change or a way out, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__ai-engine__wp_get_posts",
"mcp__ai-engine__wp_get_post",
"mcp__ai-engine__wp_get_post_snapshot",
"mcp__ai-engine__wp_count_posts",
"mcp__ai-engine__wp_get_post_types",
"mcp__ai-engine__wp_get_post_meta",
"mcp__ai-engine__wp_get_comments",
"mcp__ai-engine__wp_get_taxonomies",
"mcp__ai-engine__wp_get_terms",
"mcp__ai-engine__wp_count_terms",
"mcp__ai-engine__wp_get_post_terms",
"mcp__ai-engine__wp_get_media",
"mcp__ai-engine__wp_count_media",
"mcp__ai-engine__wp_list_block_patterns",
"mcp__ai-engine__wp_get_site_info"
],
"ask": [
"mcp__ai-engine__wp_create_post",
"mcp__ai-engine__wp_create_term",
"mcp__ai-engine__wp_upload_media",
"mcp__ai-engine__wp_create_comment",
"mcp__ai-engine__wp_create_note"
],
"deny": [
"mcp__ai-engine__wp_update_post",
"mcp__ai-engine__wp_alter_post",
"mcp__ai-engine__wp_write_blocks",
"mcp__ai-engine__wp_delete_post",
"mcp__ai-engine__wp_set_featured_image",
"mcp__ai-engine__wp_update_term",
"mcp__ai-engine__wp_add_post_terms",
"mcp__ai-engine__wp_update_media",
"mcp__ai-engine__wp_update_comment",
"mcp__ai-engine__wp_update_note"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. A read that can send data out (it takes a URL, say) asks first too. It assumes the server is installed as ai-engine. Review it before you use it.
Capability tags behind 18 rules
- mcp__ai-engine__wp_get_posts untrusted-input
- mcp__ai-engine__wp_get_post untrusted-input
- mcp__ai-engine__wp_get_post_snapshot untrusted-input
- mcp__ai-engine__wp_count_posts untrusted-input
- mcp__ai-engine__wp_get_post_types untrusted-input
- mcp__ai-engine__wp_get_post_meta untrusted-input
- mcp__ai-engine__wp_get_comments untrusted-input
- mcp__ai-engine__wp_get_taxonomies untrusted-input
- mcp__ai-engine__wp_get_post_terms untrusted-input
- mcp__ai-engine__wp_get_media untrusted-input
- mcp__ai-engine__wp_create_post untrusted-input, outbound
- mcp__ai-engine__wp_update_post untrusted-input, outbound
- mcp__ai-engine__wp_alter_post untrusted-input, outbound
- mcp__ai-engine__wp_write_blocks untrusted-input
- mcp__ai-engine__wp_add_post_terms outbound
- mcp__ai-engine__wp_upload_media untrusted-input, outbound
- mcp__ai-engine__wp_create_comment untrusted-input, outbound
- mcp__ai-engine__wp_update_comment untrusted-input, outbound
Pin
Keep the decision: fail CI when the tools change, follow every change, or show a badge.
Pin in CI
Fail a build when the tools you reviewed are not the tools the server serves today.
curl -s "https://anlyon.dev/api/v1/servers/com.meowapps/ai-engine/verify?hash=07619b6d1fa1782efde1c40dbd8a53196b12d5f6782eaf2946022908732ddb18" | jq -e '.changed == false'Pinned hash 07619b6d1fa1, from Oct 26, 2026, 13:17 UTC.
Watch
Get told when its tools change: a new tool, a new description, a new class.
https://anlyon.dev/servers/com.meowapps/ai-engine/changes.xmlAn Atom feed. Works in any feed reader or Slack's RSS app.
Badge
[](https://anlyon.dev/servers/com.meowapps/ai-engine)Source: MCP Registry. Synced Oct 26, 2026, 13:17 UTC.