Skip to content

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.

Tools: 10 delete, 0 irreversible, 5 write, 15 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_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/mcp
claude mcp add --transport http ai-engine https://connect.meowapps.com/mcp

Run 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.

.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.xml

An Atom feed. Works in any feed reader or Slack's RSS app.

Badge

anlyon.dev badge for com.meowapps/ai-engine
[![anlyon.dev](https://anlyon.dev/badge/com.meowapps/ai-engine.svg)](https://anlyon.dev/servers/com.meowapps/ai-engine)

Source: MCP Registry. Synced Oct 26, 2026, 13:17 UTC.