plugincptui

Custom Post Type UI Abilities

Custom content models integration. Custom post types and taxonomies registered by a data-model plugin. Read-only diagnostic, definitions only.

6Total Abilities
4Destructive
1Capability Gates
Functional Domains:
Custom content models
WordPress capabilities required:
manage_options 6

Available Tools (6)

cptui_list_post_typesmanage_options

List every custom post type registered through Custom Post Type UI, with each one's slug, singular and plural labels, description, public and hierarchical flags, the editor features it supports, the taxonomies bound to it, whether it has an archive, and whether it is exposed in the REST API. Returns registration DEFINITIONS only - the post type's content is read through the core post tools, not here. Read-only.

Ability IDmore-mcp/cptui-list-post-typesRequiresmanage_options
Parameter Schema0 parameters
{
  "type": "object",
  "properties": {}
}
cptui_list_taxonomiesmanage_options

List every taxonomy registered through Custom Post Type UI, with each one's slug, singular and plural labels, description, hierarchical flag, the post types it attaches to, and whether it is public and exposed in the REST API. Returns registration DEFINITIONS only - the taxonomy's terms are read through the core term tools, not here. Read-only.

Ability IDmore-mcp/cptui-list-taxonomiesRequiresmanage_options
Parameter Schema0 parameters
{
  "type": "object",
  "properties": {}
}
cptui_save_post_typeDestructive

Create or update ONE Custom Post Type UI post-type DEFINITION (the registration, not any post content). Pass the post-type slug plus the fields to set; omitted fields keep their prior value on an update, or take WordPress-sensible defaults on a create. If the slug already exists this updates it; otherwise it creates a new one, unless create_only is true (then an existing slug is refused). Set dry_run=true to preview the resulting definition and whether it would create or update, without writing. Emits an undo token restoring the prior state. This changes site structure: registering or reshaping a post type affects routing, admin menus, and REST exposure site-wide. It does NOT touch existing posts of this type.

Ability IDmore-mcp/cptui-save-post-typeRequiresmanage_options
Parameter Schema12 parameters
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Post-type slug (lowercased; max 20 chars per WordPress). Required."
    },
    "label": {
      "type": "string",
      "description": "Plural label, e.g. \"Books\". Defaults to a title-cased slug on create."
    },
    "singular_label": {
      "type": "string",
      "description": "Singular label, e.g. \"Book\"."
    },
    "description": {
      "type": "string",
      "description": "Human description of the post type."
    },
    "public": {
      "type": "boolean",
      "description": "Whether the type is public (queryable on the front end, shown in UI). Default true on create."
    },
    "hierarchical": {
      "type": "boolean",
      "description": "Page-like (true) vs post-like (false). Default false on create."
    },
    "has_archive": {
      "type": "boolean",
      "description": "Whether the type has a post-type archive. Default false on create."
    },
    "show_in_rest": {
      "type": "boolean",
      "description": "Expose in the REST API / block editor. Default true on create."
    },
    "supports": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Editor features, e.g. [\"title\",\"editor\",\"thumbnail\"]. Default [\"title\",\"editor\"] on create."
    },
    "taxonomies": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Slugs of taxonomies to bind to this type."
    },
    "create_only": {
      "type": "boolean",
      "description": "If true, refuse when the slug already exists (never silently overwrite an existing definition). Default false."
    },
    "dry_run": {
      "type": "boolean",
      "description": "Preview the resulting definition and the create/update decision without writing. Default false."
    }
  },
  "required": [
    "slug"
  ]
}
cptui_delete_post_typeDestructive

Remove ONE Custom Post Type UI post-type DEFINITION (unregister it). Existing posts of this type are NOT deleted - they remain in the database, orphaned (no admin UI, no front-end route) until the type is registered again. Refuses unless the slug currently exists. Set dry_run=true to preview what would be removed; otherwise confirm=true is required because this changes site structure and hides content. Emits an undo token restoring the prior definition.

Ability IDmore-mcp/cptui-delete-post-typeRequiresmanage_options
Parameter Schema3 parameters
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug of the post-type definition to remove. Required."
    },
    "confirm": {
      "type": "boolean",
      "description": "Must be true to actually remove the definition (guards a structural change). Ignored when dry_run is true."
    },
    "dry_run": {
      "type": "boolean",
      "description": "Preview the removal (what would be unregistered) without writing. Default false."
    }
  },
  "required": [
    "slug"
  ]
}
cptui_save_taxonomyDestructive

Create or update ONE Custom Post Type UI taxonomy DEFINITION (the registration, not any terms). Pass the taxonomy slug plus fields to set; omitted fields keep their prior value on an update, or take WordPress-sensible defaults on a create. object_types (the post types this taxonomy attaches to) is required on create and must be non-empty, mirroring CPT UI's own rule. If the slug exists this updates it; otherwise it creates one, unless create_only is true. Set dry_run=true to preview without writing. Emits an undo token restoring the prior state. Changes site structure; does NOT touch existing terms.

Ability IDmore-mcp/cptui-save-taxonomyRequiresmanage_options
Parameter Schema10 parameters
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Taxonomy slug (lowercased; max 32 chars per WordPress). Required."
    },
    "label": {
      "type": "string",
      "description": "Plural label, e.g. \"Genres\"."
    },
    "singular_label": {
      "type": "string",
      "description": "Singular label, e.g. \"Genre\"."
    },
    "description": {
      "type": "string",
      "description": "Human description of the taxonomy."
    },
    "hierarchical": {
      "type": "boolean",
      "description": "Category-like (true) vs tag-like (false). Default false on create."
    },
    "public": {
      "type": "boolean",
      "description": "Whether the taxonomy is public. Default true on create."
    },
    "show_in_rest": {
      "type": "boolean",
      "description": "Expose in the REST API / block editor. Default true on create."
    },
    "object_types": {
      "type": "array",
      "items": {
        "type": "string"
      },
      "description": "Post-type slugs this taxonomy attaches to. Required and non-empty on create (CPT UI's own rule)."
    },
    "create_only": {
      "type": "boolean",
      "description": "If true, refuse when the slug already exists. Default false."
    },
    "dry_run": {
      "type": "boolean",
      "description": "Preview the resulting definition and the create/update decision without writing. Default false."
    }
  },
  "required": [
    "slug"
  ]
}
cptui_delete_taxonomyDestructive

Remove ONE Custom Post Type UI taxonomy DEFINITION (unregister it). Existing terms are NOT deleted - they remain in the database, orphaned until the taxonomy is registered again. Refuses unless the slug currently exists. Set dry_run=true to preview; otherwise confirm=true is required. Emits an undo token restoring the prior definition.

Ability IDmore-mcp/cptui-delete-taxonomyRequiresmanage_options
Parameter Schema3 parameters
{
  "type": "object",
  "properties": {
    "slug": {
      "type": "string",
      "description": "Slug of the taxonomy definition to remove. Required."
    },
    "confirm": {
      "type": "boolean",
      "description": "Must be true to actually remove the definition. Ignored when dry_run is true."
    },
    "dry_run": {
      "type": "boolean",
      "description": "Preview the removal without writing. Default false."
    }
  },
  "required": [
    "slug"
  ]
}