{"id":42742636,"url":"https://github.com/aplaceforallmystuff/wp-content-abilities","last_synced_at":"2026-01-29T19:02:13.238Z","repository":{"id":327476140,"uuid":"1109473826","full_name":"aplaceforallmystuff/wp-content-abilities","owner":"aplaceforallmystuff","description":"WordPress plugin exposing content management via the Abilities API for AI assistants and MCP clients","archived":false,"fork":false,"pushed_at":"2025-12-03T21:38:21.000Z","size":21,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-12-07T02:59:59.126Z","etag":null,"topics":["abilities-api","ai","claude","content-management","mcp","wordpress","wordpress-plugin"],"latest_commit_sha":null,"homepage":null,"language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/aplaceforallmystuff.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-12-03T21:19:44.000Z","updated_at":"2025-12-03T21:38:24.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/aplaceforallmystuff/wp-content-abilities","commit_stats":null,"previous_names":["aplaceforallmystuff/wp-content-abilities"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/aplaceforallmystuff/wp-content-abilities","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aplaceforallmystuff%2Fwp-content-abilities","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aplaceforallmystuff%2Fwp-content-abilities/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aplaceforallmystuff%2Fwp-content-abilities/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aplaceforallmystuff%2Fwp-content-abilities/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/aplaceforallmystuff","download_url":"https://codeload.github.com/aplaceforallmystuff/wp-content-abilities/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/aplaceforallmystuff%2Fwp-content-abilities/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28882615,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-29T16:41:59.663Z","status":"ssl_error","status_checked_at":"2026-01-29T16:39:39.641Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["abilities-api","ai","claude","content-management","mcp","wordpress","wordpress-plugin"],"created_at":"2026-01-29T19:02:12.198Z","updated_at":"2026-01-29T19:02:13.227Z","avatar_url":"https://github.com/aplaceforallmystuff.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WP Content Abilities\n\nA WordPress plugin that exposes content management capabilities via the WordPress 6.9 Abilities API, enabling AI assistants to create, read, update, and delete WordPress content through the MCP protocol.\n\n## Important Notices\n\n### Experimental Technology\n\nThis plugin uses **WordPress 6.9's Abilities API**, which is a new and evolving feature. The API may change in future WordPress releases, potentially requiring updates to this plugin.\n\n### Technical Users Only\n\nThis plugin is designed for developers and technical users who are comfortable with:\n- Command-line tools and API interactions\n- WordPress plugin management\n- Application Passwords and authentication\n- The Model Context Protocol (MCP)\n\n### Security Considerations\n\n- **Application Passwords** grant full API access with your user's permissions\n- Only create Application Passwords for trusted automation tools\n- Use accounts with minimal required permissions (Editor role for content management)\n- Regularly audit and revoke unused Application Passwords\n- HTTPS is strongly recommended for all API communications\n\n### No Warranty\n\nThis plugin is provided \"as is\" without warranty of any kind. Use at your own risk. Always backup your WordPress site before installing new plugins.\n\n## Requirements\n\n### Core Requirements\n\n| Requirement | Version | Purpose |\n|-------------|---------|---------|\n| WordPress | 6.9+ | Provides the Abilities API framework |\n| PHP | 8.0+ | Required by WordPress 6.9 |\n\n### Required Plugins\n\n| Plugin | Source | Purpose |\n|--------|--------|---------|\n| **MCP Adapter** | [WordPress AI Team](https://make.wordpress.org/ai/2025/07/17/mcp-adapter/) | Provides HTTP transport for MCP protocol at `/wp-json/mcp/mcp-adapter-default-server` |\n\n### Optional Plugins\n\n| Plugin | Source | Purpose |\n|--------|--------|---------|\n| AI Experiments | [wordpress/ai](https://wordpress.org/plugins/ai/) | Provides additional AI-focused abilities (get-post-details, get-post-terms) |\n\n### Authentication\n\nThe plugin uses WordPress's built-in authentication. For programmatic access:\n- Create an **Application Password** in WordPress (Users → Your Profile → Application Passwords)\n- Use Basic Auth with your username and application password\n\n## Installation\n\n1. Upload `wp-content-abilities.php` to `/wp-content/plugins/wp-content-abilities/`\n2. Activate the plugin through the 'Plugins' menu\n3. Ensure MCP Adapter plugin is also installed and activated\n4. Create an Application Password for API access\n\n## Available Abilities\n\n### Posts (6 abilities)\n\n| Ability | Description |\n|---------|-------------|\n| `content/list-posts` | List posts with filters (status, category, tag, author, date range) |\n| `content/get-post` | Get a single post by ID with full content |\n| `content/create-post` | Create a new post with all fields |\n| `content/update-post` | Update an existing post |\n| `content/delete-post` | Delete a post (move to trash or force delete) |\n| `content/get-post-revisions` | Get revision history for a post |\n\n### Pages (5 abilities)\n\n| Ability | Description |\n|---------|-------------|\n| `content/list-pages` | List pages with filters |\n| `content/get-page` | Get a single page by ID |\n| `content/create-page` | Create a new page |\n| `content/update-page` | Update an existing page |\n| `content/delete-page` | Delete a page |\n\n### Taxonomies (2 abilities)\n\n| Ability | Description |\n|---------|-------------|\n| `content/list-categories` | List all categories with hierarchy |\n| `content/list-tags` | List all tags with post counts |\n\n### Media (2 abilities)\n\n| Ability | Description |\n|---------|-------------|\n| `content/upload-media` | Upload images via base64 or URL |\n| `content/list-media` | List media library items with filters |\n\n### Site Info (1 ability)\n\n| Ability | Description |\n|---------|-------------|\n| `content/get-site-info` | Get site title, tagline, URL, timezone, and more |\n\n## Create Post Fields\n\nThe `content/create-post` ability supports all WordPress post fields:\n\n```json\n{\n  \"title\": \"Post Title\",\n  \"content\": \"\u003cp\u003eHTML content\u003c/p\u003e\",\n  \"excerpt\": \"Optional excerpt\",\n  \"status\": \"draft|publish|pending|private|future\",\n  \"slug\": \"custom-url-slug\",\n  \"categories\": [\"category-slug-1\", \"category-slug-2\"],\n  \"tags\": [\"Tag Name 1\", \"Tag Name 2\"],\n  \"date\": \"2025-12-25T09:00:00\",\n  \"featured_image_id\": 123,\n  \"format\": \"standard|aside|gallery|link|image|quote|status|video|audio|chat\",\n  \"sticky\": false,\n  \"comment_status\": \"open|closed\",\n  \"ping_status\": \"open|closed\",\n  \"author\": \"username\"\n}\n```\n\n## Usage via MCP\n\n### Initialize Session\n\n```bash\ncurl -s -u \"username:app-password\" -X POST \\\n  -H \"Content-Type: application/json\" \\\n  -D headers.txt \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2024-11-05\",\"capabilities\":{},\"clientInfo\":{\"name\":\"claude\",\"version\":\"1.0.0\"}}}' \\\n  \"https://your-site.com/wp-json/mcp/mcp-adapter-default-server\"\n```\n\n### List Available Tools\n\n```bash\nSESSION_ID=$(grep -i \"mcp-session-id\" headers.txt | awk '{print $2}' | tr -d '\\r')\n\ncurl -s -u \"username:app-password\" -X POST \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Mcp-Session-Id: $SESSION_ID\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/list\",\"params\":{}}' \\\n  \"https://your-site.com/wp-json/mcp/mcp-adapter-default-server\"\n```\n\n### Execute an Ability\n\n```bash\ncurl -s -u \"username:app-password\" -X POST \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Mcp-Session-Id: $SESSION_ID\" \\\n  -d '{\"jsonrpc\":\"2.0\",\"id\":3,\"method\":\"tools/call\",\"params\":{\"name\":\"mcp-adapter-execute-ability\",\"arguments\":{\"ability_name\":\"content/create-post\",\"parameters\":{\"title\":\"My New Post\",\"content\":\"\u003cp\u003ePost content here\u003c/p\u003e\",\"status\":\"draft\"}}}}' \\\n  \"https://your-site.com/wp-json/mcp/mcp-adapter-default-server\"\n```\n\n## Troubleshooting\n\n### Abilities not appearing in MCP\n\n1. Ensure MCP Adapter plugin is active\n2. Check that abilities have `mcp.public: true` in their meta\n3. Verify you're using the correct endpoint: `/wp-json/mcp/mcp-adapter-default-server`\n\n### Authentication errors\n\n1. Verify Application Password is correctly formatted (spaces removed)\n2. Use format: `username:xxxx xxxx xxxx xxxx xxxx xxxx`\n3. Ensure user has appropriate capabilities (editor or admin role)\n\n### Media upload fails\n\n1. Check upload directory permissions\n2. Ensure file size is within WordPress limits\n3. Verify MIME type is allowed\n\n## Development\n\nThis plugin uses WordPress's Abilities API hooks:\n\n- `wp_abilities_api_categories_init` - Register ability categories\n- `wp_abilities_api_init` - Register individual abilities\n\nEach ability requires:\n- `label` and `description` for documentation\n- `category` for grouping\n- `input_schema` defining expected parameters\n- `callback` function to execute the ability\n- `meta.mcp.public = true` for MCP exposure\n\n## Changelog\n\nSee [CHANGELOG.md](CHANGELOG.md) for version history.\n\n## Contributing\n\nIssues and pull requests welcome at [GitHub](https://github.com/aplaceforallmystuff/wp-content-abilities).\n\n## License\n\nThis plugin is licensed under the [GPL v2 or later](https://www.gnu.org/licenses/gpl-2.0.html).\n\n## Author\n\nJim Christian - [jimchristian.net](https://jimchristian.net)\n\n## Disclaimer\n\nThis plugin is not affiliated with or endorsed by Automattic, WordPress.org, or the WordPress Foundation. \"WordPress\" is a registered trademark of the WordPress Foundation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faplaceforallmystuff%2Fwp-content-abilities","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faplaceforallmystuff%2Fwp-content-abilities","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faplaceforallmystuff%2Fwp-content-abilities/lists"}