{
  "markdown": "# MCP WordPress CrunchTools\n\nA secure MCP (Model Context Protocol) server for WordPress content management. Designed for developers publishing about their work.\n\n## Overview\n\nThis MCP server is designed to be:\n\n- **Secure by default** - Comprehensive input validation, credential protection, and SSRF prevention\n- **No third-party services** - Runs locally via stdio, your credentials never leave your machine\n- **Cross-platform** - Works on Linux, macOS, and Windows\n- **Automatically updated** - GitHub Actions monitor for CVEs and update dependencies\n- **Containerized** - Available at `quay.io/crunchtools/mcp-wordpress`\n\n## Naming Convention\n\n| Component | Name |\n|-----------|------|\n| GitHub repo | [crunchtools/mcp-wordpress](https://github.com/crunchtools/mcp-wordpress) |\n| Container | `quay.io/crunchtools/mcp-wordpress` |\n| Python package (PyPI) | `mcp-wordpress-crunchtools` |\n| CLI command | `mcp-wordpress-crunchtools` |\n| Module import | `mcp_wordpress_crunchtools` |\n\n## Features\n\n- **30 Tools** for posts, pages, media, and comments\n- **Security-focused**: Credentials protected, input validation, SSRF prevention\n- **Developer workflow**: Scheduled publishing, revisions, search\n- **Easy integration**: Works with Claude Code and other MCP clients\n\n## Installation\n\n### With uvx (recommended)\n\n```bash\nuvx mcp-wordpress-crunchtools\n```\n\n### With pip\n\n```bash\npip install mcp-wordpress-crunchtools\nmcp-wordpress-crunchtools\n```\n\n### With Container\n\n```bash\n# Create a shared upload directory (required before first run)\nmkdir -p ~/.local/share/mcp-uploads-downloads\n\npodman run -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \\\n  -e WORDPRESS_URL=https://example.com \\\n  -e WORDPRESS_USERNAME=admin \\\n  -e WORDPRESS_APP_PASSWORD='xxxx xxxx xxxx xxxx' \\\n  quay.io/crunchtools/mcp-wordpress\n```\n\n> **SELinux note:** Use `:z` (lowercase, shared) instead of `:Z` (uppercase, private).\n> MCP servers run as long-lived stdio processes. With `:Z`, files copied into the\n> directory after container start won't have the container's private MCS label and\n> will be invisible inside the container. The `:z` flag sets a shared\n> `container_file_t` context that all containers and the host can read/write.\n>\n> **Tip:** Use the same shared directory (`~/.local/share/mcp-uploads-downloads/`)\n> across multiple MCP container servers (e.g., mcp-wordpress and mcp-gemini) so\n> generated files are immediately available for upload without copying.\n\n### From source\n\n```bash\ngit clone https://github.com/crunchtools/mcp-wordpress.git\ncd mcp-wordpress\nuv sync --all-extras\nuv run mcp-wordpress-crunchtools\n```\n\n## Configuration\n\nSet these environment variables:\n\n| Variable | Description | Example |\n|----------|-------------|---------|\n| `WORDPRESS_URL` | WordPress site URL | `https://example.com` |\n| `WORDPRESS_USERNAME` | WordPress username | `admin` |\n| `WORDPRESS_APP_PASSWORD` | Application password | `xxxx xxxx xxxx xxxx` |\n| `MCP_UPLOAD_DIR` | Upload directory inside container (optional) | `/tmp/mcp-uploads` (default) |\n\n### Creating an Application Password\n\n1. Log in to WordPress admin\n2. Go to **Users → Profile**\n3. Scroll to **Application Passwords**\n4. Enter a name (e.g., \"MCP Server\") and click **Add New**\n5. Copy the generated password (shown once)\n\n## Usage with Claude Code\n\n### Using uvx (recommended)\n\n```bash\nclaude mcp add mcp-wordpress-crunchtools \\\n    --env WORDPRESS_URL=https://example.com \\\n    --env WORDPRESS_USERNAME=admin \\\n    --env WORDPRESS_APP_PASSWORD=\"xxxx xxxx xxxx xxxx\" \\\n    -- uvx mcp-wordpress-crunchtools\n```\n\n### Using pip\n\n```bash\npip install mcp-wordpress-crunchtools\n\nclaude mcp add mcp-wordpress-crunchtools \\\n    --env WORDPRESS_URL=https://example.com \\\n    --env WORDPRESS_USERNAME=admin \\\n    --env WORDPRESS_APP_PASSWORD=\"xxxx xxxx xxxx xxxx\" \\\n    -- mcp-wordpress-crunchtools\n```\n\n### Using Container\n\n```bash\n# Create a shared upload directory (required before first run)\nmkdir -p ~/.local/share/mcp-uploads-downloads\n\nclaude mcp add mcp-wordpress-crunchtools \\\n    --env WORDPRESS_URL=https://example.com \\\n    --env WORDPRESS_USERNAME=admin \\\n    --env WORDPRESS_APP_PASSWORD=\"xxxx xxxx xxxx xxxx\" \\\n    -- podman run -i --rm \\\n        -v ~/.local/share/mcp-uploads-downloads:/tmp/mcp-uploads:z \\\n        -e WORDPRESS_URL \\\n        -e WORDPRESS_USERNAME \\\n        -e WORDPRESS_APP_PASSWORD \\\n        quay.io/crunchtools/mcp-wordpress\n```\n\n## Available Tools\n\n### Site Tools\n| Tool | Description |\n|------|-------------|\n| `wordpress_get_site_info` | Get site title, description, URL, timezone |\n| `wordpress_test_connection` | Verify API credentials work |\n\n### Post Tools\n| Tool | Description |\n|------|-------------|\n| `wordpress_list_posts` | List posts with filtering (status, category, search) |\n| `wordpress_get_post` | Get single post by ID with full content |\n| `wordpress_search_posts` | Search posts by keyword |\n| `wordpress_create_post` | Create new post (supports scheduling) |\n| `wordpress_update_post` | Update existing post |\n| `wordpress_delete_post` | Delete/trash a post |\n| `wordpress_list_revisions` | List revisions for a post |\n| `wordpress_get_revision` | Get specific revision content |\n| `wordpress_list_categories` | List available categories |\n| `wordpress_list_tags` | List available tags |\n\n### Page Tools\n| Tool | Description |\n|------|-------------|\n| `wordpress_list_pages` | List pages with filtering |\n| `wordpress_get_page` | Get single page by ID |\n| `wordpress_create_page` | Create new page |\n| `wordpress_update_page` | Update existing page |\n| `wordpress_delete_page` | Delete/trash a page |\n| `wordpress_list_page_revisions` | List page revisions |\n\n### Media Tools\n| Tool | Description |\n|------|-------------|\n| `wordpress_list_media` | List media items |\n| `wordpress_get_media` | Get media item details |\n| `wordpress_upload_media` | Upload file from local path |\n| `wordpress_update_media` | Update media metadata |\n| `wordpress_delete_media` | Delete media item |\n| `wordpress_get_media_url` | Get public URL for media |\n\n### Comment Tools\n| Tool | Description |\n|------|-------------|\n| `wordpress_list_comments` | List comments with filtering |\n| `wordpress_get_comment` | Get single comment |\n| `wordpress_create_comment` | Add a comment to a post |\n| `wordpress_update_comment` | Update comment content/status |\n| `wordpress_delete_comment` | Delete a comment |\n| `wordpress_moderate_comment` | Approve, hold, spam, or trash |\n\n## Examples\n\n### Create a Draft Post\n\n```\nCreate a new WordPress post titled \"My Technical Article\" with the content below. Keep it as a draft.\n```\n\n### Schedule a Post\n\n```\nUpdate post ID 123 to publish on December 25, 2024 at 10:00 AM.\n```\n\n### Upload an Image\n\n```\nUpload this image to WordPress and set the alt text to \"Architecture diagram\".\n```\n\n### Find and Moderate Comments\n\n```\nList all comments in \"hold\" status and approve the legitimate ones.\n```\n\n## Security\n\n- **Credential Protection**: All credentials stored as `SecretStr`, never logged\n- **SSRF Prevention**: REST API path hardcoded, cannot be overridden\n- **Input Validation**: All inputs validated via Pydantic models\n- **Rate Limiting**: Handles WordPress rate limits gracefully\n- **TLS Enforcement**: All requests use HTTPS with certificate validation\n- **Size Limits**: Response size limited to 10MB to prevent memory issues\n- **Timeout**: All requests timeout after 30 seconds\n\n## Development\n\n```bash\n# Install dev dependencies\nuv sync --all-extras\n\n# Run tests\nuv run pytest\n\n# Run linting\nuv run ruff check src tests\n\n# Run type checking\nuv run mypy src\n\n# Format code\nuv run ruff format src tests\n```\n\n## License\n\nAGPL-3.0-or-later\n\n## Credits\n\nBuilt by [crunchtools.com](https://crunchtools.com)\n\n<!-- mcp-name: io.github.crunchtools/wordpress -->\n",
  "bytes": 7785,
  "sha": "da3d9ccce6ffea9cbba72cc68351e8e3c367f78ca76a174e618825c61df16695",
  "repo_slug": "crunchtools/mcp-wordpress",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_crunchtools_wordpress_cf614052/readme"
}