WP Manifestindependent plugin directory
manifest / ai / claude-editorial-bridge

Claude Editorial Bridge

WordPress plugin — AI Editorial Bridge for Claude. Create and edit drafts via REST API.

by Steve Macias · github.com/stevemacias/claude-editorial-bridge · website

0stars
0forks

Install

No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:

wp plugin install https://github.com/stevemacias/claude-editorial-bridge/archive/refs/heads/main.zip

Readme

Claude Editorial Bridge

A secure WordPress plugin that lets Claude create drafts and propose edits via a controlled REST API. You remain the final publisher on every piece of content.

REST namespace: /wp-json/claude-editor/v1/
Custom post type: claude_edit_proposal
Requires: WordPress 6.0+, PHP 8.0+


Installation

  1. Copy the claude-editorial-bridge/ folder to wp-content/plugins/
  2. Activate in Plugins → Installed Plugins
  3. Go to Claude Editor → Settings
  4. Click Generate New Token and store it in your password manager
  5. Configure rate limits and other settings
  6. Point Claude at https://www.stevemacias.com/wp-json/claude-editor/v1/

Endpoints

Method Path Description
GET /status Health check; returns plugin config visible to Claude
POST /drafts/post Create a draft blog post
POST /drafts/page Create a draft page
GET /content/search Search existing posts/pages
GET /content/{id} Read a post/page
POST /content/{id}/proposal Propose an edit to an existing post/page
GET /proposals List proposals (filter by status)
POST /proposals/{id}/approve Approve and apply a proposal
POST /proposals/{id}/reject Reject a proposal

Authentication

All requests require:

Authorization: Bearer YOUR_TOKEN

Or alternatively:

X-Claude-Editor-Token: YOUR_TOKEN

curl Reference

Check status

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  https://www.stevemacias.com/wp-json/claude-editor/v1/status

Create an Anglican theology draft

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "The Historic Episcopate and Anglican Identity",
    "content": "<p>The threefold ministry of bishops, priests, and deacons...</p>",
    "excerpt": "An exploration of how the historic episcopate shapes Anglican identity.",
    "categories": ["Anglican Theology"],
    "tags": ["bishops", "episcopacy", "church history", "orders"],
    "source_notes": "Expanded from sermon notes, June 2026",
    "editorial_notes": "Needs featured image and pull quote",
    "seo_title": "The Historic Episcopate — Anglican Identity | stevemacias.com",
    "meta_description": "How the threefold order of ministry defines Anglican faith and practice."
  }' \
  https://www.stevemacias.com/wp-json/claude-editor/v1/drafts/post

Create a sermon draft

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Sermon: The Third Sunday after Trinity",
    "content": "<p>In the name of the Father...</p>",
    "excerpt": "A sermon preached at Saint Paul'\''s on the Third Sunday after Trinity.",
    "categories": ["Sermons"],
    "tags": ["Third Sunday after Trinity", "1928 BCP", "Anglican"],
    "source_notes": "Transcript from recording, lightly edited",
    "seo_title": "Third Sunday after Trinity Sermon | stevemacias.com",
    "meta_description": "Full text of the sermon preached on the Third Sunday after Trinity."
  }' \
  https://www.stevemacias.com/wp-json/claude-editor/v1/drafts/post

Create a headmaster/school reflection draft

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Headmaster'\''s Reflection: Virtue and Classical Education",
    "content": "<p>Classical education is not merely an accumulation of facts...</p>",
    "excerpt": "On the formation of virtue as the goal of a classical education.",
    "categories": ["Classical Education", "Headmaster Reflections"],
    "tags": ["virtue", "classical education", "formation"],
    "source_notes": "Adapted from end-of-year address",
    "editorial_notes": "Review for school website publication"
  }' \
  https://www.stevemacias.com/wp-json/claude-editor/v1/drafts/post

Search existing posts before drafting

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  "https://www.stevemacias.com/wp-json/claude-editor/v1/content/search?keyword=episcopate&post_type=post&status=publish,draft"

Read an existing post

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  https://www.stevemacias.com/wp-json/claude-editor/v1/content/42

Propose edits to an existing post

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "proposed_title": "The Historic Episcopate: Anglican Identity and Apostolic Succession",
    "proposed_content": "<p>Revised and expanded content...</p>",
    "proposed_excerpt": "A deeper look at how apostolic succession shapes Anglican identity.",
    "proposed_tags": ["bishops", "episcopacy", "apostolic succession", "church history"],
    "seo_title": "Historic Episcopate and Apostolic Succession | stevemacias.com",
    "meta_description": "Updated meta description with target keyword.",
    "source_content": "Original pasted text provided to Claude",
    "editorial_notes": "Expanded the historical section; added three sources",
    "explanation": "The original title undersells the apostolic succession angle. Added two paragraphs on the Lambeth Quadrilateral and expanded the conclusion."
  }' \
  https://www.stevemacias.com/wp-json/claude-editor/v1/content/42/proposal

List pending proposals

curl -s \
  -H "Authorization: Bearer YOUR_TOKEN" \
  "https://www.stevemacias.com/wp-json/claude-editor/v1/proposals?status=pending"

Approve a proposal (via API)

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  https://www.stevemacias.com/wp-json/claude-editor/v1/proposals/99/approve

Reject a proposal

curl -s -X POST \
  -H "Authorization: Bearer YOUR_TOKEN" \
  https://www.stevemacias.com/wp-json/claude-editor/v1/proposals/99/reject

JSON field reference

POST /drafts/post

{
  "title":              "Required. Post title.",
  "content":            "Required. HTML content (wp_kses_post sanitized).",
  "excerpt":            "Optional. Short summary.",
  "slug":               "Optional. URL slug (auto-generated from title if omitted).",
  "categories":         ["Optional. Array of category names or IDs."],
  "tags":               ["Optional. Array of tag names. Created if they don't exist."],
  "featured_image_url": "Optional. Stored as meta for manual review.",
  "source_notes":       "Optional. What raw material was given to Claude.",
  "editorial_notes":    "Optional. Claude's notes for the editor.",
  "seo_title":          "Optional. SEO page title.",
  "meta_description":   "Optional. Meta description.",
  "status":             "Optional. 'draft' (default) or 'publish' (only if Allow Publish is on)."
}

POST /drafts/page

Same as above, minus categories, tags, featured_image_url. Adds:

{
  "parent_page": 0
}

POST /content/{id}/proposal

{
  "proposed_title":      "Optional. New title.",
  "proposed_content":    "Optional. New HTML content.",
  "proposed_excerpt":    "Optional. New excerpt.",
  "proposed_slug":       "Optional. New URL slug.",
  "proposed_categories": ["Optional. Array of category names or IDs."],
  "proposed_tags":       ["Optional. Array of tag names."],
  "seo_title":           "Optional. SEO title override.",
  "meta_description":    "Optional. Meta description override.",
  "source_content":      "Optional. Raw content provided to Claude.",
  "editorial_notes":     "Optional. Claude's notes.",
  "explanation":         "Required. Claude's explanation of proposed changes."
}

SEO meta keys

The plugin stores SEO fields under these meta keys regardless of whether an SEO plugin is active:

Meta key Description
_ceb_seo_title SEO title override
_ceb_meta_description Meta description

If Yoast SEO, Rank Math, or All in One SEO is detected, values are also written to that plugin's native meta keys automatically.


Security

See SECURITY.md for the full security model.

Claude cannot: delete content, manage users, install plugins, edit themes, execute PHP, run SQL, or change site settings.


Changelog

See CHANGELOG.md.

Read the full README on GitHub →